UNPKG

shaka-player

Version:
84 lines (72 loc) 2.31 kB
/*! @license * Shaka Player * Copyright 2016 Google LLC * SPDX-License-Identifier: Apache-2.0 */ goog.provide('shaka.polyfill.EmeEncryptionSchemePolyfillMediaKeySystemAccess'); /** * A wrapper around MediaKeySystemAccess that adds encryptionScheme * fields to the configuration, to emulate what a browser with native support * for this field would do. * * @see https://github.com/w3c/encrypted-media/pull/457 * @see https://github.com/WICG/encrypted-media-encryption-scheme/issues/13 * @implements {MediaKeySystemAccess} */ shaka.polyfill.EmeEncryptionSchemePolyfillMediaKeySystemAccess = class { /** * @param {!MediaKeySystemAccess} mksa A native MediaKeySystemAccess instance * to wrap. * @param {?string|undefined} videoScheme The encryption scheme to add to the * configuration for video. * @param {?string|undefined} audioScheme The encryption scheme to add to the * configuration for audio. */ constructor(mksa, videoScheme, audioScheme) { /** * @const {!MediaKeySystemAccess} * @private */ this.mksa_ = mksa; /** * @const {?string} * @private */ this.videoScheme_ = videoScheme || null; /** * @const {?string} * @private */ this.audioScheme_ = audioScheme || null; /** @const {string} */ this.keySystem = mksa.keySystem; } /** * @override * @return {!MediaKeySystemConfiguration} A MediaKeys config with * encryptionScheme fields added */ getConfiguration() { // A browser which supports the encryptionScheme field would always return // that field in the resulting configuration. So here, we emulate that. const configuration = this.mksa_.getConfiguration(); if (configuration.videoCapabilities) { for (const capability of configuration.videoCapabilities) { capability['encryptionScheme'] = this.videoScheme_; } } if (configuration.audioCapabilities) { for (const capability of configuration.audioCapabilities) { capability['encryptionScheme'] = this.audioScheme_; } } return configuration; } /** * @override * @return {!Promise<!MediaKeys>} A passthrough of the native MediaKeys object */ createMediaKeys() { return this.mksa_.createMediaKeys(); } };