From cc55fd89228a5b0f1f785aed30ca9208da08d99b Mon Sep 17 00:00:00 2001 From: Andy Date: Mon, 2 Feb 2026 10:59:15 -0700 Subject: [PATCH] fix(dash): add CENC namespace support for PSSH extraction Some MPD manifests use the cenc: namespace prefix for PSSH elements (e.g., ) instead of non-namespaced . 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 --- unshackle/core/manifests/dash.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/unshackle/core/manifests/dash.py b/unshackle/core/manifests/dash.py index a2c92a3..caebcc9 100644 --- a/unshackle/core/manifests/dash.py +++ b/unshackle/core/manifests/dash.py @@ -866,7 +866,7 @@ class DASH: urn = (protection.get("schemeIdUri") or "").lower() 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: continue pssh = PSSH(pssh_text) @@ -897,6 +897,7 @@ class DASH: elif urn in ("urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95", "urn:microsoft:playready"): pr_pssh_b64 = ( protection.findtext("pssh") + or protection.findtext("{urn:mpeg:cenc:2013}pssh") or protection.findtext("pro") or protection.findtext("{urn:microsoft:playready}pro") )