Aves_mio0.88/hls_cors_server1.py
2026-10-03 12:51:15 +02:00

57 lines
1.8 KiB
Python

#!/usr/bin/env python3
from http.server import SimpleHTTPRequestHandler, ThreadingHTTPServer
import os
import argparse
import sys
def parse_args():
p = argparse.ArgumentParser(description="Semplice server HTTP per HLS con CORS")
p.add_argument("root", nargs="?", default="hls_ts_test",
help="Directory da servire (default: hls_ts_test)")
p.add_argument("-p", "--port", type=int, default=9999,
help="Porta su cui ascoltare (default: 9999)")
return p.parse_args()
class HlsHandler(SimpleHTTPRequestHandler):
extensions_map = {
**SimpleHTTPRequestHandler.extensions_map,
".m3u8": "application/vnd.apple.mpegurl",
".ts": "video/mp2t",
}
def end_headers(self):
# CORS e cache control
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Access-Control-Expose-Headers", "Content-Length, Content-Type, Accept-Ranges")
self.send_header("Cache-Control", "no-cache")
super().end_headers()
def do_OPTIONS(self):
self.send_response(204)
self.send_header("Access-Control-Allow-Origin", "*")
self.send_header("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS")
self.send_header("Access-Control-Allow-Headers", "Range")
self.end_headers()
def main():
args = parse_args()
root = os.path.abspath(args.root)
port = args.port
if not os.path.isdir(root):
print(f"Directory non trovata: {root}", file=sys.stderr)
sys.exit(1)
os.chdir(root)
server = ThreadingHTTPServer(("0.0.0.0", port), HlsHandler)
print(f"Serving {root} on http://0.0.0.0:{port}", flush=True)
try:
server.serve_forever()
except KeyboardInterrupt:
print("\nServer interrotto dall'utente")
finally:
server.server_close()
if __name__ == "__main__":
main()