123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', {
- value: true
- });
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
- var _videoJs = require('video.js');
- var _videoJs2 = _interopRequireDefault(_videoJs);
- var defaultOptions = {
- errorInterval: 30,
- getSource: function getSource(next) {
- var tech = this.tech({ IWillNotUseThisInPlugins: true });
- var sourceObj = tech.currentSource_;
- return next(sourceObj);
- }
- };
- /**
- * Main entry point for the plugin
- *
- * @param {Player} player a reference to a videojs Player instance
- * @param {Object} [options] an object with plugin options
- * @private
- */
- var initPlugin = function initPlugin(player, options) {
- var lastCalled = 0;
- var seekTo = 0;
- var localOptions = _videoJs2['default'].mergeOptions(defaultOptions, options);
- player.ready(function () {
- player.trigger({ type: 'usage', name: 'hls-error-reload-initialized' });
- });
- /**
- * Player modifications to perform that must wait until `loadedmetadata`
- * has been triggered
- *
- * @private
- */
- var loadedMetadataHandler = function loadedMetadataHandler() {
- if (seekTo) {
- player.currentTime(seekTo);
- }
- };
- /**
- * Set the source on the player element, play, and seek if necessary
- *
- * @param {Object} sourceObj An object specifying the source url and mime-type to play
- * @private
- */
- var setSource = function setSource(sourceObj) {
- if (sourceObj === null || sourceObj === undefined) {
- return;
- }
- seekTo = player.duration() !== Infinity && player.currentTime() || 0;
- player.one('loadedmetadata', loadedMetadataHandler);
- player.src(sourceObj);
- player.trigger({ type: 'usage', name: 'hls-error-reload' });
- player.play();
- };
- /**
- * Attempt to get a source from either the built-in getSource function
- * or a custom function provided via the options
- *
- * @private
- */
- var errorHandler = function errorHandler() {
- // Do not attempt to reload the source if a source-reload occurred before
- // 'errorInterval' time has elapsed since the last source-reload
- if (Date.now() - lastCalled < localOptions.errorInterval * 1000) {
- player.trigger({ type: 'usage', name: 'hls-error-reload-canceled' });
- return;
- }
- if (!localOptions.getSource || typeof localOptions.getSource !== 'function') {
- _videoJs2['default'].log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');
- return;
- }
- lastCalled = Date.now();
- return localOptions.getSource.call(player, setSource);
- };
- /**
- * Unbind any event handlers that were bound by the plugin
- *
- * @private
- */
- var cleanupEvents = function cleanupEvents() {
- player.off('loadedmetadata', loadedMetadataHandler);
- player.off('error', errorHandler);
- player.off('dispose', cleanupEvents);
- };
- /**
- * Cleanup before re-initializing the plugin
- *
- * @param {Object} [newOptions] an object with plugin options
- * @private
- */
- var reinitPlugin = function reinitPlugin(newOptions) {
- cleanupEvents();
- initPlugin(player, newOptions);
- };
- player.on('error', errorHandler);
- player.on('dispose', cleanupEvents);
- // Overwrite the plugin function so that we can correctly cleanup before
- // initializing the plugin
- player.reloadSourceOnError = reinitPlugin;
- };
- /**
- * Reload the source when an error is detected as long as there
- * wasn't an error previously within the last 30 seconds
- *
- * @param {Object} [options] an object with plugin options
- */
- var reloadSourceOnError = function reloadSourceOnError(options) {
- initPlugin(this, options);
- };
- exports['default'] = reloadSourceOnError;
- module.exports = exports['default'];
|