Cdm: Move License Type from constructor to get_license_challenge()

This commit is contained in:
rlaphoenix 2022-07-20 20:36:17 +01:00
parent 59615dd804
commit 7f60844ee1
1 changed files with 5 additions and 12 deletions

View File

@ -45,13 +45,7 @@ class Cdm:
NUM_OF_SESSIONS = 0 NUM_OF_SESSIONS = 0
MAX_NUM_OF_SESSIONS = 50 # most common limit MAX_NUM_OF_SESSIONS = 50 # most common limit
def __init__( def __init__(self, device: Device, pssh: Union[Container, bytes, str], raw: bool = False):
self,
device: Device,
pssh: Union[Container, bytes, str],
license_type: LicenseType = LicenseType.STREAMING,
raw: bool = False
):
""" """
Open a Widevine Content Decryption Module (CDM) session. Open a Widevine Content Decryption Module (CDM) session.
@ -60,8 +54,6 @@ class Cdm:
more device-specific information. more device-specific information.
pssh: Protection System Specific Header Box or Init Data. This should be a pssh: Protection System Specific Header Box or Init Data. This should be a
compliant mp4 pssh box, or just the init data (Widevine Cenc Header). compliant mp4 pssh box, or just the init data (Widevine Cenc Header).
license_type: Type of License you wish to exchange, often `STREAMING`.
The `OFFLINE` Licenses are for Offline licensing of Downloaded content.
raw: This should be set to True if the PSSH data provided is arbitrary data. raw: This should be set to True if the PSSH data provided is arbitrary data.
E.g., a PSSH Box where the init data is not a Widevine Cenc Header, or E.g., a PSSH Box where the init data is not a Widevine Cenc Header, or
is simply arbitrary data. is simply arbitrary data.
@ -90,7 +82,6 @@ class Cdm:
self.device = device self.device = device
self.init_data = pssh self.init_data = pssh
self.license_type = license_type
self.raw = raw self.raw = raw
if not self.raw: if not self.raw:
@ -128,11 +119,13 @@ class Cdm:
self.service_certificate = signed_message self.service_certificate = signed_message
return signed_message return signed_message
def get_license_challenge(self, privacy_mode: bool = True) -> bytes: def get_license_challenge(self, type_: LicenseType = LicenseType.STREAMING, privacy_mode: bool = True) -> bytes:
""" """
Get a License Challenge to send to a License Server. Get a License Challenge to send to a License Server.
Parameters: Parameters:
type_: Type of License you wish to exchange, often `STREAMING`.
The `OFFLINE` Licenses are for Offline licensing of Downloaded content.
privacy_mode: Encrypt the Client ID using the Privacy Certificate. If the privacy_mode: Encrypt the Client ID using the Privacy Certificate. If the
privacy certificate is not set yet, this does nothing. privacy certificate is not set yet, this does nothing.
@ -146,7 +139,7 @@ class Cdm:
license_request.key_control_nonce = random.randrange(1, 2 ** 31) license_request.key_control_nonce = random.randrange(1, 2 ** 31)
license_request.content_id.widevine_pssh_data.pssh_data.append(self.init_data) license_request.content_id.widevine_pssh_data.pssh_data.append(self.init_data)
license_request.content_id.widevine_pssh_data.license_type = self.license_type license_request.content_id.widevine_pssh_data.license_type = type_
license_request.content_id.widevine_pssh_data.request_id = self.session_id license_request.content_id.widevine_pssh_data.request_id = self.session_id
if self.service_certificate and privacy_mode: if self.service_certificate and privacy_mode: