xgplayer-shaka
Version:
xgplayer plugin for shaka-player
167 lines (166 loc) • 5.01 kB
JavaScript
import { inherits as _inherits, createSuper as _createSuper, createClass as _createClass, classCallCheck as _classCallCheck, defineProperty as _defineProperty, assertThisInitialized as _assertThisInitialized } from "./_virtual/_rollupPluginBabelHelpers.js";
import { Events, Sniffer, BasePlugin } from "xgplayer";
import Shaka from "shaka-player";
var ShakaJsPlugin = /* @__PURE__ */ function(_BasePlugin) {
_inherits(ShakaJsPlugin2, _BasePlugin);
var _super = _createSuper(ShakaJsPlugin2);
function ShakaJsPlugin2(args) {
var _this;
_classCallCheck(this, ShakaJsPlugin2);
_this = _super.call(this, args);
_defineProperty(_assertThisInitialized(_this), "onAdaptation_", function() {
var tracks = _this.shakaplayer.getVariantTracks();
tracks.forEach(function(track) {
if (!track.active) {
return;
}
for (var i = 0; i < this.content.length; ++i) {
var option = this.content[i];
if (option.value === track.id) {
option.selected = true;
} else {
option.selected = false;
}
}
});
});
Shaka.polyfill.installAll();
return _this;
}
_createClass(ShakaJsPlugin2, [{
key: "afterCreate",
value: function afterCreate() {
var _this2 = this;
this.content = [];
this.url = this.player.config.url;
if (Shaka.Player.isBrowserSupported()) {
this.on(Events.URL_CHANGE, function(url) {
if (/^blob/.test(url)) {
return;
}
_this2.url = url;
_this2.loadUrl(url);
});
}
}
}, {
key: "beforePlayerInit",
value: function beforePlayerInit() {
if (!Shaka.Player.isBrowserSupported()) {
throw new Error("Browser not supported!");
} else {
this._initShaka();
}
}
}, {
key: "destroy",
value: function destroy() {
if (this.shakaplayer) {
this.shakaplayer.destroy();
this.shakaplayer = null;
}
}
}, {
key: "_initShaka",
value: function _initShaka() {
var player = this.player;
this.shakaplayer = new Shaka.Player(player.video);
this.shakaplayer.addEventListener("error", function(event) {
console.error("Error code", event.detail.code, "object", event.detail);
});
if (this.config.shakaOpts) {
this.shakaplayer.configure(this.config.shakaOpts);
}
this.shakaplayer.getNetworkingEngine().registerRequestFilter(function(type, request) {
if (type === Shaka.net.NetworkingEngine.RequestType.LICENSE) {
request.headers["CWIP-Auth-Header"] = "VGhpc0lzQVRlc3QK";
}
});
this.shakaplayer.addEventListener("adaptation", this.onAdaptation_);
var config = {
abr: {
enabled: false
}
};
this.shakaplayer.configure(config);
this.loadUrl(this.url);
}
}, {
key: "loadUrl",
value: function loadUrl(url) {
var _this3 = this;
this.shakaplayer.load(url).then(function() {
console.log(" this.onTracksChanged_");
_this3.onTracksChanged_();
}).catch(function(event) {
console.trace("event", event);
console.error("Error code", event.detail.code, "object", event.detail);
});
}
}, {
key: "onTracksChanged_",
value: function onTracksChanged_() {
this.updateVariantTracks_();
}
}, {
key: "updateVariantTracks_",
value: function updateVariantTracks_() {
var tracks = this.shakaplayer.getVariantTracks();
tracks.sort(function(t1, t2) {
return t1.bandwidth - t2.bandwidth;
});
this.updateTrackOptions_(tracks);
}
}, {
key: "updateTrackOptions_",
value: function updateTrackOptions_(tracks) {
var _this4 = this;
var formatters = {
variant: function variant(track) {
var trackInfo = "";
if (track.width && track.height) {
trackInfo += track.height + "P";
}
return trackInfo;
}
};
this.content = [];
tracks.forEach(function(track) {
var option = {};
option.textContent = formatters[track.type](track);
option.track = track;
option.value = track.id;
option.selected = track.active;
_this4.content.push(option);
});
this.updateDefinition();
}
}, {
key: "updateDefinition",
value: function updateDefinition() {
if (Sniffer.device === "mobile") {
return;
}
console.log("updateDefinition", this.content);
}
}], [{
key: "pluginName",
get: function get() {
return "ShakaPlugin";
}
}, {
key: "defaultConfig",
get: function get() {
return {
shakaOpts: {}
};
}
}, {
key: "isSupported",
value: function isSupported() {
return Shaka.Player.isBrowserSupported();
}
}]);
return ShakaJsPlugin2;
}(BasePlugin);
export { ShakaJsPlugin as default };