From e9560113498b9b419127e70e2dbb354d003dfa8c Mon Sep 17 00:00:00 2001 From: Nirvana Date: Fri, 6 Mar 2026 10:18:00 +0100 Subject: [PATCH] Add discovery --- .../base/utils/mpd_rewriter.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/streaming_providers/base/utils/mpd_rewriter.py b/lib/streaming_providers/base/utils/mpd_rewriter.py index 0aba6e0..f1c59d0 100644 --- a/lib/streaming_providers/base/utils/mpd_rewriter.py +++ b/lib/streaming_providers/base/utils/mpd_rewriter.py @@ -291,14 +291,21 @@ class MPDRewriter: # Single-pass tree preparation with BaseURL extraction encrypted_ids, as_id_to_kid, base_url_map = self._prepare_tree_and_extract_kids(root, mpd_base_url) - # FIRST: Filter out encrypted AdaptationSets without available keys + # FIRST: Filter out encrypted AdaptationSets without available keys. + # Only applies to server-side decrypt mode — we can only decrypt what + # we have keys for, so remove sets whose KID we don't have a key for. + # + # Proxy-only mode (no keys): pass everything through unchanged. + # The proxy just forwards bytes; the player uses its own DRM stack + # (Widevine/PlayReady) to decrypt. Stripping encrypted sets in proxy + # mode would break multi-period manifests where the main content is + # encrypted and only a short free bumper is unencrypted. + # + # Receiver-side clearkey (keys + clearkey_receiver_side): keep all + # sets; receiver will decrypt using injected keys. if self.key_config.keys and not self.clearkey_receiver_side: # Server-side decrypt: remove sets we can't decrypt self._remove_adaptationsets_without_keys(root, as_id_to_kid) - elif not self.key_config.keys: - # Proxy-only: remove all encrypted sets (player has no keys either) - self._remove_all_encrypted_adaptationsets(root) - # else: receiver-side clearkey — keep all sets; receiver will decrypt using injected keys # SECOND: Filter out blocked representations that cause 500 errors if self.provider and self.channel: