From 991d312f5b686e72ebb7eaa81e92d98b1e88e653 Mon Sep 17 00:00:00 2001 From: Mohamed Zumair Date: Sun, 1 Jun 2025 07:27:50 +0530 Subject: [PATCH] Add support for DLHD playback with MediaFlow & fix debrid playback on external player with MediaFlow (#519) --- mediafusion_scrapy/spiders/dlhd.py | 3 --- resources/json/scraper_config.json | 5 +++-- scrapers/dlhd.py | 6 ++---- streaming_providers/routes.py | 4 ++-- utils/parser.py | 17 ++++++++++++++--- 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/mediafusion_scrapy/spiders/dlhd.py b/mediafusion_scrapy/spiders/dlhd.py index 700ef19..6842d58 100644 --- a/mediafusion_scrapy/spiders/dlhd.py +++ b/mediafusion_scrapy/spiders/dlhd.py @@ -177,9 +177,6 @@ class DaddyLiveHDChannelsSpider(scrapy.Spider): "Referer": self.referer, "Origin": self.referer.rstrip("/"), }, - "response_headers": { - "Content-Type": "application/vnd.apple.mpegurl", - }, "genres": [category], "languages": languages, "country": country, diff --git a/resources/json/scraper_config.json b/resources/json/scraper_config.json index 57e62f9..d660770 100644 --- a/resources/json/scraper_config.json +++ b/resources/json/scraper_config.json @@ -275,11 +275,12 @@ }, "dlhd": { "channels_url": "https://daddylive.dad/24-7-channels.php", + "channel_url": "https://daddylive.dad/stream/stream-{channel_number}.php", "schedule_url": "https://daddylive.dad/schedule/schedule-generated.php", - "server_lookup_url": "https://forcedtoplay.xyz/server_lookup.php?channel_id={server_type}{channel_id}", + "server_lookup_url": "https://allupplay.xyz/server_lookup.php?channel_id={server_type}{channel_id}", "m3u8_base_url": "https://{server_key}new.newkso.ru/{server_key}/{server_type}{channel_id}/mono.m3u8", "key_url": "https://key.keylocking.ru", - "referer": "https://forcedtoplay.xyz/", + "referer": "https://allupplay.xyz/", "category_mapping": { "Tv Shows": "Other Sports", "Soccer": "Football", diff --git a/scrapers/dlhd.py b/scrapers/dlhd.py index 5e2d4fc..f6feddd 100644 --- a/scrapers/dlhd.py +++ b/scrapers/dlhd.py @@ -212,9 +212,6 @@ class DLHDScheduleService: "Referer": self.referer, "Origin": self.referer.rstrip("/"), }, - "response": { - "Content-Type": "application/vnd.apple.mpegurl", - }, }, }, ) @@ -267,7 +264,8 @@ class DLHDScheduleService: server_response = await client.get( server_url, headers={ - "Referer": f"{self.referer}premiumtv/daddylivehd.php?id={channel_id}" + "Referer": f"{self.referer}premiumtv/daddylivehd.php?id={channel_id}", + "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36", }, ) diff --git a/streaming_providers/routes.py b/streaming_providers/routes.py index 5e3ff71..54996f1 100644 --- a/streaming_providers/routes.py +++ b/streaming_providers/routes.py @@ -65,7 +65,7 @@ async def get_cached_stream_url_and_redirect( and user_data.mediaflow_config.proxy_debrid_streams ): response_headers = { - "Content-Disposition": "attachment, filename={}".format( + "content-disposition": "attachment, filename={}".format( path.basename(cached_stream_url) ) } @@ -153,7 +153,7 @@ def apply_mediaflow_proxy_if_needed(video_url, user_data): """ if user_data.mediaflow_config and user_data.mediaflow_config.proxy_debrid_streams: response_headers = { - "Content-Disposition": "attachment, filename={}".format( + "content-disposition": "attachment, filename={}".format( path.basename(video_url) ) } diff --git a/utils/parser.py b/utils/parser.py index 1428ab8..aa3fcce 100644 --- a/utils/parser.py +++ b/utils/parser.py @@ -7,7 +7,7 @@ import re from datetime import datetime, timezone from os.path import basename from typing import Optional, List, Any -from urllib.parse import quote +from urllib.parse import quote, urlparse from thefuzz import fuzz @@ -552,6 +552,13 @@ async def process_stream( behaviorHints=behavior_hints, ) +def get_dlhd_channel_url(stream: TVStreams) -> str: + parsed_url = urlparse(stream.url) + channel_id = parsed_url.path.split("/")[-2] + channel_number = re.search(r"(\d+)", channel_id).group(1) + channel_url = config_manager.get_scraper_config("dlhd", "channel_url") + return channel_url.format(channel_number=channel_number) + def get_proxy_url(stream: TVStreams, mediaflow_config) -> str: endpoint = ( @@ -560,11 +567,15 @@ def get_proxy_url(stream: TVStreams, mediaflow_config) -> str: query_params = {} if stream.drm_key: query_params = {"key_id": stream.drm_key_id, "key": stream.drm_key} - elif "dlhd" in stream.source: + elif stream.source == "DaddyLiveHD": query_params = { "use_request_proxy": False, - "key_url": config_manager.get_scraper_config("dlhd", "key_url"), + "host": "DLHD", + "redirect_stream": True, } + stream.url = get_dlhd_channel_url(stream) + endpoint = "/extractor/video" + stream.behaviorHints = {"proxyHeaders": {}} return encode_mediaflow_proxy_url( mediaflow_config.proxy_url,