mirror of
https://github.com/Viren070/MediaFusion.git
synced 2025-12-01 23:21:11 +01:00
709dc25d94
* Refactor stream parsing and handling for DRM and MediaFlow * Add encryption support for mediaflow url and refactor URL validation * Enhance LiveTV spider to support MPD and handle new player API logic * Update TV stream validation and add DRM fields in UI * Add mediaflow_proxy_required.mp4 exception video * Add FlareSolverr integration to scrapy spiders * [WIP] TamilBulb spider to scraper * Update StreamedSpider to new API and adjust schedulers
61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
import scrapy
|
|
from itemadapter import ItemAdapter
|
|
from scrapy.exceptions import DropItem
|
|
from scrapy.http.request import NO_CALLBACK
|
|
from scrapy.utils.defer import maybe_deferred_to_future
|
|
|
|
from utils import const
|
|
|
|
|
|
class LiveStreamResolverPipeline:
|
|
async def process_item(self, item, spider):
|
|
adapter = ItemAdapter(item)
|
|
stream_url = adapter.get("stream_url")
|
|
stream_headers = adapter.get("stream_headers")
|
|
if not stream_headers:
|
|
referer = adapter.get("referer")
|
|
stream_headers = {"Referer": referer} if referer else {}
|
|
|
|
if not stream_url:
|
|
raise DropItem(f"No stream URL found in item: {item}")
|
|
|
|
response = await maybe_deferred_to_future(
|
|
spider.crawler.engine.download(
|
|
scrapy.Request(
|
|
stream_url,
|
|
callback=NO_CALLBACK,
|
|
headers=stream_headers,
|
|
method="HEAD",
|
|
dont_filter=True,
|
|
)
|
|
)
|
|
)
|
|
content_type = response.headers.get("Content-Type", b"").decode().lower()
|
|
|
|
if response.status == 200 and content_type in const.IPTV_VALID_CONTENT_TYPES:
|
|
stream_headers.update(
|
|
{
|
|
"User-Agent": response.request.headers.get("User-Agent").decode(),
|
|
"Referer": response.request.headers.get("Referer").decode(),
|
|
}
|
|
)
|
|
|
|
item["streams"].append(
|
|
{
|
|
"name": adapter["stream_name"],
|
|
"url": adapter["stream_url"],
|
|
"source": adapter["stream_source"],
|
|
"behaviorHints": {
|
|
"notWebReady": True,
|
|
"proxyHeaders": {
|
|
"request": stream_headers,
|
|
},
|
|
},
|
|
}
|
|
)
|
|
return item
|
|
else:
|
|
raise DropItem(
|
|
f"Invalid M3U8 URL: {stream_url} with Content-Type: {content_type} response: {response.status}"
|
|
)
|