UNPKG

@epiclabs/epic-video-player

Version:

Video player wrapper to support different video sources with an unified interface

134 lines (133 loc) 5.17 kB
"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;