UNPKG

xgplayer-shaka

Version:

xgplayer plugin for shaka-player

167 lines (166 loc) 5.01 kB
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 };