#!/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()