UNPKG

xgplayer-dash

Version:
132 lines (131 loc) 4.6 kB
import { inherits as _inherits, createSuper as _createSuper, classCallCheck as _classCallCheck, createClass as _createClass, createForOfIteratorHelper as _createForOfIteratorHelper } from "../_virtual/_rollupPluginBabelHelpers.js"; import EventEmitter from "eventemitter3"; import util from "../util/index.js"; var EME = /* @__PURE__ */ function(_EventEmitter) { _inherits(EME2, _EventEmitter); var _super = _createSuper(EME2); function EME2(drm) { var _this; _classCallCheck(this, EME2); _this = _super.call(this); _this.drm = drm; _this.KEYSYSTEM_TYPE = ""; _this.keys = {}; if (_this.drm.clearKeys) { _this.KEYSYSTEM_TYPE = "org.w3.clearkey"; _this.keys = _this.drm.clearKeys; } _this.options = []; _this.ensurePromise = void 0; return _this; } _createClass(EME2, [{ key: "setOptions", value: function setOptions() { var basicVideoCapabilities = [{ contentType: 'video/mp4; codecs="avc1.42E01E"' }, { contentType: 'video/webm; codecs="vp8"' }]; var basicConfig = { videoCapabilities: basicVideoCapabilities }; var offlineConfig = { videoCapabilities: basicVideoCapabilities, persistentState: "required", sessionTypes: ["persistent-license"] }; this.options = [offlineConfig, basicConfig]; } }, { key: "bail", value: function bail(message) { return function(err) { console.log(message + (err ? " " + err : "")); }; } }, { key: "UpdateSessionFunc", value: function UpdateSessionFunc(drmKeys) { var self = this; return function(ev) { var keys = []; var keyIds = []; Object.keys(drmKeys).forEach(function(keyIdHex) { var keyHex = drmKeys[keyIdHex]; var keyId = util.fromHex(keyIdHex); var key = util.fromHex(keyHex); var keyObj = { kty: "oct", kid: util.toBase64(keyId, false), k: util.toBase64(key, false) }; keys.push(keyObj); keyIds.push(keyObj.kid); }); var jwkSet = { keys }; var license = JSON.stringify(jwkSet); ev.target.update(util.StringToArrayBuffer(license)).then(function() { }, self.bail(" MediaKeySession update failed")); }; } }, { key: "KeysChange", value: function KeysChange(event) { var session = event.target; var map = session.keyStatuses; var _iterator = _createForOfIteratorHelper(map.entries()), _step; try { for (_iterator.s(); !(_step = _iterator.n()).done; ) { var entry = _step.value; var keyId = entry[0]; var status = entry[1]; var base64KeyId = util.Base64ToHex(window.btoa(util.ArrayBufferToString(keyId))); } } catch (err) { _iterator.e(err); } finally { _iterator.f(); } } }, { key: "EnsureMediaKeysCreated", value: function EnsureMediaKeysCreated(video, keySystem, options) { var self = this; if (this.ensurePromise) { return this.ensurePromise; } this.ensurePromise = navigator.requestMediaKeySystemAccess(keySystem, options).then(function(keySystemAccess) { return keySystemAccess.createMediaKeys(); }, self.bail(" Failed to request key system access.")).then(function(mediaKeys) { return video.setMediaKeys(mediaKeys); }, self.bail(" failed to create MediaKeys object")); return this.ensurePromise; } }, { key: "SetupEME", value: function SetupEME(video, keyIds) { var self = this; video.sessions = []; this.on("encrypted", function() { var initDataType = "keyids"; var initDataStr = JSON.stringify({ kids: ["0123456789abcdef0123456789abcdef"] }); var initData = new Uint8Array(util.toUTF8(initDataStr)); self.EnsureMediaKeysCreated(video, self.KEYSYSTEM_TYPE, self.options).then(function() { var session = video.mediaKeys.createSession(); video.sessions.push(session); session.addEventListener("message", self.UpdateSessionFunc(self.keys)); session.addEventListener("keystatuseschange", self.KeysChange); return session.generateRequest(initDataType, initData.buffer); }, self.bail(" failed to ensure MediaKeys on HTMLMediaElement")).then(function() { }, self.bail(" Failed to generate request.")); }); } }]); return EME2; }(EventEmitter); export { EME as default };