from flask import Flask, request, Response import streamlink import requests import re app = Flask(__name__) def modify_m3u8_content(content): def replace_mpd_urls(line): if line.startswith("http") and ".mpd" in line: scheme = request.scheme host = request.host return re.sub(r'^(https?://[^\s]+\.mpd)', lambda match: f'{scheme}://{host}/stream?url={match.group(1)}', line) return line return "\n".join(replace_mpd_urls(line) for line in content.splitlines()) @app.route('/playlist.m3u8') def get_custom_m3u8(): url = request.args.get('url') if not url: return "Error: No URL provided", 400 response = requests.get(url) if response.status_code != 200: return "Error fetching M3U8 playlist", 500 modified_content = modify_m3u8_content(response.text) return Response(modified_content, content_type='application/vnd.apple.mpegurl') def generate_stream(url): session = streamlink.Streamlink() streams = session.streams(url) if "best" not in streams: raise ValueError("No valid stream found.") stream = streams["best"] fd = stream.open() try: while True: chunk = fd.read(8192) if not chunk: break yield chunk finally: fd.close() @app.route('/') def home(): return '''