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