App-MHFS
view release on metacpan - search on metacpan
view release on metacpan or search on metacpan
share/public_html/static/hls.js view on Meta::CPAN
loader.destroy();
}
this.resetInternalLoader(contextType);
}
};
PlaylistLoader.prototype.destroy = function destroy() {
this.destroyInternalLoaders();
_EventHandler.prototype.destroy.call(this);
};
PlaylistLoader.prototype.onManifestLoading = function onManifestLoading(data) {
this.load(data.url, { type: ContextType.MANIFEST, level: 0, id: null });
};
PlaylistLoader.prototype.onLevelLoading = function onLevelLoading(data) {
this.load(data.url, { type: ContextType.LEVEL, level: data.level, id: data.id });
};
PlaylistLoader.prototype.onAudioTrackLoading = function onAudioTrackLoading(data) {
this.load(data.url, { type: ContextType.AUDIO_TRACK, level: 0, id: data.id });
};
PlaylistLoader.prototype.onSubtitleTrackLoading = function onSubtitleTrackLoading(data) {
this.load(data.url, { type: ContextType.SUBTITLE_TRACK, level: 0, id: data.id });
};
PlaylistLoader.prototype.load = function load(url, context) {
var config = this.hls.config;
logger["b" /* logger */].debug('Loading playlist of type ' + context.type + ', level: ' + context.level + ', id: ' + context.id);
// Check if a loader for this context already exists
var loader = this.getInternalLoader(context);
if (loader) {
var loaderContext = loader.context;
if (loaderContext && loaderContext.url === url) {
// same URL can't overlap
logger["b" /* logger */].trace('playlist request ongoing');
return false;
} else {
logger["b" /* logger */].warn('aborting previous loader for type: ' + context.type);
loader.abort();
}
}
var maxRetry = void 0,
timeout = void 0,
retryDelay = void 0,
maxRetryDelay = void 0;
// apply different configs for retries depending on
// context (manifest, level, audio/subs playlist)
switch (context.type) {
case ContextType.MANIFEST:
maxRetry = config.manifestLoadingMaxRetry;
timeout = config.manifestLoadingTimeOut;
retryDelay = config.manifestLoadingRetryDelay;
maxRetryDelay = config.manifestLoadingMaxRetryTimeout;
break;
case ContextType.LEVEL:
// Disable internal loader retry logic, since we are managing retries in Level Controller
maxRetry = 0;
timeout = config.levelLoadingTimeOut;
// TODO Introduce retry settings for audio-track and subtitle-track, it should not use level retry config
break;
default:
maxRetry = config.levelLoadingMaxRetry;
timeout = config.levelLoadingTimeOut;
retryDelay = config.levelLoadingRetryDelay;
maxRetryDelay = config.levelLoadingMaxRetryTimeout;
break;
}
loader = this.createInternalLoader(context);
context.url = url;
context.responseType = context.responseType || ''; // FIXME: (should not be necessary to do this)
var loaderConfig = {
timeout: timeout,
maxRetry: maxRetry,
retryDelay: retryDelay,
maxRetryDelay: maxRetryDelay
};
var loaderCallbacks = {
onSuccess: this.loadsuccess.bind(this),
onError: this.loaderror.bind(this),
onTimeout: this.loadtimeout.bind(this)
};
logger["b" /* logger */].debug('Calling internal loader delegate for URL: ' + url);
loader.load(context, loaderConfig, loaderCallbacks);
return true;
};
PlaylistLoader.prototype.loadsuccess = function loadsuccess(response, stats, context) {
var networkDetails = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
if (context.isSidxRequest) {
this._handleSidxRequest(response, context);
this._handlePlaylistLoaded(response, stats, context, networkDetails);
return;
}
this.resetInternalLoader(context.type);
var string = response.data;
stats.tload = performance.now();
// stats.mtime = new Date(target.getResponseHeader('Last-Modified'));
// Validate if it is an M3U8 at all
if (string.indexOf('#EXTM3U') !== 0) {
this._handleManifestParsingError(response, context, 'no EXTM3U delimiter', networkDetails);
return;
}
// Check if chunk-list or master. handle empty chunk list case (first EXTINF not signaled, but TARGETDURATION present)
if (string.indexOf('#EXTINF:') > 0 || string.indexOf('#EXT-X-TARGETDURATION:') > 0) {
this._handleTrackOrLevelPlaylist(response, stats, context, networkDetails);
} else {
this._handleMasterPlaylist(response, stats, context, networkDetails);
}
};
PlaylistLoader.prototype.loaderror = function loaderror(response, context) {
var networkDetails = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
this._handleNetworkError(context, networkDetails);
};
PlaylistLoader.prototype.loadtimeout = function loadtimeout(stats, context) {
var networkDetails = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
this._handleNetworkError(context, networkDetails, true);
};
PlaylistLoader.prototype._handleMasterPlaylist = function _handleMasterPlaylist(response, stats, context, networkDetails) {
var hls = this.hls;
var string = response.data;
var url = PlaylistLoader.getResponseUrl(response, context);
var levels = m3u8_parser.parseMasterPlaylist(string, url);
if (!levels.length) {
this._handleManifestParsingError(response, context, 'no level found in manifest', networkDetails);
view all matches for this distributionview release on metacpan - search on metacpan
( run in 1.364 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )