From 771fd34bd5850bc66ea46f7cef46f63431ec536f Mon Sep 17 00:00:00 2001 From: imSp4rky Date: Mon, 7 Sep 2026 10:06:10 -0600 Subject: [PATCH] fix(dash): treat a missing FFprobe as no PSSH instead of crashing PSSH discovery raised OSError when the binary was absent, so a DRM free download failed on any host without FFprobe. --- unshackle/core/manifests/dash.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/unshackle/core/manifests/dash.py b/unshackle/core/manifests/dash.py index db6a1f57..b059dd46 100644 --- a/unshackle/core/manifests/dash.py +++ b/unshackle/core/manifests/dash.py @@ -22,6 +22,7 @@ from pywidevine.cdm import Cdm as WidevineCdm from pywidevine.pssh import PSSH from requests import Session +from unshackle.core import binaries from unshackle.core.config import config from unshackle.core.constants import DOWNLOAD_CANCELLED, DOWNLOAD_LICENCE_ONLY, AnyTrack from unshackle.core.drm import DRM_T, ClearKeyCENC, PlayReady, Widevine @@ -414,7 +415,9 @@ class DASH: track.data["dash"]["timescale"] = int(segment_timescale) track.data["dash"]["segment_durations"] = segment_durations - if not track.drm and init_data and isinstance(track, (Video, Audio)): + if not track.drm and init_data and isinstance(track, (Video, Audio)) and not binaries.FFProbe: + log.warning("FFprobe was not found, so the init segment was not probed for a PSSH.") + elif not track.drm and init_data and isinstance(track, (Video, Audio)): prefers_playready = track.prefers_playready(cdm) if prefers_playready: try: