@epiclabs/epic-video-player
Version:
Video player wrapper to support different video sources with an unified interface
134 lines (133 loc) • 5.17 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.PlayerHls = void 0;
var tslib_1 = require("tslib");
var hls_js_1 = tslib_1.__importDefault(require("hls.js"));
var player_1 = require("./player");
var PlayerHls = /** @class */ (function (_super) {
tslib_1.__extends(PlayerHls, _super);
function PlayerHls(url, htmlPlayer, config) {
return _super.call(this, url, htmlPlayer, config) || this;
}
PlayerHls.convertLevelsToIRenditions = function (levels) {
if (levels === undefined || levels.length === 0) {
return;
}
return levels.map(function (l, index) {
return {
audioCodec: l.audioCodec !== undefined ? l.audioCodec : undefined,
bitrate: l.bitrate !== undefined ? l.bitrate : undefined,
height: l.height !== undefined ? l.height : undefined,
level: index,
name: l.name !== undefined ? l.name : undefined,
videoCodec: l.videoCodec !== undefined ? l.videoCodec : undefined,
width: l.width !== undefined ? l.width : undefined,
};
});
};
PlayerHls.prototype.load = function () {
var _this = this;
this.reset();
try {
if (hls_js_1.default.isSupported()) {
this.player = new hls_js_1.default();
this.player.loadSource(this.url);
this.player.attachMedia(this.htmlPlayer);
// an initial rendition needs to be loaded
if (this.config &&
typeof this.config.initialRenditionIndex === 'number') {
if (this.config.initialRenditionIndex >= 0) {
var setInitialRendition = function (_event, data) {
if (_this.config.initialRenditionIndex > data.levels.length - 1) {
_this.player.loadLevel = data.levels.length - 1;
}
else {
_this.player.loadLevel = _this.config.initialRenditionIndex;
}
};
this.player.on(hls_js_1.default.Events.MANIFEST_PARSED, setInitialRendition);
this.player.off(hls_js_1.default.Events.MANIFEST_PARSED, setInitialRendition);
}
else {
this.player.loadLevel = -1;
}
}
// hls is not supported but the native player is able to load the video
// some features (like renditions getter/setter) will NOT be available
}
else if (this.htmlPlayer.canPlayType('application/vnd.apple.mpegurl')) {
this.player = undefined;
this.htmlPlayer.src = this.url;
}
this.initListeners();
this.playerType = 'HLS';
}
catch (e) {
console.error(e);
}
};
PlayerHls.prototype.destroy = function () {
try {
this.htmlPlayer.src = '';
if (this.player !== undefined) {
this.player.destroy();
}
}
catch (e) {
console.error(e);
}
finally {
this.htmlPlayer.pause();
this.htmlPlayer.removeAttribute('src');
this.htmlPlayer.load();
this.playerType = undefined;
this.reset();
}
};
PlayerHls.prototype.getRenditions = function () {
if (this.player === undefined) {
return;
}
return PlayerHls.convertLevelsToIRenditions(this.player.levels);
};
PlayerHls.prototype.setRendition = function (rendition, immediately) {
if (this.player === undefined) {
return;
}
if (typeof rendition === 'number') {
if (immediately) {
this.player.currentLevel = rendition;
}
else {
this.player.loadLevel = rendition;
}
return;
}
else {
var renditions = this.getRenditions();
if (renditions !== undefined && renditions.length > 0) {
for (var i = 0; i < renditions.length; i++) {
if (renditions[i].bitrate === rendition.bitrate) {
return this.setRendition(i, immediately);
}
}
}
}
return this.setRendition(-1, immediately);
};
PlayerHls.prototype.getCurrentRendition = function () {
if (this.player === undefined) {
return;
}
var renditions = this.getRenditions();
if (renditions !== undefined && renditions.length > 0) {
var currentLevel = this.player.currentLevel;
if (currentLevel >= 0 && renditions.length > currentLevel) {
return renditions[currentLevel];
}
}
return;
};
return PlayerHls;
}(player_1.Player));
exports.PlayerHls = PlayerHls;