UNPKG

xgplayer-dash

Version:
106 lines (105 loc) 3.38 kB
import { inherits as _inherits, createSuper as _createSuper, classCallCheck as _classCallCheck, assertThisInitialized as _assertThisInitialized, createClass as _createClass } from "../_virtual/_rollupPluginBabelHelpers.js"; import EventEmitter from "eventemitter3"; import { Util } from "xgplayer"; import _Errors from "../error.js"; var MSE = /* @__PURE__ */ function(_EventEmitter) { _inherits(MSE2, _EventEmitter); var _super = _createSuper(MSE2); function MSE2() { var _this; _classCallCheck(this, MSE2); _this = _super.call(this); var self = _assertThisInitialized(_this); _this.codecs = []; _this.sourceBuffer = {}; _this.mediaSource = new MediaSource(); _this.url = URL.createObjectURL(_this.mediaSource); _this.queue = {}; _this.updating = false; _this.mediaSource.addEventListener("sourceopen", function() { self.emit("sourceopen"); }); _this.mediaSource.addEventListener("sourceclose", function() { self.emit("sourceclose"); }); return _this; } _createClass(MSE2, [{ key: "state", get: function get() { return this.mediaSource.readyState; } }, { key: "duration", get: function get() { return this.mediaSource.duration; }, set: function set(value) { this.mediaSource.duration = value; } }, { key: "addSourceBuffer", value: function addSourceBuffer(codecs) { var self = this; this.codecs.push(codecs); var sourceBuffer = this.mediaSource.addSourceBuffer(codecs); this.sourceBuffer[codecs] = sourceBuffer; sourceBuffer.addEventListener("error", function(e) { self.emit("error", new _Errors("mse", "", { line: 16, handle: "[MSE] constructor sourceopen", msg: e.message })); }); sourceBuffer.addEventListener("updateend", function(e) { self.emit(codecs + " updateend"); if (self.queue[codecs] && Util.typeOf(self.queue[codecs]) === "Array") { var buffer = self.queue[codecs].shift(); if (buffer) { if (sourceBuffer.updating === false && self.state === "open") { sourceBuffer.appendBuffer(buffer); } else { self.queue[codecs].unshift(buffer); } } } }); } }, { key: "appendBuffer", value: function appendBuffer(codecs, buffer) { var sourceBuffer = this.sourceBuffer[codecs]; if (sourceBuffer.updating === false && this.state === "open") { sourceBuffer.appendBuffer(buffer); return true; } else { if (!this.queue[codecs]) { this.queue[codecs] = []; } this.queue[codecs].push(buffer); return false; } } }, { key: "removeBuffer", value: function removeBuffer(codecs, start, end) { if (this.sourceBuffer[codecs].updating === false && this.state === "open") { this.sourceBuffer[codecs].remove(start, end); } } }, { key: "endOfStream", value: function endOfStream() { if (this.state === "open") { this.mediaSource.endOfStream(); } } }], [{ key: "isSupported", value: function isSupported(codecs) { return window.MediaSource && window.MediaSource.isTypeSupported(codecs); } }]); return MSE2; }(EventEmitter); export { MSE as default };