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.
Files changed (109) hide show
  1. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/PKG-INFO +5 -1
  2. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/README.md +4 -0
  3. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/playlist_builder.py +47 -11
  4. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/pyproject.toml +1 -1
  5. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/.gitignore +0 -0
  6. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/LICENSE +0 -0
  7. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/__init__.py +0 -0
  8. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/configs.py +0 -0
  9. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/const.py +0 -0
  10. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/drm/__init__.py +0 -0
  11. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/drm/decrypter.py +0 -0
  12. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/F16Px.py +0 -0
  13. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/__init__.py +0 -0
  14. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/base.py +0 -0
  15. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/city.py +0 -0
  16. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/doodstream.py +0 -0
  17. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/factory.py +0 -0
  18. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/fastream.py +0 -0
  19. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/filelions.py +0 -0
  20. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/filemoon.py +0 -0
  21. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/gupload.py +0 -0
  22. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/livetv.py +0 -0
  23. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/lulustream.py +0 -0
  24. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/maxstream.py +0 -0
  25. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/mixdrop.py +0 -0
  26. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/okru.py +0 -0
  27. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/sportsonline.py +0 -0
  28. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/streamtape.py +0 -0
  29. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/streamwish.py +0 -0
  30. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/supervideo.py +0 -0
  31. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/turbovidplay.py +0 -0
  32. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/uqload.py +0 -0
  33. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vavoo.py +0 -0
  34. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vidfast.py +0 -0
  35. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vidmoly.py +0 -0
  36. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vidoza.py +0 -0
  37. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/vixcloud.py +0 -0
  38. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/extractors/voe.py +0 -0
  39. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/handlers.py +0 -0
  40. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/main.py +0 -0
  41. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/middleware.py +0 -0
  42. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/mpd_processor.py +0 -0
  43. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/__init__.py +0 -0
  44. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/audio_transcoder.py +0 -0
  45. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/codec_utils.py +0 -0
  46. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/container_probe.py +0 -0
  47. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/ebml_parser.py +0 -0
  48. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/hls_manifest.py +0 -0
  49. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/media_source.py +0 -0
  50. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/mkv_demuxer.py +0 -0
  51. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/mp4_muxer.py +0 -0
  52. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/mp4_parser.py +0 -0
  53. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/pyav_demuxer.py +0 -0
  54. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/transcode_handler.py +0 -0
  55. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/transcode_pipeline.py +0 -0
  56. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/ts_muxer.py +0 -0
  57. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/remuxer/video_transcoder.py +0 -0
  58. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/__init__.py +0 -0
  59. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/acestream.py +0 -0
  60. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/epg.py +0 -0
  61. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/extractor.py +0 -0
  62. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/proxy.py +0 -0
  63. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/speedtest.py +0 -0
  64. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/telegram.py +0 -0
  65. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/routes/xtream.py +0 -0
  66. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/schemas.py +0 -0
  67. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/__init__.py +0 -0
  68. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/models.py +0 -0
  69. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/all_debrid.py +0 -0
  70. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/base.py +0 -0
  71. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/providers/real_debrid.py +0 -0
  72. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/speedtest/service.py +0 -0
  73. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/index.html +0 -0
  74. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/logo.png +0 -0
  75. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/playlist_builder.html +0 -0
  76. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/speedtest.html +0 -0
  77. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/speedtest.js +0 -0
  78. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/static/url_generator.html +0 -0
  79. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/__init__.py +0 -0
  80. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/acestream.py +0 -0
  81. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/aes.py +0 -0
  82. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/aesgcm.py +0 -0
  83. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/base64_utils.py +0 -0
  84. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/base_prebuffer.py +0 -0
  85. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/cache_utils.py +0 -0
  86. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/codec.py +0 -0
  87. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/compat.py +0 -0
  88. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/constanttime.py +0 -0
  89. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/crypto_utils.py +0 -0
  90. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/cryptomath.py +0 -0
  91. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/dash_prebuffer.py +0 -0
  92. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/deprecations.py +0 -0
  93. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/extractor_helpers.py +0 -0
  94. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/hls_prebuffer.py +0 -0
  95. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/hls_utils.py +0 -0
  96. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/http_client.py +0 -0
  97. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/http_utils.py +0 -0
  98. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/m3u8_processor.py +0 -0
  99. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/mpd_utils.py +0 -0
  100. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/packed.py +0 -0
  101. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/python_aes.py +0 -0
  102. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/python_aesgcm.py +0 -0
  103. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/rate_limit_handlers.py +0 -0
  104. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/redis_utils.py +0 -0
  105. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/rijndael.py +0 -0
  106. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/stream_transformers.py +0 -0
  107. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/telegram.py +0 -0
  108. {mediaflow_proxy-2.4.7 → mediaflow_proxy-2.4.8}/mediaflow_proxy/utils/tlshashlib.py +0 -0
  109. {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.7
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], base_url: str, api_password: Optional[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 = f"{base_url}/extractor/video?host=VixCloud&redirect_stream=true&d={encoded_url}&max_res=true&no_proxy=true"
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(playlist_definitions: list[str], base_url: str, api_password: Optional[str]):
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(iter([url]), base_url, api_password)
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(lines_iterator, base_url, api_password)
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="Query string con le definizioni delle playlist", alias="d"),
340
- api_password: Optional[str] = Query(None, description="Password API per MFP"),
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
- Endpoint per il proxy delle playlist M3U con supporto MFP.
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
- Formato query string: playlist1&url1;playlist2&url2
346
- Esempio: https://mfp.com:pass123&http://provider.com/playlist.m3u
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(playlist_definitions, base_url, api_password):
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.7"
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