fix(dash): add CENC namespace support for PSSH extraction

Some MPD manifests use the cenc: namespace prefix for PSSH elements (e.g., <cenc:pssh>) instead of non-namespaced <pssh>. This caused DRM extraction to fail for services.

- Add {urn:mpeg:cenc:2013}pssh fallback for Widevine PSSH extraction
- Add {urn:mpeg:cenc:2013}pssh fallback for PlayReady PSSH extraction
This commit is contained in:
Andy
2026-02-02 10:59:15 -07:00
parent 84466e12de
commit cc55fd8922

View File

@@ -866,7 +866,7 @@ class DASH:
urn = (protection.get("schemeIdUri") or "").lower() urn = (protection.get("schemeIdUri") or "").lower()
if urn == WidevineCdm.urn: if urn == WidevineCdm.urn:
pssh_text = protection.findtext("pssh") pssh_text = protection.findtext("pssh") or protection.findtext("{urn:mpeg:cenc:2013}pssh")
if not pssh_text: if not pssh_text:
continue continue
pssh = PSSH(pssh_text) pssh = PSSH(pssh_text)
@@ -897,6 +897,7 @@ class DASH:
elif urn in ("urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95", "urn:microsoft:playready"): elif urn in ("urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95", "urn:microsoft:playready"):
pr_pssh_b64 = ( pr_pssh_b64 = (
protection.findtext("pssh") protection.findtext("pssh")
or protection.findtext("{urn:mpeg:cenc:2013}pssh")
or protection.findtext("pro") or protection.findtext("pro")
or protection.findtext("{urn:microsoft:playready}pro") or protection.findtext("{urn:microsoft:playready}pro")
) )