From 09e03b47f76d78b09e3b72fc8efc89e3f1c1a4fe Mon Sep 17 00:00:00 2001 From: Aswin <aswin3262005@gmail.com> Date: Mon, 7 Apr 2025 00:45:16 +0530 Subject: [PATCH] Hotstar with DRM I forgot to test Hotstar with DRM. Made changes to support DRM correctly. --- vinetrimmer/commands/dl.py | 7 ++++--- vinetrimmer/key_store.db | Bin 290816 -> 323584 bytes vinetrimmer/objects/tracks.py | 2 ++ vinetrimmer/parsers/mpd.py | 32 ++++++++++++++++++++++++-------- vinetrimmer/utils/io.py | 8 +++----- 5 files changed, 33 insertions(+), 16 deletions(-) diff --git a/vinetrimmer/commands/dl.py b/vinetrimmer/commands/dl.py index 6270bb0..8332fb6 100644 --- a/vinetrimmer/commands/dl.py +++ b/vinetrimmer/commands/dl.py @@ -27,6 +27,7 @@ from vinetrimmer.utils.click import (AliasedGroup, ContextData, acodec_param, la from vinetrimmer.utils.collections import as_list, merge_dict from vinetrimmer.utils.io import load_yaml from pywidevine import Device, Cdm, RemoteCdm +from pywidevine import PSSH as PSSHWV from vinetrimmer.vendor.pymp4.parser import Box @@ -476,7 +477,7 @@ def result(ctx, service, quality, range_, wanted, alang, slang, audio_only, subs skip_title = True break if "common_privacy_cert" in dir(ctx.obj.cdm): - session_id = ctx.obj.cdm.open(track.pssh) + session_id = ctx.obj.cdm.open() log.info(f"CDM Session ID - {session_id.hex()}") ctx.obj.cdm.set_service_certificate( session_id, @@ -490,7 +491,7 @@ def result(ctx, service, quality, range_, wanted, alang, slang, audio_only, subs ctx.obj.cdm.parse_license( session_id, service.license( - challenge=ctx.obj.cdm.get_license_challenge(session_id), + challenge=ctx.obj.cdm.get_license_challenge(session_id=session_id, pssh=PSSHWV(track.pssh)), title=title, track=track, session_id=session_id @@ -515,7 +516,7 @@ def result(ctx, service, quality, range_, wanted, alang, slang, audio_only, subs content_keys = [ - (x.kid, x.key) for x in ctx.obj.cdm.get_keys(session_id, content_only=True) + (str(x.kid).replace("-", ""), x.key.hex()) for x in ctx.obj.cdm.get_keys(session_id) if x.type == "CONTENT" ] if "common_privacy_cert" in dir(ctx.obj.cdm) else [ (str(x.key_id).replace("-", ""), x.key.hex()) for x in ctx.obj.cdm.get_keys(session_id) ] diff --git a/vinetrimmer/key_store.db b/vinetrimmer/key_store.db index 9ab4f96445376db1466eff830108b89fedde88c7..e02d63cef4c9547b36024fcd7efbb32af1e21c50 100644 GIT binary patch delta 37545 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 delta 67 zcmV-J0KETz;1hu05s(`NDgXcgN0A^u0V=Uzq(2A(58eO|-Vf`y5s(7X50l<c8VCVl ZZDD$EZhwMMhEM^9Py(h<1MsGh0x;~Y7U%!~ diff --git a/vinetrimmer/objects/tracks.py b/vinetrimmer/objects/tracks.py index 85c4d45..61d6e72 100644 --- a/vinetrimmer/objects/tracks.py +++ b/vinetrimmer/objects/tracks.py @@ -419,6 +419,8 @@ class Track: headers, proxy if self.needs_proxy else None )) + if self.__class__.__name__ == "AudioTrack": + save_path = save_path.replace(".mp4", f".{str(self.language)[:2]}.m4a") else: asyncio.run(aria2c( self.url, diff --git a/vinetrimmer/parsers/mpd.py b/vinetrimmer/parsers/mpd.py index fffc549..115b7d5 100644 --- a/vinetrimmer/parsers/mpd.py +++ b/vinetrimmer/parsers/mpd.py @@ -139,17 +139,33 @@ def parse(*, url=None, data=None, source, session=None, downloader=None): for protection in protections: # For HMAX, the PSSH has multiple keys but the PlayReady ContentProtection tag # contains the correct KID - kid = protection.get("default_KID") - if kid: - kid = uuid.UUID(kid).hex - else: - kid = protection.get("kid") - if kid: - kid = uuid.UUID(bytes_le=base64.b64decode(kid)).hex - if (protection.get("schemeIdUri") or "").lower() != "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95": + if not kid: + kid = protection.get("default_KID") + if not kid: + kid = protection.get("kid") + if kid: + kid = uuid.UUID(bytes_le=base64.b64decode(kid)).hex + else: + kid = uuid.UUID(kid).hex + if (protection.get("schemeIdUri") or "").lower() not in ["urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95", "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"]: continue pssh = protection.findtext("pssh") + """ + if pssh and ((protection.get("schemeIdUri") or "").lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed3"): + pssh = base64.b64decode(pssh) + # noinspection PyBroadException + try: + pssh = Box.parse(pssh) + except Exception: + pssh = Box.parse(Box.build(dict( + type=b"pssh", + version=0, # can only assume version & flag are 0 + flags=0, + system_ID=Cdm.uuid, + init_data=pssh + ))) + """ rep_base_url = rep.findtext("BaseURL") if rep_base_url and source not in ["DSCP", "DSNY"]: # TODO: Don't hardcode services diff --git a/vinetrimmer/utils/io.py b/vinetrimmer/utils/io.py index bd79805..10cea0f 100644 --- a/vinetrimmer/utils/io.py +++ b/vinetrimmer/utils/io.py @@ -294,8 +294,9 @@ async def m3u8dl(uri, out, track, headers=None, proxy=None): arguments.extend([ "-dv", "all", "-ds", "all", - "-M", "format=mp4:muxer=ffmpeg", ]) + if track.source != "HS": + arguments.extend(["-M", "format=mp4"]) else: raise ValueError(f"{track.__class__.__name__} not supported yet!") @@ -303,8 +304,5 @@ async def m3u8dl(uri, out, track, headers=None, proxy=None): arg_str = " ".join(arguments) #print(arg_str) p = subprocess.run(arg_str, check=True) - #os.system(arg_str) except subprocess.CalledProcessError: - raise ValueError("N_m3u8DL-RE failed too many times, aborting") - - # Removed above call using subprocess due to it failing to correctly pass --header value. The problem might be with spaces within the header string, I think? I know it's not recommended to use os.system but didn't have a choice \ No newline at end of file + raise ValueError("N_m3u8DL-RE failed too many times, aborting") \ No newline at end of file