diff --git a/externs/shaka/player.js b/externs/shaka/player.js index d12f4ec07e0..1b77b95782a 100644 --- a/externs/shaka/player.js +++ b/externs/shaka/player.js @@ -618,6 +618,9 @@ shaka.extern.AdvancedDrmConfiguration; * clearKeys: !Object., * delayLicenseRequestUntilPlayed: boolean, * advanced: Object., + * initDataTransform: + * ((function(!Uint8Array, string, ?shaka.extern.DrmInfo):!Uint8Array)| + * undefined), * logLicenseExchange: boolean, * updateExpirationTime: number, * preferredKeySystems: !Array. @@ -641,6 +644,14 @@ shaka.extern.AdvancedDrmConfiguration; * Optional.
* A dictionary which maps key system IDs to advanced DRM configuration for * those key systems. + * @property + * {((function(!Uint8Array, string, ?shaka.extern.DrmInfo):!Uint8Array)| + * undefined)} + * initDataTransform + * Optional.
+ * If given, this function is called with the init data from the + * manifest/media and should return the (possibly transformed) init data to + * pass to the browser. * @property {boolean} logLicenseExchange * Optional.
* If set to true, prints logs containing the license exchange. diff --git a/lib/media/drm_engine.js b/lib/media/drm_engine.js index 594655928a3..0603dd34169 100644 --- a/lib/media/drm_engine.js +++ b/lib/media/drm_engine.js @@ -1253,6 +1253,22 @@ shaka.media.DrmEngine = class { }; this.activeSessions_.set(session, metadata); + try { + initData = this.config_.initDataTransform( + initData, initDataType, this.currentDrmInfo_); + } catch (error) { + let shakaError = error; + if (!(error instanceof shaka.util.Error)) { + shakaError = new shaka.util.Error( + shaka.util.Error.Severity.CRITICAL, + shaka.util.Error.Category.DRM, + shaka.util.Error.Code.INIT_DATA_TRANSFORM_ERROR, + error); + } + this.onError_(shakaError); + return; + } + if (this.config_.logLicenseExchange) { const str = shaka.util.Uint8ArrayUtils.toBase64(initData); shaka.log.info('EME init data: type=', initDataType, 'data=', str); diff --git a/lib/util/player_configuration.js b/lib/util/player_configuration.js index 66e89462ebe..06e1f42228b 100644 --- a/lib/util/player_configuration.js +++ b/lib/util/player_configuration.js @@ -74,6 +74,9 @@ shaka.util.PlayerConfiguration = class { clearKeys: {}, // key is arbitrary key system ID, value must be string advanced: {}, // key is arbitrary key system ID, value is a record type delayLicenseRequestUntilPlayed: false, + initDataTransform: (initData, initDataType, drmInfo) => { + return initData; + }, logLicenseExchange: false, updateExpirationTime: 1, preferredKeySystems: [],