zhangzengfei
2021-01-28 0f70bb5e95342e1c88e16b4c12609cd45dd1b103
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
 * 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;