Fix for m3u8 ATVP + DSNP

This commit is contained in:
chu23465 2025-04-30 18:44:40 +05:30
parent b3601b2d12
commit bb3087750f
4 changed files with 32 additions and 44 deletions

Binary file not shown.

View File

@ -36,37 +36,11 @@ def parse(master, source=None):
# get pssh if available
# uses master.session_keys instead of master.keys as master.keys is ONLY EXT-X-KEYS and
# doesn't include EXT-X-SESSION-KEYS which is whats used for variant playlist M3U8.
try:
psshPR = [
session_key.uri.split(",")[-1]
for session_key in master.session_keys
if (
session_key.keyformat.lower() == "com.microsoft.playready"
and
source == "DSNP"
and
x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",")
)
][0]
except:
try:
psshPR = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "com.microsoft.playready"][0]
except IndexError:
psshPR = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "com.microsoft.playready"]
try:
psshWV = [
session_key.uri.split(",")[-1]
for session_key in master.session_keys
if (
session_key.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
and
source == "DSNP"
and
x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",")
)
][0]
except IndexError:
try:
psshWV = [x.uri.split(",")[-1] for x in master.session_keys if x.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"][0]
except IndexError:
@ -108,8 +82,24 @@ def parse(master, source=None):
descriptor=Track.Descriptor.M3U,
# decryption
encrypted=bool(master.keys or master.session_keys),
psshWV=psshWV,
psshPR=psshPR,
psshWV= [
session_key.uri.split(",")[-1]
for session_key in master.session_keys
if (
session_key.keyformat.lower() == "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
and
x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",")
)
][0] if source == "DSNP" else (psshWV if psshWV != [] else None),
psshPR=[
session_key.uri.split(",")[-1]
for session_key in master.session_keys
if (
session_key.keyformat.lower() == "com.microsoft.playready"
and
x.stream_info.characteristics.lower().replace('"', "") in session_key.characteristics.lower().split(",")
)
][0] if source == "DSNP" else (psshPR if psshPR != [] else None),
# extra
extra=x
) for x in master.playlists],

View File

@ -106,7 +106,7 @@ class AppleTVPlus(BaseService):
id_=self.title,
type_=Title.Types.MOVIE,
name=title_information["title"],
#year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year,
year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year,
original_lang=title_information["originalSpokenLanguages"][0]["locale"],
source=self.ALIASES[0],
service_data=title_information
@ -117,8 +117,8 @@ class AppleTVPlus(BaseService):
id_=self.title,
type_=Title.Types.MOVIE,
name=title_information["title"],
#year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year,
#original_lang=title_information["originalSpokenLanguages"][0]["locale"],
year=datetime.utcfromtimestamp(title_information["releaseDate"] / 1000).year,
original_lang=title_information["originalSpokenLanguages"][0]["locale"],
source=self.ALIASES[0],
service_data=title_information
)
@ -243,13 +243,7 @@ class AppleTVPlus(BaseService):
)
])
except:
return Tracks([
# multiple CDNs, only want one
x for x in tracks
#if any(
# cdn in as_list(x.url)[0].split("?")[1].split("&") for cdn in ["cdn=ak", "cdn=vod-ak-aoc.tv.apple.com"]
#)
])
return Tracks([x for x in tracks])
def get_chapters(self, title):
return []
@ -284,7 +278,10 @@ class AppleTVPlus(BaseService):
if not e.response.text:
raise self.log.exit(" - No license returned!")
raise self.log.exit(f" - Unable to obtain license (error code: {e.response.json()['errorCode']})")
try:
return base64.b64decode(res['streaming-response']['streaming-keys'][0]["license"])
except:
raise self.log.exit(res['streaming-response'])
# Service specific functions

View File

@ -8,6 +8,7 @@ aria2c:
cdm:
default: 'hisense_smarttv_he55a7000euwts_sl3000'
Amazon: 'hisense_smarttv_he55a7000euwts_sl3000'
AppleTVPlus: 'mtc_mtc_atv_atv_sl3000'
Hotstar: 'xiaomi_mi_a1_15.0.0_60ceee88_8159_l3'
Jio: 'xiaomi_mi_a1_15.0.0_60ceee88_8159_l3'
DisneyPlus: 'mtc_mtc_atv_atv_sl3000'