xgplayer-dash
Version:
xgplayer plugin for MPEG-DASH
106 lines (105 loc) • 3.38 kB
JavaScript
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 };