mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-14 15:56:38 +03:00
83604c3037
We want to apply several optimizations to MCap and Shaka management, which makes everything easier if the code is in this repo.
84 lines
2.3 KiB
JavaScript
84 lines
2.3 KiB
JavaScript
/*! @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();
|
|
}
|
|
};
|