/*
|
* File Loader
|
*/
|
import Event from '../events';
|
import EventHandler from '../event-handler';
|
|
class FileLoader extends EventHandler {
|
|
constructor(wfs) {
|
super(wfs,
|
Event.FRAG_LOADING,
|
Event.FILE_HEAD_LOADING,
|
Event.FILE_DATA_LOADING);
|
this.loaders = {};
|
}
|
|
destroy() {
|
for (let loaderName in this.loaders) {
|
let loader = this.loaders[loaderName];
|
if (loader) {
|
loader.destroy();
|
}
|
}
|
this.loaders = {};
|
EventHandler.prototype.destroy.call(this);
|
}
|
|
onFileHeadLoading(data) {
|
let config = this.wfs.config;
|
let loader = new config.loader(config);
|
let loaderContext, loaderConfig, loaderCallbacks;
|
loaderContext = { url : config.fmp4FileUrl };
|
loaderConfig = { maxRetry : 0 , retryDelay : 0 };
|
loaderCallbacks = { onSuccess : this.fileloadheadsuccess.bind(this) };
|
loader.loadHead(loaderContext,loaderConfig,loaderCallbacks);
|
}
|
|
fileloadheadsuccess(response ) {
|
this.wfs.trigger(Event.FILE_HEAD_LOADED, { size: response});
|
}
|
|
onFileDataLoading(data) {
|
let config = this.wfs.config;
|
let loader = new config.loader(config);
|
let loaderContext, loaderConfig, loaderCallbacks;
|
loaderContext = { url : config.fmp4FileUrl, responseType : 'arraybuffer', progressData : false};
|
let start = data.fileStart, end = data.fileEnd;
|
if (!isNaN(start) && !isNaN(end)) {
|
loaderContext.rangeStart = start;
|
loaderContext.rangeEnd = end;
|
}
|
loaderConfig = { timeout : config.fragLoadingTimeOut, maxRetry : 0 , retryDelay : 0, maxRetryDelay : config.fragLoadingMaxRetryTimeout};
|
loaderCallbacks = { onSuccess : this.fileloaddatasuccess.bind(this) };
|
loader.load(loaderContext,loaderConfig,loaderCallbacks);
|
}
|
|
fileloaddatasuccess(response, stats, context) {
|
this.wfs.trigger(Event.FILE_DATA_LOADED, {payload: response.data, stats: stats});
|
}
|
|
loaderror(response, context) {
|
let loader = context.loader;
|
if (loader) {
|
loader.abort();
|
}
|
this.loaders[context.type] = undefined;
|
}
|
|
loadtimeout(stats, context) {
|
let loader = context.loader;
|
if (loader) {
|
loader.abort();
|
}
|
this.loaders[context.type] = undefined;
|
}
|
|
loadprogress(stats, context, data) {
|
let frag = context.frag;
|
frag.loaded = stats.loaded;
|
}
|
|
}
|
|
export default FileLoader;
|