github devine-dl/pywidevine v1.7.0

latest release: v1.8.0
7 months ago
  • Supported Serve API: v1.4.3 or newer

Added

  • Ability to specify output filename by specifying a full path or a relative file name in CLI command create-device.
  • Add the staging privacy certificate (staging.google.com) to Cdm.staging_privacy_cert.
    • Similar to common_privacy_cert which would be used on Google's production license server,
    • Though this one is used on Google's staging license server (a production-ready testing server).

Changed

  • Raise an error if a file already exists at the output path in CLI command create-device.
  • Use std-lib xml instead of lxml to reduce dependencies and support ARM (#35).
  • Lessen restriction on Python version to any Python version >=3.7, but <4.0.
    • I was hoping to do ^3.7, but some dependencies also require <4.0 therefore I cannot, for now.
  • Move Key ID parsing to static PSSH.parse_key_ids() method.
  • The shaka-packager subprocess call's return code is now returned from Cdm.decrypt().
  • The flags variable of a Device now defaults to a dict, even if not set.
  • Heavily improve initializing of protobuf objects, improving readability, typing, and linting quite a bit.
  • Renamed Device's _Types enum class to DeviceTypes.

Removed

  • Removed Device.Types class variable alias to _Types enum class as a static linter cannot recognize a class
    variable as a type. Instead, the actual _Types (now named DeviceTypes) enum should be imported and used instead.

Fixed

  • Ensure output directory exists before creating new .wvd files in CLI command create-device.
  • Ignore empty Key ID values in v4.0.0.0 PlayReadyHeaders.
  • Remove Cdm.system_id class variable as it conflicted with the cdm.system_id class instance variable of the same
    name. It's also generally not needed. The same data can be gotten via Cdm.uuid.bytes.
  • Casting of type_ when passed a non-int value in Cdm.get_license_challenge().
  • Pass a PSSH object in test CLI command instead of a string.
  • Lower-case and setup __all__ correctly, add missing __all__ in some of the modules.
    • For the longest time I thought it was __ALL__ and an iterable of objects/variables.
    • However, its actually __all__ and explicitly a list of Strings...

New Contributors

Don't miss a new pywidevine release

NewReleases is sending notifications on new releases.