mediaflow-proxy 2.4.7__tar.gz → 2.4.8__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/PKG-INFO +5 -1
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/README.md +4 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/playlist_builder.py +47 -11
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/pyproject.toml +1 -1
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/.gitignore +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/LICENSE +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/configs.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/const.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/drm/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/drm/decrypter.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/F16Px.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/base.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/city.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/doodstream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/factory.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/fastream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/filelions.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/filemoon.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/gupload.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/livetv.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/lulustream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/maxstream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/mixdrop.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/okru.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/sportsonline.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/streamtape.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/streamwish.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/supervideo.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/turbovidplay.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/uqload.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vavoo.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vidfast.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vidmoly.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vidoza.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vixcloud.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/voe.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/handlers.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/main.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/middleware.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/mpd_processor.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/audio_transcoder.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/codec_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/container_probe.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/ebml_parser.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/hls_manifest.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/media_source.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/mkv_demuxer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/mp4_muxer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/mp4_parser.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/pyav_demuxer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/transcode_handler.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/transcode_pipeline.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/ts_muxer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/video_transcoder.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/acestream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/epg.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/extractor.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/proxy.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/speedtest.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/telegram.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/xtream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/schemas.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/models.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/all_debrid.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/base.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/real_debrid.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/service.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/index.html +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/logo.png +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/playlist_builder.html +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/speedtest.html +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/speedtest.js +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/url_generator.html +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/__init__.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/acestream.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/aes.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/aesgcm.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/base64_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/base_prebuffer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/cache_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/codec.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/compat.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/constanttime.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/crypto_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/cryptomath.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/dash_prebuffer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/deprecations.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/extractor_helpers.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/hls_prebuffer.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/hls_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/http_client.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/http_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/m3u8_processor.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/mpd_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/packed.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/python_aes.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/python_aesgcm.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/rate_limit_handlers.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/redis_utils.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/rijndael.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/stream_transformers.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/telegram.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/tlshashlib.py +0 -0
- {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/tlshmac.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mediaflow-proxy
|
|
3
|
-
Version: 2.4.
|
|
3
|
+
Version: 2.4.8
|
|
4
4
|
Summary: A high-performance proxy server for streaming media, supporting HTTP(S), HLS, and MPEG-DASH with real-time DRM decryption.
|
|
5
5
|
Project-URL: Homepage, https://github.com/mhdzumair/mediaflow-proxy
|
|
6
6
|
Project-URL: Repository, https://github.com/mhdzumair/mediaflow-proxy
|
|
@@ -70,6 +70,10 @@ docker run -p 8888:8888 -e API_PASSWORD=your_password mhdzumair/mediaflow-proxy
|
|
|
70
70
|
| Markdown sources | [`docs/`](docs/) in this repository |
|
|
71
71
|
| Build docs locally | `uv sync --group docs` then `uv run mkdocs serve` |
|
|
72
72
|
|
|
73
|
+
## High-throughput alternative ⚡
|
|
74
|
+
|
|
75
|
+
For lower memory usage and higher throughput — especially on constrained hardware (small VPS, NAS, Raspberry Pi) — see **[MediaFlow Proxy Light](https://github.com/mhdzumair/mediaflow-proxy-light)**, a Rust reimplementation that is fully API-compatible with this proxy. Benchmarks show 7–8× less memory, 1.7–3.4× less CPU per request, and up to 4× higher throughput. Existing tokens, encrypted URLs, and client integrations work without changes.
|
|
76
|
+
|
|
73
77
|
## Contributing
|
|
74
78
|
|
|
75
79
|
Contributions are welcome! see [Contributing](docs/community/contributing.md) in the docs and open a Pull Request on [GitHub](https://github.com/mhdzumair/mediaflow-proxy).
|
|
@@ -29,6 +29,10 @@ docker run -p 8888:8888 -e API_PASSWORD=your_password mhdzumair/mediaflow-proxy
|
|
|
29
29
|
| Markdown sources | [`docs/`](docs/) in this repository |
|
|
30
30
|
| Build docs locally | `uv sync --group docs` then `uv run mkdocs serve` |
|
|
31
31
|
|
|
32
|
+
## High-throughput alternative ⚡
|
|
33
|
+
|
|
34
|
+
For lower memory usage and higher throughput — especially on constrained hardware (small VPS, NAS, Raspberry Pi) — see **[MediaFlow Proxy Light](https://github.com/mhdzumair/mediaflow-proxy-light)**, a Rust reimplementation that is fully API-compatible with this proxy. Benchmarks show 7–8× less memory, 1.7–3.4× less CPU per request, and up to 4× higher throughput. Existing tokens, encrypted URLs, and client integrations work without changes.
|
|
35
|
+
|
|
32
36
|
## Contributing
|
|
33
37
|
|
|
34
38
|
Contributions are welcome! see [Contributing](docs/community/contributing.md) in the docs and open a Pull Request on [GitHub](https://github.com/mhdzumair/mediaflow-proxy).
|
|
@@ -16,7 +16,12 @@ playlist_builder_router = APIRouter()
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
def rewrite_m3u_links_streaming(
|
|
19
|
-
m3u_lines_iterator: Iterator[str],
|
|
19
|
+
m3u_lines_iterator: Iterator[str],
|
|
20
|
+
base_url: str,
|
|
21
|
+
api_password: Optional[str],
|
|
22
|
+
max_res: bool = False,
|
|
23
|
+
redirect_stream: bool = True,
|
|
24
|
+
no_proxy: bool = True,
|
|
20
25
|
) -> Iterator[str]:
|
|
21
26
|
"""
|
|
22
27
|
Rewrites links from an M3U line iterator according to the specified rules,
|
|
@@ -99,7 +104,13 @@ def rewrite_m3u_links_streaming(
|
|
|
99
104
|
processed_url_content = f"{base_url}/proxy/hls/manifest.m3u8?d={encoded_url}"
|
|
100
105
|
elif "vixsrc.to" in logical_line:
|
|
101
106
|
encoded_url = urllib.parse.quote(logical_line, safe="")
|
|
102
|
-
processed_url_content =
|
|
107
|
+
processed_url_content = (
|
|
108
|
+
f"{base_url}/extractor/video?host=VixCloud"
|
|
109
|
+
f"&redirect_stream={str(redirect_stream).lower()}"
|
|
110
|
+
f"&d={encoded_url}"
|
|
111
|
+
f"&max_res={str(max_res).lower()}"
|
|
112
|
+
f"&no_proxy={str(no_proxy).lower()}"
|
|
113
|
+
)
|
|
103
114
|
elif ".m3u8" in logical_line:
|
|
104
115
|
encoded_url = urllib.parse.quote(logical_line, safe="")
|
|
105
116
|
processed_url_content = f"{base_url}/proxy/hls/manifest.m3u8?d={encoded_url}"
|
|
@@ -232,7 +243,14 @@ def parse_channel_entries(lines: list[str]) -> list[list[str]]:
|
|
|
232
243
|
return entries
|
|
233
244
|
|
|
234
245
|
|
|
235
|
-
async def async_generate_combined_playlist(
|
|
246
|
+
async def async_generate_combined_playlist(
|
|
247
|
+
playlist_definitions: list[str],
|
|
248
|
+
base_url: str,
|
|
249
|
+
api_password: Optional[str],
|
|
250
|
+
max_res: bool = False,
|
|
251
|
+
redirect_stream: bool = True,
|
|
252
|
+
no_proxy: bool = True,
|
|
253
|
+
):
|
|
236
254
|
"""Genera una playlist combinata da multiple definizioni, scaricando in parallelo."""
|
|
237
255
|
# Prepara i task di download
|
|
238
256
|
download_tasks = []
|
|
@@ -318,7 +336,9 @@ async def async_generate_combined_playlist(playlist_definitions: list[str], base
|
|
|
318
336
|
|
|
319
337
|
if should_proxy:
|
|
320
338
|
# Usa un iteratore fittizio per processare una sola linea
|
|
321
|
-
rewritten_url_iter = rewrite_m3u_links_streaming(
|
|
339
|
+
rewritten_url_iter = rewrite_m3u_links_streaming(
|
|
340
|
+
iter([url]), base_url, api_password, max_res, redirect_stream, no_proxy
|
|
341
|
+
)
|
|
322
342
|
yield next(rewritten_url_iter, url) # Prende l'URL riscritto, con fallback all'originale
|
|
323
343
|
else:
|
|
324
344
|
yield url # Lascia l'URL invariato
|
|
@@ -327,7 +347,9 @@ async def async_generate_combined_playlist(playlist_definitions: list[str], base
|
|
|
327
347
|
for playlist_data in unsorted_playlists_data:
|
|
328
348
|
lines_iterator = iter(playlist_data["lines"])
|
|
329
349
|
if playlist_data["proxy"]:
|
|
330
|
-
lines_iterator = rewrite_m3u_links_streaming(
|
|
350
|
+
lines_iterator = rewrite_m3u_links_streaming(
|
|
351
|
+
lines_iterator, base_url, api_password, max_res, redirect_stream, no_proxy
|
|
352
|
+
)
|
|
331
353
|
|
|
332
354
|
for line in yield_header_once(lines_iterator):
|
|
333
355
|
yield line
|
|
@@ -336,14 +358,26 @@ async def async_generate_combined_playlist(playlist_definitions: list[str], base
|
|
|
336
358
|
@playlist_builder_router.get("/playlist")
|
|
337
359
|
async def proxy_handler(
|
|
338
360
|
request: Request,
|
|
339
|
-
d: str = Query(..., description="
|
|
340
|
-
api_password: Optional[str] = Query(None, description="
|
|
361
|
+
d: str = Query(..., description="Semicolon-separated playlist URL definitions"),
|
|
362
|
+
api_password: Optional[str] = Query(None, description="MFP API password"),
|
|
363
|
+
max_res: bool = Query(False, description="Redirect extractor streams to the highest available resolution"),
|
|
364
|
+
redirect_stream: bool = Query(True, description="Redirect extractor to the direct stream URL"),
|
|
365
|
+
no_proxy: bool = Query(True, description="Skip proxying internal segment URLs for extractor streams"),
|
|
341
366
|
):
|
|
342
367
|
"""
|
|
343
|
-
|
|
368
|
+
Proxy and merge one or more M3U playlists, rewriting stream URLs through MFP.
|
|
369
|
+
|
|
370
|
+
**`d` format** — semicolon-separated playlist definitions:
|
|
371
|
+
- Plain URL: `http://provider.com/playlist.m3u`
|
|
372
|
+
- With sort prefix: `sort:http://provider.com/playlist.m3u`
|
|
373
|
+
- Without rewriting: `no_proxy:http://provider.com/playlist.m3u`
|
|
374
|
+
- Combinable: `sort:no_proxy:http://provider.com/playlist.m3u`
|
|
375
|
+
|
|
376
|
+
Stream URLs in each playlist are automatically rewritten to route through the
|
|
377
|
+
appropriate MFP proxy endpoint (`/proxy/hls`, `/proxy/mpd`, `/extractor/video`).
|
|
344
378
|
|
|
345
|
-
|
|
346
|
-
|
|
379
|
+
**Extractor parameters** (`max_res`, `redirect_stream`, `no_proxy`) apply to
|
|
380
|
+
streams that go through `/extractor/video` (e.g. vixsrc.to links).
|
|
347
381
|
"""
|
|
348
382
|
try:
|
|
349
383
|
if not d:
|
|
@@ -371,7 +405,9 @@ async def proxy_handler(
|
|
|
371
405
|
base_url = base_url_part
|
|
372
406
|
|
|
373
407
|
async def generate_response():
|
|
374
|
-
async for line in async_generate_combined_playlist(
|
|
408
|
+
async for line in async_generate_combined_playlist(
|
|
409
|
+
playlist_definitions, base_url, api_password, max_res, redirect_stream, no_proxy
|
|
410
|
+
):
|
|
375
411
|
yield line
|
|
376
412
|
|
|
377
413
|
return StreamingResponse(
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mediaflow-proxy"
|
|
3
|
-
version = "2.4.
|
|
3
|
+
version = "2.4.8"
|
|
4
4
|
description = "A high-performance proxy server for streaming media, supporting HTTP(S), HLS, and MPEG-DASH with real-time DRM decryption."
|
|
5
5
|
authors = [{ name = "mhdzumair", email = "mhdzumair@gmail.com" }]
|
|
6
6
|
readme = "README.md"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/transcode_handler.py
RENAMED
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/transcode_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/all_debrid.py
RENAMED
|
File without changes
|
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/real_debrid.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/playlist_builder.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/rate_limit_handlers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/stream_transformers.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|