From 780856897d058baaa58091f38ae7ac4b2fa718d9 Mon Sep 17 00:00:00 2001 From: Nirvana Date: Thu, 23 Apr 2026 11:55:03 +0200 Subject: [PATCH] Use http_manager to get segments --- .../base/drm_operations.py | 1 + .../base/utils/drm_extractor.py | 2 ++ .../base/utils/mp4_pssh_extractor.py | 20 ++++++++----------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/lib/streaming_providers/base/drm_operations.py b/lib/streaming_providers/base/drm_operations.py index ffe8a6c..ecf1fa7 100644 --- a/lib/streaming_providers/base/drm_operations.py +++ b/lib/streaming_providers/base/drm_operations.py @@ -748,6 +748,7 @@ class DRMOperations: init_segment_url, [p.system_id for p in pssh_list] if pssh_list else [], headers=segment_headers, + http_manager=http, ) if segment_pssh: diff --git a/lib/streaming_providers/base/utils/drm_extractor.py b/lib/streaming_providers/base/utils/drm_extractor.py index c17810a..ac22e16 100644 --- a/lib/streaming_providers/base/utils/drm_extractor.py +++ b/lib/streaming_providers/base/utils/drm_extractor.py @@ -96,6 +96,7 @@ class DRMExtractor: segment_url: str, expected_system_ids: List[str] = None, headers: Optional[Dict[str, str]] = None, + http_manager = None, ) -> List[PSSHData]: """ Extract PSSH from a single segment URL. @@ -114,6 +115,7 @@ class DRMExtractor: pssh_from_segment = MP4PSSHExtractor.extract_from_url( segment_url, headers=headers or {}, + http_manager=http_manager, ) if expected_system_ids: diff --git a/lib/streaming_providers/base/utils/mp4_pssh_extractor.py b/lib/streaming_providers/base/utils/mp4_pssh_extractor.py index e8081a3..495db2f 100644 --- a/lib/streaming_providers/base/utils/mp4_pssh_extractor.py +++ b/lib/streaming_providers/base/utils/mp4_pssh_extractor.py @@ -24,6 +24,7 @@ class MP4PSSHExtractor: segment_url: str, timeout: int = 10, headers: Optional[Dict[str, str]] = None, + http_manager=None, ) -> List[PSSHData]: """ Download MP4 segment and extract PSSH data. @@ -35,24 +36,19 @@ class MP4PSSHExtractor: Providers that require authentication on segment requests (e.g. Authorization, X-Custom-Token) should supply these via StreamingProvider.get_segment_headers(). + http_manager: Optional http manager to use for HTTP requests Returns: List of PSSHData objects with extracted information """ - import requests - try: - response = requests.get( - segment_url, - timeout=timeout, - headers=headers or {}, - ) + if http_manager is not None: + response = http_manager.get(segment_url, headers=headers or {}, timeout=timeout, operation="api") + else: + import requests + response = requests.get(segment_url, timeout=timeout, headers=headers or {}) response.raise_for_status() - - # Only download first ~100KB for efficiency - chunk_size = 1024 * 100 - data = response.content[:chunk_size] - + data = response.content[:1024 * 100] return MP4PSSHExtractor.extract_from_bytes(data) except Exception as e: