1 class MediaSourceLoader
{
11 return new Promise((resolve
, reject
) => {
17 var request
= new XMLHttpRequest();
18 request
.open('GET', this._url
, true);
19 request
.responseType
= 'json';
20 request
.onload
= (event
) => {
21 this.loadManifestSucceeded(event
);
24 request
.onerror
= (event
) => {
25 this.loadManifestFailed(event
);
32 loadManifestSucceeded(event
)
34 this._manifest
= event
.target
.response
;
36 if (!this._manifest
|| !this._manifest
.url
) {
51 return new Promise((resolve
, reject
) => {
52 this.loadManifest().then(() => {
53 var request
= new XMLHttpRequest();
54 request
.open('GET', this._manifest
.url
, true);
55 request
.responseType
= 'arraybuffer';
56 request
.onload
= (event
) => {
57 this.loadMediaDataSucceeded(event
);
60 request
.onerror
= (event
) => {
61 this.loadMediaDataFailed(event
);
69 loadMediaDataSucceeded(event
)
71 this._mediaData
= event
.target
.response
;
85 return this._manifest
? this._manifest
.type
: "";
92 return this._manifest
.media
.reduce((duration
, media
) => { return duration
+ media
.duration
}, 0);
97 if (!this._manifest
|| !this._manifest
.init
|| !this._mediaData
)
99 var init
= this._manifest
.init
;
100 return this._mediaData
.slice(init
.offset
, init
.offset
+ init
.size
);
103 get mediaSegmentsLength()
105 if (!this._manifest
|| !this._manifest
.media
)
107 return this._manifest
.media
.length
;
112 if (!this._manifest
|| !this._manifest
.media
|| !this._mediaData
)
115 for (var media
of this._manifest
.media
)
116 yield this._mediaData
.slice(media
.offset
, media
.offset
+ media
.size
);
119 get everyMediaSegment()
121 if (!this._manifest
|| !this._manifest
.media
|| !this._mediaData
)
124 return this._mediaData
.slice(this._manifest
.media
[0].offset
);