@epiclabs/epic-video-player
Version:
Video player wrapper to support different video sources with an unified interface
108 lines (107 loc) • 3.74 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Player = void 0;
var tslib_1 = require("tslib");
var Utils = tslib_1.__importStar(require("./utils"));
var Player = /** @class */ (function () {
function Player(url, htmlPlayer, config) {
var _this = this;
this.url = url;
this.htmlPlayer = htmlPlayer;
this.config = config;
this.updateStats = function () {
_this.stats = {
buffered: Utils.timeRangesToITimeRanges(Utils.getBuffered(_this.htmlPlayer)),
droppedFrames: Utils.getDroppedFrames(_this.htmlPlayer),
duration: Utils.getDuration(_this.htmlPlayer),
loadTime: _this.stats.loadTime,
played: Utils.timeRangesToITimeRanges(Utils.getPlayed(_this.htmlPlayer)),
seekable: Utils.timeRangesToITimeRanges(Utils.getSeekable(_this.htmlPlayer)),
};
};
this.loadStart = function () {
_this.updateStats();
if (_this.stats.loadTime === -1) {
_this.loadStartTime = new Date().getTime();
}
};
this.loadEnd = function () {
_this.updateStats();
if (_this.stats.loadTime === -1) {
_this.stats.loadTime = (new Date().getTime() - _this.loadStartTime) / 1000;
}
_this.updateStats();
};
this.resetStats();
this.load();
this.initListeners();
}
Player.prototype.getStats = function () {
return this.stats;
};
Player.prototype.pause = function () {
this.htmlPlayer.pause();
};
Player.prototype.play = function () {
return tslib_1.__awaiter(this, void 0, void 0, function () {
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.htmlPlayer.play()];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
};
Player.prototype.currentTime = function (secs) {
if (secs !== undefined) {
this.htmlPlayer.currentTime = secs;
}
else {
return this.htmlPlayer.currentTime;
}
};
Player.prototype.volume = function (perc) {
if (perc !== undefined) {
this.htmlPlayer.volume = perc;
}
else {
return this.htmlPlayer.volume;
}
};
Player.prototype.playbackRate = function (rate) {
if (rate !== undefined) {
this.htmlPlayer.playbackRate = rate;
}
else {
return this.htmlPlayer.playbackRate;
}
};
Player.prototype.reset = function () {
this.destroyListeners();
this.resetStats();
};
Player.prototype.resetStats = function () {
this.stats = {
buffered: [],
droppedFrames: 0,
duration: 0,
loadTime: -1,
played: [],
seekable: [],
};
};
Player.prototype.initListeners = function () {
this.htmlPlayer.addEventListener('timeupdate', this.updateStats);
this.htmlPlayer.addEventListener('loadstart', this.loadStart);
this.htmlPlayer.addEventListener('canplay', this.loadEnd);
};
Player.prototype.destroyListeners = function () {
this.htmlPlayer.removeEventListener('timeupdate', this.updateStats);
this.htmlPlayer.removeEventListener('loadstart', this.loadStart);
this.htmlPlayer.removeEventListener('canplay', this.loadEnd);
};
return Player;
}());
exports.Player = Player;