mirror of
https://github.com/nirvana-7777/script.service.ultimate.git
synced 2026-09-19 23:52:10 +02:00
Add m3u playlists
This commit is contained in:
@@ -9,7 +9,7 @@ import struct
|
||||
import xml.etree.ElementTree as ET
|
||||
import re
|
||||
from typing import Optional, Tuple, Set, Dict, List
|
||||
from urllib.parse import urljoin, quote, urlencode
|
||||
from urllib.parse import urljoin, urlparse, quote, urlencode
|
||||
from datetime import datetime, timezone
|
||||
from email.utils import parsedate_to_datetime
|
||||
from dataclasses import dataclass, field
|
||||
@@ -548,7 +548,9 @@ class MPDRewriter:
|
||||
for cp in adaptation_set.findall("mpd:ContentProtection", self.MPD_NAMESPACE):
|
||||
default_kid = cp.get("{urn:mpeg:cenc:2013}default_KID")
|
||||
if default_kid:
|
||||
return default_kid.replace("-", "").lower()
|
||||
normalized = default_kid.replace("-", "").lower()
|
||||
logger.debug(f"Extracted KID from default_KID attribute: {normalized}")
|
||||
return normalized
|
||||
|
||||
# Try PSSH box
|
||||
for cp in adaptation_set.findall("mpd:ContentProtection", self.MPD_NAMESPACE):
|
||||
@@ -556,15 +558,24 @@ class MPDRewriter:
|
||||
if pssh_elem is not None and pssh_elem.text:
|
||||
try:
|
||||
pssh_data = base64.b64decode(pssh_elem.text)
|
||||
if len(pssh_data) >= 32:
|
||||
version = pssh_data[8]
|
||||
if version == 1:
|
||||
logger.debug(f"PSSH box size: {len(pssh_data)} bytes")
|
||||
|
||||
if len(pssh_data) >= 36:
|
||||
version = pssh_data[8] if len(pssh_data) > 8 else 0
|
||||
system_id = pssh_data[12:28].hex() if len(pssh_data) >= 28 else "unknown"
|
||||
logger.debug(f"PSSH version: {version}, System ID: {system_id}")
|
||||
|
||||
if version > 0:
|
||||
kid_count = struct.unpack(">I", pssh_data[28:32])[0]
|
||||
if kid_count > 0 and len(pssh_data) >= 32 + 16:
|
||||
kid = pssh_data[32:48].hex()
|
||||
return kid
|
||||
logger.debug(f"KID count from header: {kid_count}")
|
||||
|
||||
if kid_count > 0 and len(pssh_data) >= 48:
|
||||
kid_bytes = pssh_data[32:48]
|
||||
kid_hex = kid_bytes.hex().lower()
|
||||
logger.debug(f"Extracted KID from PSSH header: {kid_hex}")
|
||||
return kid_hex
|
||||
except Exception as e:
|
||||
logger.debug(f"Failed to extract KID from PSSH: {e}")
|
||||
logger.debug(f"Error extracting KID from PSSH: {e}")
|
||||
|
||||
return None
|
||||
|
||||
@@ -572,6 +583,9 @@ class MPDRewriter:
|
||||
"""Remove encrypted AdaptationSets for which we don't have keys."""
|
||||
removed_count = 0
|
||||
|
||||
# Debug: Log what keys we have
|
||||
logger.debug(f"Available keys: {list(self.key_config.keys.keys())}")
|
||||
|
||||
for period in root.findall(".//mpd:Period", self.MPD_NAMESPACE):
|
||||
period_id = period.get("id", "")
|
||||
adaptationsets_to_remove = []
|
||||
@@ -583,8 +597,9 @@ class MPDRewriter:
|
||||
if unique_id in as_id_to_kid:
|
||||
kid = as_id_to_kid[unique_id]
|
||||
if kid not in self.key_config.keys:
|
||||
logger.info(
|
||||
f"Removing AdaptationSet {unique_id} - no key available for KID {kid[:8]}..."
|
||||
logger.warning(
|
||||
f"Removing AdaptationSet {unique_id} - "
|
||||
f"missing key for KID: {kid[:8]}..."
|
||||
)
|
||||
adaptationsets_to_remove.append(adaptation_set)
|
||||
removed_count += 1
|
||||
|
||||
Reference in New Issue
Block a user