diff --git a/dashboard-ui/bower_components/hls.js/.bower.json b/dashboard-ui/bower_components/hls.js/.bower.json index b08f841559..fcc1dca235 100644 --- a/dashboard-ui/bower_components/hls.js/.bower.json +++ b/dashboard-ui/bower_components/hls.js/.bower.json @@ -1,6 +1,7 @@ { "name": "hls.js", - "version": "0.4.8", + "version": "0.4.9", + "license": "Apache-2.0", "description": "Media Source Extension - HLS library, by/for Dailymotion", "homepage": "https://github.com/dailymotion/hls.js", "authors": [ @@ -15,11 +16,11 @@ "test", "tests" ], - "_release": "0.4.8", + "_release": "0.4.9", "_resolution": { "type": "version", - "tag": "v0.4.8", - "commit": "de1534ca184ffa3a313fc5b433713512f6ab1c27" + "tag": "v0.4.9", + "commit": "11f271bfa1f17571756d1b4cf79271c45035bbbf" }, "_source": "git://github.com/dailymotion/hls.js.git", "_target": "~0.4.5", diff --git a/dashboard-ui/bower_components/hls.js/bower.json b/dashboard-ui/bower_components/hls.js/bower.json index e59c4d6b47..3bef0f23d4 100644 --- a/dashboard-ui/bower_components/hls.js/bower.json +++ b/dashboard-ui/bower_components/hls.js/bower.json @@ -1,6 +1,7 @@ { "name": "hls.js", - "version": "0.4.8", + "version": "0.4.9", + "license" : "Apache-2.0", "description": "Media Source Extension - HLS library, by/for Dailymotion", "homepage": "https://github.com/dailymotion/hls.js", "authors": [ diff --git a/dashboard-ui/bower_components/hls.js/dist/hls.js b/dashboard-ui/bower_components/hls.js/dist/hls.js index ffdf2ec755..ded3b3014e 100644 --- a/dashboard-ui/bower_components/hls.js/dist/hls.js +++ b/dashboard-ui/bower_components/hls.js/dist/hls.js @@ -881,13 +881,15 @@ var MSEMediaController = (function (_EventHandler) { }, { key: 'startLoad', value: function startLoad() { - if (this.levels && this.media) { + if (this.levels) { this.startInternal(); - if (this.lastCurrentTime) { - _utilsLogger.logger.log('seeking @ ' + this.lastCurrentTime); + var media = this.media, + lastCurrentTime = this.lastCurrentTime; + if (media && lastCurrentTime) { + _utilsLogger.logger.log('seeking @ ' + lastCurrentTime); if (!this.lastPaused) { _utilsLogger.logger.log('resuming video'); - this.media.play(); + media.play(); } this.state = State.IDLE; } else { @@ -897,7 +899,7 @@ var MSEMediaController = (function (_EventHandler) { this.nextLoadPosition = this.startPosition = this.lastCurrentTime; this.tick(); } else { - _utilsLogger.logger.warn('cannot start loading as either manifest not parsed or video not attached'); + _utilsLogger.logger.warn('cannot start loading as manifest not parsed yet'); } } }, { @@ -1486,7 +1488,7 @@ var MSEMediaController = (function (_EventHandler) { to avoid rounding issues/infinite loop, only flush buffer range of length greater than 500ms. */ - if (flushEnd - flushStart > 0.5) { + if (Math.min(flushEnd, bufEnd) - flushStart > 0.5) { _utilsLogger.logger.log('flush ' + type + ' [' + flushStart + ',' + flushEnd + '], of [' + bufStart + ',' + bufEnd + '], pos:' + this.media.currentTime); sb.remove(flushStart, flushEnd); return false; @@ -1499,6 +1501,8 @@ var MSEMediaController = (function (_EventHandler) { return false; } } + } else { + _utilsLogger.logger.warn('abort flushing too many retries'); } /* after successful buffer flushing, rebuild buffer Range array @@ -2063,7 +2067,7 @@ var MSEMediaController = (function (_EventHandler) { jumpThreshold = 0; } else { // playhead not moving AND media playing - _utilsLogger.logger.log('playback seems stuck'); + _utilsLogger.logger.log('playback seems stuck @' + currentTime); if (!this.stalled) { this.hls.trigger(_events2['default'].ERROR, { type: _errors.ErrorTypes.MEDIA_ERROR, details: _errors.ErrorDetails.BUFFER_STALLED_ERROR, fatal: false }); this.stalled = true; @@ -2850,52 +2854,52 @@ var AACDemuxer = (function () { id3 = new _demuxId32['default'](data), pts = 90 * id3.timeStamp, config, - adtsFrameSize, - adtsStartOffset, - adtsHeaderLen, + frameLength, + frameDuration, + frameIndex, + offset, + headerLength, stamp, - nbSamples, len, aacSample; // look for ADTS header (0xFFFx) - for (adtsStartOffset = id3.length, len = data.length; adtsStartOffset < len - 1; adtsStartOffset++) { - if (data[adtsStartOffset] === 0xff && (data[adtsStartOffset + 1] & 0xf0) === 0xf0) { + for (offset = id3.length, len = data.length; offset < len - 1; offset++) { + if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) { break; } } if (!track.audiosamplerate) { - config = _adts2['default'].getAudioConfig(this.observer, data, adtsStartOffset, audioCodec); + config = _adts2['default'].getAudioConfig(this.observer, data, offset, audioCodec); track.config = config.config; track.audiosamplerate = config.samplerate; track.channelCount = config.channelCount; track.codec = config.codec; - track.timescale = this.remuxer.timescale; - track.duration = this.remuxer.timescale * duration; + track.timescale = config.samplerate; + track.duration = config.samplerate * duration; _utilsLogger.logger.log('parsed codec:' + track.codec + ',rate:' + config.samplerate + ',nb channel:' + config.channelCount); } - nbSamples = 0; - while (adtsStartOffset + 5 < len) { + frameIndex = 0; + frameDuration = 1024 * 90000 / track.audiosamplerate; + while (offset + 5 < len) { + // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header + headerLength = !!(data[offset + 1] & 0x01) ? 7 : 9; // retrieve frame size - adtsFrameSize = (data[adtsStartOffset + 3] & 0x03) << 11; - // byte 4 - adtsFrameSize |= data[adtsStartOffset + 4] << 3; - // byte 5 - adtsFrameSize |= (data[adtsStartOffset + 5] & 0xE0) >>> 5; - adtsHeaderLen = !!(data[adtsStartOffset + 1] & 0x01) ? 7 : 9; - adtsFrameSize -= adtsHeaderLen; - stamp = Math.round(pts + nbSamples * 1024 * 90000 / track.audiosamplerate); + frameLength = (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xE0) >>> 5; + frameLength -= headerLength; //stamp = pes.pts; - //console.log('AAC frame, offset/length/pts:' + (adtsStartOffset+7) + '/' + adtsFrameSize + '/' + stamp.toFixed(0)); - if (adtsFrameSize > 0 && adtsStartOffset + adtsHeaderLen + adtsFrameSize <= len) { - aacSample = { unit: data.subarray(adtsStartOffset + adtsHeaderLen, adtsStartOffset + adtsHeaderLen + adtsFrameSize), pts: stamp, dts: stamp }; + + if (frameLength > 0 && offset + headerLength + frameLength <= len) { + stamp = pts + frameIndex * frameDuration; + //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`); + aacSample = { unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp }; track.samples.push(aacSample); - track.len += adtsFrameSize; - adtsStartOffset += adtsFrameSize + adtsHeaderLen; - nbSamples++; + track.len += frameLength; + offset += frameLength + headerLength; + frameIndex++; // look for ADTS header (0xFFFx) - for (; adtsStartOffset < len - 1; adtsStartOffset++) { - if (data[adtsStartOffset] === 0xff && (data[adtsStartOffset + 1] & 0xf0) === 0xf0) { + for (; offset < len - 1; offset++) { + if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) { break; } } @@ -2913,12 +2917,12 @@ var AACDemuxer = (function () { value: function probe(data) { // check if data contains ID3 timestamp and ADTS sync worc var id3 = new _demuxId32['default'](data), - adtsStartOffset, + offset, len; if (id3.hasTimeStamp) { // look for ADTS header (0xFFFx) - for (adtsStartOffset = id3.length, len = data.length; adtsStartOffset < len - 1; adtsStartOffset++) { - if (data[adtsStartOffset] === 0xff && (data[adtsStartOffset + 1] & 0xf0) === 0xf0) { + for (offset = id3.length, len = data.length; offset < len - 1; offset++) { + if (data[offset] === 0xff && (data[offset + 1] & 0xf0) === 0xf0) { //logger.log('ADTS sync word found !'); return true; } @@ -4553,8 +4557,8 @@ var TSDemuxer = (function () { track.audiosamplerate = config.samplerate; track.channelCount = config.channelCount; track.codec = config.codec; - track.timescale = this.remuxer.timescale; - track.duration = track.timescale * duration; + track.timescale = config.samplerate; + track.duration = config.samplerate * duration; _utilsLogger.logger.log('parsed codec:' + track.codec + ',rate:' + config.samplerate + ',nb channel:' + config.channelCount); } frameIndex = 0; @@ -4579,7 +4583,7 @@ var TSDemuxer = (function () { //stamp = pes.pts; if (frameLength > 0 && offset + headerLength + frameLength <= len) { - stamp = Math.round(pts + frameIndex * frameDuration); + stamp = pts + frameIndex * frameDuration; //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`); aacSample = { unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp }; track.samples.push(aacSample); @@ -5076,7 +5080,7 @@ var Hls = (function () { debug: false, maxBufferLength: 30, maxBufferSize: 60 * 1000 * 1000, - maxBufferHole: 0.3, + maxBufferHole: 0.5, maxSeekHole: 2, liveSyncDurationCount: 3, liveMaxLatencyDurationCount: Infinity, @@ -6674,7 +6678,8 @@ var MP4Remuxer = (function () { var view, offset = 8, pesTimeScale = this.PES_TIMESCALE, - pes2mp4ScaleFactor = this.PES2MP4SCALEFACTOR, + mp4timeScale = track.timescale, + pes2mp4ScaleFactor = pesTimeScale / mp4timeScale, aacSample, mp4Sample, unit, @@ -6690,15 +6695,10 @@ var MP4Remuxer = (function () { samples = [], samples0 = []; - track.samples.forEach(function (aacSample) { - if (pts === undefined || aacSample.pts > pts) { - samples0.push(aacSample); - pts = aacSample.pts; - } else { - _utilsLogger.logger.warn('dropping past audio frame'); - track.len -= aacSample.unit.byteLength; - } + track.samples.sort(function (a, b) { + return a.pts - b.pts; }); + samples0 = track.samples; while (samples0.length) { aacSample = samples0.shift(); @@ -6710,13 +6710,15 @@ var MP4Remuxer = (function () { if (lastDTS !== undefined) { ptsnorm = this._PTSNormalize(pts, lastDTS); dtsnorm = this._PTSNormalize(dts, lastDTS); - // let's compute sample duration + // let's compute sample duration. + // there should be 1024 audio samples in one AAC frame mp4Sample.duration = (dtsnorm - lastDTS) / pes2mp4ScaleFactor; - if (mp4Sample.duration < 0) { + if (Math.abs(mp4Sample.duration - 1024) > 10) { // not expected to happen ... - _utilsLogger.logger.log('invalid AAC sample duration at PTS:' + aacSample.pts + ':' + mp4Sample.duration); - mp4Sample.duration = 0; + _utilsLogger.logger.log('invalid AAC sample duration at PTS ' + Math.round(pts / 90) + ',should be 1024,found :' + Math.round(mp4Sample.duration)); } + mp4Sample.duration = 1024; + dtsnorm = 1024 * pes2mp4ScaleFactor + lastDTS; } else { var nextAacPts = this.nextAacPts, delta; diff --git a/dashboard-ui/bower_components/hls.js/dist/hls.js.map b/dashboard-ui/bower_components/hls.js/dist/hls.js.map index 6615133cc3..9e94e2a4b3 100644 --- a/dashboard-ui/bower_components/hls.js/dist/hls.js.map +++ b/dashboard-ui/bower_components/hls.js/dist/hls.js.map @@ -37,7 +37,7 @@ "src/utils/xhr-loader.js" ], "names": [], - "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;sBC7DkB,WAAW;;;;4BACJ,kBAAkB;;;;IAErC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,GAAG,EAAE;0BAFb,aAAa;;AAGf,+BAHE,aAAa,6CAGT,GAAG,EAAE,oBAAM,kBAAkB,EAAE;AACrC,QAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACxB,QAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAC5B,QAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;GAC1B;;eAPG,aAAa;;WASV,mBAAG;AACR,gCAAa,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3C;;;WAEiB,4BAAC,IAAI,EAAE;AACvB,UAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,UAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;AAC/B,YAAI,CAAC,iBAAiB,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,Q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", + "mappings": "AAAA;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7SA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;sBC7DkB,WAAW;;;;4BACJ,kBAAkB;;;;IAErC,aAAa;YAAb,aAAa;;AAEN,WAFP,aAAa,CAEL,GAAG,EAAE;0BAFb,aAAa;;AAGf,+BAHE,aAAa,6CAGT,GAAG,EAAE,oBAAM,kBAAkB,EAAE;AACrC,QAAI,CAAC,cAAc,GAAG,CAAC,CAAC;AACxB,QAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC,CAAC;AAC5B,QAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC;GAC1B;;eAPG,aAAa;;WASV,mBAAG;AACR,gCAAa,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3C;;;WAEiB,4BAAC,IAAI,EAAE;AACvB,UAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;AACvB,UAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE;AAC/B,YAAI,CAAC,iBAAiB,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,Q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", "file": "generated.js", "sourceRoot": "", "sourcesContent": [ @@ -46,29 +46,29 @@ "var bundleFn = arguments[3];\nvar sources = arguments[4];\nvar cache = arguments[5];\n\nvar stringify = JSON.stringify;\n\nmodule.exports = function (fn) {\n var keys = [];\n var wkey;\n var cacheKeys = Object.keys(cache);\n\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n var exp = cache[key].exports;\n // Using babel as a transpiler to use esmodule, the export will always\n // be an object with the default export as a property of it. To ensure\n // the existing api and babel esmodule exports are both supported we\n // check for both\n if (exp === fn || exp.default === fn) {\n wkey = key;\n break;\n }\n }\n\n if (!wkey) {\n wkey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n var wcache = {};\n for (var i = 0, l = cacheKeys.length; i < l; i++) {\n var key = cacheKeys[i];\n wcache[key] = key;\n }\n sources[wkey] = [\n Function(['require','module','exports'], '(' + fn + ')(self)'),\n wcache\n ];\n }\n var skey = Math.floor(Math.pow(16, 8) * Math.random()).toString(16);\n\n var scache = {}; scache[wkey] = wkey;\n sources[skey] = [\n Function(['require'], (\n // try to call default if defined to also support babel esmodule\n // exports\n 'var f = require(' + stringify(wkey) + ');' +\n '(f.default ? f.default : f)(self);'\n )),\n scache\n ];\n\n var src = '(' + bundleFn + ')({'\n + Object.keys(sources).map(function (key) {\n return stringify(key) + ':['\n + sources[key][0]\n + ',' + stringify(sources[key][1]) + ']'\n ;\n }).join(',')\n + '},{},[' + stringify(skey) + '])'\n ;\n\n var URL = window.URL || window.webkitURL || window.mozURL || window.msURL;\n\n return new Worker(URL.createObjectURL(\n new Blob([src], { type: 'text/javascript' })\n ));\n};\n", "/*\n * simple ABR Controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\n\nclass AbrController extends EventHandler {\n\n constructor(hls) {\n super(hls, Event.FRAG_LOAD_PROGRESS);\n this.lastfetchlevel = 0;\n this._autoLevelCapping = -1;\n this._nextAutoLevel = -1;\n }\n\n destroy() {\n EventHandler.prototype.destroy.call(this);\n }\n\n onFragLoadProgress(data) {\n var stats = data.stats;\n if (stats.aborted === undefined) {\n this.lastfetchduration = (performance.now() - stats.trequest) / 1000;\n this.lastfetchlevel = data.frag.level;\n this.lastbw = (stats.loaded * 8) / this.lastfetchduration;\n //console.log(`fetchDuration:${this.lastfetchduration},bw:${(this.lastbw/1000).toFixed(0)}/${stats.aborted}`);\n }\n }\n\n /** Return the capping/max level value that could be used by automatic level selection algorithm **/\n get autoLevelCapping() {\n return this._autoLevelCapping;\n }\n\n /** set the capping/max level value that could be used by automatic level selection algorithm **/\n set autoLevelCapping(newLevel) {\n this._autoLevelCapping = newLevel;\n }\n\n get nextAutoLevel() {\n var lastbw = this.lastbw, hls = this.hls,adjustedbw, i, maxAutoLevel;\n if (this._autoLevelCapping === -1) {\n maxAutoLevel = hls.levels.length - 1;\n } else {\n maxAutoLevel = this._autoLevelCapping;\n }\n\n if (this._nextAutoLevel !== -1) {\n var nextLevel = Math.min(this._nextAutoLevel,maxAutoLevel);\n if (nextLevel === this.lastfetchlevel) {\n this._nextAutoLevel = -1;\n } else {\n return nextLevel;\n }\n }\n\n // follow algorithm captured from stagefright :\n // https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/httplive/LiveSession.cpp\n // Pick the highest bandwidth stream below or equal to estimated bandwidth.\n for (i = 0; i <= maxAutoLevel; i++) {\n // consider only 80% of the available bandwidth, but if we are switching up,\n // be even more conservative (70%) to avoid overestimating and immediately\n // switching back.\n if (i <= this.lastfetchlevel) {\n adjustedbw = 0.8 * lastbw;\n } else {\n adjustedbw = 0.7 * lastbw;\n }\n if (adjustedbw < hls.levels[i].bitrate) {\n return Math.max(0, i - 1);\n }\n }\n return i - 1;\n }\n\n set nextAutoLevel(nextLevel) {\n this._nextAutoLevel = nextLevel;\n }\n}\n\nexport default AbrController;\n\n", "/*\n * Level Controller\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {logger} from '../utils/logger';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\nclass LevelController extends EventHandler {\n\n constructor(hls) {\n super(hls,\n Event.MANIFEST_LOADED,\n Event.LEVEL_LOADED,\n Event.ERROR);\n this.ontick = this.tick.bind(this);\n this._manualLevel = this._autoLevelCapping = -1;\n }\n\n destroy() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this._manualLevel = -1;\n }\n\n onManifestLoaded(data) {\n var levels0 = [], levels = [], bitrateStart, i, bitrateSet = {}, videoCodecFound = false, audioCodecFound = false, hls = this.hls;\n\n // regroup redundant level together\n data.levels.forEach(level => {\n if(level.videoCodec) {\n videoCodecFound = true;\n }\n if(level.audioCodec) {\n audioCodecFound = true;\n }\n var redundantLevelId = bitrateSet[level.bitrate];\n if (redundantLevelId === undefined) {\n bitrateSet[level.bitrate] = levels0.length;\n level.url = [level.url];\n level.urlId = 0;\n levels0.push(level);\n } else {\n levels0[redundantLevelId].url.push(level.url);\n }\n });\n\n // remove audio-only level if we also have levels with audio+video codecs signalled\n if(videoCodecFound && audioCodecFound) {\n levels0.forEach(level => {\n if(level.videoCodec) {\n levels.push(level);\n }\n });\n } else {\n levels = levels0;\n }\n\n // only keep level with supported audio/video codecs\n levels = levels.filter(function(level) {\n var checkSupportedAudio = function(codec) { return MediaSource.isTypeSupported(`audio/mp4;codecs=${codec}`);};\n var checkSupportedVideo = function(codec) { return MediaSource.isTypeSupported(`video/mp4;codecs=${codec}`);};\n var audioCodec = level.audioCodec, videoCodec = level.videoCodec;\n\n return (!audioCodec || checkSupportedAudio(audioCodec)) &&\n (!videoCodec || checkSupportedVideo(videoCodec));\n });\n\n if(levels.length) {\n // start bitrate is the first bitrate of the manifest\n bitrateStart = levels[0].bitrate;\n // sort level on bitrate\n levels.sort(function (a, b) {\n return a.bitrate - b.bitrate;\n });\n this._levels = levels;\n // find index of first level in sorted levels\n for (i = 0; i < levels.length; i++) {\n if (levels[i].bitrate === bitrateStart) {\n this._firstLevel = i;\n logger.log(`manifest loaded,${levels.length} level(s) found, first bitrate:${bitrateStart}`);\n break;\n }\n }\n hls.trigger(Event.MANIFEST_PARSED, {levels: this._levels, firstLevel: this._firstLevel, stats: data.stats});\n } else {\n hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: hls.url, reason: 'no compatible level found in manifest'});\n }\n return;\n }\n\n get levels() {\n return this._levels;\n }\n\n get level() {\n return this._level;\n }\n\n set level(newLevel) {\n if (this._level !== newLevel || this._levels[newLevel].details === undefined) {\n this.setLevelInternal(newLevel);\n }\n }\n\n setLevelInternal(newLevel) {\n // check if level idx is valid\n if (newLevel >= 0 && newLevel < this._levels.length) {\n // stopping live reloading timer if any\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n this._level = newLevel;\n logger.log(`switching to level ${newLevel}`);\n this.hls.trigger(Event.LEVEL_SWITCH, {level: newLevel});\n var level = this._levels[newLevel];\n // check if we need to load playlist for this level\n if (level.details === undefined || level.details.live === true) {\n // level not retrieved yet, or live playlist we need to (re)load it\n logger.log(`(re)loading playlist for level ${newLevel}`);\n var urlId = level.urlId;\n this.hls.trigger(Event.LEVEL_LOADING, {url: level.url[urlId], level: newLevel, id: urlId});\n }\n } else {\n // invalid level id given, trigger error\n this.hls.trigger(Event.ERROR, {type : ErrorTypes.OTHER_ERROR, details: ErrorDetails.LEVEL_SWITCH_ERROR, level: newLevel, fatal: false, reason: 'invalid level idx'});\n }\n }\n\n get manualLevel() {\n return this._manualLevel;\n }\n\n set manualLevel(newLevel) {\n this._manualLevel = newLevel;\n if (newLevel !== -1) {\n this.level = newLevel;\n }\n }\n\n get firstLevel() {\n return this._firstLevel;\n }\n\n set firstLevel(newLevel) {\n this._firstLevel = newLevel;\n }\n\n get startLevel() {\n if (this._startLevel === undefined) {\n return this._firstLevel;\n } else {\n return this._startLevel;\n }\n }\n\n set startLevel(newLevel) {\n this._startLevel = newLevel;\n }\n\n onError(data) {\n if(data.fatal) {\n return;\n }\n\n var details = data.details, hls = this.hls, levelId, level;\n // try to recover not fatal errors\n switch(details) {\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n levelId = data.frag.level;\n break;\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n levelId = data.level;\n break;\n default:\n break;\n }\n /* try to switch to a redundant stream if any available.\n * if no redundant stream available, emergency switch down (if in auto mode and current level not 0)\n * otherwise, we cannot recover this network error ...\n * don't raise FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT as fatal, as it is handled by mediaController\n */\n if (levelId !== undefined) {\n level = this._levels[levelId];\n if (level.urlId < (level.url.length - 1)) {\n level.urlId++;\n level.details = undefined;\n logger.warn(`level controller,${details} for level ${levelId}: switching to redundant stream id ${level.urlId}`);\n } else {\n // we could try to recover if in auto mode and current level not lowest level (0)\n let recoverable = ((this._manualLevel === -1) && levelId);\n if (recoverable) {\n logger.warn(`level controller,${details}: emergency switch-down for next fragment`);\n hls.abrController.nextAutoLevel = 0;\n } else if(level && level.details && level.details.live) {\n logger.warn(`level controller,${details} on live stream, discard`);\n // FRAG_LOAD_ERROR and FRAG_LOAD_TIMEOUT are handled by mediaController\n } else if (details !== ErrorDetails.FRAG_LOAD_ERROR && details !== ErrorDetails.FRAG_LOAD_TIMEOUT) {\n logger.error(`cannot recover ${details} error`);\n this._level = undefined;\n // stopping live reloading timer if any\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n // redispatch same error but with fatal set to true\n data.fatal = true;\n hls.trigger(event, data);\n }\n }\n }\n }\n\n onLevelLoaded(data) {\n // check if current playlist is a live playlist\n if (data.details.live && !this.timer) {\n // if live playlist we will have to reload it periodically\n // set reload period to playlist target duration\n this.timer = setInterval(this.ontick, 1000 * data.details.targetduration);\n }\n if (!data.details.live && this.timer) {\n // playlist is not live and timer is armed : stopping it\n clearInterval(this.timer);\n this.timer = null;\n }\n }\n\n tick() {\n var levelId = this._level;\n if (levelId !== undefined) {\n var level = this._levels[levelId], urlId = level.urlId;\n this.hls.trigger(Event.LEVEL_LOADING, {url: level.url[urlId], level: levelId, id: urlId});\n }\n }\n\n nextLoadLevel() {\n if (this._manualLevel !== -1) {\n return this._manualLevel;\n } else {\n return this.hls.abrController.nextAutoLevel;\n }\n }\n}\n\nexport default LevelController;\n\n", - "/*\n * MSE Media Controller\n*/\n\nimport Demuxer from '../demux/demuxer';\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {logger} from '../utils/logger';\nimport BinarySearch from '../utils/binary-search';\nimport LevelHelper from '../helper/level-helper';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\nconst State = {\n ERROR : -2,\n STARTING : -1,\n IDLE : 0,\n KEY_LOADING : 1,\n FRAG_LOADING : 2,\n FRAG_LOADING_WAITING_RETRY : 3,\n WAITING_LEVEL : 4,\n PARSING : 5,\n PARSED : 6,\n APPENDING : 7,\n BUFFER_FLUSHING : 8,\n ENDED : 9\n};\n\nclass MSEMediaController extends EventHandler {\n\n constructor(hls) {\n super(hls, Event.MEDIA_ATTACHING,\n Event.MEDIA_DETACHING,\n Event.MANIFEST_PARSED,\n Event.LEVEL_LOADED,\n Event.KEY_LOADED,\n Event.FRAG_LOADED,\n Event.FRAG_PARSING_INIT_SEGMENT,\n Event.FRAG_PARSING_DATA,\n Event.FRAG_PARSED,\n Event.ERROR);\n this.config = hls.config;\n this.audioCodecSwap = false;\n this.ticks = 0;\n // Source Buffer listeners\n this.onsbue = this.onSBUpdateEnd.bind(this);\n this.onsbe = this.onSBUpdateError.bind(this);\n this.ontick = this.tick.bind(this);\n }\n\n destroy() {\n this.stop();\n EventHandler.prototype.destroy.call(this);\n this.state = State.IDLE;\n }\n\n startLoad() {\n if (this.levels && this.media) {\n this.startInternal();\n if (this.lastCurrentTime) {\n logger.log(`seeking @ ${this.lastCurrentTime}`);\n if (!this.lastPaused) {\n logger.log('resuming video');\n this.media.play();\n }\n this.state = State.IDLE;\n } else {\n this.lastCurrentTime = 0;\n this.state = State.STARTING;\n }\n this.nextLoadPosition = this.startPosition = this.lastCurrentTime;\n this.tick();\n } else {\n logger.warn('cannot start loading as either manifest not parsed or video not attached');\n }\n }\n\n startInternal() {\n var hls = this.hls;\n this.stop();\n this.demuxer = new Demuxer(hls);\n this.timer = setInterval(this.ontick, 100);\n this.level = -1;\n this.fragLoadError = 0;\n }\n\n stop() {\n this.mp4segments = [];\n this.flushRange = [];\n this.bufferRange = [];\n this.stalled = false;\n var frag = this.fragCurrent;\n if (frag) {\n if (frag.loader) {\n frag.loader.abort();\n }\n this.fragCurrent = null;\n }\n this.fragPrevious = null;\n if (this.sourceBuffer) {\n for(var type in this.sourceBuffer) {\n var sb = this.sourceBuffer[type];\n try {\n this.mediaSource.removeSourceBuffer(sb);\n sb.removeEventListener('updateend', this.onsbue);\n sb.removeEventListener('error', this.onsbe);\n } catch(err) {\n }\n }\n this.sourceBuffer = null;\n }\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n if (this.demuxer) {\n this.demuxer.destroy();\n this.demuxer = null;\n }\n }\n\n tick() {\n this.ticks++;\n if (this.ticks === 1) {\n this.doTick();\n if (this.ticks > 1) {\n setTimeout(this.tick, 1);\n }\n this.ticks = 0;\n }\n }\n\n doTick() {\n var pos, level, levelDetails, hls = this.hls;\n switch(this.state) {\n case State.ERROR:\n //don't do anything in error state to avoid breaking further ...\n break;\n case State.STARTING:\n // determine load level\n this.startLevel = hls.startLevel;\n if (this.startLevel === -1) {\n // -1 : guess start Level by doing a bitrate test by loading first fragment of lowest quality level\n this.startLevel = 0;\n this.fragBitrateTest = true;\n }\n // set new level to playlist loader : this will trigger start level load\n this.level = hls.nextLoadLevel = this.startLevel;\n this.state = State.WAITING_LEVEL;\n this.loadedmetadata = false;\n break;\n case State.IDLE:\n // if video detached or unbound exit loop\n if (!this.media) {\n break;\n }\n // determine next candidate fragment to be loaded, based on current position and\n // end of buffer position\n // ensure 60s of buffer upfront\n // if we have not yet loaded any fragment, start loading from start position\n if (this.loadedmetadata) {\n pos = this.media.currentTime;\n } else {\n pos = this.nextLoadPosition;\n }\n // determine next load level\n if (this.startFragmentRequested === false) {\n level = this.startLevel;\n } else {\n // we are not at playback start, get next load level from level Controller\n level = hls.nextLoadLevel;\n }\n var bufferInfo = this.bufferInfo(pos,this.config.maxBufferHole),\n bufferLen = bufferInfo.len,\n bufferEnd = bufferInfo.end,\n fragPrevious = this.fragPrevious,\n maxBufLen;\n // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n if ((this.levels[level]).hasOwnProperty('bitrate')) {\n maxBufLen = Math.max(8 * this.config.maxBufferSize / this.levels[level].bitrate, this.config.maxBufferLength);\n maxBufLen = Math.min(maxBufLen, this.config.maxMaxBufferLength);\n } else {\n maxBufLen = this.config.maxBufferLength;\n }\n // if buffer length is less than maxBufLen try to load a new fragment\n if (bufferLen < maxBufLen) {\n // set next load level : this will trigger a playlist load if needed\n hls.nextLoadLevel = level;\n this.level = level;\n levelDetails = this.levels[level].details;\n // if level info not retrieved yet, switch state and wait for level retrieval\n // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n if (typeof levelDetails === 'undefined' || levelDetails.live && this.levelLastLoaded !== level) {\n this.state = State.WAITING_LEVEL;\n break;\n }\n // find fragment index, contiguous with end of buffer position\n let fragments = levelDetails.fragments,\n fragLen = fragments.length,\n start = fragments[0].start,\n end = fragments[fragLen-1].start + fragments[fragLen-1].duration,\n frag;\n\n // in case of live playlist we need to ensure that requested position is not located before playlist start\n if (levelDetails.live) {\n // check if requested position is within seekable boundaries :\n //logger.log(`start/pos/bufEnd/seeking:${start.toFixed(3)}/${pos.toFixed(3)}/${bufferEnd.toFixed(3)}/${this.media.seeking}`);\n if (bufferEnd < Math.max(start,end-this.config.liveMaxLatencyDurationCount*levelDetails.targetduration)) {\n this.seekAfterBuffered = start + Math.max(0, levelDetails.totalduration - this.config.liveSyncDurationCount * levelDetails.targetduration);\n logger.log(`buffer end: ${bufferEnd} is located too far from the end of live sliding playlist, media position will be reseted to: ${this.seekAfterBuffered.toFixed(3)}`);\n bufferEnd = this.seekAfterBuffered;\n }\n if (this.startFragmentRequested && !levelDetails.PTSKnown) {\n /* we are switching level on live playlist, but we don't have any PTS info for that quality level ...\n try to load frag matching with next SN.\n even if SN are not synchronized between playlists, loading this frag will help us\n compute playlist sliding and find the right one after in case it was not the right consecutive one */\n if (fragPrevious) {\n var targetSN = fragPrevious.sn + 1;\n if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n frag = fragments[targetSN - levelDetails.startSN];\n logger.log(`live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n }\n }\n if (!frag) {\n /* we have no idea about which fragment should be loaded.\n so let's load mid fragment. it will help computing playlist sliding and find the right one\n */\n frag = fragments[Math.min(fragLen - 1, Math.round(fragLen / 2))];\n logger.log(`live playlist, switching playlist, unknown, load middle frag : ${frag.sn}`);\n }\n }\n } else {\n // VoD playlist: if bufferEnd before start of playlist, load first fragment\n if (bufferEnd < start) {\n frag = fragments[0];\n }\n }\n if (!frag) {\n var foundFrag;\n if (bufferEnd < end) {\n foundFrag = BinarySearch.search(fragments, (candidate) => {\n //logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n // offset should be within fragment boundary\n if ((candidate.start + candidate.duration) <= bufferEnd) {\n return 1;\n }\n else if (candidate.start > bufferEnd) {\n return -1;\n }\n return 0;\n });\n } else {\n // reach end of playlist\n foundFrag = fragments[fragLen-1];\n }\n if (foundFrag) {\n frag = foundFrag;\n start = foundFrag.start;\n //logger.log('find SN matching with pos:' + bufferEnd + ':' + frag.sn);\n if (fragPrevious && frag.level === fragPrevious.level && frag.sn === fragPrevious.sn) {\n if (frag.sn < levelDetails.endSN) {\n frag = fragments[frag.sn + 1 - levelDetails.startSN];\n logger.log(`SN just loaded, load next one: ${frag.sn}`);\n } else {\n // have we reached end of VOD playlist ?\n if (!levelDetails.live) {\n var mediaSource = this.mediaSource;\n if (mediaSource) {\n switch(mediaSource.readyState) {\n case 'open':\n var sb = this.sourceBuffer;\n if (!((sb.audio && sb.audio.updating) || (sb.video && sb.video.updating))) {\n logger.log('all media data available, signal endOfStream() to MediaSource and stop loading fragment');\n //Notify the media element that it now has all of the media data\n mediaSource.endOfStream();\n this.state = State.ENDED;\n }\n break;\n case 'ended':\n logger.log('all media data available and mediaSource ended, stop loading fragment');\n this.state = State.ENDED;\n break;\n default:\n break;\n }\n }\n }\n frag = null;\n }\n }\n }\n }\n if(frag) {\n //logger.log(' loading frag ' + i +',pos/bufEnd:' + pos.toFixed(3) + '/' + bufferEnd.toFixed(3));\n if ((frag.decryptdata.uri != null) && (frag.decryptdata.key == null)) {\n logger.log(`Loading key for ${frag.sn} of [${levelDetails.startSN} ,${levelDetails.endSN}],level ${level}`);\n this.state = State.KEY_LOADING;\n hls.trigger(Event.KEY_LOADING, {frag: frag});\n } else {\n logger.log(`Loading ${frag.sn} of [${levelDetails.startSN} ,${levelDetails.endSN}],level ${level}, currentTime:${pos},bufferEnd:${bufferEnd.toFixed(3)}`);\n frag.autoLevel = hls.autoLevelEnabled;\n if (this.levels.length > 1) {\n frag.expectedLen = Math.round(frag.duration * this.levels[level].bitrate / 8);\n frag.trequest = performance.now();\n }\n // ensure that we are not reloading the same fragments in loop ...\n if (this.fragLoadIdx !== undefined) {\n this.fragLoadIdx++;\n } else {\n this.fragLoadIdx = 0;\n }\n if (frag.loadCounter) {\n frag.loadCounter++;\n let maxThreshold = this.config.fragLoadingLoopThreshold;\n // if this frag has already been loaded 3 times, and if it has been reloaded recently\n if (frag.loadCounter > maxThreshold && (Math.abs(this.fragLoadIdx - frag.loadIdx) < maxThreshold)) {\n hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_LOOP_LOADING_ERROR, fatal: false, frag: frag});\n return;\n }\n } else {\n frag.loadCounter = 1;\n }\n frag.loadIdx = this.fragLoadIdx;\n this.fragCurrent = frag;\n this.startFragmentRequested = true;\n hls.trigger(Event.FRAG_LOADING, {frag: frag});\n this.state = State.FRAG_LOADING;\n }\n }\n }\n break;\n case State.WAITING_LEVEL:\n level = this.levels[this.level];\n // check if playlist is already loaded\n if (level && level.details) {\n this.state = State.IDLE;\n }\n break;\n case State.FRAG_LOADING:\n /*\n monitor fragment retrieval time...\n we compute expected time of arrival of the complete fragment.\n we compare it to expected time of buffer starvation\n */\n let v = this.media,frag = this.fragCurrent;\n /* only monitor frag retrieval time if\n (video not paused OR first fragment being loaded) AND autoswitching enabled AND not lowest level AND multiple levels */\n if (v && (!v.paused || this.loadedmetadata === false) && frag.autoLevel && this.level && this.levels.length > 1) {\n var requestDelay = performance.now() - frag.trequest;\n // monitor fragment load progress after half of expected fragment duration,to stabilize bitrate\n if (requestDelay > (500 * frag.duration)) {\n var loadRate = frag.loaded * 1000 / requestDelay; // byte/s\n if (frag.expectedLen < frag.loaded) {\n frag.expectedLen = frag.loaded;\n }\n pos = v.currentTime;\n var fragLoadedDelay = (frag.expectedLen - frag.loaded) / loadRate;\n var bufferStarvationDelay = this.bufferInfo(pos,this.config.maxBufferHole).end - pos;\n var fragLevelNextLoadedDelay = frag.duration * this.levels[hls.nextLoadLevel].bitrate / (8 * loadRate); //bps/Bps\n /* if we have less than 2 frag duration in buffer and if frag loaded delay is greater than buffer starvation delay\n ... and also bigger than duration needed to load fragment at next level ...*/\n if (bufferStarvationDelay < (2 * frag.duration) && fragLoadedDelay > bufferStarvationDelay && fragLoadedDelay > fragLevelNextLoadedDelay) {\n // abort fragment loading ...\n logger.warn('loading too slow, abort fragment loading');\n logger.log(`fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay :${fragLoadedDelay.toFixed(1)}/${bufferStarvationDelay.toFixed(1)}/${fragLevelNextLoadedDelay.toFixed(1)}`);\n //abort fragment loading\n frag.loader.abort();\n hls.trigger(Event.FRAG_LOAD_EMERGENCY_ABORTED, {frag: frag});\n // switch back to IDLE state to request new fragment at lowest level\n this.state = State.IDLE;\n }\n }\n }\n break;\n case State.FRAG_LOADING_WAITING_RETRY:\n var now = performance.now();\n var retryDate = this.retryDate;\n var media = this.media;\n var isSeeking = media && media.seeking;\n // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n if(!retryDate || (now >= retryDate) || isSeeking) {\n logger.log(`mediaController: retryDate reached, switch back to IDLE state`);\n this.state = State.IDLE;\n }\n break;\n case State.PARSING:\n // nothing to do, wait for fragment being parsed\n break;\n case State.PARSED:\n case State.APPENDING:\n if (this.sourceBuffer) {\n if (this.media.error) {\n logger.error('trying to append although a media error occured, switch to ERROR state');\n this.state = State.ERROR;\n return;\n }\n // if MP4 segment appending in progress nothing to do\n else if ((this.sourceBuffer.audio && this.sourceBuffer.audio.updating) ||\n (this.sourceBuffer.video && this.sourceBuffer.video.updating)) {\n //logger.log('sb append in progress');\n // check if any MP4 segments left to append\n } else if (this.mp4segments.length) {\n var segment = this.mp4segments.shift();\n try {\n //logger.log(`appending ${segment.type} SB, size:${segment.data.length});\n this.sourceBuffer[segment.type].appendBuffer(segment.data);\n this.appendError = 0;\n } catch(err) {\n // in case any error occured while appending, put back segment in mp4segments table\n logger.error(`error while trying to append buffer:${err.message},try appending later`);\n this.mp4segments.unshift(segment);\n // just discard QuotaExceededError for now, and wait for the natural browser buffer eviction\n //http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n if(err.code !== 22) {\n if (this.appendError) {\n this.appendError++;\n } else {\n this.appendError = 1;\n }\n var event = {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_APPEND_ERROR, frag: this.fragCurrent};\n /* with UHD content, we could get loop of quota exceeded error until\n browser is able to evict some data from sourcebuffer. retrying help recovering this\n */\n if (this.appendError > this.config.appendErrorMaxRetry) {\n logger.log(`fail ${this.config.appendErrorMaxRetry} times to append segment in sourceBuffer`);\n event.fatal = true;\n hls.trigger(Event.ERROR, event);\n this.state = State.ERROR;\n return;\n } else {\n event.fatal = false;\n hls.trigger(Event.ERROR, event);\n }\n }\n }\n this.state = State.APPENDING;\n }\n } else {\n // sourceBuffer undefined, switch back to IDLE state\n this.state = State.IDLE;\n }\n break;\n case State.BUFFER_FLUSHING:\n // loop through all buffer ranges to flush\n while(this.flushRange.length) {\n var range = this.flushRange[0];\n // flushBuffer will abort any buffer append in progress and flush Audio/Video Buffer\n if (this.flushBuffer(range.start, range.end)) {\n // range flushed, remove from flush array\n this.flushRange.shift();\n } else {\n // flush in progress, come back later\n break;\n }\n }\n if (this.flushRange.length === 0) {\n // handle end of immediate switching if needed\n if (this.immediateSwitch) {\n this.immediateLevelSwitchEnd();\n }\n // move to IDLE once flush complete. this should trigger new fragment loading\n this.state = State.IDLE;\n // reset reference to frag\n this.fragPrevious = null;\n }\n /* if not everything flushed, stay in BUFFER_FLUSHING state. we will come back here\n each time sourceBuffer updateend() callback will be triggered\n */\n break;\n case State.ENDED:\n break;\n default:\n break;\n }\n // check buffer\n this._checkBuffer();\n // check/update current fragment\n this._checkFragmentChanged();\n }\n\n\n bufferInfo(pos,maxHoleDuration) {\n var media = this.media,\n vbuffered = media.buffered,\n buffered = [],i;\n for (i = 0; i < vbuffered.length; i++) {\n buffered.push({start: vbuffered.start(i), end: vbuffered.end(i)});\n }\n return this.bufferedInfo(buffered,pos,maxHoleDuration);\n }\n\n bufferedInfo(buffered,pos,maxHoleDuration) {\n var buffered2 = [],\n // bufferStart and bufferEnd are buffer boundaries around current video position\n bufferLen,bufferStart, bufferEnd,bufferStartNext,i;\n // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n buffered.sort(function (a, b) {\n var diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n // there might be some small holes between buffer time range\n // consider that holes smaller than maxHoleDuration are irrelevant and build another\n // buffer time range representations that discards those holes\n for (i = 0; i < buffered.length; i++) {\n var buf2len = buffered2.length;\n if(buf2len) {\n var buf2end = buffered2[buf2len - 1].end;\n // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n if((buffered[i].start - buf2end) < maxHoleDuration) {\n // merge overlapping time ranges\n // update lastRange.end only if smaller than item.end\n // e.g. [ 1, 15] with [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n // whereas [ 1, 8] with [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n if(buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end;\n }\n } else {\n // big hole\n buffered2.push(buffered[i]);\n }\n } else {\n // first value\n buffered2.push(buffered[i]);\n }\n }\n for (i = 0, bufferLen = 0, bufferStart = bufferEnd = pos; i < buffered2.length; i++) {\n var start = buffered2[i].start,\n end = buffered2[i].end;\n //logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n if ((pos + maxHoleDuration) >= start && pos < end) {\n // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n bufferStart = start;\n bufferEnd = end + maxHoleDuration;\n bufferLen = bufferEnd - pos;\n } else if ((pos + maxHoleDuration) < start) {\n bufferStartNext = start;\n break;\n }\n }\n return {len: bufferLen, start: bufferStart, end: bufferEnd, nextStart : bufferStartNext};\n }\n\n getBufferRange(position) {\n var i, range;\n for (i = this.bufferRange.length - 1; i >=0; i--) {\n range = this.bufferRange[i];\n if (position >= range.start && position <= range.end) {\n return range;\n }\n }\n return null;\n }\n\n get currentLevel() {\n if (this.media) {\n var range = this.getBufferRange(this.media.currentTime);\n if (range) {\n return range.frag.level;\n }\n }\n return -1;\n }\n\n get nextBufferRange() {\n if (this.media) {\n // first get end range of current fragment\n return this.followingBufferRange(this.getBufferRange(this.media.currentTime));\n } else {\n return null;\n }\n }\n\n followingBufferRange(range) {\n if (range) {\n // try to get range of next fragment (500ms after this range)\n return this.getBufferRange(range.end + 0.5);\n }\n return null;\n }\n\n get nextLevel() {\n var range = this.nextBufferRange;\n if (range) {\n return range.frag.level;\n } else {\n return -1;\n }\n }\n\n isBuffered(position) {\n var v = this.media, buffered = v.buffered;\n for (var i = 0; i < buffered.length; i++) {\n if (position >= buffered.start(i) && position <= buffered.end(i)) {\n return true;\n }\n }\n return false;\n }\n\n _checkFragmentChanged() {\n var rangeCurrent, currentTime, video = this.media;\n if (video && video.seeking === false) {\n currentTime = video.currentTime;\n /* if video element is in seeked state, currentTime can only increase.\n (assuming that playback rate is positive ...)\n As sometimes currentTime jumps back to zero after a\n media decode error, check this, to avoid seeking back to\n wrong position after a media decode error\n */\n if(currentTime > video.playbackRate*this.lastCurrentTime) {\n this.lastCurrentTime = currentTime;\n }\n if (this.isBuffered(currentTime)) {\n rangeCurrent = this.getBufferRange(currentTime);\n } else if (this.isBuffered(currentTime + 0.1)) {\n /* ensure that FRAG_CHANGED event is triggered at startup,\n when first video frame is displayed and playback is paused.\n add a tolerance of 100ms, in case current position is not buffered,\n check if current pos+100ms is buffered and use that buffer range\n for FRAG_CHANGED event reporting */\n rangeCurrent = this.getBufferRange(currentTime + 0.1);\n }\n if (rangeCurrent) {\n var fragPlaying = rangeCurrent.frag;\n if (fragPlaying !== this.fragPlaying) {\n this.fragPlaying = fragPlaying;\n this.hls.trigger(Event.FRAG_CHANGED, {frag: fragPlaying});\n }\n }\n }\n }\n\n /*\n abort any buffer append in progress, and flush all buffered data\n return true once everything has been flushed.\n sourceBuffer.abort() and sourceBuffer.remove() are asynchronous operations\n the idea is to call this function from tick() timer and call it again until all resources have been cleaned\n the timer is rearmed upon sourceBuffer updateend() event, so this should be optimal\n */\n flushBuffer(startOffset, endOffset) {\n var sb, i, bufStart, bufEnd, flushStart, flushEnd;\n //logger.log('flushBuffer,pos/start/end: ' + this.media.currentTime + '/' + startOffset + '/' + endOffset);\n // safeguard to avoid infinite looping\n if (this.flushBufferCounter++ < (2 * this.bufferRange.length) && this.sourceBuffer) {\n for (var type in this.sourceBuffer) {\n sb = this.sourceBuffer[type];\n if (!sb.updating) {\n for (i = 0; i < sb.buffered.length; i++) {\n bufStart = sb.buffered.start(i);\n bufEnd = sb.buffered.end(i);\n // workaround firefox not able to properly flush multiple buffered range.\n if (navigator.userAgent.toLowerCase().indexOf('firefox') !== -1 && endOffset === Number.POSITIVE_INFINITY) {\n flushStart = startOffset;\n flushEnd = endOffset;\n } else {\n flushStart = Math.max(bufStart, startOffset);\n flushEnd = Math.min(bufEnd, endOffset);\n }\n /* sometimes sourcebuffer.remove() does not flush\n the exact expected time range.\n to avoid rounding issues/infinite loop,\n only flush buffer range of length greater than 500ms.\n */\n if (flushEnd - flushStart > 0.5) {\n logger.log(`flush ${type} [${flushStart},${flushEnd}], of [${bufStart},${bufEnd}], pos:${this.media.currentTime}`);\n sb.remove(flushStart, flushEnd);\n return false;\n }\n }\n } else {\n //logger.log('abort ' + type + ' append in progress');\n // this will abort any appending in progress\n //sb.abort();\n return false;\n }\n }\n }\n\n /* after successful buffer flushing, rebuild buffer Range array\n loop through existing buffer range and check if\n corresponding range is still buffered. only push to new array already buffered range\n */\n var newRange = [],range;\n for (i = 0; i < this.bufferRange.length; i++) {\n range = this.bufferRange[i];\n if (this.isBuffered((range.start + range.end) / 2)) {\n newRange.push(range);\n }\n }\n this.bufferRange = newRange;\n logger.log('buffer flushed');\n // everything flushed !\n return true;\n }\n\n /*\n on immediate level switch :\n - pause playback if playing\n - cancel any pending load request\n - and trigger a buffer flush\n */\n immediateLevelSwitch() {\n logger.log('immediateLevelSwitch');\n if (!this.immediateSwitch) {\n this.immediateSwitch = true;\n this.previouslyPaused = this.media.paused;\n this.media.pause();\n }\n var fragCurrent = this.fragCurrent;\n if (fragCurrent && fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n // flush everything\n this.flushBufferCounter = 0;\n this.flushRange.push({start: 0, end: Number.POSITIVE_INFINITY});\n // trigger a sourceBuffer flush\n this.state = State.BUFFER_FLUSHING;\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n // speed up switching, trigger timer function\n this.tick();\n }\n\n /*\n on immediate level switch end, after new fragment has been buffered :\n - nudge video decoder by slightly adjusting video currentTime\n - resume the playback if needed\n */\n immediateLevelSwitchEnd() {\n this.immediateSwitch = false;\n this.media.currentTime -= 0.0001;\n if (!this.previouslyPaused) {\n this.media.play();\n }\n }\n\n nextLevelSwitch() {\n /* try to switch ASAP without breaking video playback :\n in order to ensure smooth but quick level switching,\n we need to find the next flushable buffer range\n we should take into account new segment fetch time\n */\n var fetchdelay, currentRange, nextRange;\n currentRange = this.getBufferRange(this.media.currentTime);\n if (currentRange) {\n // flush buffer preceding current fragment (flush until current fragment start offset)\n // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n this.flushRange.push({start: 0, end: currentRange.start - 1});\n }\n if (!this.media.paused) {\n // add a safety delay of 1s\n var nextLevelId = this.hls.nextLoadLevel,nextLevel = this.levels[nextLevelId], fragLastKbps = this.fragLastKbps;\n if (fragLastKbps && this.fragCurrent) {\n fetchdelay = this.fragCurrent.duration * nextLevel.bitrate / (1000 * fragLastKbps) + 1;\n } else {\n fetchdelay = 0;\n }\n } else {\n fetchdelay = 0;\n }\n //logger.log('fetchdelay:'+fetchdelay);\n // find buffer range that will be reached once new fragment will be fetched\n nextRange = this.getBufferRange(this.media.currentTime + fetchdelay);\n if (nextRange) {\n // we can flush buffer range following this one without stalling playback\n nextRange = this.followingBufferRange(nextRange);\n if (nextRange) {\n // flush position is the start position of this new buffer\n this.flushRange.push({start: nextRange.start, end: Number.POSITIVE_INFINITY});\n // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n var fragCurrent = this.fragCurrent;\n if (fragCurrent && fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n }\n }\n if (this.flushRange.length) {\n this.flushBufferCounter = 0;\n // trigger a sourceBuffer flush\n this.state = State.BUFFER_FLUSHING;\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n // speed up switching, trigger timer function\n this.tick();\n }\n }\n\n onMediaAttaching(data) {\n var media = this.media = data.media;\n // setup the media source\n var ms = this.mediaSource = new MediaSource();\n //Media Source listeners\n this.onmso = this.onMediaSourceOpen.bind(this);\n this.onmse = this.onMediaSourceEnded.bind(this);\n this.onmsc = this.onMediaSourceClose.bind(this);\n ms.addEventListener('sourceopen', this.onmso);\n ms.addEventListener('sourceended', this.onmse);\n ms.addEventListener('sourceclose', this.onmsc);\n // link video and media Source\n media.src = URL.createObjectURL(ms);\n }\n\n onMediaDetaching() {\n var media = this.media;\n if (media && media.ended) {\n logger.log('MSE detaching and video ended, reset startPosition');\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n // reset fragment loading counter on MSE detaching to avoid reporting FRAG_LOOP_LOADING_ERROR after error recovery\n var levels = this.levels;\n if (levels) {\n // reset fragment load counter\n levels.forEach(level => {\n if(level.details) {\n level.details.fragments.forEach(fragment => {\n fragment.loadCounter = undefined;\n });\n }\n });\n }\n var ms = this.mediaSource;\n if (ms) {\n if (ms.readyState === 'open') {\n try {\n // endOfStream could trigger exception if any sourcebuffer is in updating state\n // we don't really care about checking sourcebuffer state here,\n // as we are anyway detaching the MediaSource\n // let's just avoid this exception to propagate\n ms.endOfStream();\n } catch(err) {\n logger.warn(`onMediaDetaching:${err.message} while calling endOfStream`);\n }\n }\n ms.removeEventListener('sourceopen', this.onmso);\n ms.removeEventListener('sourceended', this.onmse);\n ms.removeEventListener('sourceclose', this.onmsc);\n // unlink MediaSource from video tag\n this.media.src = '';\n this.mediaSource = null;\n // remove video listeners\n if (media) {\n media.removeEventListener('seeking', this.onvseeking);\n media.removeEventListener('seeked', this.onvseeked);\n media.removeEventListener('loadedmetadata', this.onvmetadata);\n media.removeEventListener('ended', this.onvended);\n this.onvseeking = this.onvseeked = this.onvmetadata = null;\n }\n this.media = null;\n this.loadedmetadata = false;\n this.stop();\n }\n this.onmso = this.onmse = this.onmsc = null;\n this.hls.trigger(Event.MEDIA_DETACHED);\n }\n\n onMediaSeeking() {\n if (this.state === State.FRAG_LOADING) {\n // check if currently loaded fragment is inside buffer.\n //if outside, cancel fragment loading, otherwise do nothing\n if (this.bufferInfo(this.media.currentTime,this.config.maxBufferHole).len === 0) {\n logger.log('seeking outside of buffer while fragment load in progress, cancel fragment load');\n var fragCurrent = this.fragCurrent;\n if (fragCurrent) {\n if (fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n }\n this.fragPrevious = null;\n // switch to IDLE state to load new fragment\n this.state = State.IDLE;\n }\n } else if (this.state === State.ENDED) {\n // switch to IDLE state to check for potential new fragment\n this.state = State.IDLE;\n }\n if (this.media) {\n this.lastCurrentTime = this.media.currentTime;\n }\n // avoid reporting fragment loop loading error in case user is seeking several times on same position\n if (this.fragLoadIdx !== undefined) {\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n }\n // tick to speed up processing\n this.tick();\n }\n\n onMediaSeeked() {\n // tick to speed up FRAGMENT_PLAYING triggering\n this.tick();\n }\n\n onMediaMetadata() {\n var media = this.media,\n currentTime = media.currentTime;\n // only adjust currentTime if not equal to 0\n if (!currentTime && currentTime !== this.startPosition) {\n logger.log('onMediaMetadata: adjust currentTime to startPosition');\n media.currentTime = this.startPosition;\n }\n this.loadedmetadata = true;\n this.tick();\n }\n\n onMediaEnded() {\n logger.log('media ended');\n // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n\n onManifestParsed(data) {\n var aac = false, heaac = false, codecs;\n data.levels.forEach(level => {\n // detect if we have different kind of audio codecs used amongst playlists\n codecs = level.codecs;\n if (codecs) {\n if (codecs.indexOf('mp4a.40.2') !== -1) {\n aac = true;\n }\n if (codecs.indexOf('mp4a.40.5') !== -1) {\n heaac = true;\n }\n }\n });\n this.audiocodecswitch = (aac && heaac);\n if (this.audiocodecswitch) {\n logger.log('both AAC/HE-AAC audio found in levels; declaring audio codec as HE-AAC');\n }\n this.levels = data.levels;\n this.startLevelLoaded = false;\n this.startFragmentRequested = false;\n if (this.media && this.config.autoStartLoad) {\n this.startLoad();\n }\n }\n\n onLevelLoaded(data) {\n var newDetails = data.details,\n newLevelId = data.level,\n curLevel = this.levels[newLevelId],\n duration = newDetails.totalduration;\n\n logger.log(`level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}],duration:${duration}`);\n this.levelLastLoaded = newLevelId;\n\n if (newDetails.live) {\n var curDetails = curLevel.details;\n if (curDetails) {\n // we already have details for that level, merge them\n LevelHelper.mergeDetails(curDetails,newDetails);\n if (newDetails.PTSKnown) {\n logger.log(`live playlist sliding:${newDetails.fragments[0].start.toFixed(3)}`);\n } else {\n logger.log('live playlist - outdated PTS, unknown sliding');\n }\n } else {\n newDetails.PTSKnown = false;\n logger.log('live playlist - first load, unknown sliding');\n }\n } else {\n newDetails.PTSKnown = false;\n }\n // override level info\n curLevel.details = newDetails;\n this.hls.trigger(Event.LEVEL_UPDATED, { details: newDetails, level: newLevelId });\n\n // compute start position\n if (this.startLevelLoaded === false) {\n // if live playlist, set start position to be fragment N-this.config.liveSyncDurationCount (usually 3)\n if (newDetails.live) {\n this.startPosition = Math.max(0, duration - this.config.liveSyncDurationCount * newDetails.targetduration);\n }\n this.nextLoadPosition = this.startPosition;\n this.startLevelLoaded = true;\n }\n // only switch batck to IDLE state if we were waiting for level to start downloading a new fragment\n if (this.state === State.WAITING_LEVEL) {\n this.state = State.IDLE;\n }\n //trigger handler right now\n this.tick();\n }\n\n onKeyLoaded() {\n if (this.state === State.KEY_LOADING) {\n this.state = State.IDLE;\n this.tick();\n }\n }\n\n onFragLoaded(data) {\n var fragCurrent = this.fragCurrent;\n if (this.state === State.FRAG_LOADING &&\n fragCurrent &&\n data.frag.level === fragCurrent.level &&\n data.frag.sn === fragCurrent.sn) {\n if (this.fragBitrateTest === true) {\n // switch back to IDLE state ... we just loaded a fragment to determine adequate start bitrate and initialize autoswitch algo\n this.state = State.IDLE;\n this.fragBitrateTest = false;\n data.stats.tparsed = data.stats.tbuffered = performance.now();\n this.hls.trigger(Event.FRAG_BUFFERED, {stats: data.stats, frag: fragCurrent});\n } else {\n this.state = State.PARSING;\n // transmux the MPEG-TS data to ISO-BMFF segments\n this.stats = data.stats;\n var currentLevel = this.levels[this.level],\n details = currentLevel.details,\n duration = details.totalduration,\n start = fragCurrent.start,\n level = fragCurrent.level,\n sn = fragCurrent.sn,\n audioCodec = currentLevel.audioCodec;\n if(this.audioCodecSwap) {\n logger.log('swapping playlist audio codec');\n if(audioCodec === undefined) {\n audioCodec = this.lastAudioCodec;\n }\n if(audioCodec.indexOf('mp4a.40.5') !==-1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n logger.log(`Demuxing ${sn} of [${details.startSN} ,${details.endSN}],level ${level}`);\n this.demuxer.push(data.payload, audioCodec, currentLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata);\n }\n }\n this.fragLoadError = 0;\n }\n\n onFragParsingInitSegment(data) {\n if (this.state === State.PARSING) {\n // check if codecs have been explicitely defined in the master playlist for this level;\n // if yes use these ones instead of the ones parsed from the demux\n var audioCodec = this.levels[this.level].audioCodec, videoCodec = this.levels[this.level].videoCodec, sb;\n this.lastAudioCodec = data.audioCodec;\n if(audioCodec && this.audioCodecSwap) {\n logger.log('swapping playlist audio codec');\n if(audioCodec.indexOf('mp4a.40.5') !==-1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n logger.log(`playlist_level/init_segment codecs: video => ${videoCodec}/${data.videoCodec}; audio => ${audioCodec}/${data.audioCodec}`);\n // if playlist does not specify codecs, use codecs found while parsing fragment\n // if no codec found while parsing fragment, also set codec to undefined to avoid creating sourceBuffer\n if (audioCodec === undefined || data.audioCodec === undefined) {\n audioCodec = data.audioCodec;\n }\n\n if (videoCodec === undefined || data.videoCodec === undefined) {\n videoCodec = data.videoCodec;\n }\n // in case several audio codecs might be used, force HE-AAC for audio (some browsers don't support audio codec switch)\n //don't do it for mono streams ...\n var ua = navigator.userAgent.toLowerCase();\n if (this.audiocodecswitch &&\n data.audioChannelCount !== 1 &&\n ua.indexOf('android') === -1 &&\n ua.indexOf('firefox') === -1) {\n audioCodec = 'mp4a.40.5';\n }\n if (!this.sourceBuffer) {\n this.sourceBuffer = {};\n logger.log(`selected A/V codecs for sourceBuffers:${audioCodec},${videoCodec}`);\n // create source Buffer and link them to MediaSource\n if (audioCodec) {\n sb = this.sourceBuffer.audio = this.mediaSource.addSourceBuffer(`audio/mp4;codecs=${audioCodec}`);\n sb.addEventListener('updateend', this.onsbue);\n sb.addEventListener('error', this.onsbe);\n }\n if (videoCodec) {\n sb = this.sourceBuffer.video = this.mediaSource.addSourceBuffer(`video/mp4;codecs=${videoCodec}`);\n sb.addEventListener('updateend', this.onsbue);\n sb.addEventListener('error', this.onsbe);\n }\n }\n if (audioCodec) {\n this.mp4segments.push({type: 'audio', data: data.audioMoov});\n }\n if(videoCodec) {\n this.mp4segments.push({type: 'video', data: data.videoMoov});\n }\n //trigger handler right now\n this.tick();\n }\n }\n\n onFragParsingData(data) {\n if (this.state === State.PARSING) {\n this.tparse2 = Date.now();\n var level = this.levels[this.level],\n frag = this.fragCurrent;\n logger.log(`parsed ${data.type},PTS:[${data.startPTS.toFixed(3)},${data.endPTS.toFixed(3)}],DTS:[${data.startDTS.toFixed(3)}/${data.endDTS.toFixed(3)}],nb:${data.nb}`);\n var drift = LevelHelper.updateFragPTS(level.details,frag.sn,data.startPTS,data.endPTS);\n this.hls.trigger(Event.LEVEL_PTS_UPDATED, {details: level.details, level: this.level, drift: drift});\n\n this.mp4segments.push({type: data.type, data: data.moof});\n this.mp4segments.push({type: data.type, data: data.mdat});\n this.nextLoadPosition = data.endPTS;\n this.bufferRange.push({type: data.type, start: data.startPTS, end: data.endPTS, frag: frag});\n\n //trigger handler right now\n this.tick();\n } else {\n logger.warn(`not in PARSING state, ignoring FRAG_PARSING_DATA event`);\n }\n }\n\n onFragParsed() {\n if (this.state === State.PARSING) {\n this.state = State.PARSED;\n this.stats.tparsed = performance.now();\n //trigger handler right now\n this.tick();\n }\n }\n\n onError(data) {\n switch(data.details) {\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n if(!data.fatal) {\n var loadError = this.fragLoadError;\n if(loadError) {\n loadError++;\n } else {\n loadError=1;\n }\n if (loadError <= this.config.fragLoadingMaxRetry) {\n this.fragLoadError = loadError;\n // reset load counter to avoid frag loop loading error\n data.frag.loadCounter = 0;\n // exponential backoff capped to 64s\n var delay = Math.min(Math.pow(2,loadError-1)*this.config.fragLoadingRetryDelay,64000);\n logger.warn(`mediaController: frag loading failed, retry in ${delay} ms`);\n this.retryDate = performance.now() + delay;\n // retry loading state\n this.state = State.FRAG_LOADING_WAITING_RETRY;\n } else {\n logger.error(`mediaController: ${data.details} reaches max retry, redispatch as fatal ...`);\n // redispatch same error but with fatal set to true\n data.fatal = true;\n this.hls.trigger(Event.ERROR, data);\n this.state = State.ERROR;\n }\n }\n break;\n case ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n // if fatal error, stop processing, otherwise move to IDLE to retry loading\n logger.warn(`mediaController: ${data.details} while loading frag,switch to ${data.fatal ? 'ERROR' : 'IDLE'} state ...`);\n this.state = data.fatal ? State.ERROR : State.IDLE;\n break;\n default:\n break;\n }\n }\n\n onSBUpdateEnd() {\n //trigger handler right now\n if (this.state === State.APPENDING && this.mp4segments.length === 0) {\n var frag = this.fragCurrent, stats = this.stats;\n if (frag) {\n this.fragPrevious = frag;\n stats.tbuffered = performance.now();\n this.fragLastKbps = Math.round(8 * stats.length / (stats.tbuffered - stats.tfirst));\n this.hls.trigger(Event.FRAG_BUFFERED, {stats: stats, frag: frag});\n logger.log(`media buffered : ${this.timeRangesToString(this.media.buffered)}`);\n this.state = State.IDLE;\n }\n }\n this.tick();\n }\n\n_checkBuffer() {\n var media = this.media;\n if(media) {\n // compare readyState\n var readyState = media.readyState;\n // if ready state different from HAVE_NOTHING (numeric value 0), we are allowed to seek\n if(readyState) {\n // if seek after buffered defined, let's seek if within acceptable range\n var seekAfterBuffered = this.seekAfterBuffered;\n if(seekAfterBuffered) {\n if(media.duration >= seekAfterBuffered) {\n media.currentTime = seekAfterBuffered;\n this.seekAfterBuffered = undefined;\n }\n } else {\n var currentTime = media.currentTime,\n bufferInfo = this.bufferInfo(currentTime,0),\n isPlaying = !(media.paused || media.ended || media.seeking || readyState < 3),\n jumpThreshold = 0.2,\n playheadMoving = currentTime > media.playbackRate*this.lastCurrentTime;\n\n if (this.stalled && playheadMoving) {\n this.stalled = false;\n }\n\n // check buffer upfront\n // if less than 200ms is buffered, and media is playing but playhead is not moving,\n // and we have a new buffer range available upfront, let's seek to that one\n if(bufferInfo.len <= jumpThreshold) {\n if(playheadMoving || !isPlaying) {\n // playhead moving or media not playing\n jumpThreshold = 0;\n } else {\n // playhead not moving AND media playing\n logger.log('playback seems stuck');\n if(!this.stalled) {\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: false});\n this.stalled = true;\n }\n }\n // if we are below threshold, try to jump if next buffer range is close\n if(bufferInfo.len <= jumpThreshold) {\n // no buffer available @ currentTime, check if next buffer is close (more than 5ms diff but within a config.maxSeekHole second range)\n var nextBufferStart = bufferInfo.nextStart, delta = nextBufferStart-currentTime;\n if(nextBufferStart &&\n (delta < this.config.maxSeekHole) &&\n (delta > 0.005) &&\n !media.seeking) {\n // next buffer is close ! adjust currentTime to nextBufferStart\n // this will ensure effective video decoding\n logger.log(`adjust currentTime from ${currentTime} to ${nextBufferStart}`);\n media.currentTime = nextBufferStart;\n }\n }\n }\n }\n }\n }\n }\n\n swapAudioCodec() {\n this.audioCodecSwap = !this.audioCodecSwap;\n }\n\n onSBUpdateError(event) {\n logger.error(`sourceBuffer error:${event}`);\n this.state = State.ERROR;\n // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n // this error might not always be fatal (it is fatal if decode error is set, in that case\n // it will be followed by a mediaElement error ...)\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_APPENDING_ERROR, fatal: false, frag: this.fragCurrent});\n }\n\n timeRangesToString(r) {\n var log = '', len = r.length;\n for (var i=0; i 1) {\n setTimeout(this.tick, 1);\n }\n this.ticks = 0;\n }\n }\n\n doTick() {\n var pos, level, levelDetails, hls = this.hls;\n switch(this.state) {\n case State.ERROR:\n //don't do anything in error state to avoid breaking further ...\n break;\n case State.STARTING:\n // determine load level\n this.startLevel = hls.startLevel;\n if (this.startLevel === -1) {\n // -1 : guess start Level by doing a bitrate test by loading first fragment of lowest quality level\n this.startLevel = 0;\n this.fragBitrateTest = true;\n }\n // set new level to playlist loader : this will trigger start level load\n this.level = hls.nextLoadLevel = this.startLevel;\n this.state = State.WAITING_LEVEL;\n this.loadedmetadata = false;\n break;\n case State.IDLE:\n // if video detached or unbound exit loop\n if (!this.media) {\n break;\n }\n // determine next candidate fragment to be loaded, based on current position and\n // end of buffer position\n // ensure 60s of buffer upfront\n // if we have not yet loaded any fragment, start loading from start position\n if (this.loadedmetadata) {\n pos = this.media.currentTime;\n } else {\n pos = this.nextLoadPosition;\n }\n // determine next load level\n if (this.startFragmentRequested === false) {\n level = this.startLevel;\n } else {\n // we are not at playback start, get next load level from level Controller\n level = hls.nextLoadLevel;\n }\n var bufferInfo = this.bufferInfo(pos,this.config.maxBufferHole),\n bufferLen = bufferInfo.len,\n bufferEnd = bufferInfo.end,\n fragPrevious = this.fragPrevious,\n maxBufLen;\n // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n if ((this.levels[level]).hasOwnProperty('bitrate')) {\n maxBufLen = Math.max(8 * this.config.maxBufferSize / this.levels[level].bitrate, this.config.maxBufferLength);\n maxBufLen = Math.min(maxBufLen, this.config.maxMaxBufferLength);\n } else {\n maxBufLen = this.config.maxBufferLength;\n }\n // if buffer length is less than maxBufLen try to load a new fragment\n if (bufferLen < maxBufLen) {\n // set next load level : this will trigger a playlist load if needed\n hls.nextLoadLevel = level;\n this.level = level;\n levelDetails = this.levels[level].details;\n // if level info not retrieved yet, switch state and wait for level retrieval\n // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n if (typeof levelDetails === 'undefined' || levelDetails.live && this.levelLastLoaded !== level) {\n this.state = State.WAITING_LEVEL;\n break;\n }\n // find fragment index, contiguous with end of buffer position\n let fragments = levelDetails.fragments,\n fragLen = fragments.length,\n start = fragments[0].start,\n end = fragments[fragLen-1].start + fragments[fragLen-1].duration,\n frag;\n\n // in case of live playlist we need to ensure that requested position is not located before playlist start\n if (levelDetails.live) {\n // check if requested position is within seekable boundaries :\n //logger.log(`start/pos/bufEnd/seeking:${start.toFixed(3)}/${pos.toFixed(3)}/${bufferEnd.toFixed(3)}/${this.media.seeking}`);\n if (bufferEnd < Math.max(start,end-this.config.liveMaxLatencyDurationCount*levelDetails.targetduration)) {\n this.seekAfterBuffered = start + Math.max(0, levelDetails.totalduration - this.config.liveSyncDurationCount * levelDetails.targetduration);\n logger.log(`buffer end: ${bufferEnd} is located too far from the end of live sliding playlist, media position will be reseted to: ${this.seekAfterBuffered.toFixed(3)}`);\n bufferEnd = this.seekAfterBuffered;\n }\n if (this.startFragmentRequested && !levelDetails.PTSKnown) {\n /* we are switching level on live playlist, but we don't have any PTS info for that quality level ...\n try to load frag matching with next SN.\n even if SN are not synchronized between playlists, loading this frag will help us\n compute playlist sliding and find the right one after in case it was not the right consecutive one */\n if (fragPrevious) {\n var targetSN = fragPrevious.sn + 1;\n if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n frag = fragments[targetSN - levelDetails.startSN];\n logger.log(`live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n }\n }\n if (!frag) {\n /* we have no idea about which fragment should be loaded.\n so let's load mid fragment. it will help computing playlist sliding and find the right one\n */\n frag = fragments[Math.min(fragLen - 1, Math.round(fragLen / 2))];\n logger.log(`live playlist, switching playlist, unknown, load middle frag : ${frag.sn}`);\n }\n }\n } else {\n // VoD playlist: if bufferEnd before start of playlist, load first fragment\n if (bufferEnd < start) {\n frag = fragments[0];\n }\n }\n if (!frag) {\n var foundFrag;\n if (bufferEnd < end) {\n foundFrag = BinarySearch.search(fragments, (candidate) => {\n //logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n // offset should be within fragment boundary\n if ((candidate.start + candidate.duration) <= bufferEnd) {\n return 1;\n }\n else if (candidate.start > bufferEnd) {\n return -1;\n }\n return 0;\n });\n } else {\n // reach end of playlist\n foundFrag = fragments[fragLen-1];\n }\n if (foundFrag) {\n frag = foundFrag;\n start = foundFrag.start;\n //logger.log('find SN matching with pos:' + bufferEnd + ':' + frag.sn);\n if (fragPrevious && frag.level === fragPrevious.level && frag.sn === fragPrevious.sn) {\n if (frag.sn < levelDetails.endSN) {\n frag = fragments[frag.sn + 1 - levelDetails.startSN];\n logger.log(`SN just loaded, load next one: ${frag.sn}`);\n } else {\n // have we reached end of VOD playlist ?\n if (!levelDetails.live) {\n var mediaSource = this.mediaSource;\n if (mediaSource) {\n switch(mediaSource.readyState) {\n case 'open':\n var sb = this.sourceBuffer;\n if (!((sb.audio && sb.audio.updating) || (sb.video && sb.video.updating))) {\n logger.log('all media data available, signal endOfStream() to MediaSource and stop loading fragment');\n //Notify the media element that it now has all of the media data\n mediaSource.endOfStream();\n this.state = State.ENDED;\n }\n break;\n case 'ended':\n logger.log('all media data available and mediaSource ended, stop loading fragment');\n this.state = State.ENDED;\n break;\n default:\n break;\n }\n }\n }\n frag = null;\n }\n }\n }\n }\n if(frag) {\n //logger.log(' loading frag ' + i +',pos/bufEnd:' + pos.toFixed(3) + '/' + bufferEnd.toFixed(3));\n if ((frag.decryptdata.uri != null) && (frag.decryptdata.key == null)) {\n logger.log(`Loading key for ${frag.sn} of [${levelDetails.startSN} ,${levelDetails.endSN}],level ${level}`);\n this.state = State.KEY_LOADING;\n hls.trigger(Event.KEY_LOADING, {frag: frag});\n } else {\n logger.log(`Loading ${frag.sn} of [${levelDetails.startSN} ,${levelDetails.endSN}],level ${level}, currentTime:${pos},bufferEnd:${bufferEnd.toFixed(3)}`);\n frag.autoLevel = hls.autoLevelEnabled;\n if (this.levels.length > 1) {\n frag.expectedLen = Math.round(frag.duration * this.levels[level].bitrate / 8);\n frag.trequest = performance.now();\n }\n // ensure that we are not reloading the same fragments in loop ...\n if (this.fragLoadIdx !== undefined) {\n this.fragLoadIdx++;\n } else {\n this.fragLoadIdx = 0;\n }\n if (frag.loadCounter) {\n frag.loadCounter++;\n let maxThreshold = this.config.fragLoadingLoopThreshold;\n // if this frag has already been loaded 3 times, and if it has been reloaded recently\n if (frag.loadCounter > maxThreshold && (Math.abs(this.fragLoadIdx - frag.loadIdx) < maxThreshold)) {\n hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_LOOP_LOADING_ERROR, fatal: false, frag: frag});\n return;\n }\n } else {\n frag.loadCounter = 1;\n }\n frag.loadIdx = this.fragLoadIdx;\n this.fragCurrent = frag;\n this.startFragmentRequested = true;\n hls.trigger(Event.FRAG_LOADING, {frag: frag});\n this.state = State.FRAG_LOADING;\n }\n }\n }\n break;\n case State.WAITING_LEVEL:\n level = this.levels[this.level];\n // check if playlist is already loaded\n if (level && level.details) {\n this.state = State.IDLE;\n }\n break;\n case State.FRAG_LOADING:\n /*\n monitor fragment retrieval time...\n we compute expected time of arrival of the complete fragment.\n we compare it to expected time of buffer starvation\n */\n let v = this.media,frag = this.fragCurrent;\n /* only monitor frag retrieval time if\n (video not paused OR first fragment being loaded) AND autoswitching enabled AND not lowest level AND multiple levels */\n if (v && (!v.paused || this.loadedmetadata === false) && frag.autoLevel && this.level && this.levels.length > 1) {\n var requestDelay = performance.now() - frag.trequest;\n // monitor fragment load progress after half of expected fragment duration,to stabilize bitrate\n if (requestDelay > (500 * frag.duration)) {\n var loadRate = frag.loaded * 1000 / requestDelay; // byte/s\n if (frag.expectedLen < frag.loaded) {\n frag.expectedLen = frag.loaded;\n }\n pos = v.currentTime;\n var fragLoadedDelay = (frag.expectedLen - frag.loaded) / loadRate;\n var bufferStarvationDelay = this.bufferInfo(pos,this.config.maxBufferHole).end - pos;\n var fragLevelNextLoadedDelay = frag.duration * this.levels[hls.nextLoadLevel].bitrate / (8 * loadRate); //bps/Bps\n /* if we have less than 2 frag duration in buffer and if frag loaded delay is greater than buffer starvation delay\n ... and also bigger than duration needed to load fragment at next level ...*/\n if (bufferStarvationDelay < (2 * frag.duration) && fragLoadedDelay > bufferStarvationDelay && fragLoadedDelay > fragLevelNextLoadedDelay) {\n // abort fragment loading ...\n logger.warn('loading too slow, abort fragment loading');\n logger.log(`fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay :${fragLoadedDelay.toFixed(1)}/${bufferStarvationDelay.toFixed(1)}/${fragLevelNextLoadedDelay.toFixed(1)}`);\n //abort fragment loading\n frag.loader.abort();\n hls.trigger(Event.FRAG_LOAD_EMERGENCY_ABORTED, {frag: frag});\n // switch back to IDLE state to request new fragment at lowest level\n this.state = State.IDLE;\n }\n }\n }\n break;\n case State.FRAG_LOADING_WAITING_RETRY:\n var now = performance.now();\n var retryDate = this.retryDate;\n var media = this.media;\n var isSeeking = media && media.seeking;\n // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n if(!retryDate || (now >= retryDate) || isSeeking) {\n logger.log(`mediaController: retryDate reached, switch back to IDLE state`);\n this.state = State.IDLE;\n }\n break;\n case State.PARSING:\n // nothing to do, wait for fragment being parsed\n break;\n case State.PARSED:\n case State.APPENDING:\n if (this.sourceBuffer) {\n if (this.media.error) {\n logger.error('trying to append although a media error occured, switch to ERROR state');\n this.state = State.ERROR;\n return;\n }\n // if MP4 segment appending in progress nothing to do\n else if ((this.sourceBuffer.audio && this.sourceBuffer.audio.updating) ||\n (this.sourceBuffer.video && this.sourceBuffer.video.updating)) {\n //logger.log('sb append in progress');\n // check if any MP4 segments left to append\n } else if (this.mp4segments.length) {\n var segment = this.mp4segments.shift();\n try {\n //logger.log(`appending ${segment.type} SB, size:${segment.data.length});\n this.sourceBuffer[segment.type].appendBuffer(segment.data);\n this.appendError = 0;\n } catch(err) {\n // in case any error occured while appending, put back segment in mp4segments table\n logger.error(`error while trying to append buffer:${err.message},try appending later`);\n this.mp4segments.unshift(segment);\n // just discard QuotaExceededError for now, and wait for the natural browser buffer eviction\n //http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n if(err.code !== 22) {\n if (this.appendError) {\n this.appendError++;\n } else {\n this.appendError = 1;\n }\n var event = {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_APPEND_ERROR, frag: this.fragCurrent};\n /* with UHD content, we could get loop of quota exceeded error until\n browser is able to evict some data from sourcebuffer. retrying help recovering this\n */\n if (this.appendError > this.config.appendErrorMaxRetry) {\n logger.log(`fail ${this.config.appendErrorMaxRetry} times to append segment in sourceBuffer`);\n event.fatal = true;\n hls.trigger(Event.ERROR, event);\n this.state = State.ERROR;\n return;\n } else {\n event.fatal = false;\n hls.trigger(Event.ERROR, event);\n }\n }\n }\n this.state = State.APPENDING;\n }\n } else {\n // sourceBuffer undefined, switch back to IDLE state\n this.state = State.IDLE;\n }\n break;\n case State.BUFFER_FLUSHING:\n // loop through all buffer ranges to flush\n while(this.flushRange.length) {\n var range = this.flushRange[0];\n // flushBuffer will abort any buffer append in progress and flush Audio/Video Buffer\n if (this.flushBuffer(range.start, range.end)) {\n // range flushed, remove from flush array\n this.flushRange.shift();\n } else {\n // flush in progress, come back later\n break;\n }\n }\n if (this.flushRange.length === 0) {\n // handle end of immediate switching if needed\n if (this.immediateSwitch) {\n this.immediateLevelSwitchEnd();\n }\n // move to IDLE once flush complete. this should trigger new fragment loading\n this.state = State.IDLE;\n // reset reference to frag\n this.fragPrevious = null;\n }\n /* if not everything flushed, stay in BUFFER_FLUSHING state. we will come back here\n each time sourceBuffer updateend() callback will be triggered\n */\n break;\n case State.ENDED:\n break;\n default:\n break;\n }\n // check buffer\n this._checkBuffer();\n // check/update current fragment\n this._checkFragmentChanged();\n }\n\n\n bufferInfo(pos,maxHoleDuration) {\n var media = this.media,\n vbuffered = media.buffered,\n buffered = [],i;\n for (i = 0; i < vbuffered.length; i++) {\n buffered.push({start: vbuffered.start(i), end: vbuffered.end(i)});\n }\n return this.bufferedInfo(buffered,pos,maxHoleDuration);\n }\n\n bufferedInfo(buffered,pos,maxHoleDuration) {\n var buffered2 = [],\n // bufferStart and bufferEnd are buffer boundaries around current video position\n bufferLen,bufferStart, bufferEnd,bufferStartNext,i;\n // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n buffered.sort(function (a, b) {\n var diff = a.start - b.start;\n if (diff) {\n return diff;\n } else {\n return b.end - a.end;\n }\n });\n // there might be some small holes between buffer time range\n // consider that holes smaller than maxHoleDuration are irrelevant and build another\n // buffer time range representations that discards those holes\n for (i = 0; i < buffered.length; i++) {\n var buf2len = buffered2.length;\n if(buf2len) {\n var buf2end = buffered2[buf2len - 1].end;\n // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n if((buffered[i].start - buf2end) < maxHoleDuration) {\n // merge overlapping time ranges\n // update lastRange.end only if smaller than item.end\n // e.g. [ 1, 15] with [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n // whereas [ 1, 8] with [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n if(buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end;\n }\n } else {\n // big hole\n buffered2.push(buffered[i]);\n }\n } else {\n // first value\n buffered2.push(buffered[i]);\n }\n }\n for (i = 0, bufferLen = 0, bufferStart = bufferEnd = pos; i < buffered2.length; i++) {\n var start = buffered2[i].start,\n end = buffered2[i].end;\n //logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n if ((pos + maxHoleDuration) >= start && pos < end) {\n // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n bufferStart = start;\n bufferEnd = end + maxHoleDuration;\n bufferLen = bufferEnd - pos;\n } else if ((pos + maxHoleDuration) < start) {\n bufferStartNext = start;\n break;\n }\n }\n return {len: bufferLen, start: bufferStart, end: bufferEnd, nextStart : bufferStartNext};\n }\n\n getBufferRange(position) {\n var i, range;\n for (i = this.bufferRange.length - 1; i >=0; i--) {\n range = this.bufferRange[i];\n if (position >= range.start && position <= range.end) {\n return range;\n }\n }\n return null;\n }\n\n get currentLevel() {\n if (this.media) {\n var range = this.getBufferRange(this.media.currentTime);\n if (range) {\n return range.frag.level;\n }\n }\n return -1;\n }\n\n get nextBufferRange() {\n if (this.media) {\n // first get end range of current fragment\n return this.followingBufferRange(this.getBufferRange(this.media.currentTime));\n } else {\n return null;\n }\n }\n\n followingBufferRange(range) {\n if (range) {\n // try to get range of next fragment (500ms after this range)\n return this.getBufferRange(range.end + 0.5);\n }\n return null;\n }\n\n get nextLevel() {\n var range = this.nextBufferRange;\n if (range) {\n return range.frag.level;\n } else {\n return -1;\n }\n }\n\n isBuffered(position) {\n var v = this.media, buffered = v.buffered;\n for (var i = 0; i < buffered.length; i++) {\n if (position >= buffered.start(i) && position <= buffered.end(i)) {\n return true;\n }\n }\n return false;\n }\n\n _checkFragmentChanged() {\n var rangeCurrent, currentTime, video = this.media;\n if (video && video.seeking === false) {\n currentTime = video.currentTime;\n /* if video element is in seeked state, currentTime can only increase.\n (assuming that playback rate is positive ...)\n As sometimes currentTime jumps back to zero after a\n media decode error, check this, to avoid seeking back to\n wrong position after a media decode error\n */\n if(currentTime > video.playbackRate*this.lastCurrentTime) {\n this.lastCurrentTime = currentTime;\n }\n if (this.isBuffered(currentTime)) {\n rangeCurrent = this.getBufferRange(currentTime);\n } else if (this.isBuffered(currentTime + 0.1)) {\n /* ensure that FRAG_CHANGED event is triggered at startup,\n when first video frame is displayed and playback is paused.\n add a tolerance of 100ms, in case current position is not buffered,\n check if current pos+100ms is buffered and use that buffer range\n for FRAG_CHANGED event reporting */\n rangeCurrent = this.getBufferRange(currentTime + 0.1);\n }\n if (rangeCurrent) {\n var fragPlaying = rangeCurrent.frag;\n if (fragPlaying !== this.fragPlaying) {\n this.fragPlaying = fragPlaying;\n this.hls.trigger(Event.FRAG_CHANGED, {frag: fragPlaying});\n }\n }\n }\n }\n\n /*\n abort any buffer append in progress, and flush all buffered data\n return true once everything has been flushed.\n sourceBuffer.abort() and sourceBuffer.remove() are asynchronous operations\n the idea is to call this function from tick() timer and call it again until all resources have been cleaned\n the timer is rearmed upon sourceBuffer updateend() event, so this should be optimal\n */\n flushBuffer(startOffset, endOffset) {\n var sb, i, bufStart, bufEnd, flushStart, flushEnd;\n //logger.log('flushBuffer,pos/start/end: ' + this.media.currentTime + '/' + startOffset + '/' + endOffset);\n // safeguard to avoid infinite looping\n if (this.flushBufferCounter++ < (2 * this.bufferRange.length) && this.sourceBuffer) {\n for (var type in this.sourceBuffer) {\n sb = this.sourceBuffer[type];\n if (!sb.updating) {\n for (i = 0; i < sb.buffered.length; i++) {\n bufStart = sb.buffered.start(i);\n bufEnd = sb.buffered.end(i);\n // workaround firefox not able to properly flush multiple buffered range.\n if (navigator.userAgent.toLowerCase().indexOf('firefox') !== -1 && endOffset === Number.POSITIVE_INFINITY) {\n flushStart = startOffset;\n flushEnd = endOffset;\n } else {\n flushStart = Math.max(bufStart, startOffset);\n flushEnd = Math.min(bufEnd, endOffset);\n }\n /* sometimes sourcebuffer.remove() does not flush\n the exact expected time range.\n to avoid rounding issues/infinite loop,\n only flush buffer range of length greater than 500ms.\n */\n if (Math.min(flushEnd,bufEnd) - flushStart > 0.5) {\n logger.log(`flush ${type} [${flushStart},${flushEnd}], of [${bufStart},${bufEnd}], pos:${this.media.currentTime}`);\n sb.remove(flushStart, flushEnd);\n return false;\n }\n }\n } else {\n //logger.log('abort ' + type + ' append in progress');\n // this will abort any appending in progress\n //sb.abort();\n return false;\n }\n }\n } else {\n logger.warn('abort flushing too many retries');\n }\n\n /* after successful buffer flushing, rebuild buffer Range array\n loop through existing buffer range and check if\n corresponding range is still buffered. only push to new array already buffered range\n */\n var newRange = [],range;\n for (i = 0; i < this.bufferRange.length; i++) {\n range = this.bufferRange[i];\n if (this.isBuffered((range.start + range.end) / 2)) {\n newRange.push(range);\n }\n }\n this.bufferRange = newRange;\n logger.log('buffer flushed');\n // everything flushed !\n return true;\n }\n\n /*\n on immediate level switch :\n - pause playback if playing\n - cancel any pending load request\n - and trigger a buffer flush\n */\n immediateLevelSwitch() {\n logger.log('immediateLevelSwitch');\n if (!this.immediateSwitch) {\n this.immediateSwitch = true;\n this.previouslyPaused = this.media.paused;\n this.media.pause();\n }\n var fragCurrent = this.fragCurrent;\n if (fragCurrent && fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n // flush everything\n this.flushBufferCounter = 0;\n this.flushRange.push({start: 0, end: Number.POSITIVE_INFINITY});\n // trigger a sourceBuffer flush\n this.state = State.BUFFER_FLUSHING;\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n // speed up switching, trigger timer function\n this.tick();\n }\n\n /*\n on immediate level switch end, after new fragment has been buffered :\n - nudge video decoder by slightly adjusting video currentTime\n - resume the playback if needed\n */\n immediateLevelSwitchEnd() {\n this.immediateSwitch = false;\n this.media.currentTime -= 0.0001;\n if (!this.previouslyPaused) {\n this.media.play();\n }\n }\n\n nextLevelSwitch() {\n /* try to switch ASAP without breaking video playback :\n in order to ensure smooth but quick level switching,\n we need to find the next flushable buffer range\n we should take into account new segment fetch time\n */\n var fetchdelay, currentRange, nextRange;\n currentRange = this.getBufferRange(this.media.currentTime);\n if (currentRange) {\n // flush buffer preceding current fragment (flush until current fragment start offset)\n // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n this.flushRange.push({start: 0, end: currentRange.start - 1});\n }\n if (!this.media.paused) {\n // add a safety delay of 1s\n var nextLevelId = this.hls.nextLoadLevel,nextLevel = this.levels[nextLevelId], fragLastKbps = this.fragLastKbps;\n if (fragLastKbps && this.fragCurrent) {\n fetchdelay = this.fragCurrent.duration * nextLevel.bitrate / (1000 * fragLastKbps) + 1;\n } else {\n fetchdelay = 0;\n }\n } else {\n fetchdelay = 0;\n }\n //logger.log('fetchdelay:'+fetchdelay);\n // find buffer range that will be reached once new fragment will be fetched\n nextRange = this.getBufferRange(this.media.currentTime + fetchdelay);\n if (nextRange) {\n // we can flush buffer range following this one without stalling playback\n nextRange = this.followingBufferRange(nextRange);\n if (nextRange) {\n // flush position is the start position of this new buffer\n this.flushRange.push({start: nextRange.start, end: Number.POSITIVE_INFINITY});\n // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n var fragCurrent = this.fragCurrent;\n if (fragCurrent && fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n }\n }\n if (this.flushRange.length) {\n this.flushBufferCounter = 0;\n // trigger a sourceBuffer flush\n this.state = State.BUFFER_FLUSHING;\n // increase fragment load Index to avoid frag loop loading error after buffer flush\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n // speed up switching, trigger timer function\n this.tick();\n }\n }\n\n onMediaAttaching(data) {\n var media = this.media = data.media;\n // setup the media source\n var ms = this.mediaSource = new MediaSource();\n //Media Source listeners\n this.onmso = this.onMediaSourceOpen.bind(this);\n this.onmse = this.onMediaSourceEnded.bind(this);\n this.onmsc = this.onMediaSourceClose.bind(this);\n ms.addEventListener('sourceopen', this.onmso);\n ms.addEventListener('sourceended', this.onmse);\n ms.addEventListener('sourceclose', this.onmsc);\n // link video and media Source\n media.src = URL.createObjectURL(ms);\n }\n\n onMediaDetaching() {\n var media = this.media;\n if (media && media.ended) {\n logger.log('MSE detaching and video ended, reset startPosition');\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n // reset fragment loading counter on MSE detaching to avoid reporting FRAG_LOOP_LOADING_ERROR after error recovery\n var levels = this.levels;\n if (levels) {\n // reset fragment load counter\n levels.forEach(level => {\n if(level.details) {\n level.details.fragments.forEach(fragment => {\n fragment.loadCounter = undefined;\n });\n }\n });\n }\n var ms = this.mediaSource;\n if (ms) {\n if (ms.readyState === 'open') {\n try {\n // endOfStream could trigger exception if any sourcebuffer is in updating state\n // we don't really care about checking sourcebuffer state here,\n // as we are anyway detaching the MediaSource\n // let's just avoid this exception to propagate\n ms.endOfStream();\n } catch(err) {\n logger.warn(`onMediaDetaching:${err.message} while calling endOfStream`);\n }\n }\n ms.removeEventListener('sourceopen', this.onmso);\n ms.removeEventListener('sourceended', this.onmse);\n ms.removeEventListener('sourceclose', this.onmsc);\n // unlink MediaSource from video tag\n this.media.src = '';\n this.mediaSource = null;\n // remove video listeners\n if (media) {\n media.removeEventListener('seeking', this.onvseeking);\n media.removeEventListener('seeked', this.onvseeked);\n media.removeEventListener('loadedmetadata', this.onvmetadata);\n media.removeEventListener('ended', this.onvended);\n this.onvseeking = this.onvseeked = this.onvmetadata = null;\n }\n this.media = null;\n this.loadedmetadata = false;\n this.stop();\n }\n this.onmso = this.onmse = this.onmsc = null;\n this.hls.trigger(Event.MEDIA_DETACHED);\n }\n\n onMediaSeeking() {\n if (this.state === State.FRAG_LOADING) {\n // check if currently loaded fragment is inside buffer.\n //if outside, cancel fragment loading, otherwise do nothing\n if (this.bufferInfo(this.media.currentTime,this.config.maxBufferHole).len === 0) {\n logger.log('seeking outside of buffer while fragment load in progress, cancel fragment load');\n var fragCurrent = this.fragCurrent;\n if (fragCurrent) {\n if (fragCurrent.loader) {\n fragCurrent.loader.abort();\n }\n this.fragCurrent = null;\n }\n this.fragPrevious = null;\n // switch to IDLE state to load new fragment\n this.state = State.IDLE;\n }\n } else if (this.state === State.ENDED) {\n // switch to IDLE state to check for potential new fragment\n this.state = State.IDLE;\n }\n if (this.media) {\n this.lastCurrentTime = this.media.currentTime;\n }\n // avoid reporting fragment loop loading error in case user is seeking several times on same position\n if (this.fragLoadIdx !== undefined) {\n this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold;\n }\n // tick to speed up processing\n this.tick();\n }\n\n onMediaSeeked() {\n // tick to speed up FRAGMENT_PLAYING triggering\n this.tick();\n }\n\n onMediaMetadata() {\n var media = this.media,\n currentTime = media.currentTime;\n // only adjust currentTime if not equal to 0\n if (!currentTime && currentTime !== this.startPosition) {\n logger.log('onMediaMetadata: adjust currentTime to startPosition');\n media.currentTime = this.startPosition;\n }\n this.loadedmetadata = true;\n this.tick();\n }\n\n onMediaEnded() {\n logger.log('media ended');\n // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n\n onManifestParsed(data) {\n var aac = false, heaac = false, codecs;\n data.levels.forEach(level => {\n // detect if we have different kind of audio codecs used amongst playlists\n codecs = level.codecs;\n if (codecs) {\n if (codecs.indexOf('mp4a.40.2') !== -1) {\n aac = true;\n }\n if (codecs.indexOf('mp4a.40.5') !== -1) {\n heaac = true;\n }\n }\n });\n this.audiocodecswitch = (aac && heaac);\n if (this.audiocodecswitch) {\n logger.log('both AAC/HE-AAC audio found in levels; declaring audio codec as HE-AAC');\n }\n this.levels = data.levels;\n this.startLevelLoaded = false;\n this.startFragmentRequested = false;\n if (this.media && this.config.autoStartLoad) {\n this.startLoad();\n }\n }\n\n onLevelLoaded(data) {\n var newDetails = data.details,\n newLevelId = data.level,\n curLevel = this.levels[newLevelId],\n duration = newDetails.totalduration;\n\n logger.log(`level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}],duration:${duration}`);\n this.levelLastLoaded = newLevelId;\n\n if (newDetails.live) {\n var curDetails = curLevel.details;\n if (curDetails) {\n // we already have details for that level, merge them\n LevelHelper.mergeDetails(curDetails,newDetails);\n if (newDetails.PTSKnown) {\n logger.log(`live playlist sliding:${newDetails.fragments[0].start.toFixed(3)}`);\n } else {\n logger.log('live playlist - outdated PTS, unknown sliding');\n }\n } else {\n newDetails.PTSKnown = false;\n logger.log('live playlist - first load, unknown sliding');\n }\n } else {\n newDetails.PTSKnown = false;\n }\n // override level info\n curLevel.details = newDetails;\n this.hls.trigger(Event.LEVEL_UPDATED, { details: newDetails, level: newLevelId });\n\n // compute start position\n if (this.startLevelLoaded === false) {\n // if live playlist, set start position to be fragment N-this.config.liveSyncDurationCount (usually 3)\n if (newDetails.live) {\n this.startPosition = Math.max(0, duration - this.config.liveSyncDurationCount * newDetails.targetduration);\n }\n this.nextLoadPosition = this.startPosition;\n this.startLevelLoaded = true;\n }\n // only switch batck to IDLE state if we were waiting for level to start downloading a new fragment\n if (this.state === State.WAITING_LEVEL) {\n this.state = State.IDLE;\n }\n //trigger handler right now\n this.tick();\n }\n\n onKeyLoaded() {\n if (this.state === State.KEY_LOADING) {\n this.state = State.IDLE;\n this.tick();\n }\n }\n\n onFragLoaded(data) {\n var fragCurrent = this.fragCurrent;\n if (this.state === State.FRAG_LOADING &&\n fragCurrent &&\n data.frag.level === fragCurrent.level &&\n data.frag.sn === fragCurrent.sn) {\n if (this.fragBitrateTest === true) {\n // switch back to IDLE state ... we just loaded a fragment to determine adequate start bitrate and initialize autoswitch algo\n this.state = State.IDLE;\n this.fragBitrateTest = false;\n data.stats.tparsed = data.stats.tbuffered = performance.now();\n this.hls.trigger(Event.FRAG_BUFFERED, {stats: data.stats, frag: fragCurrent});\n } else {\n this.state = State.PARSING;\n // transmux the MPEG-TS data to ISO-BMFF segments\n this.stats = data.stats;\n var currentLevel = this.levels[this.level],\n details = currentLevel.details,\n duration = details.totalduration,\n start = fragCurrent.start,\n level = fragCurrent.level,\n sn = fragCurrent.sn,\n audioCodec = currentLevel.audioCodec;\n if(this.audioCodecSwap) {\n logger.log('swapping playlist audio codec');\n if(audioCodec === undefined) {\n audioCodec = this.lastAudioCodec;\n }\n if(audioCodec.indexOf('mp4a.40.5') !==-1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n logger.log(`Demuxing ${sn} of [${details.startSN} ,${details.endSN}],level ${level}`);\n this.demuxer.push(data.payload, audioCodec, currentLevel.videoCodec, start, fragCurrent.cc, level, sn, duration, fragCurrent.decryptdata);\n }\n }\n this.fragLoadError = 0;\n }\n\n onFragParsingInitSegment(data) {\n if (this.state === State.PARSING) {\n // check if codecs have been explicitely defined in the master playlist for this level;\n // if yes use these ones instead of the ones parsed from the demux\n var audioCodec = this.levels[this.level].audioCodec, videoCodec = this.levels[this.level].videoCodec, sb;\n this.lastAudioCodec = data.audioCodec;\n if(audioCodec && this.audioCodecSwap) {\n logger.log('swapping playlist audio codec');\n if(audioCodec.indexOf('mp4a.40.5') !==-1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n logger.log(`playlist_level/init_segment codecs: video => ${videoCodec}/${data.videoCodec}; audio => ${audioCodec}/${data.audioCodec}`);\n // if playlist does not specify codecs, use codecs found while parsing fragment\n // if no codec found while parsing fragment, also set codec to undefined to avoid creating sourceBuffer\n if (audioCodec === undefined || data.audioCodec === undefined) {\n audioCodec = data.audioCodec;\n }\n\n if (videoCodec === undefined || data.videoCodec === undefined) {\n videoCodec = data.videoCodec;\n }\n // in case several audio codecs might be used, force HE-AAC for audio (some browsers don't support audio codec switch)\n //don't do it for mono streams ...\n var ua = navigator.userAgent.toLowerCase();\n if (this.audiocodecswitch &&\n data.audioChannelCount !== 1 &&\n ua.indexOf('android') === -1 &&\n ua.indexOf('firefox') === -1) {\n audioCodec = 'mp4a.40.5';\n }\n if (!this.sourceBuffer) {\n this.sourceBuffer = {};\n logger.log(`selected A/V codecs for sourceBuffers:${audioCodec},${videoCodec}`);\n // create source Buffer and link them to MediaSource\n if (audioCodec) {\n sb = this.sourceBuffer.audio = this.mediaSource.addSourceBuffer(`audio/mp4;codecs=${audioCodec}`);\n sb.addEventListener('updateend', this.onsbue);\n sb.addEventListener('error', this.onsbe);\n }\n if (videoCodec) {\n sb = this.sourceBuffer.video = this.mediaSource.addSourceBuffer(`video/mp4;codecs=${videoCodec}`);\n sb.addEventListener('updateend', this.onsbue);\n sb.addEventListener('error', this.onsbe);\n }\n }\n if (audioCodec) {\n this.mp4segments.push({type: 'audio', data: data.audioMoov});\n }\n if(videoCodec) {\n this.mp4segments.push({type: 'video', data: data.videoMoov});\n }\n //trigger handler right now\n this.tick();\n }\n }\n\n onFragParsingData(data) {\n if (this.state === State.PARSING) {\n this.tparse2 = Date.now();\n var level = this.levels[this.level],\n frag = this.fragCurrent;\n logger.log(`parsed ${data.type},PTS:[${data.startPTS.toFixed(3)},${data.endPTS.toFixed(3)}],DTS:[${data.startDTS.toFixed(3)}/${data.endDTS.toFixed(3)}],nb:${data.nb}`);\n var drift = LevelHelper.updateFragPTS(level.details,frag.sn,data.startPTS,data.endPTS);\n this.hls.trigger(Event.LEVEL_PTS_UPDATED, {details: level.details, level: this.level, drift: drift});\n\n this.mp4segments.push({type: data.type, data: data.moof});\n this.mp4segments.push({type: data.type, data: data.mdat});\n this.nextLoadPosition = data.endPTS;\n this.bufferRange.push({type: data.type, start: data.startPTS, end: data.endPTS, frag: frag});\n\n //trigger handler right now\n this.tick();\n } else {\n logger.warn(`not in PARSING state, ignoring FRAG_PARSING_DATA event`);\n }\n }\n\n onFragParsed() {\n if (this.state === State.PARSING) {\n this.state = State.PARSED;\n this.stats.tparsed = performance.now();\n //trigger handler right now\n this.tick();\n }\n }\n\n onError(data) {\n switch(data.details) {\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n if(!data.fatal) {\n var loadError = this.fragLoadError;\n if(loadError) {\n loadError++;\n } else {\n loadError=1;\n }\n if (loadError <= this.config.fragLoadingMaxRetry) {\n this.fragLoadError = loadError;\n // reset load counter to avoid frag loop loading error\n data.frag.loadCounter = 0;\n // exponential backoff capped to 64s\n var delay = Math.min(Math.pow(2,loadError-1)*this.config.fragLoadingRetryDelay,64000);\n logger.warn(`mediaController: frag loading failed, retry in ${delay} ms`);\n this.retryDate = performance.now() + delay;\n // retry loading state\n this.state = State.FRAG_LOADING_WAITING_RETRY;\n } else {\n logger.error(`mediaController: ${data.details} reaches max retry, redispatch as fatal ...`);\n // redispatch same error but with fatal set to true\n data.fatal = true;\n this.hls.trigger(Event.ERROR, data);\n this.state = State.ERROR;\n }\n }\n break;\n case ErrorDetails.FRAG_LOOP_LOADING_ERROR:\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n // if fatal error, stop processing, otherwise move to IDLE to retry loading\n logger.warn(`mediaController: ${data.details} while loading frag,switch to ${data.fatal ? 'ERROR' : 'IDLE'} state ...`);\n this.state = data.fatal ? State.ERROR : State.IDLE;\n break;\n default:\n break;\n }\n }\n\n onSBUpdateEnd() {\n //trigger handler right now\n if (this.state === State.APPENDING && this.mp4segments.length === 0) {\n var frag = this.fragCurrent, stats = this.stats;\n if (frag) {\n this.fragPrevious = frag;\n stats.tbuffered = performance.now();\n this.fragLastKbps = Math.round(8 * stats.length / (stats.tbuffered - stats.tfirst));\n this.hls.trigger(Event.FRAG_BUFFERED, {stats: stats, frag: frag});\n logger.log(`media buffered : ${this.timeRangesToString(this.media.buffered)}`);\n this.state = State.IDLE;\n }\n }\n this.tick();\n }\n\n_checkBuffer() {\n var media = this.media;\n if(media) {\n // compare readyState\n var readyState = media.readyState;\n // if ready state different from HAVE_NOTHING (numeric value 0), we are allowed to seek\n if(readyState) {\n // if seek after buffered defined, let's seek if within acceptable range\n var seekAfterBuffered = this.seekAfterBuffered;\n if(seekAfterBuffered) {\n if(media.duration >= seekAfterBuffered) {\n media.currentTime = seekAfterBuffered;\n this.seekAfterBuffered = undefined;\n }\n } else {\n var currentTime = media.currentTime,\n bufferInfo = this.bufferInfo(currentTime,0),\n isPlaying = !(media.paused || media.ended || media.seeking || readyState < 3),\n jumpThreshold = 0.2,\n playheadMoving = currentTime > media.playbackRate*this.lastCurrentTime;\n\n if (this.stalled && playheadMoving) {\n this.stalled = false;\n }\n\n // check buffer upfront\n // if less than 200ms is buffered, and media is playing but playhead is not moving,\n // and we have a new buffer range available upfront, let's seek to that one\n if(bufferInfo.len <= jumpThreshold) {\n if(playheadMoving || !isPlaying) {\n // playhead moving or media not playing\n jumpThreshold = 0;\n } else {\n // playhead not moving AND media playing\n logger.log(`playback seems stuck @${currentTime}`);\n if(!this.stalled) {\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: false});\n this.stalled = true;\n }\n }\n // if we are below threshold, try to jump if next buffer range is close\n if(bufferInfo.len <= jumpThreshold) {\n // no buffer available @ currentTime, check if next buffer is close (more than 5ms diff but within a config.maxSeekHole second range)\n var nextBufferStart = bufferInfo.nextStart, delta = nextBufferStart-currentTime;\n if(nextBufferStart &&\n (delta < this.config.maxSeekHole) &&\n (delta > 0.005) &&\n !media.seeking) {\n // next buffer is close ! adjust currentTime to nextBufferStart\n // this will ensure effective video decoding\n logger.log(`adjust currentTime from ${currentTime} to ${nextBufferStart}`);\n media.currentTime = nextBufferStart;\n }\n }\n }\n }\n }\n }\n }\n\n swapAudioCodec() {\n this.audioCodecSwap = !this.audioCodecSwap;\n }\n\n onSBUpdateError(event) {\n logger.error(`sourceBuffer error:${event}`);\n this.state = State.ERROR;\n // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n // this error might not always be fatal (it is fatal if decode error is set, in that case\n // it will be followed by a mediaElement error ...)\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_APPENDING_ERROR, fatal: false, frag: this.fragCurrent});\n }\n\n timeRangesToString(r) {\n var log = '', len = r.length;\n for (var i=0; i OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\nclass AES {\n\n /**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @constructor\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n constructor(key) {\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n this._tables = [[[],[],[],[],[]],[[],[],[],[],[]]];\n\n this._precompute();\n\n var i, j, tmp,\n encKey, decKey,\n sbox = this._tables[0][4], decTable = this._tables[1],\n keyLen = key.length, rcon = 1;\n\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size=' + keyLen);\n }\n\n encKey = key.slice(0);\n decKey = [];\n this._key = [encKey, decKey];\n\n // schedule encryption keys\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i-1];\n\n // apply sbox\n if (i%keyLen === 0 || (keyLen === 8 && i%keyLen === 4)) {\n tmp = sbox[tmp>>>24]<<24 ^ sbox[tmp>>16&255]<<16 ^ sbox[tmp>>8&255]<<8 ^ sbox[tmp&255];\n\n // shift rows and add rcon\n if (i%keyLen === 0) {\n tmp = tmp<<8 ^ tmp>>>24 ^ rcon<<24;\n rcon = rcon<<1 ^ (rcon>>7)*283;\n }\n }\n\n encKey[i] = encKey[i-keyLen] ^ tmp;\n }\n\n // schedule decryption keys\n for (j = 0; i; j++, i--) {\n tmp = encKey[j&3 ? i : i - 4];\n if (i<=4 || j<4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp>>>24 ]] ^\n decTable[1][sbox[tmp>>16 & 255]] ^\n decTable[2][sbox[tmp>>8 & 255]] ^\n decTable[3][sbox[tmp & 255]];\n }\n }\n }\n\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n _precompute() {\n var encTable = this._tables[0], decTable = this._tables[1],\n sbox = encTable[4], sboxInv = decTable[4],\n i, x, xInv, d=[], th=[], x2, x4, x8, s, tEnc, tDec;\n\n // Compute double and third tables\n for (i = 0; i < 256; i++) {\n th[( d[i] = i<<1 ^ (i>>7)*283 )^i]=i;\n }\n\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv<<1 ^ xInv<<2 ^ xInv<<3 ^ xInv<<4;\n s = s>>8 ^ s&255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x;\n\n // Compute MixColumns\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8*0x1010101 ^ x4*0x10001 ^ x2*0x101 ^ x*0x1010100;\n tEnc = d[s]*0x101 ^ s*0x1010100;\n\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc<<24 ^ tEnc>>>8;\n decTable[i][s] = tDec = tDec<<24 ^ tDec>>>8;\n }\n }\n\n // Compactify. Considerable speedup on Firefox.\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n }\n\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n * @param encrypted0 {number} the first word to decrypt\n * @param encrypted1 {number} the second word to decrypt\n * @param encrypted2 {number} the third word to decrypt\n * @param encrypted3 {number} the fourth word to decrypt\n * @param out {Int32Array} the array to write the decrypted words\n * into\n * @param offset {number} the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n var key = this._key[1],\n // state variables a,b,c,d are loaded with pre-whitened data\n a = encrypted0 ^ key[0],\n b = encrypted3 ^ key[1],\n c = encrypted2 ^ key[2],\n d = encrypted1 ^ key[3],\n a2, b2, c2,\n\n nInnerRounds = key.length / 4 - 2, // key.length === 2 ?\n i,\n kIndex = 4,\n table = this._tables[1],\n\n // load up the tables\n table0 = table[0],\n table1 = table[1],\n table2 = table[2],\n table3 = table[3],\n sbox = table[4];\n\n // Inner rounds. Cribbed from OpenSSL.\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a>>>24] ^ table1[b>>16 & 255] ^ table2[c>>8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b>>>24] ^ table1[c>>16 & 255] ^ table2[d>>8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c>>>24] ^ table1[d>>16 & 255] ^ table2[a>>8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d>>>24] ^ table1[a>>16 & 255] ^ table2[b>>8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a=a2; b=b2; c=c2;\n }\n\n // Last round.\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] =\n sbox[a>>>24 ]<<24 ^\n sbox[b>>16 & 255]<<16 ^\n sbox[c>>8 & 255]<<8 ^\n sbox[d & 255] ^\n key[kIndex++];\n a2=a; a=b; b=c; c=d; d=a2;\n }\n }\n}\n\nexport default AES;\n", "/*\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\nimport AES from './aes';\n\nclass AES128Decrypter {\n\n constructor(key, initVector) {\n this.key = key;\n this.iv = initVector;\n }\n\n /**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\n ntoh(word) {\n return (word << 24) |\n ((word & 0xff00) << 8) |\n ((word & 0xff0000) >> 8) |\n (word >>> 24);\n }\n\n\n /**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n * @param encrypted {Uint8Array} the encrypted bytes\n * @param key {Uint32Array} the bytes of the decryption key\n * @param initVector {Uint32Array} the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\n doDecrypt(encrypted, key, initVector) {\n var\n // word-level access to the encrypted bytes\n encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2),\n\n decipher = new AES(Array.prototype.slice.call(key)),\n\n // byte and word-level access for the decrypted output\n decrypted = new Uint8Array(encrypted.byteLength),\n decrypted32 = new Int32Array(decrypted.buffer),\n\n // temporary variables for working with the IV, encrypted, and\n // decrypted data\n init0, init1, init2, init3,\n encrypted0, encrypted1, encrypted2, encrypted3,\n\n // iteration variable\n wordIx;\n\n // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n init0 = ~~initVector[0];\n init1 = ~~initVector[1];\n init2 = ~~initVector[2];\n init3 = ~~initVector[3];\n\n // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ~~this.ntoh(encrypted32[wordIx]);\n encrypted1 = ~~this.ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ~~this.ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ~~this.ntoh(encrypted32[wordIx + 3]);\n\n // decrypt the block\n decipher.decrypt(encrypted0,\n encrypted1,\n encrypted2,\n encrypted3,\n decrypted32,\n wordIx);\n\n // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n decrypted32[wordIx] = this.ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = this.ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = this.ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = this.ntoh(decrypted32[wordIx + 3] ^ init3);\n\n // setup the IV for the next round\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n\n return decrypted;\n }\n\n localDecrypt(encrypted, key, initVector, decrypted) {\n var bytes = this.doDecrypt(encrypted,\n key,\n initVector);\n decrypted.set(bytes, encrypted.byteOffset);\n }\n\n decrypt(encrypted) {\n var\n step = 4 * 8000,\n //encrypted32 = new Int32Array(encrypted.buffer),\n encrypted32 = new Int32Array(encrypted),\n decrypted = new Uint8Array(encrypted.byteLength),\n i = 0;\n\n // split up the encryption job and do the individual chunks asynchronously\n var key = this.key;\n var initVector = this.iv;\n this.localDecrypt(encrypted32.subarray(i, i + step), key, initVector, decrypted);\n\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([\n this.ntoh(encrypted32[i - 4]),\n this.ntoh(encrypted32[i - 3]),\n this.ntoh(encrypted32[i - 2]),\n this.ntoh(encrypted32[i - 1])\n ]);\n this.localDecrypt(encrypted32.subarray(i, i + step), key, initVector, decrypted);\n }\n\n return decrypted;\n }\n}\n\nexport default AES128Decrypter;\n", "/*\n * AES128 decryption.\n */\n\nimport AES128Decrypter from './aes128-decrypter';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport {logger} from '../utils/logger';\n\nclass Decrypter {\n\n constructor(hls) {\n this.hls = hls;\n try {\n const browserCrypto = window ? window.crypto : crypto;\n this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n this.disableWebCrypto = !this.subtle;\n } catch (e) {\n this.disableWebCrypto = true;\n }\n }\n\n destroy() {\n }\n\n decrypt(data, key, iv, callback) {\n if (this.disableWebCrypto && this.hls.config.enableSoftwareAES) {\n this.decryptBySoftware(data, key, iv, callback);\n } else {\n this.decryptByWebCrypto(data, key, iv, callback);\n }\n }\n\n decryptByWebCrypto(data, key, iv, callback) {\n logger.log('decrypting by WebCrypto API');\n\n this.subtle.importKey('raw', key, { name : 'AES-CBC', length : 128 }, false, ['decrypt']).\n then((importedKey) => {\n this.subtle.decrypt({ name : 'AES-CBC', iv : iv.buffer }, importedKey, data).\n then(callback).\n catch ((err) => {\n this.onWebCryptoError(err, data, key, iv, callback);\n });\n }).\n catch ((err) => {\n this.onWebCryptoError(err, data, key, iv, callback);\n });\n }\n\n decryptBySoftware(data, key8, iv8, callback) {\n logger.log('decrypting by JavaScript Implementation');\n\n var view = new DataView(key8.buffer);\n var key = new Uint32Array([\n view.getUint32(0),\n view.getUint32(4),\n view.getUint32(8),\n view.getUint32(12)\n ]);\n\n view = new DataView(iv8.buffer);\n var iv = new Uint32Array([\n view.getUint32(0),\n view.getUint32(4),\n view.getUint32(8),\n view.getUint32(12)\n ]);\n\n var decrypter = new AES128Decrypter(key, iv);\n callback(decrypter.decrypt(data).buffer);\n }\n\n onWebCryptoError(err, data, key, iv, callback) {\n if (this.hls.config.enableSoftwareAES) {\n logger.log('disabling to use WebCrypto API');\n this.disableWebCrypto = true;\n this.decryptBySoftware(data, key, iv, callback);\n }\n else {\n logger.error(`decrypting error : ${err.message}`);\n this.hls.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details : ErrorDetails.FRAG_DECRYPT_ERROR, fatal : true, reason : err.message});\n }\n }\n\n}\n\nexport default Decrypter;\n", - "/**\n * AAC demuxer\n */\nimport ADTS from './adts';\nimport {logger} from '../utils/logger';\nimport ID3 from '../demux/id3';\n\n class AACDemuxer {\n\n constructor(observer,remuxerClass) {\n this.observer = observer;\n this.remuxerClass = remuxerClass;\n this.remuxer = new this.remuxerClass(observer);\n this._aacTrack = {type: 'audio', id :-1, sequenceNumber: 0, samples : [], len : 0};\n }\n\n static probe(data) {\n // check if data contains ID3 timestamp and ADTS sync worc\n var id3 = new ID3(data), adtsStartOffset,len;\n if(id3.hasTimeStamp) {\n // look for ADTS header (0xFFFx)\n for (adtsStartOffset = id3.length, len = data.length; adtsStartOffset < len - 1; adtsStartOffset++) {\n if ((data[adtsStartOffset] === 0xff) && (data[adtsStartOffset+1] & 0xf0) === 0xf0) {\n //logger.log('ADTS sync word found !');\n return true;\n }\n }\n }\n return false;\n }\n\n\n // feed incoming data to the front of the parsing pipeline\n push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration) {\n var track = this._aacTrack,\n id3 = new ID3(data),\n pts = 90*id3.timeStamp,\n config, adtsFrameSize, adtsStartOffset, adtsHeaderLen, stamp, nbSamples, len, aacSample;\n // look for ADTS header (0xFFFx)\n for (adtsStartOffset = id3.length, len = data.length; adtsStartOffset < len - 1; adtsStartOffset++) {\n if ((data[adtsStartOffset] === 0xff) && (data[adtsStartOffset+1] & 0xf0) === 0xf0) {\n break;\n }\n }\n\n if (!track.audiosamplerate) {\n config = ADTS.getAudioConfig(this.observer,data, adtsStartOffset, audioCodec);\n track.config = config.config;\n track.audiosamplerate = config.samplerate;\n track.channelCount = config.channelCount;\n track.codec = config.codec;\n track.timescale = this.remuxer.timescale;\n track.duration = this.remuxer.timescale * duration;\n logger.log(`parsed codec:${track.codec},rate:${config.samplerate},nb channel:${config.channelCount}`);\n }\n nbSamples = 0;\n while ((adtsStartOffset + 5) < len) {\n // retrieve frame size\n adtsFrameSize = ((data[adtsStartOffset + 3] & 0x03) << 11);\n // byte 4\n adtsFrameSize |= (data[adtsStartOffset + 4] << 3);\n // byte 5\n adtsFrameSize |= ((data[adtsStartOffset + 5] & 0xE0) >>> 5);\n adtsHeaderLen = (!!(data[adtsStartOffset + 1] & 0x01) ? 7 : 9);\n adtsFrameSize -= adtsHeaderLen;\n stamp = Math.round(pts + nbSamples * 1024 * 90000 / track.audiosamplerate);\n //stamp = pes.pts;\n //console.log('AAC frame, offset/length/pts:' + (adtsStartOffset+7) + '/' + adtsFrameSize + '/' + stamp.toFixed(0));\n if ((adtsFrameSize > 0) && ((adtsStartOffset + adtsHeaderLen + adtsFrameSize) <= len)) {\n aacSample = {unit: data.subarray(adtsStartOffset + adtsHeaderLen, adtsStartOffset + adtsHeaderLen + adtsFrameSize), pts: stamp, dts: stamp};\n track.samples.push(aacSample);\n track.len += adtsFrameSize;\n adtsStartOffset += adtsFrameSize + adtsHeaderLen;\n nbSamples++;\n // look for ADTS header (0xFFFx)\n for ( ; adtsStartOffset < (len - 1); adtsStartOffset++) {\n if ((data[adtsStartOffset] === 0xff) && ((data[adtsStartOffset + 1] & 0xf0) === 0xf0)) {\n break;\n }\n }\n } else {\n break;\n }\n }\n this.remuxer.remux(this._aacTrack,{samples : []}, {samples : [ { pts: pts, dts : pts, unit : id3.payload} ]}, timeOffset);\n }\n\n destroy() {\n }\n\n}\n\nexport default AACDemuxer;\n", + "/**\n * AAC demuxer\n */\nimport ADTS from './adts';\nimport {logger} from '../utils/logger';\nimport ID3 from '../demux/id3';\n\n class AACDemuxer {\n\n constructor(observer,remuxerClass) {\n this.observer = observer;\n this.remuxerClass = remuxerClass;\n this.remuxer = new this.remuxerClass(observer);\n this._aacTrack = {type: 'audio', id :-1, sequenceNumber: 0, samples : [], len : 0};\n }\n\n static probe(data) {\n // check if data contains ID3 timestamp and ADTS sync worc\n var id3 = new ID3(data), offset,len;\n if(id3.hasTimeStamp) {\n // look for ADTS header (0xFFFx)\n for (offset = id3.length, len = data.length; offset < len - 1; offset++) {\n if ((data[offset] === 0xff) && (data[offset+1] & 0xf0) === 0xf0) {\n //logger.log('ADTS sync word found !');\n return true;\n }\n }\n }\n return false;\n }\n\n\n // feed incoming data to the front of the parsing pipeline\n push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration) {\n var track = this._aacTrack,\n id3 = new ID3(data),\n pts = 90*id3.timeStamp,\n config, frameLength, frameDuration, frameIndex, offset, headerLength, stamp, len, aacSample;\n // look for ADTS header (0xFFFx)\n for (offset = id3.length, len = data.length; offset < len - 1; offset++) {\n if ((data[offset] === 0xff) && (data[offset+1] & 0xf0) === 0xf0) {\n break;\n }\n }\n\n if (!track.audiosamplerate) {\n config = ADTS.getAudioConfig(this.observer,data, offset, audioCodec);\n track.config = config.config;\n track.audiosamplerate = config.samplerate;\n track.channelCount = config.channelCount;\n track.codec = config.codec;\n track.timescale = config.samplerate;\n track.duration = config.samplerate * duration;\n logger.log(`parsed codec:${track.codec},rate:${config.samplerate},nb channel:${config.channelCount}`);\n }\n frameIndex = 0;\n frameDuration = 1024 * 90000 / track.audiosamplerate;\n while ((offset + 5) < len) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = (!!(data[offset + 1] & 0x01) ? 7 : 9);\n // retrieve frame size\n frameLength = ((data[offset + 3] & 0x03) << 11) |\n (data[offset + 4] << 3) |\n ((data[offset + 5] & 0xE0) >>> 5);\n frameLength -= headerLength;\n //stamp = pes.pts;\n\n if ((frameLength > 0) && ((offset + headerLength + frameLength) <= len)) {\n stamp = pts + frameIndex * frameDuration;\n //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n aacSample = {unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp};\n track.samples.push(aacSample);\n track.len += frameLength;\n offset += frameLength + headerLength;\n frameIndex++;\n // look for ADTS header (0xFFFx)\n for ( ; offset < (len - 1); offset++) {\n if ((data[offset] === 0xff) && ((data[offset + 1] & 0xf0) === 0xf0)) {\n break;\n }\n }\n } else {\n break;\n }\n }\n this.remuxer.remux(this._aacTrack,{samples : []}, {samples : [ { pts: pts, dts : pts, unit : id3.payload} ]}, timeOffset);\n }\n\n destroy() {\n }\n\n}\n\nexport default AACDemuxer;\n", "/**\n * ADTS parser helper\n */\nimport {logger} from '../utils/logger';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\n class ADTS {\n\n static getAudioConfig(observer, data, offset, audioCodec) {\n var adtsObjectType, // :int\n adtsSampleingIndex, // :int\n adtsExtensionSampleingIndex, // :int\n adtsChanelConfig, // :int\n config,\n userAgent = navigator.userAgent.toLowerCase(),\n adtsSampleingRates = [\n 96000, 88200,\n 64000, 48000,\n 44100, 32000,\n 24000, 22050,\n 16000, 12000,\n 11025, 8000,\n 7350];\n // byte 2\n adtsObjectType = ((data[offset + 2] & 0xC0) >>> 6) + 1;\n adtsSampleingIndex = ((data[offset + 2] & 0x3C) >>> 2);\n if(adtsSampleingIndex > adtsSampleingRates.length-1) {\n observer.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: `invalid ADTS sampling index:${adtsSampleingIndex}`});\n return;\n }\n adtsChanelConfig = ((data[offset + 2] & 0x01) << 2);\n // byte 3\n adtsChanelConfig |= ((data[offset + 3] & 0xC0) >>> 6);\n logger.log(`manifest codec:${audioCodec},ADTS data:type:${adtsObjectType},sampleingIndex:${adtsSampleingIndex}[${adtsSampleingRates[adtsSampleingIndex]}Hz],channelConfig:${adtsChanelConfig}`);\n // firefox: freq less than 24kHz = AAC SBR (HE-AAC)\n if (userAgent.indexOf('firefox') !== -1) {\n if (adtsSampleingIndex >= 6) {\n adtsObjectType = 5;\n config = new Array(4);\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table below, equivalent to substract 3)\n adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n } else {\n adtsObjectType = 2;\n config = new Array(2);\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n }\n // Android : always use AAC\n } else if (userAgent.indexOf('android') !== -1) {\n adtsObjectType = 2;\n config = new Array(2);\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n } else {\n /* for other browsers (chrome ...)\n always force audio type to be HE-AAC SBR, as some browsers do not support audio codec switch properly (like Chrome ...)\n */\n adtsObjectType = 5;\n config = new Array(4);\n // if (manifest codec is HE-AAC or HE-AACv2) OR (manifest codec not specified AND frequency less than 24kHz)\n if ((audioCodec && ((audioCodec.indexOf('mp4a.40.29') !== -1) ||\n (audioCodec.indexOf('mp4a.40.5') !== -1))) ||\n (!audioCodec && adtsSampleingIndex >= 6)) {\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table below, equivalent to substract 3)\n adtsExtensionSampleingIndex = adtsSampleingIndex - 3;\n } else {\n // if (manifest codec is AAC) AND (frequency less than 24kHz OR nb channel is 1) OR (manifest codec not specified and mono audio)\n // Chrome fails to play back with AAC LC mono when initialized with HE-AAC. This is not a problem with stereo.\n if (audioCodec && audioCodec.indexOf('mp4a.40.2') !== -1 && (adtsSampleingIndex >= 6 || adtsChanelConfig === 1) ||\n (!audioCodec && adtsChanelConfig === 1)) {\n adtsObjectType = 2;\n config = new Array(2);\n }\n adtsExtensionSampleingIndex = adtsSampleingIndex;\n }\n }\n /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n ISO 14496-3 (AAC).pdf - Table 1.13 — Syntax of AudioSpecificConfig()\n Audio Profile / Audio Object Type\n 0: Null\n 1: AAC Main\n 2: AAC LC (Low Complexity)\n 3: AAC SSR (Scalable Sample Rate)\n 4: AAC LTP (Long Term Prediction)\n 5: SBR (Spectral Band Replication)\n 6: AAC Scalable\n sampling freq\n 0: 96000 Hz\n 1: 88200 Hz\n 2: 64000 Hz\n 3: 48000 Hz\n 4: 44100 Hz\n 5: 32000 Hz\n 6: 24000 Hz\n 7: 22050 Hz\n 8: 16000 Hz\n 9: 12000 Hz\n 10: 11025 Hz\n 11: 8000 Hz\n 12: 7350 Hz\n 13: Reserved\n 14: Reserved\n 15: frequency is written explictly\n Channel Configurations\n These are the channel configurations:\n 0: Defined in AOT Specifc Config\n 1: 1 channel: front-center\n 2: 2 channels: front-left, front-right\n */\n // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n config[0] = adtsObjectType << 3;\n // samplingFrequencyIndex\n config[0] |= (adtsSampleingIndex & 0x0E) >> 1;\n config[1] |= (adtsSampleingIndex & 0x01) << 7;\n // channelConfiguration\n config[1] |= adtsChanelConfig << 3;\n if (adtsObjectType === 5) {\n // adtsExtensionSampleingIndex\n config[1] |= (adtsExtensionSampleingIndex & 0x0E) >> 1;\n config[2] = (adtsExtensionSampleingIndex & 0x01) << 7;\n // adtsObjectType (force to 2, chrome is checking that object type is less than 5 ???\n // https://chromium.googlesource.com/chromium/src.git/+/master/media/formats/mp4/aac.cc\n config[2] |= 2 << 2;\n config[3] = 0;\n }\n return {config: config, samplerate: adtsSampleingRates[adtsSampleingIndex], channelCount: adtsChanelConfig, codec: ('mp4a.40.' + adtsObjectType)};\n }\n}\n\nexport default ADTS;\n", "/* inline demuxer.\n * probe fragments and instantiate appropriate demuxer depending on content type (TSDemuxer, AACDemuxer, ...)\n */\n\nimport Event from '../events';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport AACDemuxer from '../demux/aacdemuxer';\nimport TSDemuxer from '../demux/tsdemuxer';\n\nclass DemuxerInline {\n\n constructor(hls,remuxer) {\n this.hls = hls;\n this.remuxer = remuxer;\n }\n\n destroy() {\n var demuxer = this.demuxer;\n if (demuxer) {\n demuxer.destroy();\n }\n }\n\n push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration) {\n var demuxer = this.demuxer;\n if (!demuxer) {\n // probe for content type\n if (TSDemuxer.probe(data)) {\n demuxer = this.demuxer = new TSDemuxer(this.hls,this.remuxer);\n } else if(AACDemuxer.probe(data)) {\n demuxer = this.demuxer = new AACDemuxer(this.hls,this.remuxer);\n } else {\n this.hls.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: true, reason: 'no demux matching with content found'});\n return;\n }\n }\n demuxer.push(data,audioCodec,videoCodec,timeOffset,cc,level,sn,duration);\n }\n}\n\nexport default DemuxerInline;\n", "/* demuxer web worker.\n * - listen to worker message, and trigger DemuxerInline upon reception of Fragments.\n * - provides MP4 Boxes back to main thread using [transferable objects](https://developers.google.com/web/updates/2011/12/Transferable-Objects-Lightning-Fast) in order to minimize message passing overhead.\n */\n\n import DemuxerInline from '../demux/demuxer-inline';\n import Event from '../events';\n import EventEmitter from 'events';\n import MP4Remuxer from '../remux/mp4-remuxer';\n\nvar DemuxerWorker = function (self) {\n // observer setup\n var observer = new EventEmitter();\n observer.trigger = function trigger (event, ...data) {\n observer.emit(event, event, ...data);\n };\n\n observer.off = function off (event, ...data) {\n observer.removeListener(event, ...data);\n };\n self.addEventListener('message', function (ev) {\n //console.log('demuxer cmd:' + ev.data.cmd);\n switch (ev.data.cmd) {\n case 'init':\n self.demuxer = new DemuxerInline(observer,MP4Remuxer);\n break;\n case 'demux':\n var data = ev.data;\n self.demuxer.push(new Uint8Array(data.data), data.audioCodec, data.videoCodec, data.timeOffset, data.cc, data.level, data.sn, data.duration);\n break;\n default:\n break;\n }\n });\n\n // listen to events triggered by TS Demuxer\n observer.on(Event.FRAG_PARSING_INIT_SEGMENT, function(ev, data) {\n var objData = {event: ev};\n var objTransferable = [];\n if (data.audioCodec) {\n objData.audioCodec = data.audioCodec;\n objData.audioMoov = data.audioMoov.buffer;\n objData.audioChannelCount = data.audioChannelCount;\n objTransferable.push(objData.audioMoov);\n }\n if (data.videoCodec) {\n objData.videoCodec = data.videoCodec;\n objData.videoMoov = data.videoMoov.buffer;\n objData.videoWidth = data.videoWidth;\n objData.videoHeight = data.videoHeight;\n objTransferable.push(objData.videoMoov);\n }\n // pass moov as transferable object (no copy)\n self.postMessage(objData,objTransferable);\n });\n\n observer.on(Event.FRAG_PARSING_DATA, function(ev, data) {\n var objData = {event: ev, type: data.type, startPTS: data.startPTS, endPTS: data.endPTS, startDTS: data.startDTS, endDTS: data.endDTS, moof: data.moof.buffer, mdat: data.mdat.buffer, nb: data.nb};\n // pass moof/mdat data as transferable object (no copy)\n self.postMessage(objData, [objData.moof, objData.mdat]);\n });\n\n observer.on(Event.FRAG_PARSED, function(event) {\n self.postMessage({event: event});\n });\n\n observer.on(Event.ERROR, function(event, data) {\n self.postMessage({event: event, data: data});\n });\n\n observer.on(Event.FRAG_PARSING_METADATA, function(event, data) {\n var objData = {event: event, samples: data.samples};\n self.postMessage(objData);\n });\n\n observer.on(Event.FRAG_PARSING_USERDATA, function(event, data) {\n var objData = {event: event, samples: data.samples};\n self.postMessage(objData);\n });\n\n};\n\nexport default DemuxerWorker;\n\n", "import Event from '../events';\nimport DemuxerInline from '../demux/demuxer-inline';\nimport DemuxerWorker from '../demux/demuxer-worker';\nimport {logger} from '../utils/logger';\nimport MP4Remuxer from '../remux/mp4-remuxer';\nimport Decrypter from '../crypt/decrypter';\n\nclass Demuxer {\n\n constructor(hls) {\n this.hls = hls;\n if (hls.config.enableWorker && (typeof(Worker) !== 'undefined')) {\n logger.log('demuxing in webworker');\n try {\n var work = require('webworkify');\n this.w = work(DemuxerWorker);\n this.onwmsg = this.onWorkerMessage.bind(this);\n this.w.addEventListener('message', this.onwmsg);\n this.w.postMessage({cmd: 'init'});\n } catch(err) {\n logger.error('error while initializing DemuxerWorker, fallback on DemuxerInline');\n this.demuxer = new DemuxerInline(hls,MP4Remuxer);\n }\n } else {\n this.demuxer = new DemuxerInline(hls,MP4Remuxer);\n }\n this.demuxInitialized = true;\n }\n\n destroy() {\n if (this.w) {\n this.w.removeEventListener('message', this.onwmsg);\n this.w.terminate();\n this.w = null;\n } else {\n this.demuxer.destroy();\n this.demuxer = null;\n }\n if (this.decrypter) {\n this.decrypter.destroy();\n this.decrypter = null;\n }\n }\n\n pushDecrypted(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration) {\n if (this.w) {\n // post fragment payload as transferable objects (no copy)\n this.w.postMessage({cmd: 'demux', data: data, audioCodec: audioCodec, videoCodec: videoCodec, timeOffset: timeOffset, cc: cc, level: level, sn : sn, duration: duration}, [data]);\n } else {\n this.demuxer.push(new Uint8Array(data), audioCodec, videoCodec, timeOffset, cc, level, sn, duration);\n }\n }\n\n push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration, decryptdata) {\n if ((data.byteLength > 0) && (decryptdata != null) && (decryptdata.key != null) && (decryptdata.method === 'AES-128')) {\n if (this.decrypter == null) {\n this.decrypter = new Decrypter(this.hls);\n }\n \n var localthis = this;\n this.decrypter.decrypt(data, decryptdata.key, decryptdata.iv, function(decryptedData){\n localthis.pushDecrypted(decryptedData, audioCodec, videoCodec, timeOffset, cc, level, sn, duration);\n });\n } else {\n this.pushDecrypted(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration);\n }\n }\n\n onWorkerMessage(ev) {\n //console.log('onWorkerMessage:' + ev.data.event);\n switch(ev.data.event) {\n case Event.FRAG_PARSING_INIT_SEGMENT:\n var obj = {};\n if (ev.data.audioMoov) {\n obj.audioMoov = new Uint8Array(ev.data.audioMoov);\n obj.audioCodec = ev.data.audioCodec;\n obj.audioChannelCount = ev.data.audioChannelCount;\n }\n if (ev.data.videoMoov) {\n obj.videoMoov = new Uint8Array(ev.data.videoMoov);\n obj.videoCodec = ev.data.videoCodec;\n obj.videoWidth = ev.data.videoWidth;\n obj.videoHeight = ev.data.videoHeight;\n }\n this.hls.trigger(Event.FRAG_PARSING_INIT_SEGMENT, obj);\n break;\n case Event.FRAG_PARSING_DATA:\n this.hls.trigger(Event.FRAG_PARSING_DATA,{\n moof: new Uint8Array(ev.data.moof),\n mdat: new Uint8Array(ev.data.mdat),\n startPTS: ev.data.startPTS,\n endPTS: ev.data.endPTS,\n startDTS: ev.data.startDTS,\n endDTS: ev.data.endDTS,\n type: ev.data.type,\n nb: ev.data.nb\n });\n break;\n case Event.FRAG_PARSING_METADATA:\n this.hls.trigger(Event.FRAG_PARSING_METADATA, {\n samples: ev.data.samples\n });\n break;\n case Event.FRAG_PARSING_USERDATA:\n this.hls.trigger(Event.FRAG_PARSING_USERDATA, {\n samples: ev.data.samples\n });\n break;\n default:\n this.hls.trigger(ev.data.event, ev.data.data);\n break;\n }\n }\n}\n\nexport default Demuxer;\n\n", "/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n*/\n\nimport {logger} from '../utils/logger';\n\nclass ExpGolomb {\n\n constructor(data) {\n this.data = data;\n // the number of bytes left to examine in this.data\n this.bytesAvailable = this.data.byteLength;\n // the current word being examined\n this.word = 0; // :uint\n // the number of bits left to examine in the current word\n this.bitsAvailable = 0; // :uint\n }\n\n // ():void\n loadWord() {\n var\n position = this.data.byteLength - this.bytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, this.bytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(this.data.subarray(position, position + availableBytes));\n this.word = new DataView(workingBytes.buffer).getUint32(0);\n // track the amount of this.data that has been processed\n this.bitsAvailable = availableBytes * 8;\n this.bytesAvailable -= availableBytes;\n }\n\n // (count:int):void\n skipBits(count) {\n var skipBytes; // :int\n if (this.bitsAvailable > count) {\n this.word <<= count;\n this.bitsAvailable -= count;\n } else {\n count -= this.bitsAvailable;\n skipBytes = count >> 3;\n count -= (skipBytes >> 3);\n this.bytesAvailable -= skipBytes;\n this.loadWord();\n this.word <<= count;\n this.bitsAvailable -= count;\n }\n }\n\n // (size:int):uint\n readBits(size) {\n var\n bits = Math.min(this.bitsAvailable, size), // :uint\n valu = this.word >>> (32 - bits); // :uint\n if (size > 32) {\n logger.error('Cannot read more than 32 bits at a time');\n }\n this.bitsAvailable -= bits;\n if (this.bitsAvailable > 0) {\n this.word <<= bits;\n } else if (this.bytesAvailable > 0) {\n this.loadWord();\n }\n bits = size - bits;\n if (bits > 0) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n // ():uint\n skipLZ() {\n var leadingZeroCount; // :uint\n for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n if (0 !== (this.word & (0x80000000 >>> leadingZeroCount))) {\n // the first bit of working word is 1\n this.word <<= leadingZeroCount;\n this.bitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n // we exhausted word and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLZ();\n }\n\n // ():void\n skipUEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():void\n skipEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():uint\n readUEG() {\n var clz = this.skipLZ(); // :uint\n return this.readBits(clz + 1) - 1;\n }\n\n // ():int\n readEG() {\n var valu = this.readUEG(); // :int\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return (1 + valu) >>> 1; // add 1 to make it even, and divide by 2\n } else {\n return -1 * (valu >>> 1); // divide by two then make it negative\n }\n }\n\n // Some convenience functions\n // :Boolean\n readBoolean() {\n return 1 === this.readBits(1);\n }\n\n // ():int\n readUByte() {\n return this.readBits(8);\n }\n\n // ():int\n readUShort() {\n return this.readBits(16);\n }\n // ():int\n readUInt() {\n return this.readBits(32);\n }\n\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList(count) {\n var\n lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = this.readEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = (nextScale === 0) ? lastScale : nextScale;\n }\n }\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n readSPS() {\n var\n frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n sarScale = 1,\n profileIdc,profileCompat,levelIdc,\n numRefFramesInPicOrderCntCycle, picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n i;\n this.readUByte();\n profileIdc = this.readUByte(); // profile_idc\n profileCompat = this.readBits(5); // constraint_set[0-4]_flag, u(5)\n this.skipBits(3); // reserved_zero_3bits u(3),\n levelIdc = this.readUByte(); //level_idc u(8)\n this.skipUEG(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n if (profileIdc === 100 ||\n profileIdc === 110 ||\n profileIdc === 122 ||\n profileIdc === 244 ||\n profileIdc === 44 ||\n profileIdc === 83 ||\n profileIdc === 86 ||\n profileIdc === 118 ||\n profileIdc === 128) {\n var chromaFormatIdc = this.readUEG();\n if (chromaFormatIdc === 3) {\n this.skipBits(1); // separate_colour_plane_flag\n }\n this.skipUEG(); // bit_depth_luma_minus8\n this.skipUEG(); // bit_depth_chroma_minus8\n this.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (this.readBoolean()) { // seq_scaling_matrix_present_flag\n scalingListCount = (chromaFormatIdc !== 3) ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (this.readBoolean()) { // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n this.skipScalingList(16);\n } else {\n this.skipScalingList(64);\n }\n }\n }\n }\n }\n this.skipUEG(); // log2_max_frame_num_minus4\n var picOrderCntType = this.readUEG();\n if (picOrderCntType === 0) {\n this.readUEG(); //log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n this.skipBits(1); // delta_pic_order_always_zero_flag\n this.skipEG(); // offset_for_non_ref_pic\n this.skipEG(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = this.readUEG();\n for(i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n this.skipEG(); // offset_for_ref_frame[ i ]\n }\n }\n this.skipUEG(); // max_num_ref_frames\n this.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n picWidthInMbsMinus1 = this.readUEG();\n picHeightInMapUnitsMinus1 = this.readUEG();\n frameMbsOnlyFlag = this.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n this.skipBits(1); // mb_adaptive_frame_field_flag\n }\n this.skipBits(1); // direct_8x8_inference_flag\n if (this.readBoolean()) { // frame_cropping_flag\n frameCropLeftOffset = this.readUEG();\n frameCropRightOffset = this.readUEG();\n frameCropTopOffset = this.readUEG();\n frameCropBottomOffset = this.readUEG();\n }\n if (this.readBoolean()) {\n // vui_parameters_present_flag\n if (this.readBoolean()) {\n // aspect_ratio_info_present_flag\n let sarRatio;\n const aspectRatioIdc = this.readUByte();\n switch (aspectRatioIdc) {\n //case 1: sarRatio = [1,1]; break;\n case 2: sarRatio = [12,11]; break;\n case 3: sarRatio = [10,11]; break;\n case 4: sarRatio = [16,11]; break;\n case 5: sarRatio = [40,33]; break;\n case 6: sarRatio = [24,11]; break;\n case 7: sarRatio = [20,11]; break;\n case 8: sarRatio = [32,11]; break;\n case 9: sarRatio = [80,33]; break;\n case 10: sarRatio = [18,11]; break;\n case 11: sarRatio = [15,11]; break;\n case 12: sarRatio = [64,33]; break;\n case 13: sarRatio = [160,99]; break;\n case 14: sarRatio = [4,3]; break;\n case 15: sarRatio = [3,2]; break;\n case 16: sarRatio = [2,1]; break;\n case 255: {\n sarRatio = [this.readUByte() << 8 | this.readUByte(), this.readUByte() << 8 | this.readUByte()];\n break;\n }\n }\n if (sarRatio) {\n sarScale = sarRatio[0] / sarRatio[1];\n }\n }\n }\n return {\n width: (((picWidthInMbsMinus1 + 1) * 16) - frameCropLeftOffset * 2 - frameCropRightOffset * 2) * sarScale,\n height: ((2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16) - ((frameMbsOnlyFlag? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset))\n };\n }\n\n readSliceType() {\n // skip NALu type\n this.readUByte();\n // discard first_mb_in_slice\n this.readUEG();\n // return slice_type\n return this.readUEG();\n }\n}\n\nexport default ExpGolomb;\n", "/**\n * ID3 parser\n */\nimport {logger} from '../utils/logger';\n//import Hex from '../utils/hex';\n\n class ID3 {\n\n constructor(data) {\n this._hasTimeStamp = false;\n var offset = 0, byte1,byte2,byte3,byte4,tagSize,endPos,header,len;\n do {\n header = this.readUTF(data,offset,3);\n offset+=3;\n // first check for ID3 header\n if (header === 'ID3') {\n // skip 24 bits\n offset += 3;\n // retrieve tag(s) length\n byte1 = data[offset++] & 0x7f;\n byte2 = data[offset++] & 0x7f;\n byte3 = data[offset++] & 0x7f;\n byte4 = data[offset++] & 0x7f;\n tagSize = (byte1 << 21) + (byte2 << 14) + (byte3 << 7) + byte4;\n endPos = offset + tagSize;\n //logger.log(`ID3 tag found, size/end: ${tagSize}/${endPos}`);\n\n // read ID3 tags\n this._parseID3Frames(data, offset,endPos);\n offset = endPos;\n } else if (header === '3DI') {\n // http://id3.org/id3v2.4.0-structure chapter 3.4. ID3v2 footer\n offset += 7;\n logger.log(`3DI footer found, end: ${offset}`);\n } else {\n offset -= 3;\n len = offset;\n if (len) {\n //logger.log(`ID3 len: ${len}`);\n if (!this.hasTimeStamp) {\n logger.warn('ID3 tag found, but no timestamp');\n }\n this._length = len;\n this._payload = data.subarray(0,len);\n }\n return;\n }\n } while (true);\n }\n\n readUTF(data,start,len) {\n\n var result = '',offset = start, end = start + len;\n do {\n result += String.fromCharCode(data[offset++]);\n } while(offset < end);\n return result;\n }\n\n _parseID3Frames(data,offset,endPos) {\n var tagId,tagLen,tagStart,tagFlags,timestamp;\n while(offset + 8 <= endPos) {\n tagId = this.readUTF(data,offset,4);\n offset +=4;\n\n tagLen = data[offset++] << 24 +\n data[offset++] << 16 +\n data[offset++] << 8 +\n data[offset++];\n\n tagFlags = data[offset++] << 8 +\n data[offset++];\n\n tagStart = offset;\n //logger.log(\"ID3 tag id:\" + tagId);\n switch(tagId) {\n case 'PRIV':\n //logger.log('parse frame:' + Hex.hexDump(data.subarray(offset,endPos)));\n // owner should be \"com.apple.streaming.transportStreamTimestamp\"\n if (this.readUTF(data,offset,44) === 'com.apple.streaming.transportStreamTimestamp') {\n offset+=44;\n // smelling even better ! we found the right descriptor\n // skip null character (string end) + 3 first bytes\n offset+= 4;\n\n // timestamp is 33 bit expressed as a big-endian eight-octet number, with the upper 31 bits set to zero.\n var pts33Bit = data[offset++] & 0x1;\n this._hasTimeStamp = true;\n\n timestamp = ((data[offset++] << 23) +\n (data[offset++] << 15) +\n (data[offset++] << 7) +\n data[offset++]) /45;\n\n if (pts33Bit) {\n timestamp += 47721858.84; // 2^32 / 90\n }\n timestamp = Math.round(timestamp);\n logger.trace(`ID3 timestamp found: ${timestamp}`);\n this._timeStamp = timestamp;\n }\n break;\n default:\n break;\n }\n }\n }\n\n get hasTimeStamp() {\n return this._hasTimeStamp;\n }\n\n get timeStamp() {\n return this._timeStamp;\n }\n\n get length() {\n return this._length;\n }\n\n get payload() {\n return this._payload;\n }\n\n}\n\nexport default ID3;\n\n", - "/**\n * highly optimized TS demuxer:\n * parse PAT, PMT\n * extract PES packet from audio and video PIDs\n * extract AVC/H264 NAL units and AAC/ADTS samples from PES packet\n * trigger the remuxer upon parsing completion\n * it also tries to workaround as best as it can audio codec switch (HE-AAC to AAC and vice versa), without having to restart the MediaSource.\n * it also controls the remuxing process :\n * upon discontinuity or level switch detection, it will also notifies the remuxer so that it can reset its state.\n*/\n\n import ADTS from './adts';\n import Event from '../events';\n import ExpGolomb from './exp-golomb';\n// import Hex from '../utils/hex';\n import {logger} from '../utils/logger';\n import {ErrorTypes, ErrorDetails} from '../errors';\n\n class TSDemuxer {\n\n constructor(observer,remuxerClass) {\n this.observer = observer;\n this.remuxerClass = remuxerClass;\n this.lastCC = 0;\n this.remuxer = new this.remuxerClass(observer);\n this._userData = [];\n }\n\n static probe(data) {\n // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and one PID, each starting with 0x47\n if (data.length >= 3*188 && data[0] === 0x47 && data[188] === 0x47 && data[2*188] === 0x47) {\n return true;\n } else {\n return false;\n }\n }\n\n switchLevel() {\n this.pmtParsed = false;\n this._pmtId = -1;\n this.lastAacPTS = null;\n this.aacOverFlow = null;\n this._avcTrack = {type: 'video', id :-1, sequenceNumber: 0, samples : [], len : 0, nbNalu : 0};\n this._aacTrack = {type: 'audio', id :-1, sequenceNumber: 0, samples : [], len : 0};\n this._id3Track = {type: 'id3', id :-1, sequenceNumber: 0, samples : [], len : 0};\n this._txtTrack = {type: 'text', id: -1, sequenceNumber: 0, samples: [], len: 0};\n this.remuxer.switchLevel();\n }\n\n insertDiscontinuity() {\n this.switchLevel();\n this.remuxer.insertDiscontinuity();\n }\n\n // feed incoming data to the front of the parsing pipeline\n push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration) {\n var avcData, aacData, id3Data,\n start, len = data.length, stt, pid, atf, offset;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.timeOffset = timeOffset;\n this._duration = duration;\n this.contiguous = false;\n if (cc !== this.lastCC) {\n logger.log('discontinuity detected');\n this.insertDiscontinuity();\n this.lastCC = cc;\n } else if (level !== this.lastLevel) {\n logger.log('level switch detected');\n this.switchLevel();\n this.lastLevel = level;\n } else if (sn === (this.lastSN+1)) {\n this.contiguous = true;\n }\n this.lastSN = sn;\n\n if(!this.contiguous) {\n // flush any partial content\n this.aacOverFlow = null;\n }\n\n var pmtParsed = this.pmtParsed,\n avcId = this._avcTrack.id,\n aacId = this._aacTrack.id,\n id3Id = this._id3Track.id;\n\n // don't parse last TS packet if incomplete\n len -= len % 188;\n // loop through TS packets\n for (start = 0; start < len; start += 188) {\n if (data[start] === 0x47) {\n stt = !!(data[start + 1] & 0x40);\n // pid is a 13-bit field starting at the last bit of TS[1]\n pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n atf = (data[start + 3] & 0x30) >> 4;\n // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n if (atf > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset === (start + 188)) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n if (pmtParsed) {\n if (pid === avcId) {\n if (stt) {\n if (avcData) {\n this._parseAVCPES(this._parsePES(avcData));\n }\n avcData = {data: [], size: 0};\n }\n if (avcData) {\n avcData.data.push(data.subarray(offset, start + 188));\n avcData.size += start + 188 - offset;\n }\n } else if (pid === aacId) {\n if (stt) {\n if (aacData) {\n this._parseAACPES(this._parsePES(aacData));\n }\n aacData = {data: [], size: 0};\n }\n if (aacData) {\n aacData.data.push(data.subarray(offset, start + 188));\n aacData.size += start + 188 - offset;\n }\n } else if (pid === id3Id) {\n if (stt) {\n if (id3Data) {\n this._parseID3PES(this._parsePES(id3Data));\n }\n id3Data = {data: [], size: 0};\n }\n if (id3Data) {\n id3Data.data.push(data.subarray(offset, start + 188));\n id3Data.size += start + 188 - offset;\n }\n }\n } else {\n if (stt) {\n offset += data[offset] + 1;\n }\n if (pid === 0) {\n this._parsePAT(data, offset);\n } else if (pid === this._pmtId) {\n this._parsePMT(data, offset);\n pmtParsed = this.pmtParsed = true;\n avcId = this._avcTrack.id;\n aacId = this._aacTrack.id;\n id3Id = this._id3Track.id;\n }\n }\n } else {\n this.observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'TS packet did not start with 0x47'});\n }\n }\n // parse last PES packet\n if (avcData) {\n this._parseAVCPES(this._parsePES(avcData));\n }\n if (aacData) {\n this._parseAACPES(this._parsePES(aacData));\n }\n if (id3Data) {\n this._parseID3PES(this._parsePES(id3Data));\n }\n this.remux();\n }\n\n remux() {\n this.remuxer.remux(this._aacTrack, this._avcTrack, this._id3Track, this._txtTrack, this.timeOffset, this.contiguous);\n }\n\n destroy() {\n this.switchLevel();\n this._initPTS = this._initDTS = undefined;\n this._duration = 0;\n }\n\n _parsePAT(data, offset) {\n // skip the PSI header and parse the first PMT entry\n this._pmtId = (data[offset + 10] & 0x1F) << 8 | data[offset + 11];\n //logger.log('PMT PID:' + this._pmtId);\n }\n\n _parsePMT(data, offset) {\n var sectionLength, tableEnd, programInfoLength, pid;\n sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n pid = (data[offset + 1] & 0x1F) << 8 | data[offset + 2];\n switch(data[offset]) {\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n case 0x0f:\n //logger.log('AAC PID:' + pid);\n this._aacTrack.id = pid;\n break;\n // Packetized metadata (ID3)\n case 0x15:\n //logger.log('ID3 PID:' + pid);\n this._id3Track.id = pid;\n break;\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n case 0x1b:\n //logger.log('AVC PID:' + pid);\n this._avcTrack.id = pid;\n break;\n default:\n logger.log('unkown stream type:' + data[offset]);\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((data[offset + 3] & 0x0F) << 8 | data[offset + 4]) + 5;\n }\n }\n\n _parsePES(stream) {\n var i = 0, frag, pesFlags, pesPrefix, pesLen, pesHdrLen, pesData, pesPts, pesDts, payloadStartOffset;\n //retrieve PTS/DTS from first fragment\n frag = stream.data[0];\n pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n if (pesPrefix === 1) {\n pesLen = (frag[4] << 8) + frag[5];\n pesFlags = frag[7];\n if (pesFlags & 0xC0) {\n /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n as Bitwise operators treat their operands as a sequence of 32 bits */\n pesPts = (frag[9] & 0x0E) * 536870912 +// 1 << 29\n (frag[10] & 0xFF) * 4194304 +// 1 << 22\n (frag[11] & 0xFE) * 16384 +// 1 << 14\n (frag[12] & 0xFF) * 128 +// 1 << 7\n (frag[13] & 0xFE) / 2;\n // check if greater than 2^32 -1\n if (pesPts > 4294967295) {\n // decrement 2^33\n pesPts -= 8589934592;\n }\n if (pesFlags & 0x40) {\n pesDts = (frag[14] & 0x0E ) * 536870912 +// 1 << 29\n (frag[15] & 0xFF ) * 4194304 +// 1 << 22\n (frag[16] & 0xFE ) * 16384 +// 1 << 14\n (frag[17] & 0xFF ) * 128 +// 1 << 7\n (frag[18] & 0xFE ) / 2;\n // check if greater than 2^32 -1\n if (pesDts > 4294967295) {\n // decrement 2^33\n pesDts -= 8589934592;\n }\n } else {\n pesDts = pesPts;\n }\n }\n pesHdrLen = frag[8];\n payloadStartOffset = pesHdrLen + 9;\n // trim PES header\n stream.data[0] = stream.data[0].subarray(payloadStartOffset);\n stream.size -= payloadStartOffset;\n //reassemble PES packet\n pesData = new Uint8Array(stream.size);\n // reassemble the packet\n while (stream.data.length) {\n frag = stream.data.shift();\n pesData.set(frag, i);\n i += frag.byteLength;\n }\n return {data: pesData, pts: pesPts, dts: pesDts, len: pesLen};\n } else {\n return null;\n }\n }\n\n _parseAVCPES(pes) {\n var track = this._avcTrack,\n samples = track.samples,\n units = this._parseAVCNALu(pes.data),\n units2 = [],\n debug = false,\n key = false,\n length = 0,\n expGolombDecoder,\n avcSample,\n push,\n i;\n // no NALu found\n if (units.length === 0 && samples.length > 0) {\n // append pes.data to previous NAL unit\n var lastavcSample = samples[samples.length - 1];\n var lastUnit = lastavcSample.units.units[lastavcSample.units.units.length - 1];\n var tmp = new Uint8Array(lastUnit.data.byteLength + pes.data.byteLength);\n tmp.set(lastUnit.data, 0);\n tmp.set(pes.data, lastUnit.data.byteLength);\n lastUnit.data = tmp;\n lastavcSample.units.length += pes.data.byteLength;\n track.len += pes.data.byteLength;\n }\n //free pes.data to save up some memory\n pes.data = null;\n var debugString = '';\n\n units.forEach(unit => {\n switch(unit.type) {\n //NDR\n case 1:\n push = true;\n if(debug) {\n debugString += 'NDR ';\n }\n break;\n //IDR\n case 5:\n push = true;\n if(debug) {\n debugString += 'IDR ';\n }\n key = true;\n break;\n //SEI\n case 6:\n push = true;\n if(debug) {\n debugString += 'SEI ';\n }\n expGolombDecoder = new ExpGolomb(unit.data);\n\n // skip frameType\n expGolombDecoder.readUByte();\n\n var payloadType = expGolombDecoder.readUByte();\n\n // TODO: there can be more than one payload in an SEI packet...\n // TODO: need to read type and size in a while loop to get them all\n if (payloadType === 4)\n {\n var payloadSize = 0;\n\n do {\n payloadSize = expGolombDecoder.readUByte();\n }\n while (payloadSize === 255);\n\n var countryCode = expGolombDecoder.readUByte();\n\n if (countryCode === 181)\n {\n var providerCode = expGolombDecoder.readUShort();\n\n if (providerCode === 49)\n {\n var userStructure = expGolombDecoder.readUInt();\n\n if (userStructure === 0x47413934)\n {\n var userDataType = expGolombDecoder.readUByte();\n\n // Raw CEA-608 bytes wrapped in CEA-708 packet\n if (userDataType === 3)\n {\n var firstByte = expGolombDecoder.readUByte();\n var secondByte = expGolombDecoder.readUByte();\n\n var totalCCs = 31 & firstByte;\n var byteArray = [firstByte, secondByte];\n\n for (i=0; i 1) {\n logger.log(`AAC: align PTS for overlapping frames by ${Math.round((newPTS-pts)/90)}`);\n pts=newPTS;\n }\n }\n\n while ((offset + 5) < len) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = (!!(data[offset + 1] & 0x01) ? 7 : 9);\n // retrieve frame size\n frameLength = ((data[offset + 3] & 0x03) << 11) |\n (data[offset + 4] << 3) |\n ((data[offset + 5] & 0xE0) >>> 5);\n frameLength -= headerLength;\n //stamp = pes.pts;\n\n if ((frameLength > 0) && ((offset + headerLength + frameLength) <= len)) {\n stamp = Math.round(pts + frameIndex * frameDuration);\n //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n aacSample = {unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp};\n track.samples.push(aacSample);\n track.len += frameLength;\n offset += frameLength + headerLength;\n frameIndex++;\n // look for ADTS header (0xFFFx)\n for ( ; offset < (len - 1); offset++) {\n if ((data[offset] === 0xff) && ((data[offset + 1] & 0xf0) === 0xf0)) {\n break;\n }\n }\n } else {\n break;\n }\n }\n if (offset < len) {\n aacOverFlow = data.subarray(offset, len);\n //logger.log(`AAC: overflow detected:${len-offset}`);\n } else {\n aacOverFlow = null;\n }\n this.aacOverFlow = aacOverFlow;\n this.lastAacPTS = stamp;\n }\n\n _parseID3PES(pes) {\n this._id3Track.samples.push(pes);\n }\n}\n\nexport default TSDemuxer;\n\n", + "/**\n * highly optimized TS demuxer:\n * parse PAT, PMT\n * extract PES packet from audio and video PIDs\n * extract AVC/H264 NAL units and AAC/ADTS samples from PES packet\n * trigger the remuxer upon parsing completion\n * it also tries to workaround as best as it can audio codec switch (HE-AAC to AAC and vice versa), without having to restart the MediaSource.\n * it also controls the remuxing process :\n * upon discontinuity or level switch detection, it will also notifies the remuxer so that it can reset its state.\n*/\n\n import ADTS from './adts';\n import Event from '../events';\n import ExpGolomb from './exp-golomb';\n// import Hex from '../utils/hex';\n import {logger} from '../utils/logger';\n import {ErrorTypes, ErrorDetails} from '../errors';\n\n class TSDemuxer {\n\n constructor(observer,remuxerClass) {\n this.observer = observer;\n this.remuxerClass = remuxerClass;\n this.lastCC = 0;\n this.remuxer = new this.remuxerClass(observer);\n this._userData = [];\n }\n\n static probe(data) {\n // a TS fragment should contain at least 3 TS packets, a PAT, a PMT, and one PID, each starting with 0x47\n if (data.length >= 3*188 && data[0] === 0x47 && data[188] === 0x47 && data[2*188] === 0x47) {\n return true;\n } else {\n return false;\n }\n }\n\n switchLevel() {\n this.pmtParsed = false;\n this._pmtId = -1;\n this.lastAacPTS = null;\n this.aacOverFlow = null;\n this._avcTrack = {type: 'video', id :-1, sequenceNumber: 0, samples : [], len : 0, nbNalu : 0};\n this._aacTrack = {type: 'audio', id :-1, sequenceNumber: 0, samples : [], len : 0};\n this._id3Track = {type: 'id3', id :-1, sequenceNumber: 0, samples : [], len : 0};\n this._txtTrack = {type: 'text', id: -1, sequenceNumber: 0, samples: [], len: 0};\n this.remuxer.switchLevel();\n }\n\n insertDiscontinuity() {\n this.switchLevel();\n this.remuxer.insertDiscontinuity();\n }\n\n // feed incoming data to the front of the parsing pipeline\n push(data, audioCodec, videoCodec, timeOffset, cc, level, sn, duration) {\n var avcData, aacData, id3Data,\n start, len = data.length, stt, pid, atf, offset;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.timeOffset = timeOffset;\n this._duration = duration;\n this.contiguous = false;\n if (cc !== this.lastCC) {\n logger.log('discontinuity detected');\n this.insertDiscontinuity();\n this.lastCC = cc;\n } else if (level !== this.lastLevel) {\n logger.log('level switch detected');\n this.switchLevel();\n this.lastLevel = level;\n } else if (sn === (this.lastSN+1)) {\n this.contiguous = true;\n }\n this.lastSN = sn;\n\n if(!this.contiguous) {\n // flush any partial content\n this.aacOverFlow = null;\n }\n\n var pmtParsed = this.pmtParsed,\n avcId = this._avcTrack.id,\n aacId = this._aacTrack.id,\n id3Id = this._id3Track.id;\n\n // don't parse last TS packet if incomplete\n len -= len % 188;\n // loop through TS packets\n for (start = 0; start < len; start += 188) {\n if (data[start] === 0x47) {\n stt = !!(data[start + 1] & 0x40);\n // pid is a 13-bit field starting at the last bit of TS[1]\n pid = ((data[start + 1] & 0x1f) << 8) + data[start + 2];\n atf = (data[start + 3] & 0x30) >> 4;\n // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n if (atf > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset === (start + 188)) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n if (pmtParsed) {\n if (pid === avcId) {\n if (stt) {\n if (avcData) {\n this._parseAVCPES(this._parsePES(avcData));\n }\n avcData = {data: [], size: 0};\n }\n if (avcData) {\n avcData.data.push(data.subarray(offset, start + 188));\n avcData.size += start + 188 - offset;\n }\n } else if (pid === aacId) {\n if (stt) {\n if (aacData) {\n this._parseAACPES(this._parsePES(aacData));\n }\n aacData = {data: [], size: 0};\n }\n if (aacData) {\n aacData.data.push(data.subarray(offset, start + 188));\n aacData.size += start + 188 - offset;\n }\n } else if (pid === id3Id) {\n if (stt) {\n if (id3Data) {\n this._parseID3PES(this._parsePES(id3Data));\n }\n id3Data = {data: [], size: 0};\n }\n if (id3Data) {\n id3Data.data.push(data.subarray(offset, start + 188));\n id3Data.size += start + 188 - offset;\n }\n }\n } else {\n if (stt) {\n offset += data[offset] + 1;\n }\n if (pid === 0) {\n this._parsePAT(data, offset);\n } else if (pid === this._pmtId) {\n this._parsePMT(data, offset);\n pmtParsed = this.pmtParsed = true;\n avcId = this._avcTrack.id;\n aacId = this._aacTrack.id;\n id3Id = this._id3Track.id;\n }\n }\n } else {\n this.observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'TS packet did not start with 0x47'});\n }\n }\n // parse last PES packet\n if (avcData) {\n this._parseAVCPES(this._parsePES(avcData));\n }\n if (aacData) {\n this._parseAACPES(this._parsePES(aacData));\n }\n if (id3Data) {\n this._parseID3PES(this._parsePES(id3Data));\n }\n this.remux();\n }\n\n remux() {\n this.remuxer.remux(this._aacTrack, this._avcTrack, this._id3Track, this._txtTrack, this.timeOffset, this.contiguous);\n }\n\n destroy() {\n this.switchLevel();\n this._initPTS = this._initDTS = undefined;\n this._duration = 0;\n }\n\n _parsePAT(data, offset) {\n // skip the PSI header and parse the first PMT entry\n this._pmtId = (data[offset + 10] & 0x1F) << 8 | data[offset + 11];\n //logger.log('PMT PID:' + this._pmtId);\n }\n\n _parsePMT(data, offset) {\n var sectionLength, tableEnd, programInfoLength, pid;\n sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n pid = (data[offset + 1] & 0x1F) << 8 | data[offset + 2];\n switch(data[offset]) {\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n case 0x0f:\n //logger.log('AAC PID:' + pid);\n this._aacTrack.id = pid;\n break;\n // Packetized metadata (ID3)\n case 0x15:\n //logger.log('ID3 PID:' + pid);\n this._id3Track.id = pid;\n break;\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n case 0x1b:\n //logger.log('AVC PID:' + pid);\n this._avcTrack.id = pid;\n break;\n default:\n logger.log('unkown stream type:' + data[offset]);\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += ((data[offset + 3] & 0x0F) << 8 | data[offset + 4]) + 5;\n }\n }\n\n _parsePES(stream) {\n var i = 0, frag, pesFlags, pesPrefix, pesLen, pesHdrLen, pesData, pesPts, pesDts, payloadStartOffset;\n //retrieve PTS/DTS from first fragment\n frag = stream.data[0];\n pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n if (pesPrefix === 1) {\n pesLen = (frag[4] << 8) + frag[5];\n pesFlags = frag[7];\n if (pesFlags & 0xC0) {\n /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n as Bitwise operators treat their operands as a sequence of 32 bits */\n pesPts = (frag[9] & 0x0E) * 536870912 +// 1 << 29\n (frag[10] & 0xFF) * 4194304 +// 1 << 22\n (frag[11] & 0xFE) * 16384 +// 1 << 14\n (frag[12] & 0xFF) * 128 +// 1 << 7\n (frag[13] & 0xFE) / 2;\n // check if greater than 2^32 -1\n if (pesPts > 4294967295) {\n // decrement 2^33\n pesPts -= 8589934592;\n }\n if (pesFlags & 0x40) {\n pesDts = (frag[14] & 0x0E ) * 536870912 +// 1 << 29\n (frag[15] & 0xFF ) * 4194304 +// 1 << 22\n (frag[16] & 0xFE ) * 16384 +// 1 << 14\n (frag[17] & 0xFF ) * 128 +// 1 << 7\n (frag[18] & 0xFE ) / 2;\n // check if greater than 2^32 -1\n if (pesDts > 4294967295) {\n // decrement 2^33\n pesDts -= 8589934592;\n }\n } else {\n pesDts = pesPts;\n }\n }\n pesHdrLen = frag[8];\n payloadStartOffset = pesHdrLen + 9;\n // trim PES header\n stream.data[0] = stream.data[0].subarray(payloadStartOffset);\n stream.size -= payloadStartOffset;\n //reassemble PES packet\n pesData = new Uint8Array(stream.size);\n // reassemble the packet\n while (stream.data.length) {\n frag = stream.data.shift();\n pesData.set(frag, i);\n i += frag.byteLength;\n }\n return {data: pesData, pts: pesPts, dts: pesDts, len: pesLen};\n } else {\n return null;\n }\n }\n\n _parseAVCPES(pes) {\n var track = this._avcTrack,\n samples = track.samples,\n units = this._parseAVCNALu(pes.data),\n units2 = [],\n debug = false,\n key = false,\n length = 0,\n expGolombDecoder,\n avcSample,\n push,\n i;\n // no NALu found\n if (units.length === 0 && samples.length > 0) {\n // append pes.data to previous NAL unit\n var lastavcSample = samples[samples.length - 1];\n var lastUnit = lastavcSample.units.units[lastavcSample.units.units.length - 1];\n var tmp = new Uint8Array(lastUnit.data.byteLength + pes.data.byteLength);\n tmp.set(lastUnit.data, 0);\n tmp.set(pes.data, lastUnit.data.byteLength);\n lastUnit.data = tmp;\n lastavcSample.units.length += pes.data.byteLength;\n track.len += pes.data.byteLength;\n }\n //free pes.data to save up some memory\n pes.data = null;\n var debugString = '';\n\n units.forEach(unit => {\n switch(unit.type) {\n //NDR\n case 1:\n push = true;\n if(debug) {\n debugString += 'NDR ';\n }\n break;\n //IDR\n case 5:\n push = true;\n if(debug) {\n debugString += 'IDR ';\n }\n key = true;\n break;\n //SEI\n case 6:\n push = true;\n if(debug) {\n debugString += 'SEI ';\n }\n expGolombDecoder = new ExpGolomb(unit.data);\n\n // skip frameType\n expGolombDecoder.readUByte();\n\n var payloadType = expGolombDecoder.readUByte();\n\n // TODO: there can be more than one payload in an SEI packet...\n // TODO: need to read type and size in a while loop to get them all\n if (payloadType === 4)\n {\n var payloadSize = 0;\n\n do {\n payloadSize = expGolombDecoder.readUByte();\n }\n while (payloadSize === 255);\n\n var countryCode = expGolombDecoder.readUByte();\n\n if (countryCode === 181)\n {\n var providerCode = expGolombDecoder.readUShort();\n\n if (providerCode === 49)\n {\n var userStructure = expGolombDecoder.readUInt();\n\n if (userStructure === 0x47413934)\n {\n var userDataType = expGolombDecoder.readUByte();\n\n // Raw CEA-608 bytes wrapped in CEA-708 packet\n if (userDataType === 3)\n {\n var firstByte = expGolombDecoder.readUByte();\n var secondByte = expGolombDecoder.readUByte();\n\n var totalCCs = 31 & firstByte;\n var byteArray = [firstByte, secondByte];\n\n for (i=0; i 1) {\n logger.log(`AAC: align PTS for overlapping frames by ${Math.round((newPTS-pts)/90)}`);\n pts=newPTS;\n }\n }\n\n while ((offset + 5) < len) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = (!!(data[offset + 1] & 0x01) ? 7 : 9);\n // retrieve frame size\n frameLength = ((data[offset + 3] & 0x03) << 11) |\n (data[offset + 4] << 3) |\n ((data[offset + 5] & 0xE0) >>> 5);\n frameLength -= headerLength;\n //stamp = pes.pts;\n\n if ((frameLength > 0) && ((offset + headerLength + frameLength) <= len)) {\n stamp = pts + frameIndex * frameDuration;\n //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n aacSample = {unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp};\n track.samples.push(aacSample);\n track.len += frameLength;\n offset += frameLength + headerLength;\n frameIndex++;\n // look for ADTS header (0xFFFx)\n for ( ; offset < (len - 1); offset++) {\n if ((data[offset] === 0xff) && ((data[offset + 1] & 0xf0) === 0xf0)) {\n break;\n }\n }\n } else {\n break;\n }\n }\n if (offset < len) {\n aacOverFlow = data.subarray(offset, len);\n //logger.log(`AAC: overflow detected:${len-offset}`);\n } else {\n aacOverFlow = null;\n }\n this.aacOverFlow = aacOverFlow;\n this.lastAacPTS = stamp;\n }\n\n _parseID3PES(pes) {\n this._id3Track.samples.push(pes);\n }\n}\n\nexport default TSDemuxer;\n\n", "export const ErrorTypes = {\n // Identifier for a network error (loading error / timeout ...)\n NETWORK_ERROR: 'hlsNetworkError',\n // Identifier for a media Error (video/parsing/mediasource error)\n MEDIA_ERROR: 'hlsMediaError',\n // Identifier for all other errors\n OTHER_ERROR: 'hlsOtherError'\n};\n\nexport const ErrorDetails = {\n // Identifier for a manifest load error - data: { url : faulty URL, response : XHR response}\n MANIFEST_LOAD_ERROR: 'manifestLoadError',\n // Identifier for a manifest load timeout - data: { url : faulty URL, response : XHR response}\n MANIFEST_LOAD_TIMEOUT: 'manifestLoadTimeOut',\n // Identifier for a manifest parsing error - data: { url : faulty URL, reason : error reason}\n MANIFEST_PARSING_ERROR: 'manifestParsingError',\n // Identifier for playlist load error - data: { url : faulty URL, response : XHR response}\n LEVEL_LOAD_ERROR: 'levelLoadError',\n // Identifier for playlist load timeout - data: { url : faulty URL, response : XHR response}\n LEVEL_LOAD_TIMEOUT: 'levelLoadTimeOut',\n // Identifier for a level switch error - data: { level : faulty level Id, event : error description}\n LEVEL_SWITCH_ERROR: 'levelSwitchError',\n // Identifier for fragment load error - data: { frag : fragment object, response : XHR response}\n FRAG_LOAD_ERROR: 'fragLoadError',\n // Identifier for fragment loop loading error - data: { frag : fragment object}\n FRAG_LOOP_LOADING_ERROR: 'fragLoopLoadingError',\n // Identifier for fragment load timeout error - data: { frag : fragment object}\n FRAG_LOAD_TIMEOUT: 'fragLoadTimeOut',\n // Identifier for a fragment decryption error event - data: parsing error description\n FRAG_DECRYPT_ERROR: 'fragDecryptError',\n // Identifier for a fragment parsing error event - data: parsing error description\n FRAG_PARSING_ERROR: 'fragParsingError',\n // Identifier for decrypt key load error - data: { frag : fragment object, response : XHR response}\n KEY_LOAD_ERROR: 'keyLoadError',\n // Identifier for decrypt key load timeout error - data: { frag : fragment object}\n KEY_LOAD_TIMEOUT: 'keyLoadTimeOut',\n // Identifier for a buffer append error - data: append error description\n BUFFER_APPEND_ERROR: 'bufferAppendError',\n // Identifier for a buffer appending error event - data: appending error description\n BUFFER_APPENDING_ERROR: 'bufferAppendingError',\n // Identifier for a buffer stalled error event\n BUFFER_STALLED_ERROR: 'bufferStalledError'\n};\n", "/*\n*\n* All objects in the event handling chain should inherit from this class\n*\n*/\n\n//import {logger} from './utils/logger';\n\nclass EventHandler {\n\n constructor(hls, ...events) {\n this.hls = hls;\n this.onEvent = this.onEvent.bind(this);\n this.handledEvents = events;\n this.useGenericHandler = true;\n\n this.registerListeners();\n }\n\n destroy() {\n this.unregisterListeners();\n }\n\n isEventHandler() {\n return typeof this.handledEvents === 'object' && this.handledEvents.length && typeof this.onEvent === 'function';\n }\n\n registerListeners() {\n if (this.isEventHandler()) {\n this.handledEvents.forEach(function(event) {\n if (event === 'hlsEventGeneric') {\n throw new Error('Forbidden event name: ' + event);\n }\n this.hls.on(event, this.onEvent);\n }.bind(this));\n }\n }\n\n unregisterListeners() {\n if (this.isEventHandler()) {\n this.handledEvents.forEach(function(event) {\n this.hls.off(event, this.onEvent);\n }.bind(this));\n }\n }\n\n /*\n * arguments: event (string), data (any)\n */\n onEvent(event, data) {\n this.onEventGeneric(event, data);\n }\n\n onEventGeneric(event, data) {\n var eventToFunction = function(event, data) {\n var funcName = 'on' + event.replace('hls', '');\n if (typeof this[funcName] !== 'function') {\n throw new Error(`Event ${event} has no generic handler in this ${this.constructor.name} class (tried ${funcName})`);\n }\n return this[funcName].bind(this, data);\n };\n eventToFunction.call(this, event, data).call();\n }\n}\n\nexport default EventHandler;", "module.exports = {\n // fired before MediaSource is attaching to media element - data: { media }\n MEDIA_ATTACHING: 'hlsMediaAttaching',\n // fired when MediaSource has been succesfully attached to media element - data: { }\n MEDIA_ATTACHED: 'hlsMediaAttached',\n // fired before detaching MediaSource from media element - data: { }\n MEDIA_DETACHING: 'hlsMediaDetaching',\n // fired when MediaSource has been detached from media element - data: { }\n MEDIA_DETACHED: 'hlsMediaDetached',\n // fired to signal that a manifest loading starts - data: { url : manifestURL}\n MANIFEST_LOADING: 'hlsManifestLoading',\n // fired after manifest has been loaded - data: { levels : [available quality levels] , url : manifestURL, stats : { trequest, tfirst, tload, mtime}}\n MANIFEST_LOADED: 'hlsManifestLoaded',\n // fired after manifest has been parsed - data: { levels : [available quality levels] , firstLevel : index of first quality level appearing in Manifest}\n MANIFEST_PARSED: 'hlsManifestParsed',\n // fired when a level playlist loading starts - data: { url : level URL level : id of level being loaded}\n LEVEL_LOADING: 'hlsLevelLoading',\n // fired when a level playlist loading finishes - data: { details : levelDetails object, level : id of loaded level, stats : { trequest, tfirst, tload, mtime} }\n LEVEL_LOADED: 'hlsLevelLoaded',\n // fired when a level's details have been updated based on previous details, after it has been loaded. - data: { details : levelDetails object, level : id of updated level }\n LEVEL_UPDATED: 'hlsLevelUpdated',\n // fired when a level's PTS information has been updated after parsing a fragment - data: { details : levelDetails object, level : id of updated level, drift: PTS drift observed when parsing last fragment }\n LEVEL_PTS_UPDATED: 'hlsLevelPtsUpdated',\n // fired when a level switch is requested - data: { level : id of new level }\n LEVEL_SWITCH: 'hlsLevelSwitch',\n // fired when a fragment loading starts - data: { frag : fragment object}\n FRAG_LOADING: 'hlsFragLoading',\n // fired when a fragment loading is progressing - data: { frag : fragment object, { trequest, tfirst, loaded}}\n FRAG_LOAD_PROGRESS: 'hlsFragLoadProgress',\n // Identifier for fragment load aborting for emergency switch down - data: {frag : fragment object}\n FRAG_LOAD_EMERGENCY_ABORTED: 'hlsFragLoadEmergencyAborted',\n // fired when a fragment loading is completed - data: { frag : fragment object, payload : fragment payload, stats : { trequest, tfirst, tload, length}}\n FRAG_LOADED: 'hlsFragLoaded',\n // fired when Init Segment has been extracted from fragment - data: { moov : moov MP4 box, codecs : codecs found while parsing fragment}\n FRAG_PARSING_INIT_SEGMENT: 'hlsFragParsingInitSegment',\n // fired when parsing sei text is completed - data: { samples : [ sei samples pes ] }\n FRAG_PARSING_USERDATA: 'hlsFragParsingUserdata',\n // fired when parsing id3 is completed - data: { samples : [ id3 samples pes ] }\n FRAG_PARSING_METADATA: 'hlsFragParsingMetadata',\n // fired when moof/mdat have been extracted from fragment - data: { moof : moof MP4 box, mdat : mdat MP4 box}\n FRAG_PARSING_DATA: 'hlsFragParsingData',\n // fired when fragment parsing is completed - data: undefined\n FRAG_PARSED: 'hlsFragParsed',\n // fired when fragment remuxed MP4 boxes have all been appended into SourceBuffer - data: { frag : fragment object, stats : { trequest, tfirst, tload, tparsed, tbuffered, length} }\n FRAG_BUFFERED: 'hlsFragBuffered',\n // fired when fragment matching with current media position is changing - data : { frag : fragment object }\n FRAG_CHANGED: 'hlsFragChanged',\n // Identifier for a FPS drop event - data: {curentDropped, currentDecoded, totalDroppedFrames}\n FPS_DROP: 'hlsFpsDrop',\n // Identifier for an error event - data: { type : error type, details : error details, fatal : if true, hls.js cannot/will not try to recover, if false, hls.js will try to recover,other error specific data}\n ERROR: 'hlsError',\n // fired when hls.js instance starts destroying. Different from MEDIA_DETACHED as one could want to detach and reattach a media to the instance of hls.js to handle mid-rolls for example\n DESTROYING: 'hlsDestroying',\n // fired when a decrypt key loading starts - data: { frag : fragment object}\n KEY_LOADING: 'hlsKeyLoading',\n // fired when a decrypt key loading is completed - data: { frag : fragment object, payload : key payload, stats : { trequest, tfirst, tload, length}}\n KEY_LOADED: 'hlsKeyLoaded',\n};\n", "/**\n * Level Helper class, providing methods dealing with playlist sliding and drift\n*/\n\nimport {logger} from '../utils/logger';\n\nclass LevelHelper {\n\n static mergeDetails(oldDetails,newDetails) {\n var start = Math.max(oldDetails.startSN,newDetails.startSN)-newDetails.startSN,\n end = Math.min(oldDetails.endSN,newDetails.endSN)-newDetails.startSN,\n delta = newDetails.startSN - oldDetails.startSN,\n oldfragments = oldDetails.fragments,\n newfragments = newDetails.fragments,\n ccOffset =0,\n PTSFrag;\n\n // check if old/new playlists have fragments in common\n if ( end < start) {\n newDetails.PTSKnown = false;\n return;\n }\n // loop through overlapping SN and update startPTS , cc, and duration if any found\n for(var i = start ; i <= end ; i++) {\n var oldFrag = oldfragments[delta+i],\n newFrag = newfragments[i];\n ccOffset = oldFrag.cc - newFrag.cc;\n if (!isNaN(oldFrag.startPTS)) {\n newFrag.start = newFrag.startPTS = oldFrag.startPTS;\n newFrag.endPTS = oldFrag.endPTS;\n newFrag.duration = oldFrag.duration;\n PTSFrag = newFrag;\n }\n }\n\n if(ccOffset) {\n logger.log(`discontinuity sliding from playlist, take drift into account`);\n for(i = 0 ; i < newfragments.length ; i++) {\n newfragments[i].cc += ccOffset;\n }\n }\n\n // if at least one fragment contains PTS info, recompute PTS information for all fragments\n if(PTSFrag) {\n LevelHelper.updateFragPTS(newDetails,PTSFrag.sn,PTSFrag.startPTS,PTSFrag.endPTS);\n } else {\n // adjust start by sliding offset\n var sliding = oldfragments[delta].start;\n for(i = 0 ; i < newfragments.length ; i++) {\n newfragments[i].start += sliding;\n }\n }\n // if we are here, it means we have fragments overlapping between\n // old and new level. reliable PTS info is thus relying on old level\n newDetails.PTSKnown = oldDetails.PTSKnown;\n return;\n }\n\n static updateFragPTS(details,sn,startPTS,endPTS) {\n var fragIdx, fragments, frag, i;\n // exit if sn out of range\n if (sn < details.startSN || sn > details.endSN) {\n return 0;\n }\n fragIdx = sn - details.startSN;\n fragments = details.fragments;\n frag = fragments[fragIdx];\n if(!isNaN(frag.startPTS)) {\n startPTS = Math.min(startPTS,frag.startPTS);\n endPTS = Math.max(endPTS, frag.endPTS);\n }\n\n var drift = startPTS - frag.start;\n\n frag.start = frag.startPTS = startPTS;\n frag.endPTS = endPTS;\n frag.duration = endPTS - startPTS;\n // adjust fragment PTS/duration from seqnum-1 to frag 0\n for(i = fragIdx ; i > 0 ; i--) {\n LevelHelper.updatePTS(fragments,i,i-1);\n }\n\n // adjust fragment PTS/duration from seqnum to last frag\n for(i = fragIdx ; i < fragments.length - 1 ; i++) {\n LevelHelper.updatePTS(fragments,i,i+1);\n }\n details.PTSKnown = true;\n //logger.log(` frag start/end:${startPTS.toFixed(3)}/${endPTS.toFixed(3)}`);\n\n return drift;\n }\n\n static updatePTS(fragments,fromIdx, toIdx) {\n var fragFrom = fragments[fromIdx],fragTo = fragments[toIdx], fragToPTS = fragTo.startPTS;\n // if we know startPTS[toIdx]\n if(!isNaN(fragToPTS)) {\n // update fragment duration.\n // it helps to fix drifts between playlist reported duration and fragment real duration\n if (toIdx > fromIdx) {\n fragFrom.duration = fragToPTS-fragFrom.start;\n if(fragFrom.duration < 0) {\n logger.error(`negative duration computed for frag ${fragFrom.sn},level ${fragFrom.level}, there should be some duration drift between playlist and fragment!`);\n }\n } else {\n fragTo.duration = fragFrom.start - fragToPTS;\n if(fragTo.duration < 0) {\n logger.error(`negative duration computed for frag ${fragTo.sn},level ${fragTo.level}, there should be some duration drift between playlist and fragment!`);\n }\n }\n } else {\n // we dont know startPTS[toIdx]\n if (toIdx > fromIdx) {\n fragTo.start = fragFrom.start + fragFrom.duration;\n } else {\n fragTo.start = fragFrom.start - fragTo.duration;\n }\n }\n }\n}\n\nexport default LevelHelper;\n", - "/**\n * HLS interface\n */\n'use strict';\n\nimport Event from './events';\nimport {ErrorTypes, ErrorDetails} from './errors';\nimport PlaylistLoader from './loader/playlist-loader';\nimport FragmentLoader from './loader/fragment-loader';\nimport AbrController from './controller/abr-controller';\nimport MSEMediaController from './controller/mse-media-controller';\nimport LevelController from './controller/level-controller';\nimport TimelineController from './controller/timeline-controller';\n//import FPSController from './controller/fps-controller';\nimport {logger, enableLogs} from './utils/logger';\nimport XhrLoader from './utils/xhr-loader';\nimport EventEmitter from 'events';\nimport KeyLoader from './loader/key-loader';\n\nclass Hls {\n\n static isSupported() {\n return (window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"'));\n }\n\n static get Events() {\n return Event;\n }\n\n static get ErrorTypes() {\n return ErrorTypes;\n }\n\n static get ErrorDetails() {\n return ErrorDetails;\n }\n\n static get DefaultConfig() {\n if(!Hls.defaultConfig) {\n Hls.defaultConfig = {\n autoStartLoad: true,\n debug: false,\n maxBufferLength: 30,\n maxBufferSize: 60 * 1000 * 1000,\n maxBufferHole: 0.3,\n maxSeekHole: 2,\n liveSyncDurationCount:3,\n liveMaxLatencyDurationCount: Infinity,\n maxMaxBufferLength: 600,\n enableWorker: true,\n enableSoftwareAES: true,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 1,\n manifestLoadingRetryDelay: 1000,\n levelLoadingTimeOut: 10000,\n levelLoadingMaxRetry: 4,\n levelLoadingRetryDelay: 1000,\n fragLoadingTimeOut: 20000,\n fragLoadingMaxRetry: 6,\n fragLoadingRetryDelay: 1000,\n fragLoadingLoopThreshold: 3,\n // fpsDroppedMonitoringPeriod: 5000,\n // fpsDroppedMonitoringThreshold: 0.2,\n appendErrorMaxRetry: 3,\n loader: XhrLoader,\n fLoader: undefined,\n pLoader: undefined,\n abrController : AbrController,\n mediaController: MSEMediaController,\n timelineController: TimelineController,\n enableCEA708Captions: true\n };\n }\n return Hls.defaultConfig;\n }\n\n static set DefaultConfig(defaultConfig) {\n Hls.defaultConfig = defaultConfig;\n }\n\n constructor(config = {}) {\n var defaultConfig = Hls.DefaultConfig;\n for (var prop in defaultConfig) {\n if (prop in config) { continue; }\n config[prop] = defaultConfig[prop];\n }\n\n if (config.liveMaxLatencyDurationCount !== undefined && config.liveMaxLatencyDurationCount <= config.liveSyncDurationCount) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be gt \"liveSyncDurationCount\"');\n }\n\n enableLogs(config.debug);\n this.config = config;\n // observer setup\n var observer = this.observer = new EventEmitter();\n observer.trigger = function trigger (event, ...data) {\n observer.emit(event, event, ...data);\n };\n\n observer.off = function off (event, ...data) {\n observer.removeListener(event, ...data);\n };\n this.on = observer.on.bind(observer);\n this.off = observer.off.bind(observer);\n this.trigger = observer.trigger.bind(observer);\n this.playlistLoader = new PlaylistLoader(this);\n this.fragmentLoader = new FragmentLoader(this);\n this.levelController = new LevelController(this);\n this.abrController = new config.abrController(this);\n this.mediaController = new config.mediaController(this);\n this.timelineController = new config.timelineController(this);\n this.keyLoader = new KeyLoader(this);\n //this.fpsController = new FPSController(this);\n }\n\n destroy() {\n logger.log('destroy');\n this.trigger(Event.DESTROYING);\n this.detachMedia();\n this.playlistLoader.destroy();\n this.fragmentLoader.destroy();\n this.levelController.destroy();\n this.mediaController.destroy();\n this.timelineController.destroy();\n this.keyLoader.destroy();\n //this.fpsController.destroy();\n this.url = null;\n this.observer.removeAllListeners();\n }\n\n attachMedia(media) {\n logger.log('attachMedia');\n this.media = media;\n this.trigger(Event.MEDIA_ATTACHING, {media: media});\n }\n\n detachMedia() {\n logger.log('detachMedia');\n this.trigger(Event.MEDIA_DETACHING);\n this.media = null;\n }\n\n loadSource(url) {\n logger.log(`loadSource:${url}`);\n this.url = url;\n // when attaching to a source URL, trigger a playlist load\n this.trigger(Event.MANIFEST_LOADING, {url: url});\n }\n\n startLoad() {\n logger.log('startLoad');\n this.mediaController.startLoad();\n }\n\n swapAudioCodec() {\n logger.log('swapAudioCodec');\n this.mediaController.swapAudioCodec();\n }\n\n recoverMediaError() {\n logger.log('recoverMediaError');\n var media = this.media;\n this.detachMedia();\n this.attachMedia(media);\n }\n\n /** Return all quality levels **/\n get levels() {\n return this.levelController.levels;\n }\n\n /** Return current playback quality level **/\n get currentLevel() {\n return this.mediaController.currentLevel;\n }\n\n /* set quality level immediately (-1 for automatic level selection) */\n set currentLevel(newLevel) {\n logger.log(`set currentLevel:${newLevel}`);\n this.loadLevel = newLevel;\n this.mediaController.immediateLevelSwitch();\n }\n\n /** Return next playback quality level (quality level of next fragment) **/\n get nextLevel() {\n return this.mediaController.nextLevel;\n }\n\n /* set quality level for next fragment (-1 for automatic level selection) */\n set nextLevel(newLevel) {\n logger.log(`set nextLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n this.mediaController.nextLevelSwitch();\n }\n\n /** Return the quality level of current/last loaded fragment **/\n get loadLevel() {\n return this.levelController.level;\n }\n\n /* set quality level for current/next loaded fragment (-1 for automatic level selection) */\n set loadLevel(newLevel) {\n logger.log(`set loadLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n }\n\n /** Return the quality level of next loaded fragment **/\n get nextLoadLevel() {\n return this.levelController.nextLoadLevel();\n }\n\n /** set quality level of next loaded fragment **/\n set nextLoadLevel(level) {\n this.levelController.level = level;\n }\n\n /** Return first level (index of first level referenced in manifest)\n **/\n get firstLevel() {\n return this.levelController.firstLevel;\n }\n\n /** set first level (index of first level referenced in manifest)\n **/\n set firstLevel(newLevel) {\n logger.log(`set firstLevel:${newLevel}`);\n this.levelController.firstLevel = newLevel;\n }\n\n /** Return start level (level of first fragment that will be played back)\n if not overrided by user, first level appearing in manifest will be used as start level\n if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n **/\n get startLevel() {\n return this.levelController.startLevel;\n }\n\n /** set start level (level of first fragment that will be played back)\n if not overrided by user, first level appearing in manifest will be used as start level\n if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n **/\n set startLevel(newLevel) {\n logger.log(`set startLevel:${newLevel}`);\n this.levelController.startLevel = newLevel;\n }\n\n /** Return the capping/max level value that could be used by automatic level selection algorithm **/\n get autoLevelCapping() {\n return this.abrController.autoLevelCapping;\n }\n\n /** set the capping/max level value that could be used by automatic level selection algorithm **/\n set autoLevelCapping(newLevel) {\n logger.log(`set autoLevelCapping:${newLevel}`);\n this.abrController.autoLevelCapping = newLevel;\n }\n\n /* check if we are in automatic level selection mode */\n get autoLevelEnabled() {\n return (this.levelController.manualLevel === -1);\n }\n\n /* return manual level */\n get manualLevel() {\n return this.levelController.manualLevel;\n }\n}\n\nexport default Hls;\n", + "/**\n * HLS interface\n */\n'use strict';\n\nimport Event from './events';\nimport {ErrorTypes, ErrorDetails} from './errors';\nimport PlaylistLoader from './loader/playlist-loader';\nimport FragmentLoader from './loader/fragment-loader';\nimport AbrController from './controller/abr-controller';\nimport MSEMediaController from './controller/mse-media-controller';\nimport LevelController from './controller/level-controller';\nimport TimelineController from './controller/timeline-controller';\n//import FPSController from './controller/fps-controller';\nimport {logger, enableLogs} from './utils/logger';\nimport XhrLoader from './utils/xhr-loader';\nimport EventEmitter from 'events';\nimport KeyLoader from './loader/key-loader';\n\nclass Hls {\n\n static isSupported() {\n return (window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"'));\n }\n\n static get Events() {\n return Event;\n }\n\n static get ErrorTypes() {\n return ErrorTypes;\n }\n\n static get ErrorDetails() {\n return ErrorDetails;\n }\n\n static get DefaultConfig() {\n if(!Hls.defaultConfig) {\n Hls.defaultConfig = {\n autoStartLoad: true,\n debug: false,\n maxBufferLength: 30,\n maxBufferSize: 60 * 1000 * 1000,\n maxBufferHole: 0.5,\n maxSeekHole: 2,\n liveSyncDurationCount:3,\n liveMaxLatencyDurationCount: Infinity,\n maxMaxBufferLength: 600,\n enableWorker: true,\n enableSoftwareAES: true,\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 1,\n manifestLoadingRetryDelay: 1000,\n levelLoadingTimeOut: 10000,\n levelLoadingMaxRetry: 4,\n levelLoadingRetryDelay: 1000,\n fragLoadingTimeOut: 20000,\n fragLoadingMaxRetry: 6,\n fragLoadingRetryDelay: 1000,\n fragLoadingLoopThreshold: 3,\n // fpsDroppedMonitoringPeriod: 5000,\n // fpsDroppedMonitoringThreshold: 0.2,\n appendErrorMaxRetry: 3,\n loader: XhrLoader,\n fLoader: undefined,\n pLoader: undefined,\n abrController : AbrController,\n mediaController: MSEMediaController,\n timelineController: TimelineController,\n enableCEA708Captions: true\n };\n }\n return Hls.defaultConfig;\n }\n\n static set DefaultConfig(defaultConfig) {\n Hls.defaultConfig = defaultConfig;\n }\n\n constructor(config = {}) {\n var defaultConfig = Hls.DefaultConfig;\n for (var prop in defaultConfig) {\n if (prop in config) { continue; }\n config[prop] = defaultConfig[prop];\n }\n\n if (config.liveMaxLatencyDurationCount !== undefined && config.liveMaxLatencyDurationCount <= config.liveSyncDurationCount) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be gt \"liveSyncDurationCount\"');\n }\n\n enableLogs(config.debug);\n this.config = config;\n // observer setup\n var observer = this.observer = new EventEmitter();\n observer.trigger = function trigger (event, ...data) {\n observer.emit(event, event, ...data);\n };\n\n observer.off = function off (event, ...data) {\n observer.removeListener(event, ...data);\n };\n this.on = observer.on.bind(observer);\n this.off = observer.off.bind(observer);\n this.trigger = observer.trigger.bind(observer);\n this.playlistLoader = new PlaylistLoader(this);\n this.fragmentLoader = new FragmentLoader(this);\n this.levelController = new LevelController(this);\n this.abrController = new config.abrController(this);\n this.mediaController = new config.mediaController(this);\n this.timelineController = new config.timelineController(this);\n this.keyLoader = new KeyLoader(this);\n //this.fpsController = new FPSController(this);\n }\n\n destroy() {\n logger.log('destroy');\n this.trigger(Event.DESTROYING);\n this.detachMedia();\n this.playlistLoader.destroy();\n this.fragmentLoader.destroy();\n this.levelController.destroy();\n this.mediaController.destroy();\n this.timelineController.destroy();\n this.keyLoader.destroy();\n //this.fpsController.destroy();\n this.url = null;\n this.observer.removeAllListeners();\n }\n\n attachMedia(media) {\n logger.log('attachMedia');\n this.media = media;\n this.trigger(Event.MEDIA_ATTACHING, {media: media});\n }\n\n detachMedia() {\n logger.log('detachMedia');\n this.trigger(Event.MEDIA_DETACHING);\n this.media = null;\n }\n\n loadSource(url) {\n logger.log(`loadSource:${url}`);\n this.url = url;\n // when attaching to a source URL, trigger a playlist load\n this.trigger(Event.MANIFEST_LOADING, {url: url});\n }\n\n startLoad() {\n logger.log('startLoad');\n this.mediaController.startLoad();\n }\n\n swapAudioCodec() {\n logger.log('swapAudioCodec');\n this.mediaController.swapAudioCodec();\n }\n\n recoverMediaError() {\n logger.log('recoverMediaError');\n var media = this.media;\n this.detachMedia();\n this.attachMedia(media);\n }\n\n /** Return all quality levels **/\n get levels() {\n return this.levelController.levels;\n }\n\n /** Return current playback quality level **/\n get currentLevel() {\n return this.mediaController.currentLevel;\n }\n\n /* set quality level immediately (-1 for automatic level selection) */\n set currentLevel(newLevel) {\n logger.log(`set currentLevel:${newLevel}`);\n this.loadLevel = newLevel;\n this.mediaController.immediateLevelSwitch();\n }\n\n /** Return next playback quality level (quality level of next fragment) **/\n get nextLevel() {\n return this.mediaController.nextLevel;\n }\n\n /* set quality level for next fragment (-1 for automatic level selection) */\n set nextLevel(newLevel) {\n logger.log(`set nextLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n this.mediaController.nextLevelSwitch();\n }\n\n /** Return the quality level of current/last loaded fragment **/\n get loadLevel() {\n return this.levelController.level;\n }\n\n /* set quality level for current/next loaded fragment (-1 for automatic level selection) */\n set loadLevel(newLevel) {\n logger.log(`set loadLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n }\n\n /** Return the quality level of next loaded fragment **/\n get nextLoadLevel() {\n return this.levelController.nextLoadLevel();\n }\n\n /** set quality level of next loaded fragment **/\n set nextLoadLevel(level) {\n this.levelController.level = level;\n }\n\n /** Return first level (index of first level referenced in manifest)\n **/\n get firstLevel() {\n return this.levelController.firstLevel;\n }\n\n /** set first level (index of first level referenced in manifest)\n **/\n set firstLevel(newLevel) {\n logger.log(`set firstLevel:${newLevel}`);\n this.levelController.firstLevel = newLevel;\n }\n\n /** Return start level (level of first fragment that will be played back)\n if not overrided by user, first level appearing in manifest will be used as start level\n if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n **/\n get startLevel() {\n return this.levelController.startLevel;\n }\n\n /** set start level (level of first fragment that will be played back)\n if not overrided by user, first level appearing in manifest will be used as start level\n if -1 : automatic start level selection, playback will start from level matching download bandwidth (determined from download of first segment)\n **/\n set startLevel(newLevel) {\n logger.log(`set startLevel:${newLevel}`);\n this.levelController.startLevel = newLevel;\n }\n\n /** Return the capping/max level value that could be used by automatic level selection algorithm **/\n get autoLevelCapping() {\n return this.abrController.autoLevelCapping;\n }\n\n /** set the capping/max level value that could be used by automatic level selection algorithm **/\n set autoLevelCapping(newLevel) {\n logger.log(`set autoLevelCapping:${newLevel}`);\n this.abrController.autoLevelCapping = newLevel;\n }\n\n /* check if we are in automatic level selection mode */\n get autoLevelEnabled() {\n return (this.levelController.manualLevel === -1);\n }\n\n /* return manual level */\n get manualLevel() {\n return this.levelController.manualLevel;\n }\n}\n\nexport default Hls;\n", "/*\n * Fragment Loader\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\nclass FragmentLoader extends EventHandler {\n\n constructor(hls) {\n super(hls, Event.FRAG_LOADING);\n }\n\n destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n EventHandler.prototype.destroy.call(this);\n }\n\n onFragLoading(data) {\n var frag = data.frag;\n this.frag = frag;\n this.frag.loaded = 0;\n var config = this.hls.config;\n frag.loader = this.loader = typeof(config.fLoader) !== 'undefined' ? new config.fLoader(config) : new config.loader(config);\n this.loader.load(frag.url, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, 1, 0, this.loadprogress.bind(this), frag);\n }\n\n loadsuccess(event, stats) {\n var payload = event.currentTarget.response;\n stats.length = payload.byteLength;\n // detach fragment loader on load success\n this.frag.loader = undefined;\n this.hls.trigger(Event.FRAG_LOADED, {payload: payload, frag: this.frag, stats: stats});\n }\n\n loaderror(event) {\n this.loader.abort();\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.FRAG_LOAD_ERROR, fatal: false, frag: this.frag, response: event});\n }\n\n loadtimeout() {\n this.loader.abort();\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.FRAG_LOAD_TIMEOUT, fatal: false, frag: this.frag});\n }\n\n loadprogress(event, stats) {\n this.frag.loaded = stats.loaded;\n this.hls.trigger(Event.FRAG_LOAD_PROGRESS, {frag: this.frag, stats: stats});\n }\n}\n\nexport default FragmentLoader;\n", "/*\n * Decrypt key Loader\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\nclass KeyLoader extends EventHandler {\n\n constructor(hls) {\n super(hls, Event.KEY_LOADING);\n this.decryptkey = null;\n this.decrypturl = null;\n }\n\n destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n EventHandler.prototype.destroy.call(this);\n }\n\n onKeyLoading(data) {\n var frag = this.frag = data.frag,\n decryptdata = frag.decryptdata,\n uri = decryptdata.uri;\n // if uri is different from previous one or if decrypt key not retrieved yet\n if (uri !== this.decrypturl || this.decryptkey === null) {\n var config = this.hls.config;\n frag.loader = this.loader = new config.loader(config);\n this.decrypturl = uri;\n this.decryptkey = null;\n frag.loader.load(uri, 'arraybuffer', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), config.fragLoadingTimeOut, config.fragLoadingMaxRetry, config.fragLoadingRetryDelay, this.loadprogress.bind(this), frag);\n } else if (this.decryptkey) {\n // we already loaded this key, return it\n decryptdata.key = this.decryptkey;\n this.hls.trigger(Event.KEY_LOADED, {frag: frag});\n }\n }\n\n loadsuccess(event) {\n var frag = this.frag;\n this.decryptkey = frag.decryptdata.key = new Uint8Array(event.currentTarget.response);\n // detach fragment loader on load success\n frag.loader = undefined;\n this.hls.trigger(Event.KEY_LOADED, {frag: frag});\n }\n\n loaderror(event) {\n this.loader.abort();\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.KEY_LOAD_ERROR, fatal: false, frag: this.frag, response: event});\n }\n\n loadtimeout() {\n this.loader.abort();\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.KEY_LOAD_TIMEOUT, fatal: false, frag: this.frag});\n }\n\n loadprogress() {\n\n }\n}\n\nexport default KeyLoader;\n", "/**\n * Playlist Loader\n*/\n\nimport Event from '../events';\nimport EventHandler from '../event-handler';\nimport {ErrorTypes, ErrorDetails} from '../errors';\nimport URLHelper from '../utils/url';\nimport AttrList from '../utils/attr-list';\n//import {logger} from '../utils/logger';\n\nclass PlaylistLoader extends EventHandler {\n\n constructor(hls) {\n super(hls,\n Event.MANIFEST_LOADING,\n Event.LEVEL_LOADING);\n }\n\n destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n this.url = this.id = null;\n EventHandler.prototype.destroy.call(this);\n }\n\n onManifestLoading(data) {\n this.load(data.url, null);\n }\n\n onLevelLoading(data) {\n this.load(data.url, data.level, data.id);\n }\n\n load(url, id1, id2) {\n var config = this.hls.config,\n retry,\n timeout,\n retryDelay;\n this.url = url;\n this.id = id1;\n this.id2 = id2;\n if(this.id === undefined) {\n retry = config.manifestLoadingMaxRetry;\n timeout = config.manifestLoadingTimeOut;\n retryDelay = config.manifestLoadingRetryDelay;\n } else {\n retry = config.levelLoadingMaxRetry;\n timeout = config.levelLoadingTimeOut;\n retryDelay = config.levelLoadingRetryDelay;\n }\n this.loader = typeof(config.pLoader) !== 'undefined' ? new config.pLoader(config) : new config.loader(config);\n this.loader.load(url, '', this.loadsuccess.bind(this), this.loaderror.bind(this), this.loadtimeout.bind(this), timeout, retry, retryDelay);\n }\n\n resolve(url, baseUrl) {\n return URLHelper.buildAbsoluteURL(baseUrl, url);\n }\n\n parseMasterPlaylist(string, baseurl) {\n let levels = [], result;\n\n // https://regex101.com is your friend\n const re = /#EXT-X-STREAM-INF:([^\\n\\r]*)[\\r\\n]+([^\\r\\n]+)/g;\n while ((result = re.exec(string)) != null){\n const level = {};\n\n var attrs = level.attrs = new AttrList(result[1]);\n level.url = this.resolve(result[2], baseurl);\n\n var resolution = attrs.decimalResolution('RESOLUTION');\n if(resolution) {\n level.width = resolution.width;\n level.height = resolution.height;\n }\n level.bitrate = attrs.decimalInteger('BANDWIDTH');\n level.name = attrs.NAME;\n\n var codecs = attrs.CODECS;\n if(codecs) {\n codecs = codecs.split(',');\n for (let i = 0; i < codecs.length; i++) {\n const codec = codecs[i];\n if (codec.indexOf('avc1') !== -1) {\n level.videoCodec = this.avc1toavcoti(codec);\n } else {\n level.audioCodec = codec;\n }\n }\n }\n\n levels.push(level);\n }\n return levels;\n }\n\n avc1toavcoti(codec) {\n var result, avcdata = codec.split('.');\n if (avcdata.length > 2) {\n result = avcdata.shift() + '.';\n result += parseInt(avcdata.shift()).toString(16);\n result += ('000' + parseInt(avcdata.shift()).toString(16)).substr(-4);\n } else {\n result = codec;\n }\n return result;\n }\n\n cloneObj(obj) {\n return JSON.parse(JSON.stringify(obj));\n }\n\n parseLevelPlaylist(string, baseurl, id) {\n var currentSN = 0,\n totalduration = 0,\n level = {url: baseurl, fragments: [], live: true, startSN: 0},\n levelkey = {method : null, key : null, iv : null, uri : null},\n cc = 0,\n programDateTime = null,\n frag = null,\n result,\n regexp,\n byteRangeEndOffset,\n byteRangeStartOffset;\n\n regexp = /(?:#EXT-X-(MEDIA-SEQUENCE):(\\d+))|(?:#EXT-X-(TARGETDURATION):(\\d+))|(?:#EXT-X-(KEY):(.*))|(?:#EXT(INF):([\\d\\.]+)[^\\r\\n]*([\\r\\n]+[^#|\\r\\n]+)?)|(?:#EXT-X-(BYTERANGE):([\\d]+[@[\\d]*)]*[\\r\\n]+([^#|\\r\\n]+)?|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(PROGRAM-DATE-TIME):(.*))/g;\n while ((result = regexp.exec(string)) !== null) {\n result.shift();\n result = result.filter(function(n) { return (n !== undefined); });\n switch (result[0]) {\n case 'MEDIA-SEQUENCE':\n currentSN = level.startSN = parseInt(result[1]);\n break;\n case 'TARGETDURATION':\n level.targetduration = parseFloat(result[1]);\n break;\n case 'ENDLIST':\n level.live = false;\n break;\n case 'DIS':\n cc++;\n break;\n case 'BYTERANGE':\n var params = result[1].split('@');\n if (params.length === 1) {\n byteRangeStartOffset = byteRangeEndOffset;\n } else {\n byteRangeStartOffset = parseInt(params[1]);\n }\n byteRangeEndOffset = parseInt(params[0]) + byteRangeStartOffset;\n if (frag && !frag.url) {\n frag.byteRangeStartOffset = byteRangeStartOffset;\n frag.byteRangeEndOffset = byteRangeEndOffset;\n frag.url = this.resolve(result[2], baseurl);\n }\n break;\n case 'INF':\n var duration = parseFloat(result[1]);\n if (!isNaN(duration)) {\n var fragdecryptdata,\n sn = currentSN++;\n if (levelkey.method && levelkey.uri && !levelkey.iv) {\n fragdecryptdata = this.cloneObj(levelkey);\n var uint8View = new Uint8Array(16);\n for (var i = 12; i < 16; i++) {\n uint8View[i] = (sn >> 8*(15-i)) & 0xff;\n }\n fragdecryptdata.iv = uint8View;\n } else {\n fragdecryptdata = levelkey;\n }\n var url = result[2] ? this.resolve(result[2], baseurl) : null;\n frag = {url: url, duration: duration, start: totalduration, sn: sn, level: id, cc: cc, byteRangeStartOffset: byteRangeStartOffset, byteRangeEndOffset: byteRangeEndOffset, decryptdata : fragdecryptdata, programDateTime: programDateTime};\n level.fragments.push(frag);\n totalduration += duration;\n byteRangeStartOffset = null;\n programDateTime = null;\n }\n break;\n case 'KEY':\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-08#section-3.4.4\n var decryptparams = result[1];\n var keyAttrs = new AttrList(decryptparams);\n var decryptmethod = keyAttrs.enumeratedString('METHOD'),\n decrypturi = keyAttrs.URI,\n decryptiv = keyAttrs.hexadecimalInteger('IV');\n if (decryptmethod) {\n levelkey = { method: null, key: null, iv: null, uri: null };\n if ((decrypturi) && (decryptmethod === 'AES-128')) {\n levelkey.method = decryptmethod;\n // URI to get the key\n levelkey.uri = this.resolve(decrypturi, baseurl);\n levelkey.key = null;\n // Initialization Vector (IV)\n levelkey.iv = decryptiv;\n }\n }\n break;\n case 'PROGRAM-DATE-TIME':\n programDateTime = new Date(Date.parse(result[1]));\n break;\n default:\n break;\n }\n }\n //logger.log('found ' + level.fragments.length + ' fragments');\n if(frag && !frag.url) {\n level.fragments.pop();\n totalduration-=frag.duration;\n }\n level.totalduration = totalduration;\n level.endSN = currentSN - 1;\n return level;\n }\n\n loadsuccess(event, stats) {\n var target = event.currentTarget,\n string = target.responseText,\n url = target.responseURL,\n id = this.id,\n id2 = this.id2,\n hls = this.hls,\n levels;\n // responseURL not supported on some browsers (it is used to detect URL redirection)\n if (url === undefined) {\n // fallback to initial URL\n url = this.url;\n }\n stats.tload = performance.now();\n stats.mtime = new Date(target.getResponseHeader('Last-Modified'));\n if (string.indexOf('#EXTM3U') === 0) {\n if (string.indexOf('#EXTINF:') > 0) {\n // 1 level playlist\n // if first request, fire manifest loaded event, level will be reloaded afterwards\n // (this is to have a uniform logic for 1 level/multilevel playlists)\n if (this.id === null) {\n hls.trigger(Event.MANIFEST_LOADED, {levels: [{url: url}], url: url, stats: stats});\n } else {\n var levelDetails = this.parseLevelPlaylist(string, url, id);\n stats.tparsed = performance.now();\n hls.trigger(Event.LEVEL_LOADED, {details: levelDetails, level: id, id: id2, stats: stats});\n }\n } else {\n levels = this.parseMasterPlaylist(string, url);\n // multi level playlist, parse level info\n if (levels.length) {\n hls.trigger(Event.MANIFEST_LOADED, {levels: levels, url: url, stats: stats});\n } else {\n hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'no level found in manifest'});\n }\n }\n } else {\n hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: ErrorDetails.MANIFEST_PARSING_ERROR, fatal: true, url: url, reason: 'no EXTM3U delimiter'});\n }\n }\n\n loaderror(event) {\n var details, fatal;\n if (this.id === null) {\n details = ErrorDetails.MANIFEST_LOAD_ERROR;\n fatal = true;\n } else {\n details = ErrorDetails.LEVEL_LOAD_ERROR;\n fatal = false;\n }\n this.loader.abort();\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: details, fatal: fatal, url: this.url, loader: this.loader, response: event.currentTarget, level: this.id, id: this.id2});\n }\n\n loadtimeout() {\n var details, fatal;\n if (this.id === null) {\n details = ErrorDetails.MANIFEST_LOAD_TIMEOUT;\n fatal = true;\n } else {\n details = ErrorDetails.LEVEL_LOAD_TIMEOUT;\n fatal = false;\n }\n this.loader.abort();\n this.hls.trigger(Event.ERROR, {type: ErrorTypes.NETWORK_ERROR, details: details, fatal: fatal, url: this.url, loader: this.loader, level: this.id, id: this.id2});\n }\n}\n\nexport default PlaylistLoader;\n", "/**\n * Generate MP4 Box\n*/\n\n//import Hex from '../utils/hex';\nclass MP4 {\n static init() {\n MP4.types = {\n avc1: [], // codingname\n avcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n mvex: [],\n mvhd: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n\n var i;\n for (i in MP4.types) {\n if (MP4.types.hasOwnProperty(i)) {\n MP4.types[i] = [\n i.charCodeAt(0),\n i.charCodeAt(1),\n i.charCodeAt(2),\n i.charCodeAt(3)\n ];\n }\n }\n\n var videoHdlr = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x76, 0x69, 0x64, 0x65, // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x56, 0x69, 0x64, 0x65,\n 0x6f, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n\n var audioHdlr = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0x73, 0x6f, 0x75, 0x6e, // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x53, 0x6f, 0x75, 0x6e,\n 0x64, 0x48, 0x61, 0x6e,\n 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n\n MP4.HDLR_TYPES = {\n 'video': videoHdlr,\n 'audio': audioHdlr\n };\n\n var dref = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // entry_count\n 0x00, 0x00, 0x00, 0x0c, // entry_size\n 0x75, 0x72, 0x6c, 0x20, // 'url' type\n 0x00, // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n\n var stco = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n\n MP4.STTS = MP4.STSC = MP4.STCO = stco;\n\n MP4.STSZ = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00, // sample_count\n ]);\n MP4.VMHD = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00,\n 0x00, 0x00,\n 0x00, 0x00 // opcolor\n ]);\n MP4.SMHD = new Uint8Array([\n 0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]);\n\n MP4.STSD = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01]);// entry_count\n\n var majorBrand = new Uint8Array([105,115,111,109]); // isom\n var avc1Brand = new Uint8Array([97,118,99,49]); // avc1\n var minorVersion = new Uint8Array([0, 0, 0, 1]);\n\n MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n }\n\n static box(type) {\n var\n payload = Array.prototype.slice.call(arguments, 1),\n size = 8,\n i = payload.length,\n len = i,\n result;\n // calculate the total size we need to allocate\n while (i--) {\n size += payload[i].byteLength;\n }\n result = new Uint8Array(size);\n result[0] = (size >> 24) & 0xff;\n result[1] = (size >> 16) & 0xff;\n result[2] = (size >> 8) & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n // copy the payload into the result\n for (i = 0, size = 8; i < len; i++) {\n // copy payload[i] array @ offset size\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n }\n\n static hdlr(type) {\n return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n }\n\n static mdat(data) {\n return MP4.box(MP4.types.mdat, data);\n }\n\n static mdhd(timescale, duration) {\n return MP4.box(MP4.types.mdhd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x02, // creation_time\n 0x00, 0x00, 0x00, 0x03, // modification_time\n (timescale >> 24) & 0xFF,\n (timescale >> 16) & 0xFF,\n (timescale >> 8) & 0xFF,\n timescale & 0xFF, // timescale\n (duration >> 24),\n (duration >> 16) & 0xFF,\n (duration >> 8) & 0xFF,\n duration & 0xFF, // duration\n 0x55, 0xc4, // 'und' language (undetermined)\n 0x00, 0x00\n ]));\n }\n\n static mdia(track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale, track.duration), MP4.hdlr(track.type), MP4.minf(track));\n }\n\n static mfhd(sequenceNumber) {\n return MP4.box(MP4.types.mfhd, new Uint8Array([\n 0x00,\n 0x00, 0x00, 0x00, // flags\n (sequenceNumber >> 24),\n (sequenceNumber >> 16) & 0xFF,\n (sequenceNumber >> 8) & 0xFF,\n sequenceNumber & 0xFF, // sequence_number\n ]));\n }\n\n static minf(track) {\n if (track.type === 'audio') {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n } else {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n }\n }\n\n static moof(sn, baseMediaDecodeTime, track) {\n return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track,baseMediaDecodeTime));\n }\n/**\n * @param tracks... (optional) {array} the tracks associated with this movie\n */\n static moov(tracks) {\n var\n i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = MP4.trak(tracks[i]);\n }\n\n return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale, tracks[0].duration)].concat(boxes).concat(MP4.mvex(tracks)));\n }\n\n static mvex(tracks) {\n var\n i = tracks.length,\n boxes = [];\n\n while (i--) {\n boxes[i] = MP4.trex(tracks[i]);\n }\n return MP4.box.apply(null, [MP4.types.mvex].concat(boxes));\n }\n\n static mvhd(timescale,duration) {\n var\n bytes = new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x01, // creation_time\n 0x00, 0x00, 0x00, 0x02, // modification_time\n (timescale >> 24) & 0xFF,\n (timescale >> 16) & 0xFF,\n (timescale >> 8) & 0xFF,\n timescale & 0xFF, // timescale\n (duration >> 24) & 0xFF,\n (duration >> 16) & 0xFF,\n (duration >> 8) & 0xFF,\n duration & 0xFF, // duration\n 0x00, 0x01, 0x00, 0x00, // 1.0 rate\n 0x01, 0x00, // 1.0 volume\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return MP4.box(MP4.types.mvhd, bytes);\n }\n\n static sdtp(track) {\n var\n samples = track.samples || [],\n bytes = new Uint8Array(4 + samples.length),\n flags,\n i;\n // leave the full box header (4 bytes) all zero\n // write the sample table\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n bytes[i + 4] = (flags.dependsOn << 4) |\n (flags.isDependedOn << 2) |\n (flags.hasRedundancy);\n }\n\n return MP4.box(MP4.types.sdtp, bytes);\n }\n\n static stbl(track) {\n return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n }\n\n static avc1(track) {\n var sps = [], pps = [], i, data, len;\n // assemble the SPSs\n\n for (i = 0; i < track.sps.length; i++) {\n data = track.sps[i];\n len = data.byteLength;\n sps.push((len >>> 8) & 0xFF);\n sps.push((len & 0xFF));\n sps = sps.concat(Array.prototype.slice.call(data)); // SPS\n }\n\n // assemble the PPSs\n for (i = 0; i < track.pps.length; i++) {\n data = track.pps[i];\n len = data.byteLength;\n pps.push((len >>> 8) & 0xFF);\n pps.push((len & 0xFF));\n pps = pps.concat(Array.prototype.slice.call(data));\n }\n\n var avcc = MP4.box(MP4.types.avcC, new Uint8Array([\n 0x01, // version\n sps[3], // profile\n sps[4], // profile compat\n sps[5], // level\n 0xfc | 3, // lengthSizeMinusOne, hard-coded to 4 bytes\n 0xE0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(sps).concat([\n track.pps.length // numOfPictureParameterSets\n ]).concat(pps))), // \"PPS\"\n width = track.width,\n height = track.height;\n //console.log('avcc:' + Hex.hexDump(avcc));\n return MP4.box(MP4.types.avc1, new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, // pre_defined\n 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // pre_defined\n (width >> 8) & 0xFF,\n width & 0xff, // width\n (height >> 8) & 0xFF,\n height & 0xff, // height\n 0x00, 0x48, 0x00, 0x00, // horizresolution\n 0x00, 0x48, 0x00, 0x00, // vertresolution\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // frame_count\n 0x12,\n 0x64, 0x61, 0x69, 0x6C, //dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74,\n 0x69, 0x6F, 0x6E, 0x2F,\n 0x68, 0x6C, 0x73, 0x2E,\n 0x6A, 0x73, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]), // pre_defined = -1\n avcc,\n MP4.box(MP4.types.btrt, new Uint8Array([\n 0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])) // avgBitrate\n );\n }\n\n static esds(track) {\n var configlen = track.config.length;\n return new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n\n 0x03, // descriptor_type\n 0x17+configlen, // length\n 0x00, 0x01, //es_id\n 0x00, // stream_priority\n\n 0x04, // descriptor_type\n 0x0f+configlen, // length\n 0x40, //codec : mpeg4_audio\n 0x15, // stream_type\n 0x00, 0x00, 0x00, // buffer_size\n 0x00, 0x00, 0x00, 0x00, // maxBitrate\n 0x00, 0x00, 0x00, 0x00, // avgBitrate\n\n 0x05 // descriptor_type\n ].concat([configlen]).concat(track.config).concat([0x06, 0x01, 0x02])); // GASpecificConfig)); // length + audio config descriptor\n }\n\n static mp4a(track) {\n var audiosamplerate = track.audiosamplerate;\n return MP4.box(MP4.types.mp4a, new Uint8Array([\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, track.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n (audiosamplerate >> 8) & 0xFF,\n audiosamplerate & 0xff, //\n 0x00, 0x00]),\n MP4.box(MP4.types.esds, MP4.esds(track)));\n }\n\n static stsd(track) {\n if (track.type === 'audio') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n } else {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n }\n }\n\n static tkhd(track) {\n var id = track.id,\n duration = track.duration,\n width = track.width,\n height = track.height;\n return MP4.box(MP4.types.tkhd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x07, // flags\n 0x00, 0x00, 0x00, 0x00, // creation_time\n 0x00, 0x00, 0x00, 0x00, // modification_time\n (id >> 24) & 0xFF,\n (id >> 16) & 0xFF,\n (id >> 8) & 0xFF,\n id & 0xFF, // track_ID\n 0x00, 0x00, 0x00, 0x00, // reserved\n (duration >> 24),\n (duration >> 16) & 0xFF,\n (duration >> 8) & 0xFF,\n duration & 0xFF, // duration\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, // layer\n 0x00, 0x00, // alternate_group\n 0x00, 0x00, // non-audio track volume\n 0x00, 0x00, // reserved\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x01, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00,\n 0x40, 0x00, 0x00, 0x00, // transformation: unity matrix\n (width >> 8) & 0xFF,\n width & 0xFF,\n 0x00, 0x00, // width\n (height >> 8) & 0xFF,\n height & 0xFF,\n 0x00, 0x00 // height\n ]));\n }\n\n static traf(track,baseMediaDecodeTime) {\n var sampleDependencyTable = MP4.sdtp(track),\n id = track.id;\n return MP4.box(MP4.types.traf,\n MP4.box(MP4.types.tfhd, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0XFF,\n (id >> 8) & 0XFF,\n (id & 0xFF) // track_ID\n ])),\n MP4.box(MP4.types.tfdt, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (baseMediaDecodeTime >>24),\n (baseMediaDecodeTime >> 16) & 0XFF,\n (baseMediaDecodeTime >> 8) & 0XFF,\n (baseMediaDecodeTime & 0xFF) // baseMediaDecodeTime\n ])),\n MP4.trun(track,\n sampleDependencyTable.length +\n 16 + // tfhd\n 16 + // tfdt\n 8 + // traf header\n 16 + // mfhd\n 8 + // moof header\n 8), // mdat header\n sampleDependencyTable);\n }\n\n /**\n * Generate a track box.\n * @param track {object} a track definition\n * @return {Uint8Array} the track box\n */\n static trak(track) {\n track.duration = track.duration || 0xffffffff;\n return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n }\n\n static trex(track) {\n var id = track.id;\n return MP4.box(MP4.types.trex, new Uint8Array([\n 0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n (id >> 24),\n (id >> 16) & 0XFF,\n (id >> 8) & 0XFF,\n (id & 0xFF), // track_ID\n 0x00, 0x00, 0x00, 0x01, // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00, // default_sample_duration\n 0x00, 0x00, 0x00, 0x00, // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]));\n }\n\n static trun(track, offset) {\n var samples= track.samples || [],\n len = samples.length,\n arraylen = 12 + (16 * len),\n array = new Uint8Array(arraylen),\n i,sample,duration,size,flags,cts;\n offset += 8 + arraylen;\n array.set([\n 0x00, // version 0\n 0x00, 0x0f, 0x01, // flags\n (len >>> 24) & 0xFF,\n (len >>> 16) & 0xFF,\n (len >>> 8) & 0xFF,\n len & 0xFF, // sample_count\n (offset >>> 24) & 0xFF,\n (offset >>> 16) & 0xFF,\n (offset >>> 8) & 0xFF,\n offset & 0xFF // data_offset\n ],0);\n for (i = 0; i < len; i++) {\n sample = samples[i];\n duration = sample.duration;\n size = sample.size;\n flags = sample.flags;\n cts = sample.cts;\n array.set([\n (duration >>> 24) & 0xFF,\n (duration >>> 16) & 0xFF,\n (duration >>> 8) & 0xFF,\n duration & 0xFF, // sample_duration\n (size >>> 24) & 0xFF,\n (size >>> 16) & 0xFF,\n (size >>> 8) & 0xFF,\n size & 0xFF, // sample_size\n (flags.isLeading << 2) | flags.dependsOn,\n (flags.isDependedOn << 6) |\n (flags.hasRedundancy << 4) |\n (flags.paddingValue << 1) |\n flags.isNonSync,\n flags.degradPrio & 0xF0 << 8,\n flags.degradPrio & 0x0F, // sample_flags\n (cts >>> 24) & 0xFF,\n (cts >>> 16) & 0xFF,\n (cts >>> 8) & 0xFF,\n cts & 0xFF // sample_composition_time_offset\n ],12+16*i);\n }\n return MP4.box(MP4.types.trun, array);\n }\n\n static initSegment(tracks) {\n if (!MP4.types) {\n MP4.init();\n }\n var movie = MP4.moov(tracks), result;\n result = new Uint8Array(MP4.FTYP.byteLength + movie.byteLength);\n result.set(MP4.FTYP);\n result.set(movie, MP4.FTYP.byteLength);\n return result;\n }\n}\n\nexport default MP4;\n", - "/**\n * fMP4 remuxer\n*/\n\n\nimport Event from '../events';\nimport {logger} from '../utils/logger';\nimport MP4 from '../remux/mp4-generator';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\nclass MP4Remuxer {\n constructor(observer) {\n this.observer = observer;\n this.ISGenerated = false;\n this.PES2MP4SCALEFACTOR = 4;\n this.PES_TIMESCALE = 90000;\n this.MP4_TIMESCALE = this.PES_TIMESCALE / this.PES2MP4SCALEFACTOR;\n }\n\n get timescale() {\n return this.MP4_TIMESCALE;\n }\n\n destroy() {\n }\n\n insertDiscontinuity() {\n this._initPTS = this._initDTS = this.nextAacPts = this.nextAvcDts = undefined;\n }\n\n switchLevel() {\n this.ISGenerated = false;\n }\n\n remux(audioTrack,videoTrack,id3Track,textTrack,timeOffset, contiguous) {\n // generate Init Segment if needed\n if (!this.ISGenerated) {\n this.generateIS(audioTrack,videoTrack,timeOffset);\n }\n //logger.log('nb AVC samples:' + videoTrack.samples.length);\n if (videoTrack.samples.length) {\n this.remuxVideo(videoTrack,timeOffset,contiguous);\n }\n //logger.log('nb AAC samples:' + audioTrack.samples.length);\n if (audioTrack.samples.length) {\n this.remuxAudio(audioTrack,timeOffset,contiguous);\n }\n //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (id3Track.samples.length) {\n this.remuxID3(id3Track,timeOffset);\n }\n //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (textTrack.samples.length) {\n this.remuxText(textTrack,timeOffset);\n }\n //notify end of parsing\n this.observer.trigger(Event.FRAG_PARSED);\n }\n\n generateIS(audioTrack,videoTrack,timeOffset) {\n var observer = this.observer,\n audioSamples = audioTrack.samples,\n videoSamples = videoTrack.samples,\n nbAudio = audioSamples.length,\n nbVideo = videoSamples.length,\n pesTimeScale = this.PES_TIMESCALE;\n\n if(nbAudio === 0 && nbVideo === 0) {\n observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'no audio/video samples found'});\n } else if (nbVideo === 0) {\n //audio only\n if (audioTrack.config) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, {\n audioMoov: MP4.initSegment([audioTrack]),\n audioCodec : audioTrack.codec,\n audioChannelCount : audioTrack.channelCount\n });\n this.ISGenerated = true;\n }\n if (this._initPTS === undefined) {\n // remember first PTS of this demuxing context\n this._initPTS = audioSamples[0].pts - pesTimeScale * timeOffset;\n this._initDTS = audioSamples[0].dts - pesTimeScale * timeOffset;\n }\n } else\n if (nbAudio === 0) {\n //video only\n if (videoTrack.sps && videoTrack.pps) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, {\n videoMoov: MP4.initSegment([videoTrack]),\n videoCodec: videoTrack.codec,\n videoWidth: videoTrack.width,\n videoHeight: videoTrack.height\n });\n this.ISGenerated = true;\n if (this._initPTS === undefined) {\n // remember first PTS of this demuxing context\n this._initPTS = videoSamples[0].pts - pesTimeScale * timeOffset;\n this._initDTS = videoSamples[0].dts - pesTimeScale * timeOffset;\n }\n }\n } else {\n //audio and video\n if (audioTrack.config && videoTrack.sps && videoTrack.pps) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, {\n audioMoov: MP4.initSegment([audioTrack]),\n audioCodec: audioTrack.codec,\n audioChannelCount: audioTrack.channelCount,\n videoMoov: MP4.initSegment([videoTrack]),\n videoCodec: videoTrack.codec,\n videoWidth: videoTrack.width,\n videoHeight: videoTrack.height\n });\n this.ISGenerated = true;\n if (this._initPTS === undefined) {\n // remember first PTS of this demuxing context\n this._initPTS = Math.min(videoSamples[0].pts, audioSamples[0].pts) - pesTimeScale * timeOffset;\n this._initDTS = Math.min(videoSamples[0].dts, audioSamples[0].dts) - pesTimeScale * timeOffset;\n }\n }\n }\n }\n\n remuxVideo(track, timeOffset, contiguous) {\n var view,\n offset = 8,\n pesTimeScale = this.PES_TIMESCALE,\n pes2mp4ScaleFactor = this.PES2MP4SCALEFACTOR,\n avcSample,\n mp4Sample,\n mp4SampleLength,\n unit,\n mdat, moof,\n firstPTS, firstDTS, lastDTS,\n pts, dts, ptsnorm, dtsnorm,\n flags,\n samples = [];\n /* concatenate the video data and construct the mdat in place\n (need 8 more bytes to fill length and mpdat type) */\n mdat = new Uint8Array(track.len + (4 * track.nbNalu) + 8);\n view = new DataView(mdat.buffer);\n view.setUint32(0, mdat.byteLength);\n mdat.set(MP4.types.mdat, 4);\n while (track.samples.length) {\n avcSample = track.samples.shift();\n mp4SampleLength = 0;\n // convert NALU bitstream to MP4 format (prepend NALU with size field)\n while (avcSample.units.units.length) {\n unit = avcSample.units.units.shift();\n view.setUint32(offset, unit.data.byteLength);\n offset += 4;\n mdat.set(unit.data, offset);\n offset += unit.data.byteLength;\n mp4SampleLength += 4 + unit.data.byteLength;\n }\n pts = avcSample.pts - this._initDTS;\n dts = avcSample.dts - this._initDTS;\n // ensure DTS is not bigger than PTS\n dts = Math.min(pts,dts);\n //logger.log(`Video/PTS/DTS:${Math.round(pts/90)}/${Math.round(dts/90)}`);\n // if not first AVC sample of video track, normalize PTS/DTS with previous sample value\n // and ensure that sample duration is positive\n if (lastDTS !== undefined) {\n ptsnorm = this._PTSNormalize(pts, lastDTS);\n dtsnorm = this._PTSNormalize(dts, lastDTS);\n var sampleDuration = (dtsnorm - lastDTS) / pes2mp4ScaleFactor;\n if (sampleDuration <= 0) {\n logger.log(`invalid sample duration at PTS/DTS: ${avcSample.pts}/${avcSample.dts}:${sampleDuration}`);\n sampleDuration = 1;\n }\n mp4Sample.duration = sampleDuration;\n } else {\n var nextAvcDts = this.nextAvcDts,delta;\n // first AVC sample of video track, normalize PTS/DTS\n ptsnorm = this._PTSNormalize(pts, nextAvcDts);\n dtsnorm = this._PTSNormalize(dts, nextAvcDts);\n delta = Math.round((dtsnorm - nextAvcDts) / 90);\n // if fragment are contiguous, or delta less than 600ms, ensure there is no overlap/hole between fragments\n if (contiguous || Math.abs(delta) < 600) {\n if (delta) {\n if (delta > 1) {\n logger.log(`AVC:${delta} ms hole between fragments detected,filling it`);\n } else if (delta < -1) {\n logger.log(`AVC:${(-delta)} ms overlapping between fragments detected`);\n }\n // set DTS to next DTS\n dtsnorm = nextAvcDts;\n // offset PTS as well, ensure that PTS is smaller or equal than new DTS\n ptsnorm = Math.max(ptsnorm - delta, dtsnorm);\n logger.log(`Video/PTS/DTS adjusted: ${ptsnorm}/${dtsnorm},delta:${delta}`);\n }\n }\n // remember first PTS of our avcSamples, ensure value is positive\n firstPTS = Math.max(0, ptsnorm);\n firstDTS = Math.max(0, dtsnorm);\n }\n //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${avcSample.pts}/${avcSample.dts}/${this._initDTS}/${ptsnorm}/${dtsnorm}/${(avcSample.pts/4294967296).toFixed(3)}');\n mp4Sample = {\n size: mp4SampleLength,\n duration: 0,\n cts: (ptsnorm - dtsnorm) / pes2mp4ScaleFactor,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0\n }\n };\n flags = mp4Sample.flags;\n if (avcSample.key === true) {\n // the current sample is a key frame\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n } else {\n flags.dependsOn = 1;\n flags.isNonSync = 1;\n }\n samples.push(mp4Sample);\n lastDTS = dtsnorm;\n }\n var lastSampleDuration = 0;\n if (samples.length >= 2) {\n lastSampleDuration = samples[samples.length - 2].duration;\n mp4Sample.duration = lastSampleDuration;\n }\n // next AVC sample DTS should be equal to last sample DTS + last sample duration\n this.nextAvcDts = dtsnorm + lastSampleDuration * pes2mp4ScaleFactor;\n track.len = 0;\n track.nbNalu = 0;\n if(samples.length && navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\n flags = samples[0].flags;\n // chrome workaround, mark first sample as being a Random Access Point to avoid sourcebuffer append issue\n // https://code.google.com/p/chromium/issues/detail?id=229412\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n track.samples = samples;\n moof = MP4.moof(track.sequenceNumber++, firstDTS / pes2mp4ScaleFactor, track);\n track.samples = [];\n this.observer.trigger(Event.FRAG_PARSING_DATA, {\n moof: moof,\n mdat: mdat,\n startPTS: firstPTS / pesTimeScale,\n endPTS: (ptsnorm + pes2mp4ScaleFactor * lastSampleDuration) / pesTimeScale,\n startDTS: firstDTS / pesTimeScale,\n endDTS: this.nextAvcDts / pesTimeScale,\n type: 'video',\n nb: samples.length\n });\n }\n\n remuxAudio(track,timeOffset, contiguous) {\n var view,\n offset = 8,\n pesTimeScale = this.PES_TIMESCALE,\n pes2mp4ScaleFactor = this.PES2MP4SCALEFACTOR,\n aacSample, mp4Sample,\n unit,\n mdat, moof,\n firstPTS, firstDTS, lastDTS,\n pts, dts, ptsnorm, dtsnorm,\n samples = [],\n samples0 = [];\n\n track.samples.forEach(aacSample => {\n if(pts === undefined || aacSample.pts > pts) {\n samples0.push(aacSample);\n pts = aacSample.pts;\n } else {\n logger.warn('dropping past audio frame');\n track.len -= aacSample.unit.byteLength;\n }\n });\n\n while (samples0.length) {\n aacSample = samples0.shift();\n unit = aacSample.unit;\n pts = aacSample.pts - this._initDTS;\n dts = aacSample.dts - this._initDTS;\n //logger.log(`Audio/PTS:${Math.round(pts/90)}`);\n // if not first sample\n if (lastDTS !== undefined) {\n ptsnorm = this._PTSNormalize(pts, lastDTS);\n dtsnorm = this._PTSNormalize(dts, lastDTS);\n // let's compute sample duration\n mp4Sample.duration = (dtsnorm - lastDTS) / pes2mp4ScaleFactor;\n if (mp4Sample.duration < 0) {\n // not expected to happen ...\n logger.log(`invalid AAC sample duration at PTS:${aacSample.pts}:${mp4Sample.duration}`);\n mp4Sample.duration = 0;\n }\n } else {\n var nextAacPts = this.nextAacPts,delta;\n ptsnorm = this._PTSNormalize(pts, nextAacPts);\n dtsnorm = this._PTSNormalize(dts, nextAacPts);\n delta = Math.round(1000 * (ptsnorm - nextAacPts) / pesTimeScale);\n // if fragment are contiguous, or delta less than 600ms, ensure there is no overlap/hole between fragments\n if (contiguous || Math.abs(delta) < 600) {\n // log delta\n if (delta) {\n if (delta > 0) {\n logger.log(`${delta} ms hole between AAC samples detected,filling it`);\n // if we have frame overlap, overlapping for more than half a frame duraion\n } else if (delta < -12) {\n // drop overlapping audio frames... browser will deal with it\n logger.log(`${(-delta)} ms overlapping between AAC samples detected, drop frame`);\n track.len -= unit.byteLength;\n continue;\n }\n // set DTS to next DTS\n ptsnorm = dtsnorm = nextAacPts;\n }\n }\n // remember first PTS of our aacSamples, ensure value is positive\n firstPTS = Math.max(0, ptsnorm);\n firstDTS = Math.max(0, dtsnorm);\n if(track.len > 0) {\n /* concatenate the audio data and construct the mdat in place\n (need 8 more bytes to fill length and mdat type) */\n mdat = new Uint8Array(track.len + 8);\n view = new DataView(mdat.buffer);\n view.setUint32(0, mdat.byteLength);\n mdat.set(MP4.types.mdat, 4);\n } else {\n // no audio samples\n return;\n }\n }\n mdat.set(unit, offset);\n offset += unit.byteLength;\n //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${aacSample.pts}/${aacSample.dts}/${this._initDTS}/${ptsnorm}/${dtsnorm}/${(aacSample.pts/4294967296).toFixed(3)}');\n mp4Sample = {\n size: unit.byteLength,\n cts: 0,\n duration:0,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: 1,\n }\n };\n samples.push(mp4Sample);\n lastDTS = dtsnorm;\n }\n var lastSampleDuration = 0;\n var nbSamples = samples.length;\n //set last sample duration as being identical to previous sample\n if (nbSamples >= 2) {\n lastSampleDuration = samples[nbSamples - 2].duration;\n mp4Sample.duration = lastSampleDuration;\n }\n if (nbSamples) {\n // next aac sample PTS should be equal to last sample PTS + duration\n this.nextAacPts = ptsnorm + pes2mp4ScaleFactor * lastSampleDuration;\n //logger.log('Audio/PTS/PTSend:' + aacSample.pts.toFixed(0) + '/' + this.nextAacDts.toFixed(0));\n track.len = 0;\n track.samples = samples;\n moof = MP4.moof(track.sequenceNumber++, firstDTS / pes2mp4ScaleFactor, track);\n track.samples = [];\n this.observer.trigger(Event.FRAG_PARSING_DATA, {\n moof: moof,\n mdat: mdat,\n startPTS: firstPTS / pesTimeScale,\n endPTS: this.nextAacPts / pesTimeScale,\n startDTS: firstDTS / pesTimeScale,\n endDTS: (dtsnorm + pes2mp4ScaleFactor * lastSampleDuration) / pesTimeScale,\n type: 'audio',\n nb: nbSamples\n });\n }\n }\n\n remuxID3(track,timeOffset) {\n var length = track.samples.length, sample;\n // consume samples\n if(length) {\n for(var index = 0; index < length; index++) {\n sample = track.samples[index];\n // setting id3 pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = ((sample.pts - this._initPTS) / this.PES_TIMESCALE);\n sample.dts = ((sample.dts - this._initDTS) / this.PES_TIMESCALE);\n }\n this.observer.trigger(Event.FRAG_PARSING_METADATA, {\n samples:track.samples\n });\n }\n\n track.samples = [];\n timeOffset = timeOffset;\n }\n\n remuxText(track,timeOffset) {\n track.samples.sort(function(a, b) {\n return (a.pts-b.pts);\n });\n\n var length = track.samples.length, sample;\n // consume samples\n if(length) {\n for(var index = 0; index < length; index++) {\n sample = track.samples[index];\n // setting text pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = ((sample.pts - this._initPTS) / this.PES_TIMESCALE);\n }\n this.observer.trigger(Event.FRAG_PARSING_USERDATA, {\n samples:track.samples\n });\n }\n\n track.samples = [];\n timeOffset = timeOffset;\n }\n\n _PTSNormalize(value, reference) {\n var offset;\n if (reference === undefined) {\n return value;\n }\n if (reference < value) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n }\n /* PTS is 33bit (from 0 to 2^33 -1)\n if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n PTS looping occured. fill the gap */\n while (Math.abs(value - reference) > 4294967296) {\n value += offset;\n }\n return value;\n }\n\n}\n\nexport default MP4Remuxer;\n", + "/**\n * fMP4 remuxer\n*/\n\n\nimport Event from '../events';\nimport {logger} from '../utils/logger';\nimport MP4 from '../remux/mp4-generator';\nimport {ErrorTypes, ErrorDetails} from '../errors';\n\nclass MP4Remuxer {\n constructor(observer) {\n this.observer = observer;\n this.ISGenerated = false;\n this.PES2MP4SCALEFACTOR = 4;\n this.PES_TIMESCALE = 90000;\n this.MP4_TIMESCALE = this.PES_TIMESCALE / this.PES2MP4SCALEFACTOR;\n }\n\n get timescale() {\n return this.MP4_TIMESCALE;\n }\n\n destroy() {\n }\n\n insertDiscontinuity() {\n this._initPTS = this._initDTS = this.nextAacPts = this.nextAvcDts = undefined;\n }\n\n switchLevel() {\n this.ISGenerated = false;\n }\n\n remux(audioTrack,videoTrack,id3Track,textTrack,timeOffset, contiguous) {\n // generate Init Segment if needed\n if (!this.ISGenerated) {\n this.generateIS(audioTrack,videoTrack,timeOffset);\n }\n //logger.log('nb AVC samples:' + videoTrack.samples.length);\n if (videoTrack.samples.length) {\n this.remuxVideo(videoTrack,timeOffset,contiguous);\n }\n //logger.log('nb AAC samples:' + audioTrack.samples.length);\n if (audioTrack.samples.length) {\n this.remuxAudio(audioTrack,timeOffset,contiguous);\n }\n //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (id3Track.samples.length) {\n this.remuxID3(id3Track,timeOffset);\n }\n //logger.log('nb ID3 samples:' + audioTrack.samples.length);\n if (textTrack.samples.length) {\n this.remuxText(textTrack,timeOffset);\n }\n //notify end of parsing\n this.observer.trigger(Event.FRAG_PARSED);\n }\n\n generateIS(audioTrack,videoTrack,timeOffset) {\n var observer = this.observer,\n audioSamples = audioTrack.samples,\n videoSamples = videoTrack.samples,\n nbAudio = audioSamples.length,\n nbVideo = videoSamples.length,\n pesTimeScale = this.PES_TIMESCALE;\n\n if(nbAudio === 0 && nbVideo === 0) {\n observer.trigger(Event.ERROR, {type : ErrorTypes.MEDIA_ERROR, details: ErrorDetails.FRAG_PARSING_ERROR, fatal: false, reason: 'no audio/video samples found'});\n } else if (nbVideo === 0) {\n //audio only\n if (audioTrack.config) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, {\n audioMoov: MP4.initSegment([audioTrack]),\n audioCodec : audioTrack.codec,\n audioChannelCount : audioTrack.channelCount\n });\n this.ISGenerated = true;\n }\n if (this._initPTS === undefined) {\n // remember first PTS of this demuxing context\n this._initPTS = audioSamples[0].pts - pesTimeScale * timeOffset;\n this._initDTS = audioSamples[0].dts - pesTimeScale * timeOffset;\n }\n } else\n if (nbAudio === 0) {\n //video only\n if (videoTrack.sps && videoTrack.pps) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, {\n videoMoov: MP4.initSegment([videoTrack]),\n videoCodec: videoTrack.codec,\n videoWidth: videoTrack.width,\n videoHeight: videoTrack.height\n });\n this.ISGenerated = true;\n if (this._initPTS === undefined) {\n // remember first PTS of this demuxing context\n this._initPTS = videoSamples[0].pts - pesTimeScale * timeOffset;\n this._initDTS = videoSamples[0].dts - pesTimeScale * timeOffset;\n }\n }\n } else {\n //audio and video\n if (audioTrack.config && videoTrack.sps && videoTrack.pps) {\n observer.trigger(Event.FRAG_PARSING_INIT_SEGMENT, {\n audioMoov: MP4.initSegment([audioTrack]),\n audioCodec: audioTrack.codec,\n audioChannelCount: audioTrack.channelCount,\n videoMoov: MP4.initSegment([videoTrack]),\n videoCodec: videoTrack.codec,\n videoWidth: videoTrack.width,\n videoHeight: videoTrack.height\n });\n this.ISGenerated = true;\n if (this._initPTS === undefined) {\n // remember first PTS of this demuxing context\n this._initPTS = Math.min(videoSamples[0].pts, audioSamples[0].pts) - pesTimeScale * timeOffset;\n this._initDTS = Math.min(videoSamples[0].dts, audioSamples[0].dts) - pesTimeScale * timeOffset;\n }\n }\n }\n }\n\n remuxVideo(track, timeOffset, contiguous) {\n var view,\n offset = 8,\n pesTimeScale = this.PES_TIMESCALE,\n pes2mp4ScaleFactor = this.PES2MP4SCALEFACTOR,\n avcSample,\n mp4Sample,\n mp4SampleLength,\n unit,\n mdat, moof,\n firstPTS, firstDTS, lastDTS,\n pts, dts, ptsnorm, dtsnorm,\n flags,\n samples = [];\n /* concatenate the video data and construct the mdat in place\n (need 8 more bytes to fill length and mpdat type) */\n mdat = new Uint8Array(track.len + (4 * track.nbNalu) + 8);\n view = new DataView(mdat.buffer);\n view.setUint32(0, mdat.byteLength);\n mdat.set(MP4.types.mdat, 4);\n while (track.samples.length) {\n avcSample = track.samples.shift();\n mp4SampleLength = 0;\n // convert NALU bitstream to MP4 format (prepend NALU with size field)\n while (avcSample.units.units.length) {\n unit = avcSample.units.units.shift();\n view.setUint32(offset, unit.data.byteLength);\n offset += 4;\n mdat.set(unit.data, offset);\n offset += unit.data.byteLength;\n mp4SampleLength += 4 + unit.data.byteLength;\n }\n pts = avcSample.pts - this._initDTS;\n dts = avcSample.dts - this._initDTS;\n // ensure DTS is not bigger than PTS\n dts = Math.min(pts,dts);\n //logger.log(`Video/PTS/DTS:${Math.round(pts/90)}/${Math.round(dts/90)}`);\n // if not first AVC sample of video track, normalize PTS/DTS with previous sample value\n // and ensure that sample duration is positive\n if (lastDTS !== undefined) {\n ptsnorm = this._PTSNormalize(pts, lastDTS);\n dtsnorm = this._PTSNormalize(dts, lastDTS);\n var sampleDuration = (dtsnorm - lastDTS) / pes2mp4ScaleFactor;\n if (sampleDuration <= 0) {\n logger.log(`invalid sample duration at PTS/DTS: ${avcSample.pts}/${avcSample.dts}:${sampleDuration}`);\n sampleDuration = 1;\n }\n mp4Sample.duration = sampleDuration;\n } else {\n var nextAvcDts = this.nextAvcDts,delta;\n // first AVC sample of video track, normalize PTS/DTS\n ptsnorm = this._PTSNormalize(pts, nextAvcDts);\n dtsnorm = this._PTSNormalize(dts, nextAvcDts);\n delta = Math.round((dtsnorm - nextAvcDts) / 90);\n // if fragment are contiguous, or delta less than 600ms, ensure there is no overlap/hole between fragments\n if (contiguous || Math.abs(delta) < 600) {\n if (delta) {\n if (delta > 1) {\n logger.log(`AVC:${delta} ms hole between fragments detected,filling it`);\n } else if (delta < -1) {\n logger.log(`AVC:${(-delta)} ms overlapping between fragments detected`);\n }\n // set DTS to next DTS\n dtsnorm = nextAvcDts;\n // offset PTS as well, ensure that PTS is smaller or equal than new DTS\n ptsnorm = Math.max(ptsnorm - delta, dtsnorm);\n logger.log(`Video/PTS/DTS adjusted: ${ptsnorm}/${dtsnorm},delta:${delta}`);\n }\n }\n // remember first PTS of our avcSamples, ensure value is positive\n firstPTS = Math.max(0, ptsnorm);\n firstDTS = Math.max(0, dtsnorm);\n }\n //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${avcSample.pts}/${avcSample.dts}/${this._initDTS}/${ptsnorm}/${dtsnorm}/${(avcSample.pts/4294967296).toFixed(3)}');\n mp4Sample = {\n size: mp4SampleLength,\n duration: 0,\n cts: (ptsnorm - dtsnorm) / pes2mp4ScaleFactor,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0\n }\n };\n flags = mp4Sample.flags;\n if (avcSample.key === true) {\n // the current sample is a key frame\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n } else {\n flags.dependsOn = 1;\n flags.isNonSync = 1;\n }\n samples.push(mp4Sample);\n lastDTS = dtsnorm;\n }\n var lastSampleDuration = 0;\n if (samples.length >= 2) {\n lastSampleDuration = samples[samples.length - 2].duration;\n mp4Sample.duration = lastSampleDuration;\n }\n // next AVC sample DTS should be equal to last sample DTS + last sample duration\n this.nextAvcDts = dtsnorm + lastSampleDuration * pes2mp4ScaleFactor;\n track.len = 0;\n track.nbNalu = 0;\n if(samples.length && navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {\n flags = samples[0].flags;\n // chrome workaround, mark first sample as being a Random Access Point to avoid sourcebuffer append issue\n // https://code.google.com/p/chromium/issues/detail?id=229412\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n track.samples = samples;\n moof = MP4.moof(track.sequenceNumber++, firstDTS / pes2mp4ScaleFactor, track);\n track.samples = [];\n this.observer.trigger(Event.FRAG_PARSING_DATA, {\n moof: moof,\n mdat: mdat,\n startPTS: firstPTS / pesTimeScale,\n endPTS: (ptsnorm + pes2mp4ScaleFactor * lastSampleDuration) / pesTimeScale,\n startDTS: firstDTS / pesTimeScale,\n endDTS: this.nextAvcDts / pesTimeScale,\n type: 'video',\n nb: samples.length\n });\n }\n\n remuxAudio(track,timeOffset, contiguous) {\n var view,\n offset = 8,\n pesTimeScale = this.PES_TIMESCALE,\n mp4timeScale = track.timescale,\n pes2mp4ScaleFactor = pesTimeScale/mp4timeScale,\n aacSample, mp4Sample,\n unit,\n mdat, moof,\n firstPTS, firstDTS, lastDTS,\n pts, dts, ptsnorm, dtsnorm,\n samples = [],\n samples0 = [];\n\n track.samples.sort(function(a, b) {\n return (a.pts-b.pts);\n });\n samples0 = track.samples;\n\n while (samples0.length) {\n aacSample = samples0.shift();\n unit = aacSample.unit;\n pts = aacSample.pts - this._initDTS;\n dts = aacSample.dts - this._initDTS;\n //logger.log(`Audio/PTS:${Math.round(pts/90)}`);\n // if not first sample\n if (lastDTS !== undefined) {\n ptsnorm = this._PTSNormalize(pts, lastDTS);\n dtsnorm = this._PTSNormalize(dts, lastDTS);\n // let's compute sample duration.\n // there should be 1024 audio samples in one AAC frame\n mp4Sample.duration = (dtsnorm - lastDTS) / pes2mp4ScaleFactor;\n if(Math.abs(mp4Sample.duration - 1024) > 10) {\n // not expected to happen ...\n logger.log(`invalid AAC sample duration at PTS ${Math.round(pts/90)},should be 1024,found :${Math.round(mp4Sample.duration)}`);\n }\n mp4Sample.duration = 1024;\n dtsnorm = 1024 * pes2mp4ScaleFactor + lastDTS;\n } else {\n var nextAacPts = this.nextAacPts,delta;\n ptsnorm = this._PTSNormalize(pts, nextAacPts);\n dtsnorm = this._PTSNormalize(dts, nextAacPts);\n delta = Math.round(1000 * (ptsnorm - nextAacPts) / pesTimeScale);\n // if fragment are contiguous, or delta less than 600ms, ensure there is no overlap/hole between fragments\n if (contiguous || Math.abs(delta) < 600) {\n // log delta\n if (delta) {\n if (delta > 0) {\n logger.log(`${delta} ms hole between AAC samples detected,filling it`);\n // if we have frame overlap, overlapping for more than half a frame duraion\n } else if (delta < -12) {\n // drop overlapping audio frames... browser will deal with it\n logger.log(`${(-delta)} ms overlapping between AAC samples detected, drop frame`);\n track.len -= unit.byteLength;\n continue;\n }\n // set DTS to next DTS\n ptsnorm = dtsnorm = nextAacPts;\n }\n }\n // remember first PTS of our aacSamples, ensure value is positive\n firstPTS = Math.max(0, ptsnorm);\n firstDTS = Math.max(0, dtsnorm);\n if(track.len > 0) {\n /* concatenate the audio data and construct the mdat in place\n (need 8 more bytes to fill length and mdat type) */\n mdat = new Uint8Array(track.len + 8);\n view = new DataView(mdat.buffer);\n view.setUint32(0, mdat.byteLength);\n mdat.set(MP4.types.mdat, 4);\n } else {\n // no audio samples\n return;\n }\n }\n mdat.set(unit, offset);\n offset += unit.byteLength;\n //console.log('PTS/DTS/initDTS/normPTS/normDTS/relative PTS : ${aacSample.pts}/${aacSample.dts}/${this._initDTS}/${ptsnorm}/${dtsnorm}/${(aacSample.pts/4294967296).toFixed(3)}');\n mp4Sample = {\n size: unit.byteLength,\n cts: 0,\n duration:0,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: 1,\n }\n };\n samples.push(mp4Sample);\n lastDTS = dtsnorm;\n }\n var lastSampleDuration = 0;\n var nbSamples = samples.length;\n //set last sample duration as being identical to previous sample\n if (nbSamples >= 2) {\n lastSampleDuration = samples[nbSamples - 2].duration;\n mp4Sample.duration = lastSampleDuration;\n }\n if (nbSamples) {\n // next aac sample PTS should be equal to last sample PTS + duration\n this.nextAacPts = ptsnorm + pes2mp4ScaleFactor * lastSampleDuration;\n //logger.log('Audio/PTS/PTSend:' + aacSample.pts.toFixed(0) + '/' + this.nextAacDts.toFixed(0));\n track.len = 0;\n track.samples = samples;\n moof = MP4.moof(track.sequenceNumber++, firstDTS / pes2mp4ScaleFactor, track);\n track.samples = [];\n this.observer.trigger(Event.FRAG_PARSING_DATA, {\n moof: moof,\n mdat: mdat,\n startPTS: firstPTS / pesTimeScale,\n endPTS: this.nextAacPts / pesTimeScale,\n startDTS: firstDTS / pesTimeScale,\n endDTS: (dtsnorm + pes2mp4ScaleFactor * lastSampleDuration) / pesTimeScale,\n type: 'audio',\n nb: nbSamples\n });\n }\n }\n\n remuxID3(track,timeOffset) {\n var length = track.samples.length, sample;\n // consume samples\n if(length) {\n for(var index = 0; index < length; index++) {\n sample = track.samples[index];\n // setting id3 pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = ((sample.pts - this._initPTS) / this.PES_TIMESCALE);\n sample.dts = ((sample.dts - this._initDTS) / this.PES_TIMESCALE);\n }\n this.observer.trigger(Event.FRAG_PARSING_METADATA, {\n samples:track.samples\n });\n }\n\n track.samples = [];\n timeOffset = timeOffset;\n }\n\n remuxText(track,timeOffset) {\n track.samples.sort(function(a, b) {\n return (a.pts-b.pts);\n });\n\n var length = track.samples.length, sample;\n // consume samples\n if(length) {\n for(var index = 0; index < length; index++) {\n sample = track.samples[index];\n // setting text pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = ((sample.pts - this._initPTS) / this.PES_TIMESCALE);\n }\n this.observer.trigger(Event.FRAG_PARSING_USERDATA, {\n samples:track.samples\n });\n }\n\n track.samples = [];\n timeOffset = timeOffset;\n }\n\n _PTSNormalize(value, reference) {\n var offset;\n if (reference === undefined) {\n return value;\n }\n if (reference < value) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n }\n /* PTS is 33bit (from 0 to 2^33 -1)\n if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n PTS looping occured. fill the gap */\n while (Math.abs(value - reference) > 4294967296) {\n value += offset;\n }\n return value;\n }\n\n}\n\nexport default MP4Remuxer;\n", "\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nclass AttrList {\n\n constructor(attrs) {\n if (typeof attrs === 'string') {\n attrs = AttrList.parseAttrList(attrs);\n }\n for(var attr in attrs){\n if(attrs.hasOwnProperty(attr)) {\n this[attr] = attrs[attr];\n }\n }\n }\n\n decimalInteger(attrName) {\n const intValue = parseInt(this[attrName], 10);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n\n hexadecimalInteger(attrName) {\n if(this[attrName]) {\n let stringValue = (this[attrName] || '0x').slice(2);\n stringValue = ((stringValue.length & 1) ? '0' : '') + stringValue;\n\n const value = new Uint8Array(stringValue.length / 2);\n for (let i = 0; i < stringValue.length / 2; i++) {\n value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n }\n return value;\n } else {\n return null;\n }\n }\n\n hexadecimalIntegerAsNumber(attrName) {\n const intValue = parseInt(this[attrName], 16);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n\n decimalFloatingPoint(attrName) {\n return parseFloat(this[attrName]);\n }\n\n enumeratedString(attrName) {\n return this[attrName];\n }\n\n decimalResolution(attrName) {\n const res = /^(\\d+)x(\\d+)$/.exec(this[attrName]);\n if (res === null) {\n return undefined;\n }\n return {\n width: parseInt(res[1], 10),\n height: parseInt(res[2], 10)\n };\n }\n\n static parseAttrList(input) {\n const re = /\\s*(.+?)\\s*=((?:\\\".*?\\\")|.*?)(?:,|$)/g;\n var match, attrs = {};\n while ((match = re.exec(input)) !== null) {\n var value = match[2], quote = '\"';\n\n if (value.indexOf(quote) === 0 &&\n value.lastIndexOf(quote) === (value.length-1)) {\n value = value.slice(1, -1);\n }\n attrs[match[1]] = value;\n }\n return attrs;\n }\n\n}\n\nexport default AttrList;\n", "var BinarySearch = {\n /**\n * Searches for an item in an array which matches a certain condition.\n * This requires the condition to only match one item in the array,\n * and for the array to be ordered.\n *\n * @param {Array} list The array to search.\n * @param {Function} comparisonFunction\n * Called and provided a candidate item as the first argument.\n * Should return:\n * > -1 if the item should be located at a lower index than the provided item.\n * > 1 if the item should be located at a higher index than the provided item.\n * > 0 if the item is the item you're looking for.\n *\n * @return {*} The object if it is found or null otherwise.\n */\n search: function(list, comparisonFunction) {\n var minIndex = 0;\n var maxIndex = list.length - 1;\n var currentIndex = null;\n var currentElement = null;\n \n while (minIndex <= maxIndex) {\n currentIndex = (minIndex + maxIndex) / 2 | 0;\n currentElement = list[currentIndex];\n \n var comparisonResult = comparisonFunction(currentElement);\n if (comparisonResult > 0) {\n minIndex = currentIndex + 1;\n }\n else if (comparisonResult < 0) {\n maxIndex = currentIndex - 1;\n }\n else {\n return currentElement;\n }\n }\n \n return null;\n }\n};\n\nmodule.exports = BinarySearch;\n", "/*\n * CEA-708 interpreter\n*/\n\nclass CEA708Interpreter {\n\n constructor() {\n }\n\n attach(media) {\n this.media = media;\n this.display = [];\n this.memory = [];\n }\n\n detach()\n {\n this.clear();\n }\n\n destroy() {\n }\n\n _createCue()\n {\n var VTTCue = window.VTTCue || window.TextTrackCue;\n\n this.cue = new VTTCue(-1, -1, '');\n this.cue.text = '';\n this.cue.pauseOnExit = false;\n\n // make sure it doesn't show up before it's ready\n this.startTime = Number.MAX_VALUE;\n\n // show it 'forever' once we do show it\n // (we'll set the end time once we know it later)\n this.cue.endTime = Number.MAX_VALUE;\n\n this.memory.push(this.cue);\n }\n\n clear()\n {\n if (this._textTrack && this._textTrack.cues)\n {\n while (this._textTrack.cues.length > 0)\n {\n this._textTrack.removeCue(this._textTrack.cues[0]);\n }\n }\n }\n\n push(timestamp, bytes)\n {\n if (!this.cue)\n {\n this._createCue();\n }\n\n var count = bytes[0] & 31;\n var position = 2;\n var byte, ccbyte1, ccbyte2, ccValid, ccType;\n\n for (var j=0; j= 0x30 && ccbyte2 <= 0x3F)\n {\n // extended chars, e.g. musical note, accents\n switch (ccbyte2)\n {\n case 48:\n this.cue.text += '®';\n break;\n case 49:\n this.cue.text += '°';\n break;\n case 50:\n this.cue.text += '½';\n break;\n case 51:\n this.cue.text += '¿';\n break;\n case 52:\n this.cue.text += '™';\n break;\n case 53:\n this.cue.text += '¢';\n break;\n case 54:\n this.cue.text += '';\n break;\n case 55:\n this.cue.text += '£';\n break;\n case 56:\n this.cue.text += '♪';\n break;\n case 57:\n this.cue.text += ' ';\n break;\n case 58:\n this.cue.text += 'è';\n break;\n case 59:\n this.cue.text += 'â';\n break;\n case 60:\n this.cue.text += 'ê';\n break;\n case 61:\n this.cue.text += 'î';\n break;\n case 62:\n this.cue.text += 'ô';\n break;\n case 63:\n this.cue.text += 'û';\n break;\n }\n }\n if ((ccbyte1 === 0x11 || ccbyte1 === 0x19) && ccbyte2 >= 0x20 && ccbyte2 <= 0x2F)\n {\n // Mid-row codes: color/underline\n switch (ccbyte2)\n {\n case 0x20:\n // White\n break;\n case 0x21:\n // White Underline\n break;\n case 0x22:\n // Green\n break;\n case 0x23:\n // Green Underline\n break;\n case 0x24:\n // Blue\n break;\n case 0x25:\n // Blue Underline\n break;\n case 0x26:\n // Cyan\n break;\n case 0x27:\n // Cyan Underline\n break;\n case 0x28:\n // Red\n break;\n case 0x29:\n // Red Underline\n break;\n case 0x2A:\n // Yellow\n break;\n case 0x2B:\n // Yellow Underline\n break;\n case 0x2C:\n // Magenta\n break;\n case 0x2D:\n // Magenta Underline\n break;\n case 0x2E:\n // Italics\n break;\n case 0x2F:\n // Italics Underline\n break;\n }\n }\n if ((ccbyte1 === 0x14 || ccbyte1 === 0x1C) && ccbyte2 >= 0x20 && ccbyte2 <= 0x2F)\n {\n // Mid-row codes: color/underline\n switch (ccbyte2)\n {\n case 0x20:\n // TODO: shouldn't affect roll-ups...\n this._clearActiveCues(timestamp);\n // RCL: Resume Caption Loading\n // begin pop on\n break;\n case 0x21:\n // BS: Backspace\n this.cue.text = this.cue.text.substr(0, this.cue.text.length-1);\n break;\n case 0x22:\n // AOF: reserved (formerly alarm off)\n break;\n case 0x23:\n // AON: reserved (formerly alarm on)\n break;\n case 0x24:\n // DER: Delete to end of row\n break;\n case 0x25:\n // RU2: roll-up 2 rows\n //this._rollup(2);\n break;\n case 0x26:\n // RU3: roll-up 3 rows\n //this._rollup(3);\n break;\n case 0x27:\n // RU4: roll-up 4 rows\n //this._rollup(4);\n break;\n case 0x28:\n // FON: Flash on\n break;\n case 0x29:\n // RDC: Resume direct captioning\n this._clearActiveCues(timestamp);\n break;\n case 0x2A:\n // TR: Text Restart\n break;\n case 0x2B:\n // RTD: Resume Text Display\n break;\n case 0x2C:\n // EDM: Erase Displayed Memory\n this._clearActiveCues(timestamp);\n break;\n case 0x2D:\n // CR: Carriage Return\n // only affects roll-up\n //this._rollup(1);\n break;\n case 0x2E:\n // ENM: Erase non-displayed memory\n this._text = '';\n break;\n case 0x2F:\n this._flipMemory(timestamp);\n // EOC: End of caption\n // hide any displayed captions and show any hidden one\n break;\n }\n }\n if ((ccbyte1 === 0x17 || ccbyte1 === 0x1F) && ccbyte2 >= 0x21 && ccbyte2 <= 0x23)\n {\n // Mid-row codes: color/underline\n switch (ccbyte2)\n {\n case 0x21:\n // TO1: tab offset 1 column\n break;\n case 0x22:\n // TO1: tab offset 2 column\n break;\n case 0x23:\n // TO1: tab offset 3 column\n break;\n }\n }\n else {\n // Probably a pre-amble address code\n }\n }\n }\n }\n }\n\n _fromCharCode(byte)\n {\n switch (byte)\n {\n case 42:\n return 'á';\n\n case 2:\n return 'á';\n\n case 2:\n return 'é';\n\n case 4:\n return 'í';\n\n case 5:\n return 'ó';\n\n case 6:\n return 'ú';\n\n case 3:\n return 'ç';\n\n case 4:\n return '÷';\n\n case 5:\n return 'Ñ';\n\n case 6:\n return 'ñ';\n\n case 7:\n return '█';\n\n default:\n return String.fromCharCode(byte);\n }\n }\n\n _flipMemory(timestamp)\n {\n this._clearActiveCues(timestamp);\n this._flushCaptions(timestamp);\n }\n\n _flushCaptions(timestamp)\n {\n if (!this._has708)\n {\n this._textTrack = this.media.addTextTrack('captions', 'English', 'en');\n this._has708 = true;\n }\n\n for (var i=0; ie||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},e.prototype.emit=function(u){var o,a,n,s,e,l;if(this._events||(this._events={}),"error"===u&&(!this._events.error||r(this._events.error)&&!this._events.error.length)){if(o=arguments[1],o instanceof Error)throw o;throw TypeError('Uncaught, unspecified "error" event.')}if(a=this._events[u],i(a))return!1;if(t(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:for(n=arguments.length,s=new Array(n-1),e=1;n>e;e++)s[e-1]=arguments[e];a.apply(this,s)}else if(r(a)){for(n=arguments.length,s=new Array(n-1),e=1;n>e;e++)s[e-1]=arguments[e];for(l=a.slice(),n=l.length,e=0;n>e;e++)l[e].apply(this,s)}return!0},e.prototype.addListener=function(a,n){var s;if(!t(n))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",a,t(n.listener)?n.listener:n),this._events[a]?r(this._events[a])?this._events[a].push(n):this._events[a]=[this._events[a],n]:this._events[a]=n,r(this._events[a])&&!this._events[a].warned){var s;s=i(this._maxListeners)?e.defaultMaxListeners:this._maxListeners,s&&s>0&&this._events[a].length>s&&(this._events[a].warned=!0,"function"==typeof console.trace)}return this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(i,e){function r(){this.removeListener(i,r),a||(a=!0,e.apply(this,arguments))}if(!t(e))throw TypeError("listener must be a function");var a=!1;return r.listener=e,this.on(i,r),this},e.prototype.removeListener=function(a,i){var e,s,o,n;if(!t(i))throw TypeError("listener must be a function");if(!this._events||!this._events[a])return this;if(e=this._events[a],o=e.length,s=-1,e===i||t(e.listener)&&e.listener===i)delete this._events[a],this._events.removeListener&&this.emit("removeListener",a,i);else if(r(e)){for(n=o;n-- >0;)if(e[n]===i||e[n].listener&&e[n].listener===i){s=n;break}if(0>s)return this;1===e.length?(e.length=0,delete this._events[a]):e.splice(s,1),this._events.removeListener&&this.emit("removeListener",a,i)}return this},e.prototype.removeAllListeners=function(e){var i,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(i in this._events)"removeListener"!==i&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],t(r))this.removeListener(e,r);else for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},e.prototype.listeners=function(e){var r;return r=this._events&&this._events[e]?t(this._events[e])?[this._events[e]]:this._events[e].slice():[]},e.listenerCount=function(e,r){var i;return i=e._events&&e._events[r]?t(e._events[r])?1:e._events[r].length:0}},{}],2:[function(n,i,s){var a=arguments[3],e=arguments[4],r=arguments[5],t=JSON.stringify;i.exports=function(l){for(var i,s=Object.keys(r),n=0,d=s.length;d>n;n++){var o=s[n],u=r[o].exports;if(u===l||u.default===l){i=o;break}}if(!i){i=Math.floor(Math.pow(16,8)*Math.random()).toString(16);for(var h={},n=0,d=s.length;d>n;n++){var o=s[n];h[o]=o}e[i]=[Function(["require","module","exports"],"("+l+")(self)"),h]}var f=Math.floor(Math.pow(16,8)*Math.random()).toString(16),c={};c[i]=i,e[f]=[Function(["require"],"var f = require("+t(i)+");(f.default ? f.default : f)(self);"),c];var v="("+a+")({"+Object.keys(e).map(function(r){return t(r)+":["+e[r][0]+","+t(e[r][1])+"]"}).join(",")+"},{},["+t(f)+"])",g=window.URL||window.webkitURL||window.mozURL||window.msURL;return new Worker(g.createObjectURL(new Blob([v],{type:"text/javascript"})))}},{}],3:[function(t,s,e){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var f=function(){function e(i,r){for(var t=0;t=e;e++)if(r=e<=this.lastfetchlevel?.8*i:.7*i,r=0&&i1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var h,o,n,l=this.hls;switch(this.state){case e.ERROR:break;case e.STARTING:this.startLevel=l.startLevel,-1===this.startLevel&&(this.startLevel=0,this.fragBitrateTest=!0),this.level=l.nextLoadLevel=this.startLevel,this.state=e.WAITING_LEVEL,this.loadedmetadata=!1;break;case e.IDLE:if(!this.media)break;h=this.loadedmetadata?this.media.currentTime:this.nextLoadPosition,o=this.startFragmentRequested===!1?this.startLevel:l.nextLoadLevel;var v,x=this.bufferInfo(h,this.config.maxBufferHole),N=x.len,d=x.end,f=this.fragPrevious;if(this.levels[o].hasOwnProperty("bitrate")?(v=Math.max(8*this.config.maxBufferSize/this.levels[o].bitrate,this.config.maxBufferLength),v=Math.min(v,this.config.maxMaxBufferLength)):v=this.config.maxBufferLength,v>N){if(l.nextLoadLevel=o,this.level=o,n=this.levels[o].details,"undefined"==typeof n||n.live&&this.levelLastLoaded!==o){this.state=e.WAITING_LEVEL;break}var u=n.fragments,c=u.length,g=u[0].start,O=u[c-1].start+u[c-1].duration,a=void 0;if(n.live){if(d=n.startSN&&k<=n.endSN&&(a=u[k-n.startSN],t.logger.log("live playlist, switching playlist, load frag with next SN: "+a.sn))}a||(a=u[Math.min(c-1,Math.round(c/2))],t.logger.log("live playlist, switching playlist, unknown, load middle frag : "+a.sn))}}else g>d&&(a=u[0]);if(!a){var m;if(m=O>d?p.default.search(u,function(e){return e.start+e.duration<=d?1:e.start>d?-1:0}):u[c-1],m&&(a=m,g=m.start,f&&a.level===f.level&&a.sn===f.sn))if(a.sn1&&(a.expectedLen=Math.round(a.duration*this.levels[o].bitrate/8),a.trequest=performance.now()),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,a.loadCounter){a.loadCounter++;var w=this.config.fragLoadingLoopThreshold;if(a.loadCounter>w&&Math.abs(this.fragLoadIdx-a.loadIdx)1){var S=performance.now()-s.trequest;if(S>500*s.duration){var P=1e3*s.loaded/S;s.expectedLen_&&A>D&&(t.logger.warn("loading too slow, abort fragment loading"),t.logger.log("fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay :"+A.toFixed(1)+"/"+_.toFixed(1)+"/"+D.toFixed(1)),s.loader.abort(),l.trigger(r.default.FRAG_LOAD_EMERGENCY_ABORTED,{frag:s}),this.state=e.IDLE)}}break;case e.FRAG_LOADING_WAITING_RETRY:var G=performance.now(),T=this.retryDate,I=this.media,M=I&&I.seeking;(!T||G>=T||M)&&(t.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=e.IDLE);break;case e.PARSING:break;case e.PARSED:case e.APPENDING:if(this.sourceBuffer){if(this.media.error)return t.logger.error("trying to append although a media error occured, switch to ERROR state"),void(this.state=e.ERROR);if(this.sourceBuffer.audio&&this.sourceBuffer.audio.updating||this.sourceBuffer.video&&this.sourceBuffer.video.updating);else if(this.mp4segments.length){var R=this.mp4segments.shift();try{this.sourceBuffer[R.type].appendBuffer(R.data),this.appendError=0}catch(a){if(t.logger.error("error while trying to append buffer:"+a.message+",try appending later"),this.mp4segments.unshift(R),22!==a.code){this.appendError?this.appendError++:this.appendError=1;var y={type:i.ErrorTypes.MEDIA_ERROR,details:i.ErrorDetails.BUFFER_APPEND_ERROR,frag:this.fragCurrent};if(this.appendError>this.config.appendErrorMaxRetry)return t.logger.log("fail "+this.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),y.fatal=!0,l.trigger(r.default.ERROR,y),void(this.state=e.ERROR);y.fatal=!1,l.trigger(r.default.ERROR,y)}}this.state=e.APPENDING}}else this.state=e.IDLE;break;case e.BUFFER_FLUSHING:for(;this.flushRange.length;){var C=this.flushRange[0];if(!this.flushBuffer(C.start,C.end))break;this.flushRange.shift()}0===this.flushRange.length&&(this.immediateSwitch&&this.immediateLevelSwitchEnd(),this.state=e.IDLE,this.fragPrevious=null);break;case e.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"bufferInfo",value:function(i,a){var e,n=this.media,t=n.buffered,r=[];for(e=0;ed&&(t[u-1].end=r[e].end):t.push(r[e])}else t.push(r[e])}for(e=0,o=0,l=n=i;e=s&&h>i)l=s,n=h+a,o=n-i;else if(s>i+a){f=s;break}}return{len:o,start:l,end:n,nextStart:f}}},{key:"getBufferRange",value:function(r){var e,t;for(e=this.bufferRange.length-1;e>=0;e--)if(t=this.bufferRange[e],r>=t.start&&r<=t.end)return t;return null}},{key:"followingBufferRange",value:function(e){return e?this.getBufferRange(e.end+.5):null}},{key:"isBuffered",value:function(r){for(var i=this.media,t=i.buffered,e=0;e=t.start(e)&&r<=t.end(e))return!0;return!1}},{key:"_checkFragmentChanged",value:function(){var t,e,i=this.media;if(i&&i.seeking===!1&&(e=i.currentTime,e>i.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=e),this.isBuffered(e)?t=this.getBufferRange(e):this.isBuffered(e+.1)&&(t=this.getBufferRange(e+.1)),t)){var a=t.frag;a!==this.fragPlaying&&(this.fragPlaying=a,this.hls.trigger(r.default.FRAG_CHANGED,{frag:a}))}}},{key:"flushBuffer",value:function(d,l){var r,e,o,s,i,a;if(this.flushBufferCounter++<2*this.bufferRange.length&&this.sourceBuffer)for(var u in this.sourceBuffer){if(r=this.sourceBuffer[u],r.updating)return!1;for(e=0;e.5)return t.logger.log("flush "+u+" ["+i+","+a+"], of ["+o+","+s+"], pos:"+this.media.currentTime),r.remove(i,a),!1}var n,h=[];for(e=0;e "+a+"/"+i.videoCodec+"; audio => "+r+"/"+i.audioCodec),(void 0===r||void 0===i.audioCodec)&&(r=i.audioCodec),(void 0===a||void 0===i.videoCodec)&&(a=i.videoCodec);var s=navigator.userAgent.toLowerCase();this.audiocodecswitch&&1!==i.audioChannelCount&&-1===s.indexOf("android")&&-1===s.indexOf("firefox")&&(r="mp4a.40.5"),this.sourceBuffer||(this.sourceBuffer={},t.logger.log("selected A/V codecs for sourceBuffers:"+r+","+a),r&&(n=this.sourceBuffer.audio=this.mediaSource.addSourceBuffer("audio/mp4;codecs="+r),n.addEventListener("updateend",this.onsbue),n.addEventListener("error",this.onsbe)),a&&(n=this.sourceBuffer.video=this.mediaSource.addSourceBuffer("video/mp4;codecs="+a),n.addEventListener("updateend",this.onsbue),n.addEventListener("error",this.onsbe))),r&&this.mp4segments.push({type:"audio",data:i.audioMoov}),a&&this.mp4segments.push({type:"video",data:i.videoMoov}),this.tick()}}},{key:"onFragParsingData",value:function(i){if(this.state===e.PARSING){this.tparse2=Date.now();var a=this.levels[this.level],n=this.fragCurrent;t.logger.log("parsed "+i.type+",PTS:["+i.startPTS.toFixed(3)+","+i.endPTS.toFixed(3)+"],DTS:["+i.startDTS.toFixed(3)+"/"+i.endDTS.toFixed(3)+"],nb:"+i.nb);var s=l.default.updateFragPTS(a.details,n.sn,i.startPTS,i.endPTS);this.hls.trigger(r.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s}),this.mp4segments.push({type:i.type,data:i.moof}),this.mp4segments.push({type:i.type,data:i.mdat}),this.nextLoadPosition=i.endPTS,this.bufferRange.push({type:i.type,start:i.startPTS,end:i.endPTS,frag:n}),this.tick()}else t.logger.warn("not in PARSING state, ignoring FRAG_PARSING_DATA event")}},{key:"onFragParsed",value:function(){this.state===e.PARSING&&(this.state=e.PARSED, -this.stats.tparsed=performance.now(),this.tick())}},{key:"onError",value:function(a){switch(a.details){case i.ErrorDetails.FRAG_LOAD_ERROR:case i.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!a.fatal){var n=this.fragLoadError;if(n?n++:n=1,n<=this.config.fragLoadingMaxRetry){this.fragLoadError=n,a.frag.loadCounter=0;var s=Math.min(Math.pow(2,n-1)*this.config.fragLoadingRetryDelay,64e3);t.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.state=e.FRAG_LOADING_WAITING_RETRY}else t.logger.error("mediaController: "+a.details+" reaches max retry, redispatch as fatal ..."),a.fatal=!0,this.hls.trigger(r.default.ERROR,a),this.state=e.ERROR}break;case i.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case i.ErrorDetails.LEVEL_LOAD_ERROR:case i.ErrorDetails.LEVEL_LOAD_TIMEOUT:case i.ErrorDetails.KEY_LOAD_ERROR:case i.ErrorDetails.KEY_LOAD_TIMEOUT:t.logger.warn("mediaController: "+a.details+" while loading frag,switch to "+(a.fatal?"ERROR":"IDLE")+" state ..."),this.state=a.fatal?e.ERROR:e.IDLE}}},{key:"onSBUpdateEnd",value:function(){if(this.state===e.APPENDING&&0===this.mp4segments.length){var a=this.fragCurrent,i=this.stats;a&&(this.fragPrevious=a,i.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*i.length/(i.tbuffered-i.tfirst)),this.hls.trigger(r.default.FRAG_BUFFERED,{stats:i,frag:a}),t.logger.log("media buffered : "+this.timeRangesToString(this.media.buffered)),this.state=e.IDLE)}this.tick()}},{key:"_checkBuffer",value:function(){var e=this.media;if(e){var u=e.readyState;if(u){var s=this.seekAfterBuffered;if(s)e.duration>=s&&(e.currentTime=s,this.seekAfterBuffered=void 0);else{var a=e.currentTime,o=this.bufferInfo(a,0),f=!(e.paused||e.ended||e.seeking||3>u),l=.2,d=a>e.playbackRate*this.lastCurrentTime;if(this.stalled&&d&&(this.stalled=!1),o.len<=l&&(d||!f?l=0:(t.logger.log("playback seems stuck"),this.stalled||(this.hls.trigger(r.default.ERROR,{type:i.ErrorTypes.MEDIA_ERROR,details:i.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1}),this.stalled=!0)),o.len<=l)){var n=o.nextStart,h=n-a;n&&h.005&&!e.seeking&&(t.logger.log("adjust currentTime from "+a+" to "+n),e.currentTime=n)}}}}}},{key:"swapAudioCodec",value:function(){this.audioCodecSwap=!this.audioCodecSwap}},{key:"onSBUpdateError",value:function(a){t.logger.error("sourceBuffer error:"+a),this.state=e.ERROR,this.hls.trigger(r.default.ERROR,{type:i.ErrorTypes.MEDIA_ERROR,details:i.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1,frag:this.fragCurrent})}},{key:"timeRangesToString",value:function(t){for(var r="",i=t.length,e=0;i>e;e++)r+="["+t.start(e)+","+t.end(e)+"]";return r}},{key:"onMediaSourceOpen",value:function(){t.logger.log("media source opened"),this.hls.trigger(r.default.MEDIA_ATTACHED),this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvmetadata=this.onMediaMetadata.bind(this),this.onvended=this.onMediaEnded.bind(this);var e=this.media;e.addEventListener("seeking",this.onvseeking),e.addEventListener("seeked",this.onvseeked),e.addEventListener("loadedmetadata",this.onvmetadata),e.addEventListener("ended",this.onvended),this.levels&&this.config.autoStartLoad&&this.startLoad(),this.mediaSource.removeEventListener("sourceopen",this.onmso)}},{key:"onMediaSourceClose",value:function(){t.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){t.logger.log("media source ended")}},{key:"currentLevel",get:function(){if(this.media){var e=this.getBufferRange(this.media.currentTime);if(e)return e.frag.level}return-1}},{key:"nextBufferRange",get:function(){return this.media?this.followingBufferRange(this.getBufferRange(this.media.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferRange;return e?e.frag.level:-1}}]),a}(o.default);s.default=_,h.exports=s.default},{"../demux/demuxer":14,"../errors":18,"../event-handler":19,"../events":20,"../helper/level-helper":21,"../utils/binary-search":29,"../utils/logger":31}],6:[function(t,o,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(r,"__esModule",{value:!0});var s=function(){function e(i,r){for(var t=0;te;e++)c[(a[e]=e<<1^283*(e>>7))^e]=e;for(i=r=0;!f[i];i^=u||1,r=c[r]||1)for(t=r^r<<1^r<<2^r<<3^r<<4,t=t>>8^255&t^99,f[i]=t,v[t]=i,d=a[h=a[u=a[i]]],l=16843009*d^65537*h^257*u^16843008*i,s=257*a[t]^16843008*t,e=0;4>e;e++)n[e][i]=s=s<<24^s>>>8,o[e][t]=l=l<<24^l>>>8;for(e=0;5>e;e++)n[e]=n[e].slice(0),o[e]=o[e].slice(0)}},{key:"decrypt",value:function(R,p,_,E,b,m){var f,g,v,n,e=this._key[1],t=R^e[0],i=E^e[1],a=_^e[2],r=p^e[3],y=e.length/4-2,s=4,o=this._tables[1],h=o[0],d=o[1],u=o[2],l=o[3],c=o[4];for(n=0;y>n;n++)f=h[t>>>24]^d[i>>16&255]^u[a>>8&255]^l[255&r]^e[s],g=h[i>>>24]^d[a>>16&255]^u[r>>8&255]^l[255&t]^e[s+1],v=h[a>>>24]^d[r>>16&255]^u[t>>8&255]^l[255&i]^e[s+2],r=h[r>>>24]^d[t>>16&255]^u[i>>8&255]^l[255&a]^e[s+3],s+=4,t=f,i=g,a=v;for(n=0;4>n;n++)b[(3&-n)+m]=c[t>>>24]<<24^c[i>>16&255]<<16^c[a>>8&255]<<8^c[255&r]^e[s++],f=t,t=i,i=a,a=r,r=f}}]),e}();e.default=a,t.exports=e.default},{}],8:[function(t,r,e){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t>8|e>>>24}},{key:"doDecrypt",value:function(i,g,a){var u,f,s,h,l,c,d,n,e,r=new Int32Array(i.buffer,i.byteOffset,i.byteLength>>2),p=new o.default(Array.prototype.slice.call(g)),v=new Uint8Array(i.byteLength),t=new Int32Array(v.buffer);for(u=~~a[0],f=~~a[1],s=~~a[2],h=~~a[3],e=0;ee&&(255!==t[e]||240!==(240&t[e+1]));e++);for(r.audiosamplerate||(n=o.default.getAudioConfig(this.observer,t,e,p),r.config=n.config,r.audiosamplerate=n.samplerate,r.channelCount=n.channelCount,r.codec=n.codec,r.timescale=this.remuxer.timescale,r.duration=this.remuxer.timescale*y,l.logger.log("parsed codec:"+r.codec+",rate:"+n.samplerate+",nb channel:"+n.channelCount)),f=0;u>e+5&&(a=(3&t[e+3])<<11,a|=t[e+4]<<3,a|=(224&t[e+5])>>>5,s=1&t[e+1]?7:9,a-=s,c=Math.round(d+1024*f*9e4/r.audiosamplerate),a>0&&u>=e+s+a);)for(v={unit:t.subarray(e+s,e+s+a),pts:c,dts:c},r.samples.push(v),r.len+=a,e+=a+s,f++;u-1>e&&(255!==t[e]||240!==(240&t[e+1]));e++);this.remuxer.remux(this._aacTrack,{samples:[]},{samples:[{pts:d,dts:d,unit:h.payload}]},g)}},{key:"destroy",value:function(){}}],[{key:"probe",value:function(t){var e,r,a=new i.default(t);if(a.hasTimeStamp)for(e=a.length,r=t.length;r-1>e;e++)if(255===t[e]&&240===(240&t[e+1]))return!0;return!1}}]),e}();t.default=d,s.exports=t.default},{"../demux/id3":16,"../utils/logger":31,"./adts":11}],11:[function(t,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t>>6)+1,e=(60&u[l+2])>>>2,e>d.length-1?void f.trigger(Event.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+e}):(o=(1&u[l+2])<<2,o|=(192&u[l+3])>>>6,s.logger.log("manifest codec:"+a+",ADTS data:type:"+i+",sampleingIndex:"+e+"["+d[e]+"Hz],channelConfig:"+o),-1!==h.indexOf("firefox")?e>=6?(i=5,t=new Array(4),n=e-3):(i=2,t=new Array(2),n=e):-1!==h.indexOf("android")?(i=2,t=new Array(2),n=e):(i=5,t=new Array(4),a&&(-1!==a.indexOf("mp4a.40.29")||-1!==a.indexOf("mp4a.40.5"))||!a&&e>=6?n=e-3:((a&&-1!==a.indexOf("mp4a.40.2")&&(e>=6||1===o)||!a&&1===o)&&(i=2,t=new Array(2)),n=e)),t[0]=i<<3,t[0]|=(14&e)>>1,t[1]|=(1&e)<<7,t[1]|=o<<3,5===i&&(t[1]|=(14&n)>>1,t[2]=(1&n)<<7,t[2]|=8,t[3]=0),{config:t,samplerate:d[e],channelCount:o,codec:"mp4a.40."+i})}}]),e}();e.default=o,i.exports=e.default},{"../errors":18,"../utils/logger":31}],12:[function(e,o,t){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var f=function(){function e(i,r){for(var t=0;t1?r-1:0),e=1;r>e;e++)a[e-1]=arguments[e];t.emit.apply(t,[i,i].concat(a))},t.off=function(a){for(var r=arguments.length,i=Array(r>1?r-1:0),e=1;r>e;e++)i[e-1]=arguments[e];t.removeListener.apply(t,[a].concat(i))},r.addEventListener("message",function(i){switch(i.data.cmd){case"init":r.demuxer=new n.default(t,h.default);break;case"demux":var e=i.data;r.demuxer.push(new Uint8Array(e.data),e.audioCodec,e.videoCodec,e.timeOffset,e.cc,e.level,e.sn,e.duration)}}),t.on(e.default.FRAG_PARSING_INIT_SEGMENT,function(a,t){var e={event:a},i=[];t.audioCodec&&(e.audioCodec=t.audioCodec,e.audioMoov=t.audioMoov.buffer,e.audioChannelCount=t.audioChannelCount,i.push(e.audioMoov)),t.videoCodec&&(e.videoCodec=t.videoCodec,e.videoMoov=t.videoMoov.buffer,e.videoWidth=t.videoWidth,e.videoHeight=t.videoHeight,i.push(e.videoMoov)),r.postMessage(e,i)}),t.on(e.default.FRAG_PARSING_DATA,function(i,e){var t={event:i,type:e.type,startPTS:e.startPTS,endPTS:e.endPTS,startDTS:e.startDTS,endDTS:e.endDTS,moof:e.moof.buffer,mdat:e.mdat.buffer,nb:e.nb};r.postMessage(t,[t.moof,t.mdat])}),t.on(e.default.FRAG_PARSED,function(e){r.postMessage({event:e})}),t.on(e.default.ERROR,function(e,t){r.postMessage({event:e,data:t})}),t.on(e.default.FRAG_PARSING_METADATA,function(e,t){var i={event:e,samples:t.samples};r.postMessage(i)}),t.on(e.default.FRAG_PARSING_USERDATA,function(e,t){var i={event:e,samples:t.samples};r.postMessage(i)})};i.default=o,s.exports=i.default},{"../demux/demuxer-inline":12,"../events":20,"../remux/mp4-remuxer":27,events:1}],14:[function(t,u,i){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function e(i,r){for(var t=0;t0&&null!=e&&null!=e.key&&"AES-128"===e.method){null==this.decrypter&&(this.decrypter=new p.default(this.hls));var u=this;this.decrypter.decrypt(t,e.key,e.iv,function(e){u.pushDecrypted(e,r,i,a,n,s,o,l)})}else this.pushDecrypted(t,r,i,a,n,s,o,l)}},{key:"onWorkerMessage",value:function(t){switch(t.data.event){case e.default.FRAG_PARSING_INIT_SEGMENT:var r={};t.data.audioMoov&&(r.audioMoov=new Uint8Array(t.data.audioMoov),r.audioCodec=t.data.audioCodec,r.audioChannelCount=t.data.audioChannelCount),t.data.videoMoov&&(r.videoMoov=new Uint8Array(t.data.videoMoov),r.videoCodec=t.data.videoCodec,r.videoWidth=t.data.videoWidth,r.videoHeight=t.data.videoHeight),this.hls.trigger(e.default.FRAG_PARSING_INIT_SEGMENT,r);break;case e.default.FRAG_PARSING_DATA:this.hls.trigger(e.default.FRAG_PARSING_DATA,{moof:new Uint8Array(t.data.moof),mdat:new Uint8Array(t.data.mdat),startPTS:t.data.startPTS,endPTS:t.data.endPTS,startDTS:t.data.startDTS,endDTS:t.data.endDTS,type:t.data.type,nb:t.data.nb});break;case e.default.FRAG_PARSING_METADATA:this.hls.trigger(e.default.FRAG_PARSING_METADATA,{samples:t.data.samples});break;case e.default.FRAG_PARSING_USERDATA:this.hls.trigger(e.default.FRAG_PARSING_USERDATA,{samples:t.data.samples});break;default:this.hls.trigger(t.data.event,t.data.data)}}}]),r}();i.default=y,u.exports=i.default},{"../crypt/decrypter":9,"../demux/demuxer-inline":12,"../demux/demuxer-worker":13,"../events":20,"../remux/mp4-remuxer":27,"../utils/logger":31,webworkify:2}],15:[function(t,r,e){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function e(i,r){for(var t=0;te?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(t){var e=Math.min(this.bitsAvailable,t),r=this.word>>>32-e;return t>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=e,this.bitsAvailable>0?this.word<<=e:this.bytesAvailable>0&&this.loadWord(),e=t-e,e>0?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(a){var t,i,r=8,e=8;for(t=0;a>t;t++)0!==e&&(i=this.readEG(),e=(r+i+256)%256),r=0===e?r:e}},{key:"readSPS",value:function(){var t,g,p,l,a,n,i,o,r,s=0,d=0,h=0,f=0,c=1;if(this.readUByte(),t=this.readUByte(),g=this.readBits(5),this.skipBits(3),p=this.readUByte(),this.skipUEG(),100===t||110===t||122===t||244===t||44===t||83===t||86===t||118===t||128===t){var v=this.readUEG();if(3===v&&this.skipBits(1),this.skipUEG(),this.skipUEG(),this.skipBits(1),this.readBoolean())for(o=3!==v?8:12,r=0;o>r;r++)this.readBoolean()&&(6>r?this.skipScalingList(16):this.skipScalingList(64))}this.skipUEG();var u=this.readUEG();if(0===u)this.readUEG();else if(1===u)for(this.skipBits(1),this.skipEG(),this.skipEG(),l=this.readUEG(),r=0;l>r;r++)this.skipEG();if(this.skipUEG(),this.skipBits(1),a=this.readUEG(),n=this.readUEG(),i=this.readBits(1),0===i&&this.skipBits(1),this.skipBits(1),this.readBoolean()&&(s=this.readUEG(),d=this.readUEG(),h=this.readUEG(),f=this.readUEG()),this.readBoolean()&&this.readBoolean()){var e=void 0,y=this.readUByte();switch(y){case 2:e=[12,11];break;case 3:e=[10,11];break;case 4:e=[16,11];break;case 5:e=[40,33];break;case 6:e=[24,11];break;case 7:e=[20,11];break;case 8:e=[32,11];break;case 9:e=[80,33];break;case 10:e=[18,11];break;case 11:e=[15,11];break;case 12:e=[64,33];break;case 13:e=[160,99];break;case 14:e=[4,3];break;case 15:e=[3,2];break;case 16:e=[2,1];break;case 255:e=[this.readUByte()<<8|this.readUByte(),this.readUByte()<<8|this.readUByte()]}e&&(c=e[0]/e[1])}return{width:(16*(a+1)-2*s-2*d)*c,height:(2-i)*(n+1)*16-(i?2:4)*(h+f)}}},{key:"readSliceType",value:function(){return this.readUByte(),this.readUEG(),this.readUEG()}}]),e}();e.default=s,r.exports=e.default},{"../utils/logger":31}],16:[function(r,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;tr);return t}},{key:"_parseID3Frames",value:function(r,e,n){for(var a,s,o,l,i;n>=e+8;)switch(a=this.readUTF(r,e,4),e+=4,s=r[e++]<<24+r[e++]<<16+r[e++]<<8+r[e++],l=r[e++]<<8+r[e++],o=e,a){case"PRIV":if("com.apple.streaming.transportStreamTimestamp"===this.readUTF(r,e,44)){e+=44,e+=4;var u=1&r[e++];this._hasTimeStamp=!0,i=((r[e++]<<23)+(r[e++]<<15)+(r[e++]<<7)+r[e++])/45,u&&(i+=47721858.84),i=Math.round(i),t.logger.trace("ID3 timestamp found: "+i),this._timeStamp=i}}}},{key:"hasTimeStamp",get:function(){return this._hasTimeStamp}},{key:"timeStamp",get:function(){return this._timeStamp}},{key:"length",get:function(){return this._length}},{key:"payload",get:function(){return this._payload}}]),e}();e.default=s,i.exports=e.default},{"../utils/logger":31}],17:[function(t,o,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var f=function(){function e(i,r){for(var t=0;tt;t+=188)if(71===i[t]){if(d=!!(64&i[t+1]),u=((31&i[t+1])<<8)+i[t+2],y=(48&i[t+3])>>4,y>1){if(a=t+5+i[t+4],a===t+188)continue}else a=t+4;p?u===v?(d&&(l&&this._parseAVCPES(this._parsePES(l)),l={data:[],size:0}),l&&(l.data.push(i.subarray(a,t+188)),l.size+=t+188-a)):u===c?(d&&(o&&this._parseAACPES(this._parsePES(o)),o={data:[],size:0}),o&&(o.data.push(i.subarray(a,t+188)),o.size+=t+188-a)):u===b&&(d&&(s&&this._parseID3PES(this._parsePES(s)),s={data:[],size:0}),s&&(s.data.push(i.subarray(a,t+188)),s.size+=t+188-a)):(d&&(a+=i[a]+1),0===u?this._parsePAT(i,a):u===this._pmtId&&(this._parsePMT(i,a),p=this.pmtParsed=!0,v=this._avcTrack.id,c=this._aacTrack.id,b=this._id3Track.id))}else this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});l&&this._parseAVCPES(this._parsePES(l)),o&&this._parseAACPES(this._parsePES(o)),s&&this._parseID3PES(this._parsePES(s)),this.remux()}},{key:"remux",value:function(){this.remuxer.remux(this._aacTrack,this._avcTrack,this._id3Track,this._txtTrack,this.timeOffset,this.contiguous)}},{key:"destroy",value:function(){this.switchLevel(),this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){this._pmtId=(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(r,t){var a,n,s,i;for(a=(15&r[t+1])<<8|r[t+2],n=t+3+a-4,s=(15&r[t+10])<<8|r[t+11],t+=12+s;n>t;){switch(i=(31&r[t+1])<<8|r[t+2],r[t]){case 15:this._aacTrack.id=i;break;case 21:this._id3Track.id=i;break;case 27:this._avcTrack.id=i;break;default:e.logger.log("unkown stream type:"+r[t])}t+=((15&r[t+3])<<8|r[t+4])+5}}},{key:"_parsePES",value:function(t){var e,a,u,o,d,n,r,i,s,l=0;if(e=t.data[0],u=(e[0]<<16)+(e[1]<<8)+e[2],1===u){for(o=(e[4]<<8)+e[5],a=e[7],192&a&&(r=536870912*(14&e[9])+4194304*(255&e[10])+16384*(254&e[11])+128*(255&e[12])+(254&e[13])/2,r>4294967295&&(r-=8589934592),64&a?(i=536870912*(14&e[14])+4194304*(255&e[15])+16384*(254&e[16])+128*(255&e[17])+(254&e[18])/2,i>4294967295&&(i-=8589934592)):i=r),d=e[8],s=d+9,t.data[0]=t.data[0].subarray(s),t.size-=s,n=new Uint8Array(t.size);t.data.length;)e=t.data.shift(),n.set(e,l),l+=e.byteLength;return{data:n,pts:r,dts:i,len:o}}return null}},{key:"_parseAVCPES",value:function(i){var t,y,n,l,h=this,r=this._avcTrack,u=r.samples,m=this._parseAVCNALu(i.data),d=[],o=!1,c=!1,v=0;if(0===m.length&&u.length>0){var g=u[u.length-1],f=g.units.units[g.units.units.length-1],p=new Uint8Array(f.data.byteLength+i.data.byteLength); -p.set(f.data,0),p.set(i.data,f.data.byteLength),f.data=p,g.units.length+=i.data.byteLength,r.len+=i.data.byteLength}i.data=null;var a="";m.forEach(function(e){switch(e.type){case 1:n=!0,o&&(a+="NDR ");break;case 5:n=!0,o&&(a+="IDR "),c=!0;break;case 6:n=!0,o&&(a+="SEI "),t=new s.default(e.data),t.readUByte();var b=t.readUByte();if(4===b){var p=0;do p=t.readUByte();while(255===p);var R=t.readUByte();if(181===R){var _=t.readUShort();if(49===_){var A=t.readUInt();if(1195456820===A){var k=t.readUByte();if(3===k){var g=t.readUByte(),E=t.readUByte(),T=31&g,f=[g,E];for(l=0;T>l;l++)f.push(t.readUByte()),f.push(t.readUByte()),f.push(t.readUByte());h._txtTrack.samples.push({type:3,pts:i.pts,bytes:f})}}}}}break;case 7:if(n=!0,o&&(a+="SPS "),!r.sps){t=new s.default(e.data);var y=t.readSPS();r.width=y.width,r.height=y.height,r.sps=[e.data],r.timescale=h.remuxer.timescale,r.duration=h.remuxer.timescale*h._duration;var L=e.data.subarray(1,4),m="avc1.";for(l=0;3>l;l++){var u=L[l].toString(16);u.length<2&&(u="0"+u),m+=u}r.codec=m}break;case 8:n=!0,o&&(a+="PPS "),r.pps||(r.pps=[e.data]);break;case 9:n=!1,o&&(a+="AUD ");break;default:n=!1,a+="unknown NAL "+e.type+" "}n&&(d.push(e),v+=e.data.byteLength)}),(o||a.length)&&e.logger.log(a),d.length&&(c===!0||r.sps)&&(y={units:{units:d,length:v},pts:i.pts,dts:i.dts,key:c},u.push(y),r.len+=v,r.nbNalu+=d.length)}},{key:"_parseAVCNALu",value:function(r){for(var n,i,s,p,a,l,t=0,f=r.byteLength,e=0,d=[];f>t;)switch(n=r[t++],e){case 0:0===n&&(e=1);break;case 1:e=0===n?2:0;break;case 2:case 3:if(0===n)e=3;else if(1===n&&f>t){if(p=31&r[t],a)s={data:r.subarray(a,t-e-1),type:l},d.push(s);else if(i=t-e-1){var c=this._avcTrack,h=c.samples;if(h.length){var v=h[h.length-1],g=v.units.units,o=g[g.length-1],u=new Uint8Array(o.data.byteLength+i);u.set(o.data,0),u.set(r.subarray(0,i),o.data.byteLength),o.data=u,v.units.length+=i,c.len+=i}}a=t,l=p,e=0}else e=0}return a&&(s={data:r.subarray(a,f),type:l},d.push(s)),d}},{key:"_parseAACPES",value:function(R){var l,o,p,b,t,d,h,s,_,a=this._aacTrack,i=R.data,c=R.pts,k=0,L=this._duration,A=this.audioCodec,u=this.aacOverFlow,E=this.lastAacPTS;if(u){var m=new Uint8Array(u.byteLength+i.byteLength);m.set(u,0),m.set(i,u.byteLength),i=m}for(t=k,s=i.length;s-1>t&&(255!==i[t]||240!==(240&i[t+1]));t++);if(t){var y,f;if(s-1>t?(y="AAC PES did not start with ADTS header,offset:"+t,f=!1):(y="no ADTS header found in AAC PES",f=!0),this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:f,reason:y}),f)return}if(a.audiosamplerate||(l=v.default.getAudioConfig(this.observer,i,t,A),a.config=l.config,a.audiosamplerate=l.samplerate,a.channelCount=l.channelCount,a.codec=l.codec,a.timescale=this.remuxer.timescale,a.duration=a.timescale*L,e.logger.log("parsed codec:"+a.codec+",rate:"+l.samplerate+",nb channel:"+l.channelCount)),b=0,p=9216e4/a.audiosamplerate,u&&E){var g=E+p;Math.abs(g-c)>1&&(e.logger.log("AAC: align PTS for overlapping frames by "+Math.round((g-c)/90)),c=g)}for(;s>t+5&&(d=1&i[t+1]?7:9,o=(3&i[t+3])<<11|i[t+4]<<3|(224&i[t+5])>>>5,o-=d,o>0&&s>=t+d+o);)for(h=Math.round(c+b*p),_={unit:i.subarray(t+d,t+d+o),pts:h,dts:h},a.samples.push(_),a.len+=o,t+=o+d,b++;s-1>t&&(255!==i[t]||240!==(240&i[t+1]));t++);u=s>t?i.subarray(t,s):null,this.aacOverFlow=u,this.lastAacPTS=h}},{key:"_parseID3PES",value:function(e){this._id3Track.samples.push(e)}}],[{key:"probe",value:function(e){return e.length>=564&&71===e[0]&&71===e[188]&&71===e[376]?!0:!1}}]),t}();i.default=u,o.exports=i.default},{"../errors":18,"../events":20,"../utils/logger":31,"./adts":11,"./exp-golomb":15}],18:[function(i,a,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t={NETWORK_ERROR:"hlsNetworkError",MEDIA_ERROR:"hlsMediaError",OTHER_ERROR:"hlsOtherError"};e.ErrorTypes=t;var r={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError"};e.ErrorDetails=r},{}],19:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;t1?i-1:0),t=1;i>t;t++)a[t-1]=arguments[t];this.handledEvents=a,this.useGenericHandler=!0,this.registerListeners()}return i(e,[{key:"destroy",value:function(){this.unregisterListeners()}},{key:"isEventHandler",value:function(){return"object"==typeof this.handledEvents&&this.handledEvents.length&&"function"==typeof this.onEvent}},{key:"registerListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){if("hlsEventGeneric"===e)throw new Error("Forbidden event name: "+e);this.hls.on(e,this.onEvent)}.bind(this))}},{key:"unregisterListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){this.hls.off(e,this.onEvent)}.bind(this))}},{key:"onEvent",value:function(e,t){this.onEventGeneric(e,t)}},{key:"onEventGeneric",value:function(e,t){var r=function(t,r){var e="on"+t.replace("hls","");if("function"!=typeof this[e])throw new Error("Event "+t+" has no generic handler in this "+this.constructor.name+" class (tried "+e+")");return this[e].bind(this,r)};r.call(this,e,t).call()}}]),e}();e.default=a,t.exports=e.default},{}],20:[function(t,e,r){"use strict";e.exports={MEDIA_ATTACHING:"hlsMediaAttaching",MEDIA_ATTACHED:"hlsMediaAttached",MEDIA_DETACHING:"hlsMediaDetaching",MEDIA_DETACHED:"hlsMediaDetached",MANIFEST_LOADING:"hlsManifestLoading",MANIFEST_LOADED:"hlsManifestLoaded",MANIFEST_PARSED:"hlsManifestParsed",LEVEL_LOADING:"hlsLevelLoading",LEVEL_LOADED:"hlsLevelLoaded",LEVEL_UPDATED:"hlsLevelUpdated",LEVEL_PTS_UPDATED:"hlsLevelPtsUpdated",LEVEL_SWITCH:"hlsLevelSwitch",FRAG_LOADING:"hlsFragLoading",FRAG_LOAD_PROGRESS:"hlsFragLoadProgress",FRAG_LOAD_EMERGENCY_ABORTED:"hlsFragLoadEmergencyAborted",FRAG_LOADED:"hlsFragLoaded",FRAG_PARSING_INIT_SEGMENT:"hlsFragParsingInitSegment",FRAG_PARSING_USERDATA:"hlsFragParsingUserdata",FRAG_PARSING_METADATA:"hlsFragParsingMetadata",FRAG_PARSING_DATA:"hlsFragParsingData",FRAG_PARSED:"hlsFragParsed",FRAG_BUFFERED:"hlsFragBuffered",FRAG_CHANGED:"hlsFragChanged",FPS_DROP:"hlsFpsDrop",ERROR:"hlsError",DESTROYING:"hlsDestroying",KEY_LOADING:"hlsKeyLoading",KEY_LOADED:"hlsKeyLoaded"}},{}],21:[function(r,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;td)return void(i.PTSKnown=!1);for(var r=c;d>=r;r++){var l=f[h+r],a=o[r];u=l.cc-a.cc,isNaN(l.startPTS)||(a.start=a.startPTS=l.startPTS,a.endPTS=l.endPTS,a.duration=l.duration,s=a)}if(u)for(t.logger.log("discontinuity sliding from playlist, take drift into account"),r=0;ri.endSN)return 0;o=l-i.startSN,n=i.fragments,r=n[o],isNaN(r.startPTS)||(a=Math.min(a,r.startPTS),s=Math.max(s,r.endPTS));var u=a-r.start;for(r.start=r.startPTS=a,r.endPTS=s,r.duration=s-a,t=o;t>0;t--)e.updatePTS(n,t,t-1);for(t=o;ti?r.start=e.start+e.duration:r.start=e.start-r.duration:a>i?(e.duration=n-e.start,e.duration<0&&t.logger.error("negative duration computed for frag "+e.sn+",level "+e.level+", there should be some duration drift between playlist and fragment!")):(r.duration=e.start-n,r.duration<0&&t.logger.error("negative duration computed for frag "+r.sn+",level "+r.level+", there should be some duration drift between playlist and fragment!"))}}]),e}();e.default=s,i.exports=e.default},{"../utils/logger":31}],22:[function(t,v,a){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t1?t-1:0),e=1;t>e;e++)a[e-1]=arguments[e];r.emit.apply(r,[i,i].concat(a))},r.off=function(a){for(var t=arguments.length,i=Array(t>1?t-1:0),e=1;t>e;e++)i[e-1]=arguments[e];r.removeListener.apply(r,[a].concat(i))},this.on=r.on.bind(r),this.off=r.off.bind(r),this.trigger=r.trigger.bind(r),this.playlistLoader=new d.default(this),this.fragmentLoader=new f.default(this),this.levelController=new m.default(this),this.abrController=new i.abrController(this),this.mediaController=new i.mediaController(this),this.timelineController=new i.timelineController(this),this.keyLoader=new S.default(this)}return n(t,null,[{key:"isSupported",value:function(){return window.MediaSource&&window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')}},{key:"Events",get:function(){return i.default}},{key:"ErrorTypes",get:function(){return s.ErrorTypes}},{key:"ErrorDetails",get:function(){return s.ErrorDetails}},{key:"DefaultConfig",get:function(){return t.defaultConfig||(t.defaultConfig={autoStartLoad:!0,debug:!1,maxBufferLength:30,maxBufferSize:6e7,maxBufferHole:.3,maxSeekHole:2,liveSyncDurationCount:3,liveMaxLatencyDurationCount:1/0,maxMaxBufferLength:600,enableWorker:!0,enableSoftwareAES:!0,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingLoopThreshold:3,appendErrorMaxRetry:3,loader:A.default,fLoader:void 0,pLoader:void 0,abrController:w.default,mediaController:p.default,timelineController:E.default,enableCEA708Captions:!0}),t.defaultConfig},set:function(e){t.defaultConfig=e}}]),n(t,[{key:"destroy",value:function(){e.logger.log("destroy"),this.trigger(i.default.DESTROYING),this.detachMedia(),this.playlistLoader.destroy(),this.fragmentLoader.destroy(),this.levelController.destroy(),this.mediaController.destroy(),this.timelineController.destroy(),this.keyLoader.destroy(),this.url=null,this.observer.removeAllListeners()}},{key:"attachMedia",value:function(t){e.logger.log("attachMedia"),this.media=t,this.trigger(i.default.MEDIA_ATTACHING,{media:t})}},{key:"detachMedia",value:function(){e.logger.log("detachMedia"),this.trigger(i.default.MEDIA_DETACHING),this.media=null}},{key:"loadSource",value:function(t){e.logger.log("loadSource:"+t),this.url=t,this.trigger(i.default.MANIFEST_LOADING,{url:t})}},{key:"startLoad",value:function(){e.logger.log("startLoad"),this.mediaController.startLoad()}},{key:"swapAudioCodec",value:function(){e.logger.log("swapAudioCodec"),this.mediaController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){e.logger.log("recoverMediaError");var t=this.media;this.detachMedia(),this.attachMedia(t)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.mediaController.currentLevel},set:function(t){e.logger.log("set currentLevel:"+t),this.loadLevel=t,this.mediaController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.mediaController.nextLevel},set:function(t){e.logger.log("set nextLevel:"+t),this.levelController.manualLevel=t,this.mediaController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(t){e.logger.log("set loadLevel:"+t),this.levelController.manualLevel=t}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel()},set:function(e){this.levelController.level=e}},{key:"firstLevel",get:function(){return this.levelController.firstLevel},set:function(t){e.logger.log("set firstLevel:"+t),this.levelController.firstLevel=t}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(t){e.logger.log("set startLevel:"+t),this.levelController.startLevel=t}},{key:"autoLevelCapping",get:function(){return this.abrController.autoLevelCapping},set:function(t){e.logger.log("set autoLevelCapping:"+t),this.abrController.autoLevelCapping=t}},{key:"autoLevelEnabled",get:function(){return-1===this.levelController.manualLevel}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}}]),t}();a.default=l,v.exports=a.default},{"./controller/abr-controller":3,"./controller/level-controller":4,"./controller/mse-media-controller":5,"./controller/timeline-controller":6,"./errors":18,"./events":20,"./loader/fragment-loader":23,"./loader/key-loader":24,"./loader/playlist-loader":25,"./utils/logger":31,"./utils/xhr-loader":33,events:1}],23:[function(r,o,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(i,"__esModule",{value:!0});var s=function(){function e(i,r){for(var t=0;t2?(e=t.shift()+".",e+=parseInt(t.shift()).toString(16),e+=("000"+parseInt(t.shift()).toString(16)).substr(-4)):e=r,e}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"parseLevelPlaylist",value:function(L,l,A){var e,E,n,a,g=0,o=0,i={url:l,fragments:[],live:!0,startSN:0},r={method:null,key:null,iv:null,uri:null},b=0,h=null,t=null;for(E=/(?:#EXT-X-(MEDIA-SEQUENCE):(\d+))|(?:#EXT-X-(TARGETDURATION):(\d+))|(?:#EXT-X-(KEY):(.*))|(?:#EXT(INF):([\d\.]+)[^\r\n]*([\r\n]+[^#|\r\n]+)?)|(?:#EXT-X-(BYTERANGE):([\d]+[@[\d]*)]*[\r\n]+([^#|\r\n]+)?|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(PROGRAM-DATE-TIME):(.*))/g;null!==(e=E.exec(L));)switch(e.shift(),e=e.filter(function(e){return void 0!==e}),e[0]){case"MEDIA-SEQUENCE":g=i.startSN=parseInt(e[1]);break;case"TARGETDURATION":i.targetduration=parseFloat(e[1]);break;case"ENDLIST":i.live=!1;break;case"DIS":b++;break;case"BYTERANGE":var c=e[1].split("@");a=1===c.length?n:parseInt(c[1]),n=parseInt(c[0])+a,t&&!t.url&&(t.byteRangeStartOffset=a,t.byteRangeEndOffset=n,t.url=this.resolve(e[2],l));break;case"INF":var v=parseFloat(e[1]);if(!isNaN(v)){var u,m=g++;if(r.method&&r.uri&&!r.iv){u=this.cloneObj(r);for(var y=new Uint8Array(16),d=12;16>d;d++)y[d]=m>>8*(15-d)&255;u.iv=y}else u=r;var k=e[2]?this.resolve(e[2],l):null;t={url:k,duration:v,start:o,sn:m,level:A,cc:b,byteRangeStartOffset:a,byteRangeEndOffset:n,decryptdata:u,programDateTime:h},i.fragments.push(t),o+=v,a=null,h=null}break;case"KEY":var R=e[1],p=new s.default(R),f=p.enumeratedString("METHOD"),_=p.URI,T=p.hexadecimalInteger("IV");f&&(r={method:null,key:null,iv:null,uri:null},_&&"AES-128"===f&&(r.method=f,r.uri=this.resolve(_,l),r.key=null,r.iv=T));break;case"PROGRAM-DATE-TIME":h=new Date(Date.parse(e[1]))}return t&&!t.url&&(i.fragments.pop(),o-=t.duration),i.totalduration=o,i.endSN=g-1,i}},{key:"loadsuccess",value:function(u,i){var s,o=u.currentTarget,n=o.responseText,r=o.responseURL,l=this.id,d=this.id2,a=this.hls;if(void 0===r&&(r=this.url),i.tload=performance.now(),i.mtime=new Date(o.getResponseHeader("Last-Modified")),0===n.indexOf("#EXTM3U"))if(n.indexOf("#EXTINF:")>0)if(null===this.id)a.trigger(t.default.MANIFEST_LOADED,{levels:[{url:r}],url:r,stats:i});else{var h=this.parseLevelPlaylist(n,r,l);i.tparsed=performance.now(),a.trigger(t.default.LEVEL_LOADED,{details:h,level:l,id:d,stats:i})}else s=this.parseMasterPlaylist(n,r),s.length?a.trigger(t.default.MANIFEST_LOADED,{levels:s,url:r,stats:i}):a.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no level found in manifest"});else a.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(a){var r,i;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0):(r=e.ErrorDetails.LEVEL_LOAD_ERROR,i=!1),this.loader.abort(),this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:this.url,loader:this.loader,response:a.currentTarget,level:this.id,id:this.id2})}},{key:"loadtimeout",value:function(){var r,i;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0):(r=e.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1),this.loader.abort(),this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:this.url,loader:this.loader,level:this.id,id:this.id2})}}]),r}(n.default);a.default=h,u.exports=a.default},{"../errors":18,"../event-handler":19,"../events":20,"../utils/attr-list":28,"../utils/url":32}],26:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;t>24&255,t[1]=e>>16&255,t[2]=e>>8&255,t[3]=255&e,t.set(a,4),r=0,e=8;n>r;r++)t.set(i[r],e),e+=i[r].byteLength;return t}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}},{key:"mdhd",value:function(t,r){return e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24,r>>16&255,r>>8&255,255&r,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(r){for(var t=r.length,i=[];t--;)i[t]=e.trex(r[t]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){var i=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24&255,r>>16&255,r>>8&255,255&r,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,i)}},{key:"sdtp",value:function(n){var r,t,i=n.samples||[],a=new Uint8Array(4+i.length);for(t=0;t>>8&255),i.push(255&n),i=i.concat(Array.prototype.slice.call(a));for(r=0;r>>8&255),s.push(255&n),s=s.concat(Array.prototype.slice.call(a));var u=e.box(e.types.avcC,new Uint8Array([1,i[3],i[4],i[5],255,224|t.sps.length].concat(i).concat([t.pps.length]).concat(s))),o=t.width,l=t.height;return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,o>>8&255,255&o,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))}},{key:"esds",value:function(t){var e=t.config.length;return new Uint8Array([0,0,0,0,3,23+e,0,1,0,4,15+e,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([e]).concat(t.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.audiosamplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"stsd",value:function(t){return"audio"===t.type?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd", -value:function(t){var r=t.id,i=t.duration,a=t.width,n=t.height;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,n>>8&255,255&n,0,0]))}},{key:"traf",value:function(i,t){var a=e.sdtp(i),r=i.id;return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r])),e.box(e.types.tfdt,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t])),e.trun(i,a.length+16+16+8+16+8+8),a)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(r){var t=r.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(f,o){var i,a,n,s,t,l,d=f.samples||[],r=d.length,h=12+16*r,u=new Uint8Array(h);for(o+=8+h,u.set([0,0,15,1,r>>>24&255,r>>>16&255,r>>>8&255,255&r,o>>>24&255,o>>>16&255,o>>>8&255,255&o],0),i=0;r>i;i++)a=d[i],n=a.duration,s=a.size,t=a.flags,l=a.cts,u.set([n>>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,t.isLeading<<2|t.dependsOn,t.isDependedOn<<6|t.hasRedundancy<<4|t.paddingValue<<1|t.isNonSync,61440&t.degradPrio,15&t.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,u)}},{key:"initSegment",value:function(i){e.types||e.init();var t,r=e.moov(i);return t=new Uint8Array(e.FTYP.byteLength+r.byteLength),t.set(e.FTYP),t.set(r,e.FTYP.byteLength),t}}]),e}();e.default=a,t.exports=e.default},{}],27:[function(i,h,a){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var d=function(){function e(i,r){for(var t=0;t=y&&(t.logger.log("invalid sample duration at PTS/DTS: "+l.pts+"/"+l.dts+":"+y),y=1),g.duration=y}else{var n,m=this.nextAvcDts;o=this._PTSNormalize(_,m),i=this._PTSNormalize(c,m),n=Math.round((i-m)/90),(S||Math.abs(n)<600)&&n&&(n>1?t.logger.log("AVC:"+n+" ms hole between fragments detected,filling it"):-1>n&&t.logger.log("AVC:"+-n+" ms overlapping between fragments detected"),i=m,o=Math.max(o-n,i),t.logger.log("Video/PTS/DTS adjusted: "+o+"/"+i+",delta:"+n)),k=Math.max(0,o),R=Math.max(0,i)}g={size:A,duration:0,cts:(o-i)/h,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0}},s=g.flags,l.key===!0?(s.dependsOn=2,s.isNonSync=0):(s.dependsOn=1,s.isNonSync=1),u.push(g),f=i}var E=0;u.length>=2&&(E=u[u.length-2].duration,g.duration=E),this.nextAvcDts=i+E*h,a.len=0,a.nbNalu=0,u.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&(s=u[0].flags,s.dependsOn=2,s.isNonSync=0),a.samples=u,T=r.default.moof(a.sequenceNumber++,R/h,a),a.samples=[],this.observer.trigger(e.default.FRAG_PARSING_DATA,{moof:T,mdat:d,startPTS:k/b,endPTS:(o+h*E)/b,startDTS:R/b,endDTS:this.nextAvcDts/b,type:"video",nb:u.length})}},{key:"remuxAudio",value:function(i,S,T){var A,f,s,d,u,R,L,_,h,l,b,o,n,k=8,c=this.PES_TIMESCALE,p=this.PES2MP4SCALEFACTOR,g=[],E=[];for(i.samples.forEach(function(e){void 0===l||e.pts>l?(E.push(e),l=e.pts):(t.logger.warn("dropping past audio frame"),i.len-=e.unit.byteLength)});E.length;){if(f=E.shift(),d=f.unit,l=f.pts-this._initDTS,b=f.dts-this._initDTS,void 0!==h)o=this._PTSNormalize(l,h),n=this._PTSNormalize(b,h),s.duration=(n-h)/p,s.duration<0&&(t.logger.log("invalid AAC sample duration at PTS:"+f.pts+":"+s.duration),s.duration=0);else{var a,m=this.nextAacPts;if(o=this._PTSNormalize(l,m),n=this._PTSNormalize(b,m),a=Math.round(1e3*(o-m)/c),(T||Math.abs(a)<600)&&a){if(a>0)t.logger.log(a+" ms hole between AAC samples detected,filling it");else if(-12>a){t.logger.log(-a+" ms overlapping between AAC samples detected, drop frame"),i.len-=d.byteLength;continue}o=n=m}if(L=Math.max(0,o),_=Math.max(0,n),!(i.len>0))return;u=new Uint8Array(i.len+8),A=new DataView(u.buffer),A.setUint32(0,u.byteLength),u.set(r.default.types.mdat,4)}u.set(d,k),k+=d.byteLength,s={size:d.byteLength,cts:0,duration:0,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:1}},g.push(s),h=n}var y=0,v=g.length;v>=2&&(y=g[v-2].duration,s.duration=y),v&&(this.nextAacPts=o+p*y,i.len=0,i.samples=g,R=r.default.moof(i.sequenceNumber++,_/p,i),i.samples=[],this.observer.trigger(e.default.FRAG_PARSING_DATA,{moof:R,mdat:u,startPTS:L/c,endPTS:this.nextAacPts/c,startDTS:_/c,endDTS:(n+p*y)/c,type:"audio",nb:v}))}},{key:"remuxID3",value:function(r,a){var t,n=r.samples.length;if(n){for(var i=0;n>i;i++)t=r.samples[i],t.pts=(t.pts-this._initPTS)/this.PES_TIMESCALE,t.dts=(t.dts-this._initDTS)/this.PES_TIMESCALE;this.observer.trigger(e.default.FRAG_PARSING_METADATA,{samples:r.samples})}r.samples=[],a=a}},{key:"remuxText",value:function(t,a){t.samples.sort(function(e,t){return e.pts-t.pts});var r,n=t.samples.length;if(n){for(var i=0;n>i;i++)r=t.samples[i],r.pts=(r.pts-this._initPTS)/this.PES_TIMESCALE;this.observer.trigger(e.default.FRAG_PARSING_USERDATA,{samples:t.samples})}t.samples=[],a=a}},{key:"_PTSNormalize",value:function(e,t){var r;if(void 0===t)return e;for(r=e>t?-8589934592:8589934592;Math.abs(e-t)>4294967296;)e+=r;return e}},{key:"timescale",get:function(){return this.MP4_TIMESCALE}}]),i}();a.default=o,h.exports=a.default},{"../errors":18,"../events":20,"../remux/mp4-generator":26,"../utils/logger":31}],28:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"hexadecimalInteger",value:function(r){if(this[r]){var e=(this[r]||"0x").slice(2);e=(1&e.length?"0":"")+e;for(var i=new Uint8Array(e.length/2),t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(t){var e=/^(\d+)x(\d+)$/.exec(this[t]);if(null!==e)return{width:parseInt(e[1],10),height:parseInt(e[2],10)}}}],[{key:"parseAttrList",value:function(a){for(var t,n=/\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g,r={};null!==(t=n.exec(a));){var e=t[2],i='"';0===e.indexOf(i)&&e.lastIndexOf(i)===e.length-1&&(e=e.slice(1,-1)),r[t[1]]=e}return r}}]),e}();e.default=a,t.exports=e.default},{}],29:[function(r,e,i){"use strict";var t={search:function(a,s){for(var t=0,r=a.length-1,e=null,i=null;r>=t;){e=(t+r)/2|0,i=a[e];var n=s(i);if(n>0)t=e+1;else{if(!(0>n))return i;r=e-1}}return null}};e.exports=t},{}],30:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;t0;)this._textTrack.removeCue(this._textTrack.cues[0])}},{key:"push",value:function(r,i){this.cue||this._createCue();for(var a,t,e,s,o,u=31&i[0],n=2,l=0;u>l;l++)if(a=i[n++],t=127&i[n++],e=127&i[n++],s=0===(4&a)?!1:!0,o=3&a,(0!==t||0!==e)&&s&&0===o){if(32&t||64&t)this.cue.text+=this._fromCharCode(t)+this._fromCharCode(e);else if((17===t||25===t)&&e>=48&&63>=e)switch(e){case 48:this.cue.text+="®";break;case 49:this.cue.text+="°";break;case 50:this.cue.text+="½";break;case 51:this.cue.text+="¿";break;case 52:this.cue.text+="™";break;case 53:this.cue.text+="¢";break;case 54:this.cue.text+="";break;case 55:this.cue.text+="£";break;case 56:this.cue.text+="♪";break;case 57:this.cue.text+=" ";break;case 58:this.cue.text+="è";break;case 59:this.cue.text+="â";break;case 60:this.cue.text+="ê";break;case 61:this.cue.text+="î";break;case 62:this.cue.text+="ô";break;case 63:this.cue.text+="û"}if((17===t||25===t)&&e>=32&&47>=e)switch(e){case 32:break;case 33:break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:break;case 42:break;case 43:break;case 44:break;case 45:break;case 46:break;case 47:}if((20===t||28===t)&&e>=32&&47>=e)switch(e){case 32:this._clearActiveCues(r);break;case 33:this.cue.text=this.cue.text.substr(0,this.cue.text.length-1);break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:this._clearActiveCues(r);break;case 42:break;case 43:break;case 44:this._clearActiveCues(r);break;case 45:break;case 46:this._text="";break;case 47:this._flipMemory(r)}if((23===t||31===t)&&e>=33&&35>=e)switch(e){case 33:break;case 34:break;case 35:}}}},{key:"_fromCharCode",value:function(e){switch(e){case 42:return"á";case 2:return"á";case 2:return"é";case 4:return"í";case 5:return"ó";case 6:return"ú";case 3:return"ç";case 4:return"÷";case 5:return"Ñ";case 6:return"ñ";case 7:return"█";default:return String.fromCharCode(e)}}},{key:"_flipMemory",value:function(e){this._clearActiveCues(e),this._flushCaptions(e)}},{key:"_flushCaptions",value:function(t){this._has708||(this._textTrack=this.media.addTextTrack("captions","English","en"),this._has708=!0);for(var e=0;e "+e}function a(t){var r=window.console[t];return r?function(){for(var a=arguments.length,e=Array(a),i=0;a>i;i++)e[i]=arguments[i];e[0]&&(e[0]=l(t,e[0])),r.apply(window.console,e)}:e}function s(r){for(var i=arguments.length,n=Array(i>1?i-1:0),e=1;i>e;e++)n[e-1]=arguments[e];n.forEach(function(e){t[e]=r[e]?r[e].bind(r):a(e)})}Object.defineProperty(r,"__esModule",{value:!0});var i={trace:e,debug:e,log:e,warn:e,info:e,error:e},t=i,n=function(e){if(e===!0||"object"==typeof e){s(e,"debug","log","info","warn","error");try{t.log()}catch(e){t=i}}else t=i};r.enableLogs=n;var o=t;r.logger=o},{}],32:[function(r,t,i){"use strict";var e={buildAbsoluteURL:function(r,t){if(t=t.trim(),/^[a-z]+:/i.test(t))return t;var o=null,a=null,n=/^([^#]*)(.*)$/.exec(t);n&&(a=n[2],t=n[1]);var s=/^([^\?]*)(.*)$/.exec(t);s&&(o=s[2],t=s[1]);var h=/^([^#]*)(.*)$/.exec(r);h&&(r=h[1]);var u=/^([^\?]*)(.*)$/.exec(r);u&&(r=u[1]);var l=/^((([a-z]+):)?\/\/[a-z0-9\.-]+(:[0-9]+)?\/)(.*)$/i.exec(r),f=l[3],d=l[1],c=l[5],i=null;return i=/^\/\//.test(t)?f+"://"+e.buildAbsolutePath("",t.substring(2)):/^\//.test(t)?d+e.buildAbsolutePath("",t.substring(1)):e.buildAbsolutePath(d+c,t),o&&(i+=o),a&&(i+=a),i},buildAbsolutePath:function(n,s){for(var i,e,o=s,a="",t=n.replace(/[^\/]*$/,o.replace(/(\/|^)(?:\.?\/+)+/g,"$1")),r=0;e=t.indexOf("/../",r),e>-1;r=e+i)i=/^\/(?:\.\.\/)*/.exec(t.slice(e))[0].length,a=(a+t.substring(r,e)).replace(new RegExp("(?:\\/+[^\\/]*){0,"+(i-1)/3+"}$"),"/");return a+t.substr(r)}};t.exports=e},{}],33:[function(r,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t=200&&300>r?(window.clearTimeout(this.timeoutHandle),e.tload=performance.now(),this.onSuccess(i,e)):e.retrye||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},e.prototype.emit=function(u){var o,a,n,s,e,l;if(this._events||(this._events={}),"error"===u&&(!this._events.error||r(this._events.error)&&!this._events.error.length)){if(o=arguments[1],o instanceof Error)throw o;throw TypeError('Uncaught, unspecified "error" event.')}if(a=this._events[u],i(a))return!1;if(t(a))switch(arguments.length){case 1:a.call(this);break;case 2:a.call(this,arguments[1]);break;case 3:a.call(this,arguments[1],arguments[2]);break;default:for(n=arguments.length,s=new Array(n-1),e=1;n>e;e++)s[e-1]=arguments[e];a.apply(this,s)}else if(r(a)){for(n=arguments.length,s=new Array(n-1),e=1;n>e;e++)s[e-1]=arguments[e];for(l=a.slice(),n=l.length,e=0;n>e;e++)l[e].apply(this,s)}return!0},e.prototype.addListener=function(a,n){var s;if(!t(n))throw TypeError("listener must be a function");if(this._events||(this._events={}),this._events.newListener&&this.emit("newListener",a,t(n.listener)?n.listener:n),this._events[a]?r(this._events[a])?this._events[a].push(n):this._events[a]=[this._events[a],n]:this._events[a]=n,r(this._events[a])&&!this._events[a].warned){var s;s=i(this._maxListeners)?e.defaultMaxListeners:this._maxListeners,s&&s>0&&this._events[a].length>s&&(this._events[a].warned=!0,"function"==typeof console.trace)}return this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(i,e){function r(){this.removeListener(i,r),a||(a=!0,e.apply(this,arguments))}if(!t(e))throw TypeError("listener must be a function");var a=!1;return r.listener=e,this.on(i,r),this},e.prototype.removeListener=function(a,i){var e,s,o,n;if(!t(i))throw TypeError("listener must be a function");if(!this._events||!this._events[a])return this;if(e=this._events[a],o=e.length,s=-1,e===i||t(e.listener)&&e.listener===i)delete this._events[a],this._events.removeListener&&this.emit("removeListener",a,i);else if(r(e)){for(n=o;n-- >0;)if(e[n]===i||e[n].listener&&e[n].listener===i){s=n;break}if(0>s)return this;1===e.length?(e.length=0,delete this._events[a]):e.splice(s,1),this._events.removeListener&&this.emit("removeListener",a,i)}return this},e.prototype.removeAllListeners=function(e){var i,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(i in this._events)"removeListener"!==i&&this.removeAllListeners(i);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[e],t(r))this.removeListener(e,r);else for(;r.length;)this.removeListener(e,r[r.length-1]);return delete this._events[e],this},e.prototype.listeners=function(e){var r;return r=this._events&&this._events[e]?t(this._events[e])?[this._events[e]]:this._events[e].slice():[]},e.listenerCount=function(e,r){var i;return i=e._events&&e._events[r]?t(e._events[r])?1:e._events[r].length:0}},{}],2:[function(n,i,s){var a=arguments[3],e=arguments[4],r=arguments[5],t=JSON.stringify;i.exports=function(l){for(var i,s=Object.keys(r),n=0,d=s.length;d>n;n++){var o=s[n],u=r[o].exports;if(u===l||u.default===l){i=o;break}}if(!i){i=Math.floor(Math.pow(16,8)*Math.random()).toString(16);for(var h={},n=0,d=s.length;d>n;n++){var o=s[n];h[o]=o}e[i]=[Function(["require","module","exports"],"("+l+")(self)"),h]}var f=Math.floor(Math.pow(16,8)*Math.random()).toString(16),c={};c[i]=i,e[f]=[Function(["require"],"var f = require("+t(i)+");(f.default ? f.default : f)(self);"),c];var v="("+a+")({"+Object.keys(e).map(function(r){return t(r)+":["+e[r][0]+","+t(e[r][1])+"]"}).join(",")+"},{},["+t(f)+"])",g=window.URL||window.webkitURL||window.mozURL||window.msURL;return new Worker(g.createObjectURL(new Blob([v],{type:"text/javascript"})))}},{}],3:[function(t,s,e){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(e,"__esModule",{value:!0});var f=function(){function e(i,r){for(var t=0;t=e;e++)if(r=e<=this.lastfetchlevel?.8*i:.7*i,r=0&&i1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var h,o,n,l=this.hls;switch(this.state){case e.ERROR:break;case e.STARTING:this.startLevel=l.startLevel,-1===this.startLevel&&(this.startLevel=0,this.fragBitrateTest=!0),this.level=l.nextLoadLevel=this.startLevel,this.state=e.WAITING_LEVEL,this.loadedmetadata=!1;break;case e.IDLE:if(!this.media)break;h=this.loadedmetadata?this.media.currentTime:this.nextLoadPosition,o=this.startFragmentRequested===!1?this.startLevel:l.nextLoadLevel;var v,x=this.bufferInfo(h,this.config.maxBufferHole),N=x.len,d=x.end,f=this.fragPrevious;if(this.levels[o].hasOwnProperty("bitrate")?(v=Math.max(8*this.config.maxBufferSize/this.levels[o].bitrate,this.config.maxBufferLength),v=Math.min(v,this.config.maxMaxBufferLength)):v=this.config.maxBufferLength,v>N){if(l.nextLoadLevel=o,this.level=o,n=this.levels[o].details,"undefined"==typeof n||n.live&&this.levelLastLoaded!==o){this.state=e.WAITING_LEVEL;break}var u=n.fragments,c=u.length,g=u[0].start,O=u[c-1].start+u[c-1].duration,a=void 0;if(n.live){if(d=n.startSN&&k<=n.endSN&&(a=u[k-n.startSN],t.logger.log("live playlist, switching playlist, load frag with next SN: "+a.sn))}a||(a=u[Math.min(c-1,Math.round(c/2))],t.logger.log("live playlist, switching playlist, unknown, load middle frag : "+a.sn))}}else g>d&&(a=u[0]);if(!a){var m;if(m=O>d?p.default.search(u,function(e){return e.start+e.duration<=d?1:e.start>d?-1:0}):u[c-1],m&&(a=m,g=m.start,f&&a.level===f.level&&a.sn===f.sn))if(a.sn1&&(a.expectedLen=Math.round(a.duration*this.levels[o].bitrate/8),a.trequest=performance.now()),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,a.loadCounter){a.loadCounter++;var w=this.config.fragLoadingLoopThreshold;if(a.loadCounter>w&&Math.abs(this.fragLoadIdx-a.loadIdx)1){var S=performance.now()-s.trequest;if(S>500*s.duration){var P=1e3*s.loaded/S;s.expectedLen_&&A>D&&(t.logger.warn("loading too slow, abort fragment loading"),t.logger.log("fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay :"+A.toFixed(1)+"/"+_.toFixed(1)+"/"+D.toFixed(1)),s.loader.abort(),l.trigger(r.default.FRAG_LOAD_EMERGENCY_ABORTED,{frag:s}),this.state=e.IDLE)}}break;case e.FRAG_LOADING_WAITING_RETRY:var G=performance.now(),T=this.retryDate,I=this.media,M=I&&I.seeking;(!T||G>=T||M)&&(t.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=e.IDLE);break;case e.PARSING:break;case e.PARSED:case e.APPENDING:if(this.sourceBuffer){if(this.media.error)return t.logger.error("trying to append although a media error occured, switch to ERROR state"),void(this.state=e.ERROR);if(this.sourceBuffer.audio&&this.sourceBuffer.audio.updating||this.sourceBuffer.video&&this.sourceBuffer.video.updating);else if(this.mp4segments.length){var R=this.mp4segments.shift();try{this.sourceBuffer[R.type].appendBuffer(R.data),this.appendError=0}catch(a){if(t.logger.error("error while trying to append buffer:"+a.message+",try appending later"),this.mp4segments.unshift(R),22!==a.code){this.appendError?this.appendError++:this.appendError=1;var y={type:i.ErrorTypes.MEDIA_ERROR,details:i.ErrorDetails.BUFFER_APPEND_ERROR,frag:this.fragCurrent};if(this.appendError>this.config.appendErrorMaxRetry)return t.logger.log("fail "+this.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),y.fatal=!0,l.trigger(r.default.ERROR,y),void(this.state=e.ERROR);y.fatal=!1,l.trigger(r.default.ERROR,y)}}this.state=e.APPENDING}}else this.state=e.IDLE;break;case e.BUFFER_FLUSHING:for(;this.flushRange.length;){var C=this.flushRange[0];if(!this.flushBuffer(C.start,C.end))break;this.flushRange.shift()}0===this.flushRange.length&&(this.immediateSwitch&&this.immediateLevelSwitchEnd(),this.state=e.IDLE,this.fragPrevious=null);break;case e.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"bufferInfo",value:function(i,a){var e,n=this.media,t=n.buffered,r=[];for(e=0;ed&&(t[u-1].end=r[e].end):t.push(r[e])}else t.push(r[e])}for(e=0,o=0,l=n=i;e=s&&h>i)l=s,n=h+a,o=n-i;else if(s>i+a){f=s;break}}return{len:o,start:l,end:n,nextStart:f}}},{key:"getBufferRange",value:function(r){var e,t;for(e=this.bufferRange.length-1;e>=0;e--)if(t=this.bufferRange[e],r>=t.start&&r<=t.end)return t;return null}},{key:"followingBufferRange",value:function(e){return e?this.getBufferRange(e.end+.5):null}},{key:"isBuffered",value:function(r){for(var i=this.media,t=i.buffered,e=0;e=t.start(e)&&r<=t.end(e))return!0;return!1}},{key:"_checkFragmentChanged",value:function(){var t,e,i=this.media;if(i&&i.seeking===!1&&(e=i.currentTime,e>i.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=e),this.isBuffered(e)?t=this.getBufferRange(e):this.isBuffered(e+.1)&&(t=this.getBufferRange(e+.1)),t)){var a=t.frag;a!==this.fragPlaying&&(this.fragPlaying=a,this.hls.trigger(r.default.FRAG_CHANGED,{frag:a}))}}},{key:"flushBuffer",value:function(d,l){var r,e,o,n,i,a;if(this.flushBufferCounter++<2*this.bufferRange.length&&this.sourceBuffer)for(var u in this.sourceBuffer){if(r=this.sourceBuffer[u],r.updating)return!1;for(e=0;e.5)return t.logger.log("flush "+u+" ["+i+","+a+"], of ["+o+","+n+"], pos:"+this.media.currentTime),r.remove(i,a),!1}else t.logger.warn("abort flushing too many retries");var s,h=[];for(e=0;e "+a+"/"+i.videoCodec+"; audio => "+r+"/"+i.audioCodec),(void 0===r||void 0===i.audioCodec)&&(r=i.audioCodec),(void 0===a||void 0===i.videoCodec)&&(a=i.videoCodec);var s=navigator.userAgent.toLowerCase();this.audiocodecswitch&&1!==i.audioChannelCount&&-1===s.indexOf("android")&&-1===s.indexOf("firefox")&&(r="mp4a.40.5"),this.sourceBuffer||(this.sourceBuffer={},t.logger.log("selected A/V codecs for sourceBuffers:"+r+","+a),r&&(n=this.sourceBuffer.audio=this.mediaSource.addSourceBuffer("audio/mp4;codecs="+r),n.addEventListener("updateend",this.onsbue),n.addEventListener("error",this.onsbe)),a&&(n=this.sourceBuffer.video=this.mediaSource.addSourceBuffer("video/mp4;codecs="+a),n.addEventListener("updateend",this.onsbue),n.addEventListener("error",this.onsbe))),r&&this.mp4segments.push({type:"audio",data:i.audioMoov}),a&&this.mp4segments.push({type:"video",data:i.videoMoov}),this.tick()}}},{key:"onFragParsingData",value:function(i){if(this.state===e.PARSING){this.tparse2=Date.now();var a=this.levels[this.level],n=this.fragCurrent;t.logger.log("parsed "+i.type+",PTS:["+i.startPTS.toFixed(3)+","+i.endPTS.toFixed(3)+"],DTS:["+i.startDTS.toFixed(3)+"/"+i.endDTS.toFixed(3)+"],nb:"+i.nb);var s=l.default.updateFragPTS(a.details,n.sn,i.startPTS,i.endPTS);this.hls.trigger(r.default.LEVEL_PTS_UPDATED,{details:a.details,level:this.level,drift:s}),this.mp4segments.push({type:i.type,data:i.moof}),this.mp4segments.push({type:i.type,data:i.mdat}),this.nextLoadPosition=i.endPTS,this.bufferRange.push({type:i.type,start:i.startPTS,end:i.endPTS,frag:n}),this.tick()}else t.logger.warn("not in PARSING state, ignoring FRAG_PARSING_DATA event")}},{key:"onFragParsed",value:function(){this.state===e.PARSING&&(this.state=e.PARSED, +this.stats.tparsed=performance.now(),this.tick())}},{key:"onError",value:function(a){switch(a.details){case i.ErrorDetails.FRAG_LOAD_ERROR:case i.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!a.fatal){var n=this.fragLoadError;if(n?n++:n=1,n<=this.config.fragLoadingMaxRetry){this.fragLoadError=n,a.frag.loadCounter=0;var s=Math.min(Math.pow(2,n-1)*this.config.fragLoadingRetryDelay,64e3);t.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.state=e.FRAG_LOADING_WAITING_RETRY}else t.logger.error("mediaController: "+a.details+" reaches max retry, redispatch as fatal ..."),a.fatal=!0,this.hls.trigger(r.default.ERROR,a),this.state=e.ERROR}break;case i.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case i.ErrorDetails.LEVEL_LOAD_ERROR:case i.ErrorDetails.LEVEL_LOAD_TIMEOUT:case i.ErrorDetails.KEY_LOAD_ERROR:case i.ErrorDetails.KEY_LOAD_TIMEOUT:t.logger.warn("mediaController: "+a.details+" while loading frag,switch to "+(a.fatal?"ERROR":"IDLE")+" state ..."),this.state=a.fatal?e.ERROR:e.IDLE}}},{key:"onSBUpdateEnd",value:function(){if(this.state===e.APPENDING&&0===this.mp4segments.length){var a=this.fragCurrent,i=this.stats;a&&(this.fragPrevious=a,i.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*i.length/(i.tbuffered-i.tfirst)),this.hls.trigger(r.default.FRAG_BUFFERED,{stats:i,frag:a}),t.logger.log("media buffered : "+this.timeRangesToString(this.media.buffered)),this.state=e.IDLE)}this.tick()}},{key:"_checkBuffer",value:function(){var e=this.media;if(e){var u=e.readyState;if(u){var s=this.seekAfterBuffered;if(s)e.duration>=s&&(e.currentTime=s,this.seekAfterBuffered=void 0);else{var a=e.currentTime,o=this.bufferInfo(a,0),f=!(e.paused||e.ended||e.seeking||3>u),l=.2,d=a>e.playbackRate*this.lastCurrentTime;if(this.stalled&&d&&(this.stalled=!1),o.len<=l&&(d||!f?l=0:(t.logger.log("playback seems stuck @"+a),this.stalled||(this.hls.trigger(r.default.ERROR,{type:i.ErrorTypes.MEDIA_ERROR,details:i.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1}),this.stalled=!0)),o.len<=l)){var n=o.nextStart,h=n-a;n&&h.005&&!e.seeking&&(t.logger.log("adjust currentTime from "+a+" to "+n),e.currentTime=n)}}}}}},{key:"swapAudioCodec",value:function(){this.audioCodecSwap=!this.audioCodecSwap}},{key:"onSBUpdateError",value:function(a){t.logger.error("sourceBuffer error:"+a),this.state=e.ERROR,this.hls.trigger(r.default.ERROR,{type:i.ErrorTypes.MEDIA_ERROR,details:i.ErrorDetails.BUFFER_APPENDING_ERROR,fatal:!1,frag:this.fragCurrent})}},{key:"timeRangesToString",value:function(t){for(var r="",i=t.length,e=0;i>e;e++)r+="["+t.start(e)+","+t.end(e)+"]";return r}},{key:"onMediaSourceOpen",value:function(){t.logger.log("media source opened"),this.hls.trigger(r.default.MEDIA_ATTACHED),this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvmetadata=this.onMediaMetadata.bind(this),this.onvended=this.onMediaEnded.bind(this);var e=this.media;e.addEventListener("seeking",this.onvseeking),e.addEventListener("seeked",this.onvseeked),e.addEventListener("loadedmetadata",this.onvmetadata),e.addEventListener("ended",this.onvended),this.levels&&this.config.autoStartLoad&&this.startLoad(),this.mediaSource.removeEventListener("sourceopen",this.onmso)}},{key:"onMediaSourceClose",value:function(){t.logger.log("media source closed")}},{key:"onMediaSourceEnded",value:function(){t.logger.log("media source ended")}},{key:"currentLevel",get:function(){if(this.media){var e=this.getBufferRange(this.media.currentTime);if(e)return e.frag.level}return-1}},{key:"nextBufferRange",get:function(){return this.media?this.followingBufferRange(this.getBufferRange(this.media.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferRange;return e?e.frag.level:-1}}]),a}(o.default);s.default=_,h.exports=s.default},{"../demux/demuxer":14,"../errors":18,"../event-handler":19,"../events":20,"../helper/level-helper":21,"../utils/binary-search":29,"../utils/logger":31}],6:[function(t,o,r){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(r,"__esModule",{value:!0});var s=function(){function e(i,r){for(var t=0;te;e++)c[(a[e]=e<<1^283*(e>>7))^e]=e;for(i=r=0;!f[i];i^=u||1,r=c[r]||1)for(t=r^r<<1^r<<2^r<<3^r<<4,t=t>>8^255&t^99,f[i]=t,v[t]=i,d=a[h=a[u=a[i]]],l=16843009*d^65537*h^257*u^16843008*i,s=257*a[t]^16843008*t,e=0;4>e;e++)n[e][i]=s=s<<24^s>>>8,o[e][t]=l=l<<24^l>>>8;for(e=0;5>e;e++)n[e]=n[e].slice(0),o[e]=o[e].slice(0)}},{key:"decrypt",value:function(R,p,_,E,b,m){var f,g,v,n,e=this._key[1],t=R^e[0],i=E^e[1],a=_^e[2],r=p^e[3],y=e.length/4-2,s=4,o=this._tables[1],h=o[0],d=o[1],u=o[2],l=o[3],c=o[4];for(n=0;y>n;n++)f=h[t>>>24]^d[i>>16&255]^u[a>>8&255]^l[255&r]^e[s],g=h[i>>>24]^d[a>>16&255]^u[r>>8&255]^l[255&t]^e[s+1],v=h[a>>>24]^d[r>>16&255]^u[t>>8&255]^l[255&i]^e[s+2],r=h[r>>>24]^d[t>>16&255]^u[i>>8&255]^l[255&a]^e[s+3],s+=4,t=f,i=g,a=v;for(n=0;4>n;n++)b[(3&-n)+m]=c[t>>>24]<<24^c[i>>16&255]<<16^c[a>>8&255]<<8^c[255&r]^e[s++],f=t,t=i,i=a,a=r,r=f}}]),e}();e.default=a,t.exports=e.default},{}],8:[function(t,r,e){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t>8|e>>>24}},{key:"doDecrypt",value:function(i,g,a){var u,f,s,h,l,c,d,n,e,r=new Int32Array(i.buffer,i.byteOffset,i.byteLength>>2),p=new o.default(Array.prototype.slice.call(g)),v=new Uint8Array(i.byteLength),t=new Int32Array(v.buffer);for(u=~~a[0],f=~~a[1],s=~~a[2],h=~~a[3],e=0;ee&&(255!==t[e]||240!==(240&t[e+1]));e++);for(r.audiosamplerate||(a=o.default.getAudioConfig(this.observer,t,e,p),r.config=a.config,r.audiosamplerate=a.samplerate,r.channelCount=a.channelCount,r.codec=a.codec,r.timescale=a.samplerate,r.duration=a.samplerate*y,l.logger.log("parsed codec:"+r.codec+",rate:"+a.samplerate+",nb channel:"+a.channelCount)),c=0,g=9216e4/r.audiosamplerate;u>e+5&&(s=1&t[e+1]?7:9,n=(3&t[e+3])<<11|t[e+4]<<3|(224&t[e+5])>>>5,n-=s,n>0&&u>=e+s+n);)for(h=f+c*g,v={unit:t.subarray(e+s,e+s+n),pts:h,dts:h},r.samples.push(v),r.len+=n,e+=n+s,c++;u-1>e&&(255!==t[e]||240!==(240&t[e+1]));e++);this.remuxer.remux(this._aacTrack,{samples:[]},{samples:[{pts:f,dts:f,unit:d.payload}]},m)}},{key:"destroy",value:function(){}}],[{key:"probe",value:function(t){var e,r,a=new i.default(t);if(a.hasTimeStamp)for(e=a.length,r=t.length;r-1>e;e++)if(255===t[e]&&240===(240&t[e+1]))return!0;return!1}}]),e}();t.default=d,s.exports=t.default},{"../demux/id3":16,"../utils/logger":31,"./adts":11}],11:[function(t,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t>>6)+1,e=(60&u[l+2])>>>2,e>d.length-1?void f.trigger(Event.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+e}):(o=(1&u[l+2])<<2,o|=(192&u[l+3])>>>6,s.logger.log("manifest codec:"+a+",ADTS data:type:"+i+",sampleingIndex:"+e+"["+d[e]+"Hz],channelConfig:"+o),-1!==h.indexOf("firefox")?e>=6?(i=5,t=new Array(4),n=e-3):(i=2,t=new Array(2),n=e):-1!==h.indexOf("android")?(i=2,t=new Array(2),n=e):(i=5,t=new Array(4),a&&(-1!==a.indexOf("mp4a.40.29")||-1!==a.indexOf("mp4a.40.5"))||!a&&e>=6?n=e-3:((a&&-1!==a.indexOf("mp4a.40.2")&&(e>=6||1===o)||!a&&1===o)&&(i=2,t=new Array(2)),n=e)),t[0]=i<<3,t[0]|=(14&e)>>1,t[1]|=(1&e)<<7,t[1]|=o<<3,5===i&&(t[1]|=(14&n)>>1,t[2]=(1&n)<<7,t[2]|=8,t[3]=0),{config:t,samplerate:d[e],channelCount:o,codec:"mp4a.40."+i})}}]),e}();e.default=o,i.exports=e.default},{"../errors":18,"../utils/logger":31}],12:[function(e,o,t){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var f=function(){function e(i,r){for(var t=0;t1?r-1:0),e=1;r>e;e++)a[e-1]=arguments[e];t.emit.apply(t,[i,i].concat(a))},t.off=function(a){for(var r=arguments.length,i=Array(r>1?r-1:0),e=1;r>e;e++)i[e-1]=arguments[e];t.removeListener.apply(t,[a].concat(i))},r.addEventListener("message",function(i){switch(i.data.cmd){case"init":r.demuxer=new n.default(t,h.default);break;case"demux":var e=i.data;r.demuxer.push(new Uint8Array(e.data),e.audioCodec,e.videoCodec,e.timeOffset,e.cc,e.level,e.sn,e.duration)}}),t.on(e.default.FRAG_PARSING_INIT_SEGMENT,function(a,t){var e={event:a},i=[];t.audioCodec&&(e.audioCodec=t.audioCodec,e.audioMoov=t.audioMoov.buffer,e.audioChannelCount=t.audioChannelCount,i.push(e.audioMoov)),t.videoCodec&&(e.videoCodec=t.videoCodec,e.videoMoov=t.videoMoov.buffer,e.videoWidth=t.videoWidth,e.videoHeight=t.videoHeight,i.push(e.videoMoov)),r.postMessage(e,i)}),t.on(e.default.FRAG_PARSING_DATA,function(i,e){var t={event:i,type:e.type,startPTS:e.startPTS,endPTS:e.endPTS,startDTS:e.startDTS,endDTS:e.endDTS,moof:e.moof.buffer,mdat:e.mdat.buffer,nb:e.nb};r.postMessage(t,[t.moof,t.mdat])}),t.on(e.default.FRAG_PARSED,function(e){r.postMessage({event:e})}),t.on(e.default.ERROR,function(e,t){r.postMessage({event:e,data:t})}),t.on(e.default.FRAG_PARSING_METADATA,function(e,t){var i={event:e,samples:t.samples};r.postMessage(i)}),t.on(e.default.FRAG_PARSING_USERDATA,function(e,t){var i={event:e,samples:t.samples};r.postMessage(i)})};i.default=o,s.exports=i.default},{"../demux/demuxer-inline":12,"../events":20,"../remux/mp4-remuxer":27,events:1}],14:[function(t,u,i){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function v(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var o=function(){function e(i,r){for(var t=0;t0&&null!=e&&null!=e.key&&"AES-128"===e.method){null==this.decrypter&&(this.decrypter=new p.default(this.hls));var u=this;this.decrypter.decrypt(t,e.key,e.iv,function(e){u.pushDecrypted(e,r,i,a,n,s,o,l)})}else this.pushDecrypted(t,r,i,a,n,s,o,l)}},{key:"onWorkerMessage",value:function(t){switch(t.data.event){case e.default.FRAG_PARSING_INIT_SEGMENT:var r={};t.data.audioMoov&&(r.audioMoov=new Uint8Array(t.data.audioMoov),r.audioCodec=t.data.audioCodec,r.audioChannelCount=t.data.audioChannelCount),t.data.videoMoov&&(r.videoMoov=new Uint8Array(t.data.videoMoov),r.videoCodec=t.data.videoCodec,r.videoWidth=t.data.videoWidth,r.videoHeight=t.data.videoHeight),this.hls.trigger(e.default.FRAG_PARSING_INIT_SEGMENT,r);break;case e.default.FRAG_PARSING_DATA:this.hls.trigger(e.default.FRAG_PARSING_DATA,{moof:new Uint8Array(t.data.moof),mdat:new Uint8Array(t.data.mdat),startPTS:t.data.startPTS,endPTS:t.data.endPTS,startDTS:t.data.startDTS,endDTS:t.data.endDTS,type:t.data.type,nb:t.data.nb});break;case e.default.FRAG_PARSING_METADATA:this.hls.trigger(e.default.FRAG_PARSING_METADATA,{samples:t.data.samples});break;case e.default.FRAG_PARSING_USERDATA:this.hls.trigger(e.default.FRAG_PARSING_USERDATA,{samples:t.data.samples});break;default:this.hls.trigger(t.data.event,t.data.data)}}}]),r}();i.default=y,u.exports=i.default},{"../crypt/decrypter":9,"../demux/demuxer-inline":12,"../demux/demuxer-worker":13,"../events":20,"../remux/mp4-remuxer":27,"../utils/logger":31,webworkify:2}],15:[function(t,r,e){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function e(i,r){for(var t=0;te?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(t){var e=Math.min(this.bitsAvailable,t),r=this.word>>>32-e;return t>32&&n.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=e,this.bitsAvailable>0?this.word<<=e:this.bytesAvailable>0&&this.loadWord(),e=t-e,e>0?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(a){var t,i,r=8,e=8;for(t=0;a>t;t++)0!==e&&(i=this.readEG(),e=(r+i+256)%256),r=0===e?r:e}},{key:"readSPS",value:function(){var t,g,p,l,a,n,i,o,r,s=0,d=0,h=0,f=0,c=1;if(this.readUByte(),t=this.readUByte(),g=this.readBits(5),this.skipBits(3),p=this.readUByte(),this.skipUEG(),100===t||110===t||122===t||244===t||44===t||83===t||86===t||118===t||128===t){var v=this.readUEG();if(3===v&&this.skipBits(1),this.skipUEG(),this.skipUEG(),this.skipBits(1),this.readBoolean())for(o=3!==v?8:12,r=0;o>r;r++)this.readBoolean()&&(6>r?this.skipScalingList(16):this.skipScalingList(64))}this.skipUEG();var u=this.readUEG();if(0===u)this.readUEG();else if(1===u)for(this.skipBits(1),this.skipEG(),this.skipEG(),l=this.readUEG(),r=0;l>r;r++)this.skipEG();if(this.skipUEG(),this.skipBits(1),a=this.readUEG(),n=this.readUEG(),i=this.readBits(1),0===i&&this.skipBits(1),this.skipBits(1),this.readBoolean()&&(s=this.readUEG(),d=this.readUEG(),h=this.readUEG(),f=this.readUEG()),this.readBoolean()&&this.readBoolean()){var e=void 0,y=this.readUByte();switch(y){case 2:e=[12,11];break;case 3:e=[10,11];break;case 4:e=[16,11];break;case 5:e=[40,33];break;case 6:e=[24,11];break;case 7:e=[20,11];break;case 8:e=[32,11];break;case 9:e=[80,33];break;case 10:e=[18,11];break;case 11:e=[15,11];break;case 12:e=[64,33];break;case 13:e=[160,99];break;case 14:e=[4,3];break;case 15:e=[3,2];break;case 16:e=[2,1];break;case 255:e=[this.readUByte()<<8|this.readUByte(),this.readUByte()<<8|this.readUByte()]}e&&(c=e[0]/e[1])}return{width:(16*(a+1)-2*s-2*d)*c,height:(2-i)*(n+1)*16-(i?2:4)*(h+f)}}},{key:"readSliceType",value:function(){return this.readUByte(),this.readUEG(),this.readUEG()}}]),e}();e.default=s,r.exports=e.default},{"../utils/logger":31}],16:[function(r,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;tr);return t}},{key:"_parseID3Frames",value:function(r,e,n){for(var a,s,o,l,i;n>=e+8;)switch(a=this.readUTF(r,e,4),e+=4,s=r[e++]<<24+r[e++]<<16+r[e++]<<8+r[e++],l=r[e++]<<8+r[e++],o=e,a){case"PRIV":if("com.apple.streaming.transportStreamTimestamp"===this.readUTF(r,e,44)){e+=44,e+=4;var u=1&r[e++];this._hasTimeStamp=!0,i=((r[e++]<<23)+(r[e++]<<15)+(r[e++]<<7)+r[e++])/45,u&&(i+=47721858.84),i=Math.round(i),t.logger.trace("ID3 timestamp found: "+i),this._timeStamp=i}}}},{key:"hasTimeStamp",get:function(){return this._hasTimeStamp}},{key:"timeStamp",get:function(){return this._timeStamp}},{key:"length",get:function(){return this._length}},{key:"payload",get:function(){return this._payload}}]),e}();e.default=s,i.exports=e.default},{"../utils/logger":31}],17:[function(t,o,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var f=function(){function e(i,r){for(var t=0;tt;t+=188)if(71===i[t]){if(d=!!(64&i[t+1]),u=((31&i[t+1])<<8)+i[t+2],y=(48&i[t+3])>>4,y>1){if(a=t+5+i[t+4],a===t+188)continue}else a=t+4;p?u===v?(d&&(l&&this._parseAVCPES(this._parsePES(l)),l={data:[],size:0}),l&&(l.data.push(i.subarray(a,t+188)),l.size+=t+188-a)):u===c?(d&&(o&&this._parseAACPES(this._parsePES(o)),o={data:[],size:0}),o&&(o.data.push(i.subarray(a,t+188)),o.size+=t+188-a)):u===b&&(d&&(s&&this._parseID3PES(this._parsePES(s)),s={data:[],size:0}),s&&(s.data.push(i.subarray(a,t+188)),s.size+=t+188-a)):(d&&(a+=i[a]+1),0===u?this._parsePAT(i,a):u===this._pmtId&&(this._parsePMT(i,a),p=this.pmtParsed=!0,v=this._avcTrack.id,c=this._aacTrack.id,b=this._id3Track.id))}else this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});l&&this._parseAVCPES(this._parsePES(l)),o&&this._parseAACPES(this._parsePES(o)),s&&this._parseID3PES(this._parsePES(s)),this.remux()}},{key:"remux",value:function(){this.remuxer.remux(this._aacTrack,this._avcTrack,this._id3Track,this._txtTrack,this.timeOffset,this.contiguous)}},{key:"destroy",value:function(){this.switchLevel(),this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){this._pmtId=(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(r,t){var a,n,s,i;for(a=(15&r[t+1])<<8|r[t+2],n=t+3+a-4,s=(15&r[t+10])<<8|r[t+11],t+=12+s;n>t;){switch(i=(31&r[t+1])<<8|r[t+2],r[t]){case 15:this._aacTrack.id=i;break;case 21:this._id3Track.id=i;break;case 27:this._avcTrack.id=i;break;default:e.logger.log("unkown stream type:"+r[t])}t+=((15&r[t+3])<<8|r[t+4])+5}}},{key:"_parsePES",value:function(t){var e,a,u,o,d,n,r,i,s,l=0;if(e=t.data[0],u=(e[0]<<16)+(e[1]<<8)+e[2],1===u){for(o=(e[4]<<8)+e[5],a=e[7],192&a&&(r=536870912*(14&e[9])+4194304*(255&e[10])+16384*(254&e[11])+128*(255&e[12])+(254&e[13])/2,r>4294967295&&(r-=8589934592),64&a?(i=536870912*(14&e[14])+4194304*(255&e[15])+16384*(254&e[16])+128*(255&e[17])+(254&e[18])/2,i>4294967295&&(i-=8589934592)):i=r),d=e[8],s=d+9,t.data[0]=t.data[0].subarray(s),t.size-=s,n=new Uint8Array(t.size);t.data.length;)e=t.data.shift(),n.set(e,l),l+=e.byteLength;return{data:n,pts:r,dts:i,len:o}}return null}},{key:"_parseAVCPES",value:function(i){var t,y,n,l,h=this,r=this._avcTrack,u=r.samples,m=this._parseAVCNALu(i.data),d=[],o=!1,c=!1,v=0;if(0===m.length&&u.length>0){var g=u[u.length-1],f=g.units.units[g.units.units.length-1],p=new Uint8Array(f.data.byteLength+i.data.byteLength);p.set(f.data,0),p.set(i.data,f.data.byteLength), +f.data=p,g.units.length+=i.data.byteLength,r.len+=i.data.byteLength}i.data=null;var a="";m.forEach(function(e){switch(e.type){case 1:n=!0,o&&(a+="NDR ");break;case 5:n=!0,o&&(a+="IDR "),c=!0;break;case 6:n=!0,o&&(a+="SEI "),t=new s.default(e.data),t.readUByte();var b=t.readUByte();if(4===b){var p=0;do p=t.readUByte();while(255===p);var R=t.readUByte();if(181===R){var _=t.readUShort();if(49===_){var A=t.readUInt();if(1195456820===A){var k=t.readUByte();if(3===k){var g=t.readUByte(),E=t.readUByte(),T=31&g,f=[g,E];for(l=0;T>l;l++)f.push(t.readUByte()),f.push(t.readUByte()),f.push(t.readUByte());h._txtTrack.samples.push({type:3,pts:i.pts,bytes:f})}}}}}break;case 7:if(n=!0,o&&(a+="SPS "),!r.sps){t=new s.default(e.data);var y=t.readSPS();r.width=y.width,r.height=y.height,r.sps=[e.data],r.timescale=h.remuxer.timescale,r.duration=h.remuxer.timescale*h._duration;var L=e.data.subarray(1,4),m="avc1.";for(l=0;3>l;l++){var u=L[l].toString(16);u.length<2&&(u="0"+u),m+=u}r.codec=m}break;case 8:n=!0,o&&(a+="PPS "),r.pps||(r.pps=[e.data]);break;case 9:n=!1,o&&(a+="AUD ");break;default:n=!1,a+="unknown NAL "+e.type+" "}n&&(d.push(e),v+=e.data.byteLength)}),(o||a.length)&&e.logger.log(a),d.length&&(c===!0||r.sps)&&(y={units:{units:d,length:v},pts:i.pts,dts:i.dts,key:c},u.push(y),r.len+=v,r.nbNalu+=d.length)}},{key:"_parseAVCNALu",value:function(r){for(var n,i,s,p,a,l,t=0,f=r.byteLength,e=0,d=[];f>t;)switch(n=r[t++],e){case 0:0===n&&(e=1);break;case 1:e=0===n?2:0;break;case 2:case 3:if(0===n)e=3;else if(1===n&&f>t){if(p=31&r[t],a)s={data:r.subarray(a,t-e-1),type:l},d.push(s);else if(i=t-e-1){var c=this._avcTrack,h=c.samples;if(h.length){var v=h[h.length-1],g=v.units.units,o=g[g.length-1],u=new Uint8Array(o.data.byteLength+i);u.set(o.data,0),u.set(r.subarray(0,i),o.data.byteLength),o.data=u,v.units.length+=i,c.len+=i}}a=t,l=p,e=0}else e=0}return a&&(s={data:r.subarray(a,f),type:l},d.push(s)),d}},{key:"_parseAACPES",value:function(R){var s,l,p,b,t,d,f,o,_,a=this._aacTrack,i=R.data,c=R.pts,k=0,L=this._duration,A=this.audioCodec,u=this.aacOverFlow,E=this.lastAacPTS;if(u){var m=new Uint8Array(u.byteLength+i.byteLength);m.set(u,0),m.set(i,u.byteLength),i=m}for(t=k,o=i.length;o-1>t&&(255!==i[t]||240!==(240&i[t+1]));t++);if(t){var y,h;if(o-1>t?(y="AAC PES did not start with ADTS header,offset:"+t,h=!1):(y="no ADTS header found in AAC PES",h=!0),this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:h,reason:y}),h)return}if(a.audiosamplerate||(s=v.default.getAudioConfig(this.observer,i,t,A),a.config=s.config,a.audiosamplerate=s.samplerate,a.channelCount=s.channelCount,a.codec=s.codec,a.timescale=s.samplerate,a.duration=s.samplerate*L,e.logger.log("parsed codec:"+a.codec+",rate:"+s.samplerate+",nb channel:"+s.channelCount)),b=0,p=9216e4/a.audiosamplerate,u&&E){var g=E+p;Math.abs(g-c)>1&&(e.logger.log("AAC: align PTS for overlapping frames by "+Math.round((g-c)/90)),c=g)}for(;o>t+5&&(d=1&i[t+1]?7:9,l=(3&i[t+3])<<11|i[t+4]<<3|(224&i[t+5])>>>5,l-=d,l>0&&o>=t+d+l);)for(f=c+b*p,_={unit:i.subarray(t+d,t+d+l),pts:f,dts:f},a.samples.push(_),a.len+=l,t+=l+d,b++;o-1>t&&(255!==i[t]||240!==(240&i[t+1]));t++);u=o>t?i.subarray(t,o):null,this.aacOverFlow=u,this.lastAacPTS=f}},{key:"_parseID3PES",value:function(e){this._id3Track.samples.push(e)}}],[{key:"probe",value:function(e){return e.length>=564&&71===e[0]&&71===e[188]&&71===e[376]?!0:!1}}]),t}();i.default=u,o.exports=i.default},{"../errors":18,"../events":20,"../utils/logger":31,"./adts":11,"./exp-golomb":15}],18:[function(i,a,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var t={NETWORK_ERROR:"hlsNetworkError",MEDIA_ERROR:"hlsMediaError",OTHER_ERROR:"hlsOtherError"};e.ErrorTypes=t;var r={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError"};e.ErrorDetails=r},{}],19:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;t1?i-1:0),t=1;i>t;t++)a[t-1]=arguments[t];this.handledEvents=a,this.useGenericHandler=!0,this.registerListeners()}return i(e,[{key:"destroy",value:function(){this.unregisterListeners()}},{key:"isEventHandler",value:function(){return"object"==typeof this.handledEvents&&this.handledEvents.length&&"function"==typeof this.onEvent}},{key:"registerListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){if("hlsEventGeneric"===e)throw new Error("Forbidden event name: "+e);this.hls.on(e,this.onEvent)}.bind(this))}},{key:"unregisterListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){this.hls.off(e,this.onEvent)}.bind(this))}},{key:"onEvent",value:function(e,t){this.onEventGeneric(e,t)}},{key:"onEventGeneric",value:function(e,t){var r=function(t,r){var e="on"+t.replace("hls","");if("function"!=typeof this[e])throw new Error("Event "+t+" has no generic handler in this "+this.constructor.name+" class (tried "+e+")");return this[e].bind(this,r)};r.call(this,e,t).call()}}]),e}();e.default=a,t.exports=e.default},{}],20:[function(t,e,r){"use strict";e.exports={MEDIA_ATTACHING:"hlsMediaAttaching",MEDIA_ATTACHED:"hlsMediaAttached",MEDIA_DETACHING:"hlsMediaDetaching",MEDIA_DETACHED:"hlsMediaDetached",MANIFEST_LOADING:"hlsManifestLoading",MANIFEST_LOADED:"hlsManifestLoaded",MANIFEST_PARSED:"hlsManifestParsed",LEVEL_LOADING:"hlsLevelLoading",LEVEL_LOADED:"hlsLevelLoaded",LEVEL_UPDATED:"hlsLevelUpdated",LEVEL_PTS_UPDATED:"hlsLevelPtsUpdated",LEVEL_SWITCH:"hlsLevelSwitch",FRAG_LOADING:"hlsFragLoading",FRAG_LOAD_PROGRESS:"hlsFragLoadProgress",FRAG_LOAD_EMERGENCY_ABORTED:"hlsFragLoadEmergencyAborted",FRAG_LOADED:"hlsFragLoaded",FRAG_PARSING_INIT_SEGMENT:"hlsFragParsingInitSegment",FRAG_PARSING_USERDATA:"hlsFragParsingUserdata",FRAG_PARSING_METADATA:"hlsFragParsingMetadata",FRAG_PARSING_DATA:"hlsFragParsingData",FRAG_PARSED:"hlsFragParsed",FRAG_BUFFERED:"hlsFragBuffered",FRAG_CHANGED:"hlsFragChanged",FPS_DROP:"hlsFpsDrop",ERROR:"hlsError",DESTROYING:"hlsDestroying",KEY_LOADING:"hlsKeyLoading",KEY_LOADED:"hlsKeyLoaded"}},{}],21:[function(r,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;td)return void(i.PTSKnown=!1);for(var r=c;d>=r;r++){var l=f[h+r],a=o[r];u=l.cc-a.cc,isNaN(l.startPTS)||(a.start=a.startPTS=l.startPTS,a.endPTS=l.endPTS,a.duration=l.duration,s=a)}if(u)for(t.logger.log("discontinuity sliding from playlist, take drift into account"),r=0;ri.endSN)return 0;o=l-i.startSN,n=i.fragments,r=n[o],isNaN(r.startPTS)||(a=Math.min(a,r.startPTS),s=Math.max(s,r.endPTS));var u=a-r.start;for(r.start=r.startPTS=a,r.endPTS=s,r.duration=s-a,t=o;t>0;t--)e.updatePTS(n,t,t-1);for(t=o;ti?r.start=e.start+e.duration:r.start=e.start-r.duration:a>i?(e.duration=n-e.start,e.duration<0&&t.logger.error("negative duration computed for frag "+e.sn+",level "+e.level+", there should be some duration drift between playlist and fragment!")):(r.duration=e.start-n,r.duration<0&&t.logger.error("negative duration computed for frag "+r.sn+",level "+r.level+", there should be some duration drift between playlist and fragment!"))}}]),e}();e.default=s,i.exports=e.default},{"../utils/logger":31}],22:[function(t,v,a){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t1?t-1:0),e=1;t>e;e++)a[e-1]=arguments[e];r.emit.apply(r,[i,i].concat(a))},r.off=function(a){for(var t=arguments.length,i=Array(t>1?t-1:0),e=1;t>e;e++)i[e-1]=arguments[e];r.removeListener.apply(r,[a].concat(i))},this.on=r.on.bind(r),this.off=r.off.bind(r),this.trigger=r.trigger.bind(r),this.playlistLoader=new d.default(this),this.fragmentLoader=new f.default(this),this.levelController=new m.default(this),this.abrController=new i.abrController(this),this.mediaController=new i.mediaController(this),this.timelineController=new i.timelineController(this),this.keyLoader=new S.default(this)}return n(t,null,[{key:"isSupported",value:function(){return window.MediaSource&&window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')}},{key:"Events",get:function(){return i.default}},{key:"ErrorTypes",get:function(){return s.ErrorTypes}},{key:"ErrorDetails",get:function(){return s.ErrorDetails}},{key:"DefaultConfig",get:function(){return t.defaultConfig||(t.defaultConfig={autoStartLoad:!0,debug:!1,maxBufferLength:30,maxBufferSize:6e7,maxBufferHole:.5,maxSeekHole:2,liveSyncDurationCount:3,liveMaxLatencyDurationCount:1/0,maxMaxBufferLength:600,enableWorker:!0,enableSoftwareAES:!0,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingLoopThreshold:3,appendErrorMaxRetry:3,loader:A.default,fLoader:void 0,pLoader:void 0,abrController:w.default,mediaController:p.default,timelineController:E.default,enableCEA708Captions:!0}),t.defaultConfig},set:function(e){t.defaultConfig=e}}]),n(t,[{key:"destroy",value:function(){e.logger.log("destroy"),this.trigger(i.default.DESTROYING),this.detachMedia(),this.playlistLoader.destroy(),this.fragmentLoader.destroy(),this.levelController.destroy(),this.mediaController.destroy(),this.timelineController.destroy(),this.keyLoader.destroy(),this.url=null,this.observer.removeAllListeners()}},{key:"attachMedia",value:function(t){e.logger.log("attachMedia"),this.media=t,this.trigger(i.default.MEDIA_ATTACHING,{media:t})}},{key:"detachMedia",value:function(){e.logger.log("detachMedia"),this.trigger(i.default.MEDIA_DETACHING),this.media=null}},{key:"loadSource",value:function(t){e.logger.log("loadSource:"+t),this.url=t,this.trigger(i.default.MANIFEST_LOADING,{url:t})}},{key:"startLoad",value:function(){e.logger.log("startLoad"),this.mediaController.startLoad()}},{key:"swapAudioCodec",value:function(){e.logger.log("swapAudioCodec"),this.mediaController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){e.logger.log("recoverMediaError");var t=this.media;this.detachMedia(),this.attachMedia(t)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.mediaController.currentLevel},set:function(t){e.logger.log("set currentLevel:"+t),this.loadLevel=t,this.mediaController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.mediaController.nextLevel},set:function(t){e.logger.log("set nextLevel:"+t),this.levelController.manualLevel=t,this.mediaController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(t){e.logger.log("set loadLevel:"+t),this.levelController.manualLevel=t}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel()},set:function(e){this.levelController.level=e}},{key:"firstLevel",get:function(){return this.levelController.firstLevel},set:function(t){e.logger.log("set firstLevel:"+t),this.levelController.firstLevel=t}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(t){e.logger.log("set startLevel:"+t),this.levelController.startLevel=t}},{key:"autoLevelCapping",get:function(){return this.abrController.autoLevelCapping},set:function(t){e.logger.log("set autoLevelCapping:"+t),this.abrController.autoLevelCapping=t}},{key:"autoLevelEnabled",get:function(){return-1===this.levelController.manualLevel}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}}]),t}();a.default=l,v.exports=a.default},{"./controller/abr-controller":3,"./controller/level-controller":4,"./controller/mse-media-controller":5,"./controller/timeline-controller":6,"./errors":18,"./events":20,"./loader/fragment-loader":23,"./loader/key-loader":24,"./loader/playlist-loader":25,"./utils/logger":31,"./utils/xhr-loader":33,events:1}],23:[function(r,o,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(i,"__esModule",{value:!0});var s=function(){function e(i,r){for(var t=0;t2?(e=t.shift()+".",e+=parseInt(t.shift()).toString(16),e+=("000"+parseInt(t.shift()).toString(16)).substr(-4)):e=r,e}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"parseLevelPlaylist",value:function(L,l,A){var e,E,n,a,g=0,o=0,i={url:l,fragments:[],live:!0,startSN:0},r={method:null,key:null,iv:null,uri:null},b=0,h=null,t=null;for(E=/(?:#EXT-X-(MEDIA-SEQUENCE):(\d+))|(?:#EXT-X-(TARGETDURATION):(\d+))|(?:#EXT-X-(KEY):(.*))|(?:#EXT(INF):([\d\.]+)[^\r\n]*([\r\n]+[^#|\r\n]+)?)|(?:#EXT-X-(BYTERANGE):([\d]+[@[\d]*)]*[\r\n]+([^#|\r\n]+)?|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(PROGRAM-DATE-TIME):(.*))/g;null!==(e=E.exec(L));)switch(e.shift(),e=e.filter(function(e){return void 0!==e}),e[0]){case"MEDIA-SEQUENCE":g=i.startSN=parseInt(e[1]);break;case"TARGETDURATION":i.targetduration=parseFloat(e[1]);break;case"ENDLIST":i.live=!1;break;case"DIS":b++;break;case"BYTERANGE":var c=e[1].split("@");a=1===c.length?n:parseInt(c[1]),n=parseInt(c[0])+a,t&&!t.url&&(t.byteRangeStartOffset=a,t.byteRangeEndOffset=n,t.url=this.resolve(e[2],l));break;case"INF":var v=parseFloat(e[1]);if(!isNaN(v)){var u,m=g++;if(r.method&&r.uri&&!r.iv){u=this.cloneObj(r);for(var y=new Uint8Array(16),d=12;16>d;d++)y[d]=m>>8*(15-d)&255;u.iv=y}else u=r;var k=e[2]?this.resolve(e[2],l):null;t={url:k,duration:v,start:o,sn:m,level:A,cc:b,byteRangeStartOffset:a,byteRangeEndOffset:n,decryptdata:u,programDateTime:h},i.fragments.push(t),o+=v,a=null,h=null}break;case"KEY":var R=e[1],p=new s.default(R),f=p.enumeratedString("METHOD"),_=p.URI,T=p.hexadecimalInteger("IV");f&&(r={method:null,key:null,iv:null,uri:null},_&&"AES-128"===f&&(r.method=f,r.uri=this.resolve(_,l),r.key=null,r.iv=T));break;case"PROGRAM-DATE-TIME":h=new Date(Date.parse(e[1]))}return t&&!t.url&&(i.fragments.pop(),o-=t.duration),i.totalduration=o,i.endSN=g-1,i}},{key:"loadsuccess",value:function(u,i){var s,o=u.currentTarget,n=o.responseText,r=o.responseURL,l=this.id,d=this.id2,a=this.hls;if(void 0===r&&(r=this.url),i.tload=performance.now(),i.mtime=new Date(o.getResponseHeader("Last-Modified")),0===n.indexOf("#EXTM3U"))if(n.indexOf("#EXTINF:")>0)if(null===this.id)a.trigger(t.default.MANIFEST_LOADED,{levels:[{url:r}],url:r,stats:i});else{var h=this.parseLevelPlaylist(n,r,l);i.tparsed=performance.now(),a.trigger(t.default.LEVEL_LOADED,{details:h,level:l,id:d,stats:i})}else s=this.parseMasterPlaylist(n,r),s.length?a.trigger(t.default.MANIFEST_LOADED,{levels:s,url:r,stats:i}):a.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no level found in manifest"});else a.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(a){var r,i;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_ERROR,i=!0):(r=e.ErrorDetails.LEVEL_LOAD_ERROR,i=!1),this.loader.abort(),this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:this.url,loader:this.loader,response:a.currentTarget,level:this.id,id:this.id2})}},{key:"loadtimeout",value:function(){var r,i;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_TIMEOUT,i=!0):(r=e.ErrorDetails.LEVEL_LOAD_TIMEOUT,i=!1),this.loader.abort(),this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:i,url:this.url,loader:this.loader,level:this.id,id:this.id2})}}]),r}(n.default);a.default=h,u.exports=a.default},{"../errors":18,"../event-handler":19,"../events":20,"../utils/attr-list":28,"../utils/url":32}],26:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;t>24&255,t[1]=e>>16&255,t[2]=e>>8&255,t[3]=255&e,t.set(a,4),r=0,e=8;n>r;r++)t.set(i[r],e),e+=i[r].byteLength;return t}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}},{key:"mdhd",value:function(t,r){return e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24,r>>16&255,r>>8&255,255&r,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,i){return e.box(e.types.moof,e.mfhd(t),e.traf(i,r))}},{key:"moov",value:function(t){for(var r=t.length,i=[];r--;)i[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(i).concat(e.mvex(t)))}},{key:"mvex",value:function(r){for(var t=r.length,i=[];t--;)i[t]=e.trex(r[t]);return e.box.apply(null,[e.types.mvex].concat(i))}},{key:"mvhd",value:function(t,r){var i=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24&255,r>>16&255,r>>8&255,255&r,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,i)}},{key:"sdtp",value:function(n){var r,t,i=n.samples||[],a=new Uint8Array(4+i.length);for(t=0;t>>8&255),i.push(255&n),i=i.concat(Array.prototype.slice.call(a));for(r=0;r>>8&255),s.push(255&n),s=s.concat(Array.prototype.slice.call(a));var u=e.box(e.types.avcC,new Uint8Array([1,i[3],i[4],i[5],255,224|t.sps.length].concat(i).concat([t.pps.length]).concat(s))),o=t.width,l=t.height;return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,o>>8&255,255&o,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))}},{key:"esds",value:function(t){var e=t.config.length;return new Uint8Array([0,0,0,0,3,23+e,0,1,0,4,15+e,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([e]).concat(t.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.audiosamplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"stsd",value:function(t){return"audio"===t.type?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,i=t.duration,a=t.width,n=t.height;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,i>>24,i>>16&255,i>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,a>>8&255,255&a,0,0,n>>8&255,255&n,0,0])); +}},{key:"traf",value:function(i,t){var a=e.sdtp(i),r=i.id;return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r])),e.box(e.types.tfdt,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t])),e.trun(i,a.length+16+16+8+16+8+8),a)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(r){var t=r.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(f,o){var i,a,n,s,t,l,d=f.samples||[],r=d.length,h=12+16*r,u=new Uint8Array(h);for(o+=8+h,u.set([0,0,15,1,r>>>24&255,r>>>16&255,r>>>8&255,255&r,o>>>24&255,o>>>16&255,o>>>8&255,255&o],0),i=0;r>i;i++)a=d[i],n=a.duration,s=a.size,t=a.flags,l=a.cts,u.set([n>>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,t.isLeading<<2|t.dependsOn,t.isDependedOn<<6|t.hasRedundancy<<4|t.paddingValue<<1|t.isNonSync,61440&t.degradPrio,15&t.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*i);return e.box(e.types.trun,u)}},{key:"initSegment",value:function(i){e.types||e.init();var t,r=e.moov(i);return t=new Uint8Array(e.FTYP.byteLength+r.byteLength),t.set(e.FTYP),t.set(r,e.FTYP.byteLength),t}}]),e}();e.default=a,t.exports=e.default},{}],27:[function(i,h,a){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var d=function(){function e(i,r){for(var t=0;t=y&&(r.logger.log("invalid sample duration at PTS/DTS: "+l.pts+"/"+l.dts+":"+y),y=1),g.duration=y}else{var n,m=this.nextAvcDts;o=this._PTSNormalize(_,m),i=this._PTSNormalize(c,m),n=Math.round((i-m)/90),(S||Math.abs(n)<600)&&n&&(n>1?r.logger.log("AVC:"+n+" ms hole between fragments detected,filling it"):-1>n&&r.logger.log("AVC:"+-n+" ms overlapping between fragments detected"),i=m,o=Math.max(o-n,i),r.logger.log("Video/PTS/DTS adjusted: "+o+"/"+i+",delta:"+n)),k=Math.max(0,o),R=Math.max(0,i)}g={size:A,duration:0,cts:(o-i)/h,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0}},s=g.flags,l.key===!0?(s.dependsOn=2,s.isNonSync=0):(s.dependsOn=1,s.isNonSync=1),u.push(g),f=i}var E=0;u.length>=2&&(E=u[u.length-2].duration,g.duration=E),this.nextAvcDts=i+E*h,a.len=0,a.nbNalu=0,u.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&(s=u[0].flags,s.dependsOn=2,s.isNonSync=0),a.samples=u,T=t.default.moof(a.sequenceNumber++,R/h,a),a.samples=[],this.observer.trigger(e.default.FRAG_PARSING_DATA,{moof:T,mdat:d,startPTS:k/b,endPTS:(o+h*E)/b,startDTS:R/b,endDTS:this.nextAvcDts/b,type:"video",nb:u.length})}},{key:"remuxAudio",value:function(i,w,S){var k,y,n,h,o,L,A,b,l,g,_,d,a,R=8,u=this.PES_TIMESCALE,T=i.timescale,f=u/T,m=[],E=[];for(i.samples.sort(function(e,t){return e.pts-t.pts}),E=i.samples;E.length;){if(y=E.shift(),h=y.unit,g=y.pts-this._initDTS,_=y.dts-this._initDTS,void 0!==l)d=this._PTSNormalize(g,l),a=this._PTSNormalize(_,l),n.duration=(a-l)/f,Math.abs(n.duration-1024)>10&&r.logger.log("invalid AAC sample duration at PTS "+Math.round(g/90)+",should be 1024,found :"+Math.round(n.duration)),n.duration=1024,a=1024*f+l;else{var s,p=this.nextAacPts;if(d=this._PTSNormalize(g,p),a=this._PTSNormalize(_,p),s=Math.round(1e3*(d-p)/u),(S||Math.abs(s)<600)&&s){if(s>0)r.logger.log(s+" ms hole between AAC samples detected,filling it");else if(-12>s){r.logger.log(-s+" ms overlapping between AAC samples detected, drop frame"),i.len-=h.byteLength;continue}d=a=p}if(A=Math.max(0,d),b=Math.max(0,a),!(i.len>0))return;o=new Uint8Array(i.len+8),k=new DataView(o.buffer),k.setUint32(0,o.byteLength),o.set(t.default.types.mdat,4)}o.set(h,R),R+=h.byteLength,n={size:h.byteLength,cts:0,duration:0,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:1}},m.push(n),l=a}var v=0,c=m.length;c>=2&&(v=m[c-2].duration,n.duration=v),c&&(this.nextAacPts=d+f*v,i.len=0,i.samples=m,L=t.default.moof(i.sequenceNumber++,b/f,i),i.samples=[],this.observer.trigger(e.default.FRAG_PARSING_DATA,{moof:L,mdat:o,startPTS:A/u,endPTS:this.nextAacPts/u,startDTS:b/u,endDTS:(a+f*v)/u,type:"audio",nb:c}))}},{key:"remuxID3",value:function(r,a){var t,n=r.samples.length;if(n){for(var i=0;n>i;i++)t=r.samples[i],t.pts=(t.pts-this._initPTS)/this.PES_TIMESCALE,t.dts=(t.dts-this._initDTS)/this.PES_TIMESCALE;this.observer.trigger(e.default.FRAG_PARSING_METADATA,{samples:r.samples})}r.samples=[],a=a}},{key:"remuxText",value:function(t,a){t.samples.sort(function(e,t){return e.pts-t.pts});var r,n=t.samples.length;if(n){for(var i=0;n>i;i++)r=t.samples[i],r.pts=(r.pts-this._initPTS)/this.PES_TIMESCALE;this.observer.trigger(e.default.FRAG_PARSING_USERDATA,{samples:t.samples})}t.samples=[],a=a}},{key:"_PTSNormalize",value:function(e,t){var r;if(void 0===t)return e;for(r=e>t?-8589934592:8589934592;Math.abs(e-t)>4294967296;)e+=r;return e}},{key:"timescale",get:function(){return this.MP4_TIMESCALE}}]),i}();a.default=o,h.exports=a.default},{"../errors":18,"../events":20,"../remux/mp4-generator":26,"../utils/logger":31}],28:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"hexadecimalInteger",value:function(r){if(this[r]){var e=(this[r]||"0x").slice(2);e=(1&e.length?"0":"")+e;for(var i=new Uint8Array(e.length/2),t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(t){var e=/^(\d+)x(\d+)$/.exec(this[t]);if(null!==e)return{width:parseInt(e[1],10),height:parseInt(e[2],10)}}}],[{key:"parseAttrList",value:function(a){for(var t,n=/\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g,r={};null!==(t=n.exec(a));){var e=t[2],i='"';0===e.indexOf(i)&&e.lastIndexOf(i)===e.length-1&&(e=e.slice(1,-1)),r[t[1]]=e}return r}}]),e}();e.default=a,t.exports=e.default},{}],29:[function(r,e,i){"use strict";var t={search:function(a,s){for(var t=0,r=a.length-1,e=null,i=null;r>=t;){e=(t+r)/2|0,i=a[e];var n=s(i);if(n>0)t=e+1;else{if(!(0>n))return i;r=e-1}}return null}};e.exports=t},{}],30:[function(n,t,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(i,r){for(var t=0;t0;)this._textTrack.removeCue(this._textTrack.cues[0])}},{key:"push",value:function(r,i){this.cue||this._createCue();for(var a,t,e,s,o,u=31&i[0],n=2,l=0;u>l;l++)if(a=i[n++],t=127&i[n++],e=127&i[n++],s=0===(4&a)?!1:!0,o=3&a,(0!==t||0!==e)&&s&&0===o){if(32&t||64&t)this.cue.text+=this._fromCharCode(t)+this._fromCharCode(e);else if((17===t||25===t)&&e>=48&&63>=e)switch(e){case 48:this.cue.text+="®";break;case 49:this.cue.text+="°";break;case 50:this.cue.text+="½";break;case 51:this.cue.text+="¿";break;case 52:this.cue.text+="™";break;case 53:this.cue.text+="¢";break;case 54:this.cue.text+="";break;case 55:this.cue.text+="£";break;case 56:this.cue.text+="♪";break;case 57:this.cue.text+=" ";break;case 58:this.cue.text+="è";break;case 59:this.cue.text+="â";break;case 60:this.cue.text+="ê";break;case 61:this.cue.text+="î";break;case 62:this.cue.text+="ô";break;case 63:this.cue.text+="û"}if((17===t||25===t)&&e>=32&&47>=e)switch(e){case 32:break;case 33:break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:break;case 42:break;case 43:break;case 44:break;case 45:break;case 46:break;case 47:}if((20===t||28===t)&&e>=32&&47>=e)switch(e){case 32:this._clearActiveCues(r);break;case 33:this.cue.text=this.cue.text.substr(0,this.cue.text.length-1);break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:this._clearActiveCues(r);break;case 42:break;case 43:break;case 44:this._clearActiveCues(r);break;case 45:break;case 46:this._text="";break;case 47:this._flipMemory(r)}if((23===t||31===t)&&e>=33&&35>=e)switch(e){case 33:break;case 34:break;case 35:}}}},{key:"_fromCharCode",value:function(e){switch(e){case 42:return"á";case 2:return"á";case 2:return"é";case 4:return"í";case 5:return"ó";case 6:return"ú";case 3:return"ç";case 4:return"÷";case 5:return"Ñ";case 6:return"ñ";case 7:return"█";default:return String.fromCharCode(e)}}},{key:"_flipMemory",value:function(e){this._clearActiveCues(e),this._flushCaptions(e)}},{key:"_flushCaptions",value:function(t){this._has708||(this._textTrack=this.media.addTextTrack("captions","English","en"),this._has708=!0);for(var e=0;e "+e}function a(t){var r=window.console[t];return r?function(){for(var a=arguments.length,e=Array(a),i=0;a>i;i++)e[i]=arguments[i];e[0]&&(e[0]=l(t,e[0])),r.apply(window.console,e)}:e}function s(r){for(var i=arguments.length,n=Array(i>1?i-1:0),e=1;i>e;e++)n[e-1]=arguments[e];n.forEach(function(e){t[e]=r[e]?r[e].bind(r):a(e)})}Object.defineProperty(r,"__esModule",{value:!0});var i={trace:e,debug:e,log:e,warn:e,info:e,error:e},t=i,n=function(e){if(e===!0||"object"==typeof e){s(e,"debug","log","info","warn","error");try{t.log()}catch(e){t=i}}else t=i};r.enableLogs=n;var o=t;r.logger=o},{}],32:[function(r,t,i){"use strict";var e={buildAbsoluteURL:function(r,t){if(t=t.trim(),/^[a-z]+:/i.test(t))return t;var o=null,a=null,n=/^([^#]*)(.*)$/.exec(t);n&&(a=n[2],t=n[1]);var s=/^([^\?]*)(.*)$/.exec(t);s&&(o=s[2],t=s[1]);var h=/^([^#]*)(.*)$/.exec(r);h&&(r=h[1]);var u=/^([^\?]*)(.*)$/.exec(r);u&&(r=u[1]);var l=/^((([a-z]+):)?\/\/[a-z0-9\.-]+(:[0-9]+)?\/)(.*)$/i.exec(r),f=l[3],d=l[1],c=l[5],i=null;return i=/^\/\//.test(t)?f+"://"+e.buildAbsolutePath("",t.substring(2)):/^\//.test(t)?d+e.buildAbsolutePath("",t.substring(1)):e.buildAbsolutePath(d+c,t),o&&(i+=o),a&&(i+=a),i},buildAbsolutePath:function(n,s){for(var i,e,o=s,a="",t=n.replace(/[^\/]*$/,o.replace(/(\/|^)(?:\.?\/+)+/g,"$1")),r=0;e=t.indexOf("/../",r),e>-1;r=e+i)i=/^\/(?:\.\.\/)*/.exec(t.slice(e))[0].length,a=(a+t.substring(r,e)).replace(new RegExp("(?:\\/+[^\\/]*){0,"+(i-1)/3+"}$"),"/");return a+t.substr(r)}};t.exports=e},{}],33:[function(r,i,e){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(i,r){for(var t=0;t=200&&300>r?(window.clearTimeout(this.timeoutHandle),e.tload=performance.now(),this.onSuccess(i,e)):e.retry", @@ -12,7 +13,7 @@ "url": "https://github.com/dailymotion/hls.js/issues" }, "main": "src/hls.js", - "private": true, + "private": false, "scripts": { "clean": "find dist -mindepth 1 -delete", "prebuild": "npm run clean & npm run test", diff --git a/dashboard-ui/bower_components/hls.js/src/controller/mse-media-controller.js b/dashboard-ui/bower_components/hls.js/src/controller/mse-media-controller.js index 69f5328e7b..3d0ee5907a 100644 --- a/dashboard-ui/bower_components/hls.js/src/controller/mse-media-controller.js +++ b/dashboard-ui/bower_components/hls.js/src/controller/mse-media-controller.js @@ -54,13 +54,14 @@ class MSEMediaController extends EventHandler { } startLoad() { - if (this.levels && this.media) { + if (this.levels) { this.startInternal(); - if (this.lastCurrentTime) { - logger.log(`seeking @ ${this.lastCurrentTime}`); + var media = this.media, lastCurrentTime = this.lastCurrentTime; + if (media && lastCurrentTime) { + logger.log(`seeking @ ${lastCurrentTime}`); if (!this.lastPaused) { logger.log('resuming video'); - this.media.play(); + media.play(); } this.state = State.IDLE; } else { @@ -70,7 +71,7 @@ class MSEMediaController extends EventHandler { this.nextLoadPosition = this.startPosition = this.lastCurrentTime; this.tick(); } else { - logger.warn('cannot start loading as either manifest not parsed or video not attached'); + logger.warn('cannot start loading as manifest not parsed yet'); } } @@ -666,7 +667,7 @@ class MSEMediaController extends EventHandler { to avoid rounding issues/infinite loop, only flush buffer range of length greater than 500ms. */ - if (flushEnd - flushStart > 0.5) { + if (Math.min(flushEnd,bufEnd) - flushStart > 0.5) { logger.log(`flush ${type} [${flushStart},${flushEnd}], of [${bufStart},${bufEnd}], pos:${this.media.currentTime}`); sb.remove(flushStart, flushEnd); return false; @@ -679,6 +680,8 @@ class MSEMediaController extends EventHandler { return false; } } + } else { + logger.warn('abort flushing too many retries'); } /* after successful buffer flushing, rebuild buffer Range array @@ -1221,7 +1224,7 @@ _checkBuffer() { jumpThreshold = 0; } else { // playhead not moving AND media playing - logger.log('playback seems stuck'); + logger.log(`playback seems stuck @${currentTime}`); if(!this.stalled) { this.hls.trigger(Event.ERROR, {type: ErrorTypes.MEDIA_ERROR, details: ErrorDetails.BUFFER_STALLED_ERROR, fatal: false}); this.stalled = true; diff --git a/dashboard-ui/bower_components/hls.js/src/demux/aacdemuxer.js b/dashboard-ui/bower_components/hls.js/src/demux/aacdemuxer.js index 3fd5edb21e..bbaac913a2 100644 --- a/dashboard-ui/bower_components/hls.js/src/demux/aacdemuxer.js +++ b/dashboard-ui/bower_components/hls.js/src/demux/aacdemuxer.js @@ -16,11 +16,11 @@ import ID3 from '../demux/id3'; static probe(data) { // check if data contains ID3 timestamp and ADTS sync worc - var id3 = new ID3(data), adtsStartOffset,len; + var id3 = new ID3(data), offset,len; if(id3.hasTimeStamp) { // look for ADTS header (0xFFFx) - for (adtsStartOffset = id3.length, len = data.length; adtsStartOffset < len - 1; adtsStartOffset++) { - if ((data[adtsStartOffset] === 0xff) && (data[adtsStartOffset+1] & 0xf0) === 0xf0) { + for (offset = id3.length, len = data.length; offset < len - 1; offset++) { + if ((data[offset] === 0xff) && (data[offset+1] & 0xf0) === 0xf0) { //logger.log('ADTS sync word found !'); return true; } @@ -35,46 +35,47 @@ import ID3 from '../demux/id3'; var track = this._aacTrack, id3 = new ID3(data), pts = 90*id3.timeStamp, - config, adtsFrameSize, adtsStartOffset, adtsHeaderLen, stamp, nbSamples, len, aacSample; + config, frameLength, frameDuration, frameIndex, offset, headerLength, stamp, len, aacSample; // look for ADTS header (0xFFFx) - for (adtsStartOffset = id3.length, len = data.length; adtsStartOffset < len - 1; adtsStartOffset++) { - if ((data[adtsStartOffset] === 0xff) && (data[adtsStartOffset+1] & 0xf0) === 0xf0) { + for (offset = id3.length, len = data.length; offset < len - 1; offset++) { + if ((data[offset] === 0xff) && (data[offset+1] & 0xf0) === 0xf0) { break; } } if (!track.audiosamplerate) { - config = ADTS.getAudioConfig(this.observer,data, adtsStartOffset, audioCodec); + config = ADTS.getAudioConfig(this.observer,data, offset, audioCodec); track.config = config.config; track.audiosamplerate = config.samplerate; track.channelCount = config.channelCount; track.codec = config.codec; - track.timescale = this.remuxer.timescale; - track.duration = this.remuxer.timescale * duration; + track.timescale = config.samplerate; + track.duration = config.samplerate * duration; logger.log(`parsed codec:${track.codec},rate:${config.samplerate},nb channel:${config.channelCount}`); } - nbSamples = 0; - while ((adtsStartOffset + 5) < len) { + frameIndex = 0; + frameDuration = 1024 * 90000 / track.audiosamplerate; + while ((offset + 5) < len) { + // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header + headerLength = (!!(data[offset + 1] & 0x01) ? 7 : 9); // retrieve frame size - adtsFrameSize = ((data[adtsStartOffset + 3] & 0x03) << 11); - // byte 4 - adtsFrameSize |= (data[adtsStartOffset + 4] << 3); - // byte 5 - adtsFrameSize |= ((data[adtsStartOffset + 5] & 0xE0) >>> 5); - adtsHeaderLen = (!!(data[adtsStartOffset + 1] & 0x01) ? 7 : 9); - adtsFrameSize -= adtsHeaderLen; - stamp = Math.round(pts + nbSamples * 1024 * 90000 / track.audiosamplerate); + frameLength = ((data[offset + 3] & 0x03) << 11) | + (data[offset + 4] << 3) | + ((data[offset + 5] & 0xE0) >>> 5); + frameLength -= headerLength; //stamp = pes.pts; - //console.log('AAC frame, offset/length/pts:' + (adtsStartOffset+7) + '/' + adtsFrameSize + '/' + stamp.toFixed(0)); - if ((adtsFrameSize > 0) && ((adtsStartOffset + adtsHeaderLen + adtsFrameSize) <= len)) { - aacSample = {unit: data.subarray(adtsStartOffset + adtsHeaderLen, adtsStartOffset + adtsHeaderLen + adtsFrameSize), pts: stamp, dts: stamp}; + + if ((frameLength > 0) && ((offset + headerLength + frameLength) <= len)) { + stamp = pts + frameIndex * frameDuration; + //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`); + aacSample = {unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp}; track.samples.push(aacSample); - track.len += adtsFrameSize; - adtsStartOffset += adtsFrameSize + adtsHeaderLen; - nbSamples++; + track.len += frameLength; + offset += frameLength + headerLength; + frameIndex++; // look for ADTS header (0xFFFx) - for ( ; adtsStartOffset < (len - 1); adtsStartOffset++) { - if ((data[adtsStartOffset] === 0xff) && ((data[adtsStartOffset + 1] & 0xf0) === 0xf0)) { + for ( ; offset < (len - 1); offset++) { + if ((data[offset] === 0xff) && ((data[offset + 1] & 0xf0) === 0xf0)) { break; } } diff --git a/dashboard-ui/bower_components/hls.js/src/demux/tsdemuxer.js b/dashboard-ui/bower_components/hls.js/src/demux/tsdemuxer.js index 21d7051521..1162932451 100644 --- a/dashboard-ui/bower_components/hls.js/src/demux/tsdemuxer.js +++ b/dashboard-ui/bower_components/hls.js/src/demux/tsdemuxer.js @@ -568,8 +568,8 @@ track.audiosamplerate = config.samplerate; track.channelCount = config.channelCount; track.codec = config.codec; - track.timescale = this.remuxer.timescale; - track.duration = track.timescale * duration; + track.timescale = config.samplerate; + track.duration = config.samplerate * duration; logger.log(`parsed codec:${track.codec},rate:${config.samplerate},nb channel:${config.channelCount}`); } frameIndex = 0; @@ -596,7 +596,7 @@ //stamp = pes.pts; if ((frameLength > 0) && ((offset + headerLength + frameLength) <= len)) { - stamp = Math.round(pts + frameIndex * frameDuration); + stamp = pts + frameIndex * frameDuration; //logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`); aacSample = {unit: data.subarray(offset + headerLength, offset + headerLength + frameLength), pts: stamp, dts: stamp}; track.samples.push(aacSample); diff --git a/dashboard-ui/bower_components/hls.js/src/hls.js b/dashboard-ui/bower_components/hls.js/src/hls.js index 8730e85ce0..f40029e87b 100644 --- a/dashboard-ui/bower_components/hls.js/src/hls.js +++ b/dashboard-ui/bower_components/hls.js/src/hls.js @@ -42,7 +42,7 @@ class Hls { debug: false, maxBufferLength: 30, maxBufferSize: 60 * 1000 * 1000, - maxBufferHole: 0.3, + maxBufferHole: 0.5, maxSeekHole: 2, liveSyncDurationCount:3, liveMaxLatencyDurationCount: Infinity, diff --git a/dashboard-ui/bower_components/hls.js/src/remux/mp4-remuxer.js b/dashboard-ui/bower_components/hls.js/src/remux/mp4-remuxer.js index 00b82c3851..da2f45e18c 100644 --- a/dashboard-ui/bower_components/hls.js/src/remux/mp4-remuxer.js +++ b/dashboard-ui/bower_components/hls.js/src/remux/mp4-remuxer.js @@ -253,7 +253,8 @@ class MP4Remuxer { var view, offset = 8, pesTimeScale = this.PES_TIMESCALE, - pes2mp4ScaleFactor = this.PES2MP4SCALEFACTOR, + mp4timeScale = track.timescale, + pes2mp4ScaleFactor = pesTimeScale/mp4timeScale, aacSample, mp4Sample, unit, mdat, moof, @@ -262,15 +263,10 @@ class MP4Remuxer { samples = [], samples0 = []; - track.samples.forEach(aacSample => { - if(pts === undefined || aacSample.pts > pts) { - samples0.push(aacSample); - pts = aacSample.pts; - } else { - logger.warn('dropping past audio frame'); - track.len -= aacSample.unit.byteLength; - } + track.samples.sort(function(a, b) { + return (a.pts-b.pts); }); + samples0 = track.samples; while (samples0.length) { aacSample = samples0.shift(); @@ -282,13 +278,15 @@ class MP4Remuxer { if (lastDTS !== undefined) { ptsnorm = this._PTSNormalize(pts, lastDTS); dtsnorm = this._PTSNormalize(dts, lastDTS); - // let's compute sample duration + // let's compute sample duration. + // there should be 1024 audio samples in one AAC frame mp4Sample.duration = (dtsnorm - lastDTS) / pes2mp4ScaleFactor; - if (mp4Sample.duration < 0) { + if(Math.abs(mp4Sample.duration - 1024) > 10) { // not expected to happen ... - logger.log(`invalid AAC sample duration at PTS:${aacSample.pts}:${mp4Sample.duration}`); - mp4Sample.duration = 0; + logger.log(`invalid AAC sample duration at PTS ${Math.round(pts/90)},should be 1024,found :${Math.round(mp4Sample.duration)}`); } + mp4Sample.duration = 1024; + dtsnorm = 1024 * pes2mp4ScaleFactor + lastDTS; } else { var nextAacPts = this.nextAacPts,delta; ptsnorm = this._PTSNormalize(pts, nextAacPts); diff --git a/dashboard-ui/bower_components/iron-meta/.bower.json b/dashboard-ui/bower_components/iron-meta/.bower.json index f4bfef4a7c..e1304d174b 100644 --- a/dashboard-ui/bower_components/iron-meta/.bower.json +++ b/dashboard-ui/bower_components/iron-meta/.bower.json @@ -26,14 +26,14 @@ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" }, "main": "iron-meta.html", - "homepage": "https://github.com/polymerelements/iron-meta", + "homepage": "https://github.com/PolymerElements/iron-meta", "_release": "1.1.1", "_resolution": { "type": "version", "tag": "v1.1.1", "commit": "e171ee234b482219c9514e6f9551df48ef48bd9f" }, - "_source": "git://github.com/polymerelements/iron-meta.git", + "_source": "git://github.com/PolymerElements/iron-meta.git", "_target": "^1.0.0", - "_originalSource": "polymerelements/iron-meta" + "_originalSource": "PolymerElements/iron-meta" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json index 483a2b608c..d875e3cb00 100644 --- a/dashboard-ui/bower_components/iron-selector/.bower.json +++ b/dashboard-ui/bower_components/iron-selector/.bower.json @@ -36,7 +36,7 @@ "tag": "v1.2.0", "commit": "17a94bd1555d3321f4ecefd472f0c470d48e9e94" }, - "_source": "git://github.com/PolymerElements/iron-selector.git", + "_source": "git://github.com/polymerelements/iron-selector.git", "_target": "^1.0.0", - "_originalSource": "PolymerElements/iron-selector" + "_originalSource": "polymerelements/iron-selector" } \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-collapse-item/.bower.json b/dashboard-ui/bower_components/paper-collapse-item/.bower.json deleted file mode 100644 index 4e6bf5946f..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/.bower.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "name": "paper-collapse-item", - "version": "1.0.6", - "authors": [ - "collaborne" - ], - "description": "A Material Design item with header and collapsible content (Polymer 1.x)", - "main": "paper-collapse-item.html", - "keywords": [ - "web-components", - "polymer", - "paper", - "material design", - "lists", - "item" - ], - "license": "Apache 2", - "homepage": "https://github.com/collaborne/paper-collapse-item", - "ignore": [ - "**/.*" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", - "iron-icon": "PolymerElements/iron-icon#^1.0.0", - "iron-icons": "PolymerElements/iron-icons#^1.0.0", - "iron-collapse": "PolymerElements/iron-collapse#^1.0.0", - "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", - "paper-item": "PolymerElements/paper-item#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.0" - }, - "devDependencies": { - "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", - "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" - }, - "_release": "1.0.6", - "_resolution": { - "type": "version", - "tag": "1.0.6", - "commit": "1f809936cb13108bffd49ff2280baf8690f38ab1" - }, - "_source": "git://github.com/Collaborne/paper-collapse-item.git", - "_target": "~1.0.5", - "_originalSource": "paper-collapse-item" -} \ No newline at end of file diff --git a/dashboard-ui/bower_components/paper-collapse-item/LICENSE b/dashboard-ui/bower_components/paper-collapse-item/LICENSE deleted file mode 100644 index 8f71f43fee..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/LICENSE +++ /dev/null @@ -1,202 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - diff --git a/dashboard-ui/bower_components/paper-collapse-item/bower.json b/dashboard-ui/bower_components/paper-collapse-item/bower.json deleted file mode 100644 index 1bed7d4787..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/bower.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "paper-collapse-item", - "version": "1.0.6", - "authors": [ - "collaborne" - ], - "description": "A Material Design item with header and collapsible content (Polymer 1.x)", - "main": "paper-collapse-item.html", - "keywords": [ - "web-components", - "polymer", - "paper", - "material design", - "lists", - "item" - ], - "license": "Apache 2", - "homepage": "https://github.com/collaborne/paper-collapse-item", - "ignore": [ - "**/.*" - ], - "dependencies": { - "polymer": "Polymer/polymer#^1.0.0", - "iron-icon": "PolymerElements/iron-icon#^1.0.0", - "iron-icons": "PolymerElements/iron-icons#^1.0.0", - "iron-collapse": "PolymerElements/iron-collapse#^1.0.0", - "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0", - "paper-item": "PolymerElements/paper-item#^1.0.0", - "paper-styles": "PolymerElements/paper-styles#^1.0.0" - }, - "devDependencies": { - "test-fixture": "PolymerElements/test-fixture#^1.0.0", - "web-component-tester": "*", - "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0" - } -} diff --git a/dashboard-ui/bower_components/paper-collapse-item/demo/index.html b/dashboard-ui/bower_components/paper-collapse-item/demo/index.html deleted file mode 100644 index cb814cf8b2..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/demo/index.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - Lots of very interesting content. - - - Lots of very interesting content. - - - Lots of very interesting content. - - - diff --git a/dashboard-ui/bower_components/paper-collapse-item/doc/screenshot.png b/dashboard-ui/bower_components/paper-collapse-item/doc/screenshot.png deleted file mode 100644 index f7321c4e4c..0000000000 Binary files a/dashboard-ui/bower_components/paper-collapse-item/doc/screenshot.png and /dev/null differ diff --git a/dashboard-ui/bower_components/paper-collapse-item/paper-collapse-item.html b/dashboard-ui/bower_components/paper-collapse-item/paper-collapse-item.html deleted file mode 100644 index acca09faf9..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/paper-collapse-item.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/dashboard-ui/bower_components/paper-collapse-item/test/index.html b/dashboard-ui/bower_components/paper-collapse-item/test/index.html deleted file mode 100644 index 2c4f92e458..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/test/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - Tests - - - - - - diff --git a/dashboard-ui/bower_components/paper-collapse-item/test/paper-collapse-item.html b/dashboard-ui/bower_components/paper-collapse-item/test/paper-collapse-item.html deleted file mode 100644 index 3bcfc3d390..0000000000 --- a/dashboard-ui/bower_components/paper-collapse-item/test/paper-collapse-item.html +++ /dev/null @@ -1,50 +0,0 @@ - - - - paper-collapse-item - - - - - - - - - - - - - - - - - - - - diff --git a/dashboard-ui/bower_components/prism/.bower.json b/dashboard-ui/bower_components/prism/.bower.json index d3b34882e4..46d1d7fa99 100644 --- a/dashboard-ui/bower_components/prism/.bower.json +++ b/dashboard-ui/bower_components/prism/.bower.json @@ -26,12 +26,12 @@ "utopia.js", "code.js" ], - "version": "1.3.0", - "_release": "1.3.0", + "version": "1.4.1", + "_release": "1.4.1", "_resolution": { "type": "version", - "tag": "v1.3.0", - "commit": "ad97b23be583f01e84ec5f17197d2c2b109ca7d0" + "tag": "v1.4.1", + "commit": "97b0eb5a1a74760c5c0f37f82116679b33876634" }, "_source": "git://github.com/LeaVerou/prism.git", "_target": "*", diff --git a/dashboard-ui/bower_components/prism/CHANGELOG.md b/dashboard-ui/bower_components/prism/CHANGELOG.md index 1232b8a601..92e2d958bc 100644 --- a/dashboard-ui/bower_components/prism/CHANGELOG.md +++ b/dashboard-ui/bower_components/prism/CHANGELOG.md @@ -1,5 +1,50 @@ # Prism Changelog +## 1.4.1 (2016-02-03) + +### Other changes + +* Fix DFS bug in Prism core [[`b86c727`](https://github.com/PrismJS/prism/commit/b86c727)] + +## 1.4.0 (2016-02-03) + +### New components + +* __Solarized Light__ ([#855](https://github.com/PrismJS/prism/pull/855)) [[`70846ba`](https://github.com/PrismJS/prism/commit/70846ba)] +* __JSON__ ([#370](https://github.com/PrismJS/prism/pull/370)) [[`ad2fcd0`](https://github.com/PrismJS/prism/commit/ad2fcd0)] + +### Updated components + +* __Show Language__: + * Remove data-language attribute ([#840](https://github.com/PrismJS/prism/pull/840)) [[`eb9a83c`](https://github.com/PrismJS/prism/commit/eb9a83c)] + * Allow custom label without a language mapping ([#837](https://github.com/PrismJS/prism/pull/837)) [[`7e74aef`](https://github.com/PrismJS/prism/commit/7e74aef)] +* __JSX__: + * Better Nesting in JSX attributes ([#842](https://github.com/PrismJS/prism/pull/842)) [[`971dda7`](https://github.com/PrismJS/prism/commit/971dda7)] +* __File Highlight__: + * Defer File Highlight until the full DOM has loaded. ([#844](https://github.com/PrismJS/prism/pull/844)) [[`6f995ef`](https://github.com/PrismJS/prism/commit/6f995ef)] +* __Coy Theme__: + * Fix coy theme shadows ([#865](https://github.com/PrismJS/prism/pull/865)) [[`58d2337`](https://github.com/PrismJS/prism/commit/58d2337)] +* __Show Invisibles__: + * Ensure show-invisibles compat with autoloader ([#874](https://github.com/PrismJS/prism/pull/874)) [[`c3cfb1f`](https://github.com/PrismJS/prism/commit/c3cfb1f)] + * Add support for the space character for the show-invisibles plugin ([#876](https://github.com/PrismJS/prism/pull/876)) [[`05442d3`](https://github.com/PrismJS/prism/commit/05442d3)] + +### New plugins + +* __Command Line__ ([#831](https://github.com/PrismJS/prism/pull/831)) [[`8378906`](https://github.com/PrismJS/prism/commit/8378906)] + +### Other changes + +* Use document.currentScript instead of document.getElementsByTagName() [[`fa98743`](https://github.com/PrismJS/prism/commit/fa98743)] +* Add prefix for Firefox selection and move prefixed rule first [[`6d54717`](https://github.com/PrismJS/prism/commit/6d54717)] +* No background for `` in `
` [[`8c310bc`](https://github.com/PrismJS/prism/commit/8c310bc)]
+* Fixing to initial copyright year [[`69cbf7a`](https://github.com/PrismJS/prism/commit/69cbf7a)]
+* Simplify the “lang” regex [[`417f54a`](https://github.com/PrismJS/prism/commit/417f54a)]
+* Fix broken heading links [[`a7f9e62`](https://github.com/PrismJS/prism/commit/a7f9e62)]
+* Prevent infinite recursion in DFS [[`02894e1`](https://github.com/PrismJS/prism/commit/02894e1)]
+* Fix incorrect page title [[`544b56f`](https://github.com/PrismJS/prism/commit/544b56f)]
+* Link scss to webplatform wiki [[`08d979a`](https://github.com/PrismJS/prism/commit/08d979a)]
+* Revert white-space to normal when code is inline instead of in a pre [[`1a971b5`](https://github.com/PrismJS/prism/commit/1a971b5)]
+
 ## 1.3.0 (2015-10-26)
 
 ### New components
diff --git a/dashboard-ui/bower_components/prism/LICENSE b/dashboard-ui/bower_components/prism/LICENSE
index eab2c3117e..528949f42d 100644
--- a/dashboard-ui/bower_components/prism/LICENSE
+++ b/dashboard-ui/bower_components/prism/LICENSE
@@ -1,6 +1,6 @@
 MIT LICENSE
 
-Copyright (c) 2012-2013 Lea Verou
+Copyright (c) 2012 Lea Verou
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/dashboard-ui/bower_components/prism/components.js b/dashboard-ui/bower_components/prism/components.js
index 9d6e24d37d..b422f92273 100644
--- a/dashboard-ui/bower_components/prism/components.js
+++ b/dashboard-ui/bower_components/prism/components.js
@@ -29,6 +29,10 @@ var components = {
 		"prism-coy": {
 			"title": "Coy",
 			"owner": "tshedor"
+		},
+		"prism-solarizedlight": {
+			"title": "Solarized Light",
+			"owner": "hectormatos2011 "
 		}
 	},
 	"languages": {
@@ -258,6 +262,10 @@ var components = {
 			"require": "clike",
 			"owner": "sherblot"
 		},
+		"json": {
+			"title": "JSON",
+			"owner": "CupOfTea696"
+		},
 		"julia": {
 			"title": "Julia",
 			"owner": "cdagnino"
@@ -598,6 +606,10 @@ var components = {
 			"title": "Keep Markup",
 			"owner": "Golmote",
 			"noCSS": true
+		},
+		"command-line": {
+			"title": "Command Line",
+			"owner": "chriswells0"
 		}
 	}
 };
diff --git a/dashboard-ui/bower_components/prism/components/prism-core.js b/dashboard-ui/bower_components/prism/components/prism-core.js
index aef621f40b..4a55caad7a 100644
--- a/dashboard-ui/bower_components/prism/components/prism-core.js
+++ b/dashboard-ui/bower_components/prism/components/prism-core.js
@@ -15,7 +15,8 @@ var _self = (typeof window !== 'undefined')
 var Prism = (function(){
 
 // Private helper vars
-var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i;
+var lang = /\blang(?:uage)?-(\w+)\b/i;
+var uniqueId = 0;
 
 var _ = _self.Prism = {
 	util: {
@@ -33,6 +34,13 @@ var _ = _self.Prism = {
 			return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
 		},
 
+		objId: function (obj) {
+			if (!obj['__id']) {
+				Object.defineProperty(obj, '__id', { value: ++uniqueId });
+			}
+			return obj['__id'];
+		},
+
 		// Deep clone a language definition (e.g. to extend it)
 		clone: function (o) {
 			var type = _.util.type(o);
@@ -125,16 +133,19 @@ var _ = _self.Prism = {
 		},
 
 		// Traverse a language definition with Depth First Search
-		DFS: function(o, callback, type) {
+		DFS: function(o, callback, type, visited) {
+			visited = visited || {};
 			for (var i in o) {
 				if (o.hasOwnProperty(i)) {
 					callback.call(o, i, o[i], type || i);
 
-					if (_.util.type(o[i]) === 'Object') {
-						_.languages.DFS(o[i], callback);
+					if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
+						visited[_.util.objId(o[i])] = true;
+						_.languages.DFS(o[i], callback, null, visited);
 					}
-					else if (_.util.type(o[i]) === 'Array') {
-						_.languages.DFS(o[i], callback, i);
+					else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
+						visited[_.util.objId(o[i])] = true;
+						_.languages.DFS(o[i], callback, i, visited);
 					}
 				}
 			}
@@ -407,10 +418,8 @@ if (!_self.document) {
 	return _self.Prism;
 }
 
-// Get current script and highlight
-var script = document.getElementsByTagName('script');
-
-script = script[script.length - 1];
+//Get current script and highlight
+var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
 
 if (script) {
 	_.filename = script.src;
diff --git a/dashboard-ui/bower_components/prism/components/prism-core.min.js b/dashboard-ui/bower_components/prism/components/prism-core.min.js
index 457acfa00f..85faffc80b 100644
--- a/dashboard-ui/bower_components/prism/components/prism-core.min.js
+++ b/dashboard-ui/bower_components/prism/components/prism-core.min.js
@@ -1 +1 @@
-var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=_self.Prism={util:{encode:function(e){return e instanceof n?new n(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(d instanceof a)){u.lastIndex=0;var m=u.exec(d);if(m){c&&(f=m[1].length);var y=m.index-1+f,m=m[0].slice(f),v=m.length,k=y+v,b=d.slice(0,y+1),w=d.slice(k+1),P=[p,1];b&&P.push(b);var A=new a(i,g?t.tokenize(m,g):m,h);P.push(A),w&&P.push(w),Array.prototype.splice.apply(r,P)}}}}}return r},hooks:{all:{},add:function(e,n){var a=t.hooks.all;a[e]=a[e]||[],a[e].push(n)},run:function(e,n){var a=t.hooks.all[e];if(a&&a.length)for(var r,l=0;r=a[l++];)r(n)}}},n=t.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(n.stringify=function(e,a,r){if("string"==typeof e)return e;if("Array"===t.util.type(e))return e.map(function(t){return n.stringify(t,a,e)}).join("");var l={type:e.type,content:n.stringify(e.content,a,r),tag:"span",classes:["token",e.type],attributes:{},language:a,parent:r};if("comment"==l.type&&(l.attributes.spellcheck="true"),e.alias){var i="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(l.classes,i)}t.hooks.run("wrap",l);var o="";for(var s in l.attributes)o+=(o?" ":"")+s+'="'+(l.attributes[s]||"")+'"';return"<"+l.tag+' class="'+l.classes.join(" ")+'" '+o+">"+l.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var n=JSON.parse(e.data),a=n.language,r=n.code,l=n.immediateClose;_self.postMessage(t.highlight(r,t.languages[a],a)),l&&_self.close()},!1),_self.Prism):_self.Prism;var a=document.getElementsByTagName("script");return a=a[a.length-1],a&&(t.filename=a.src,document.addEventListener&&!a.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
\ No newline at end of file
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(\w+)\b/i,t=0,n=_self.Prism={util:{encode:function(e){return e instanceof a?new a(e.type,n.util.encode(e.content),e.alias):"Array"===n.util.type(e)?e.map(n.util.encode):e.replace(/&/g,"&").replace(/e.length)break e;if(!(d instanceof a)){u.lastIndex=0;var m=u.exec(d);if(m){g&&(f=m[1].length);var y=m.index-1+f,m=m[0].slice(f),v=m.length,b=y+v,k=d.slice(0,y+1),w=d.slice(b+1),_=[p,1];k&&_.push(k);var P=new a(l,c?n.tokenize(m,c):m,h);_.push(P),w&&_.push(w),Array.prototype.splice.apply(r,_)}}}}}return r},hooks:{all:{},add:function(e,t){var a=n.hooks.all;a[e]=a[e]||[],a[e].push(t)},run:function(e,t){var a=n.hooks.all[e];if(a&&a.length)for(var r,i=0;r=a[i++];)r(t)}}},a=n.Token=function(e,t,n){this.type=e,this.content=t,this.alias=n};if(a.stringify=function(e,t,r){if("string"==typeof e)return e;if("Array"===n.util.type(e))return e.map(function(n){return a.stringify(n,t,e)}).join("");var i={type:e.type,content:a.stringify(e.content,t,r),tag:"span",classes:["token",e.type],attributes:{},language:t,parent:r};if("comment"==i.type&&(i.attributes.spellcheck="true"),e.alias){var l="Array"===n.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(i.classes,l)}n.hooks.run("wrap",i);var o="";for(var s in i.attributes)o+=(o?" ":"")+s+'="'+(i.attributes[s]||"")+'"';return"<"+i.tag+' class="'+i.classes.join(" ")+'" '+o+">"+i.content+""},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var t=JSON.parse(e.data),a=t.language,r=t.code,i=t.immediateClose;_self.postMessage(n.highlight(r,n.languages[a],a)),i&&_self.close()},!1),_self.Prism):_self.Prism;var r=document.currentScript||[].slice.call(document.getElementsByTagName("script")).pop();return r&&(n.filename=r.src,document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",n.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/components/prism-json.js b/dashboard-ui/bower_components/prism/components/prism-json.js
new file mode 100644
index 0000000000..c7634b18ec
--- /dev/null
+++ b/dashboard-ui/bower_components/prism/components/prism-json.js
@@ -0,0 +1,11 @@
+Prism.languages.json = {
+    'property': /".*?"(?=\s*:)/ig,
+    'string': /"(?!:)(\\?[^"])*?"(?!:)/g,
+    'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,
+    'punctuation': /[{}[\]);,]/g,
+    'operator': /:/g,
+    'boolean': /\b(true|false)\b/gi,
+    'null': /\bnull\b/gi,
+};
+
+Prism.languages.jsonp = Prism.languages.json;
diff --git a/dashboard-ui/bower_components/prism/components/prism-json.min.js b/dashboard-ui/bower_components/prism/components/prism-json.min.js
new file mode 100644
index 0000000000..adf940323e
--- /dev/null
+++ b/dashboard-ui/bower_components/prism/components/prism-json.min.js
@@ -0,0 +1 @@
+Prism.languages.json={property:/".*?"(?=\s*:)/gi,string:/"(?!:)(\\?[^"])*?"(?!:)/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,punctuation:/[{}[\]);,]/g,operator:/:/g,"boolean":/\b(true|false)\b/gi,"null":/\bnull\b/gi},Prism.languages.jsonp=Prism.languages.json;
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/components/prism-jsx.js b/dashboard-ui/bower_components/prism/components/prism-jsx.js
index 07a04af44e..5f106d5047 100644
--- a/dashboard-ui/bower_components/prism/components/prism-jsx.js
+++ b/dashboard-ui/bower_components/prism/components/prism-jsx.js
@@ -3,20 +3,23 @@
 var javascript = Prism.util.clone(Prism.languages.javascript);
 
 Prism.languages.jsx = Prism.languages.extend('markup', javascript);
-Prism.languages.jsx.tag.pattern= /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i;
+Prism.languages.jsx.tag.pattern= /<\/?[\w\.:-]+\s*(?:\s+[\w\.:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i;
 
 Prism.languages.jsx.tag.inside['attr-value'].pattern = /=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i;
 
+var jsxExpression = Prism.util.clone(Prism.languages.jsx);
+
+delete jsxExpression.punctuation
+
+jsxExpression = Prism.languages.insertBefore('jsx', 'operator', {
+  'punctuation': /=(?={)|[{}[\];(),.:]/
+}, { jsx: jsxExpression });
+
 Prism.languages.insertBefore('inside', 'attr-value',{
 	'script': {
 		// Allow for one level of nesting
 		pattern: /=(\{(?:\{[^}]*\}|[^}])+\})/i,
-		inside: {
-			'function' : Prism.languages.javascript.function,
-			'punctuation': /[={}[\];(),.:]/,
-			'keyword':  Prism.languages.javascript.keyword,
-			'boolean': Prism.languages.javascript.boolean
-		},
+		inside: jsxExpression,
 		'alias': 'language-javascript'
 	}
 }, Prism.languages.jsx.tag);
diff --git a/dashboard-ui/bower_components/prism/components/prism-jsx.min.js b/dashboard-ui/bower_components/prism/components/prism-jsx.min.js
index 7ca3d36576..8c14048313 100644
--- a/dashboard-ui/bower_components/prism/components/prism-jsx.min.js
+++ b/dashboard-ui/bower_components/prism/components/prism-jsx.min.js
@@ -1 +1 @@
-!function(a){var s=a.util.clone(a.languages.javascript);a.languages.jsx=a.languages.extend("markup",s),a.languages.jsx.tag.pattern=/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i,a.languages.jsx.tag.inside["attr-value"].pattern=/=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i,a.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{[^}]*\}|[^}])+\})/i,inside:{"function":a.languages.javascript.function,punctuation:/[={}[\];(),.:]/,keyword:a.languages.javascript.keyword,"boolean":a.languages.javascript.boolean},alias:"language-javascript"}},a.languages.jsx.tag)}(Prism);
\ No newline at end of file
+!function(a){var e=a.util.clone(a.languages.javascript);a.languages.jsx=a.languages.extend("markup",e),a.languages.jsx.tag.pattern=/<\/?[\w\.:-]+\s*(?:\s+[\w\.:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+|(\{[\w\W]*?\})))?\s*)*\/?>/i,a.languages.jsx.tag.inside["attr-value"].pattern=/=[^\{](?:('|")[\w\W]*?(\1)|[^\s>]+)/i;var s=a.util.clone(a.languages.jsx);delete s.punctuation,s=a.languages.insertBefore("jsx","operator",{punctuation:/=(?={)|[{}[\];(),.:]/},{jsx:s}),a.languages.insertBefore("inside","attr-value",{script:{pattern:/=(\{(?:\{[^}]*\}|[^}])+\})/i,inside:s,alias:"language-javascript"}},a.languages.jsx.tag)}(Prism);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/package.json b/dashboard-ui/bower_components/prism/package.json
index 7246784b20..3bc9f59122 100644
--- a/dashboard-ui/bower_components/prism/package.json
+++ b/dashboard-ui/bower_components/prism/package.json
@@ -1,6 +1,6 @@
 {
   "name": "prismjs",
-  "version": "1.3.0",
+  "version": "1.4.1",
   "description": "Lightweight, robust, elegant syntax highlighting. A spin-off project from Dabblet.",
   "main": "prism.js",
   "scripts": {
diff --git a/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.css b/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.css
new file mode 100644
index 0000000000..153a87076a
--- /dev/null
+++ b/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.css
@@ -0,0 +1,33 @@
+.command-line-prompt {
+	border-right: 1px solid #999;
+	display: block;
+	float: left;
+	font-size: 100%;
+	letter-spacing: -1px;
+	margin-right: 1em;
+	pointer-events: none;
+
+	-webkit-user-select: none;
+	-moz-user-select: none;
+	-ms-user-select: none;
+	user-select: none;
+}
+
+.command-line-prompt > span:before {
+	color: #999;
+	content: ' ';
+	display: block;
+	padding-right: 0.8em;
+}
+
+.command-line-prompt > span[data-user]:before {
+	content: "[" attr(data-user) "@" attr(data-host) "] $";
+}
+
+.command-line-prompt > span[data-user="root"]:before {
+	content: "[" attr(data-user) "@" attr(data-host) "] #";
+}
+
+.command-line-prompt > span[data-prompt]:before {
+	content: attr(data-prompt);
+}
diff --git a/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.js b/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.js
new file mode 100644
index 0000000000..979906111b
--- /dev/null
+++ b/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.js
@@ -0,0 +1,77 @@
+(function() {
+
+if (typeof self === 'undefined' || !self.Prism || !self.document) {
+	return;
+}
+
+Prism.hooks.add('complete', function (env) {
+	if (!env.code) {
+		return;
+	}
+
+	// Works only for  wrapped inside 
 (not inline).
+	var pre = env.element.parentNode;
+	var clsReg = /\s*\bcommand-line\b\s*/;
+	if (
+		!pre || !/pre/i.test(pre.nodeName) ||
+			// Abort only if neither the 
 nor the  have the class
+		(!clsReg.test(pre.className) && !clsReg.test(env.element.className))
+	) {
+		return;
+	}
+
+	if (env.element.querySelector('.command-line-prompt')) {
+		// Abort if prompt already exists.
+		return;
+	}
+
+	if (clsReg.test(env.element.className)) {
+		// Remove the class "command-line" from the 
+		env.element.className = env.element.className.replace(clsReg, '');
+	}
+	if (!clsReg.test(pre.className)) {
+		// Add the class "command-line" to the 
+		pre.className += ' command-line';
+	}
+
+	// Create the "rows" that will become the command-line prompts. -- cwells
+	var lines = new Array(1 + env.code.split('\n').length);
+	var promptText = pre.getAttribute('data-prompt') || '';
+	if (promptText !== '') {
+		lines = lines.join('');
+	} else {
+		var user = pre.getAttribute('data-user') || 'user';
+		var host = pre.getAttribute('data-host') || 'localhost';
+		lines = lines.join('');
+	}
+
+	// Create the wrapper element. -- cwells
+	var prompt = document.createElement('span');
+	prompt.className = 'command-line-prompt';
+	prompt.innerHTML = lines;
+
+	// Mark the output lines so they can be styled differently (no prompt). -- cwells
+	var outputSections = pre.getAttribute('data-output') || '';
+	outputSections = outputSections.split(',');
+	for (var i = 0; i < outputSections.length; i++) {
+		var outputRange = outputSections[i].split('-');
+		var outputStart = parseInt(outputRange[0]);
+		var outputEnd = outputStart; // Default: end at the first line when it's not an actual range. -- cwells
+		if (outputRange.length === 2) {
+			outputEnd = parseInt(outputRange[1]);
+		}
+
+		if (!isNaN(outputStart) && !isNaN(outputEnd)) {
+			for (var j = outputStart; j <= outputEnd && j <= prompt.children.length; j++) {
+				var node = prompt.children[j - 1];
+				node.removeAttribute('data-user');
+				node.removeAttribute('data-host');
+				node.removeAttribute('data-prompt');
+			}
+		}
+	}
+
+	env.element.innerHTML = prompt.outerHTML + env.element.innerHTML;
+});
+
+}());
diff --git a/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.min.js b/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.min.js
new file mode 100644
index 0000000000..23c6bea8e0
--- /dev/null
+++ b/dashboard-ui/bower_components/prism/plugins/command-line/prism-command-line.min.js
@@ -0,0 +1 @@
+!function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,a=/\s*\bcommand-line\b\s*/;if(t&&/pre/i.test(t.nodeName)&&(a.test(t.className)||a.test(e.element.className))&&!e.element.querySelector(".command-line-prompt")){a.test(e.element.className)&&(e.element.className=e.element.className.replace(a,"")),a.test(t.className)||(t.className+=" command-line");var n=new Array(1+e.code.split("\n").length),s=t.getAttribute("data-prompt")||"";if(""!==s)n=n.join('');else{var r=t.getAttribute("data-user")||"user",l=t.getAttribute("data-host")||"localhost";n=n.join('')}var m=document.createElement("span");m.className="command-line-prompt",m.innerHTML=n;var o=t.getAttribute("data-output")||"";o=o.split(",");for(var i=0;i=u&&u<=m.children.length;u++){var N=m.children[u-1];N.removeAttribute("data-user"),N.removeAttribute("data-host"),N.removeAttribute("data-prompt")}}e.element.innerHTML=m.outerHTML+e.element.innerHTML}}})}();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.js b/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.js
index 6a2a540635..1108f2c951 100644
--- a/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.js
+++ b/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.js
@@ -71,6 +71,6 @@
 
 	};
 
-	self.Prism.fileHighlight();
+	document.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);
 
 })();
diff --git a/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.min.js b/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.min.js
index fbf04b93c4..10231bfc86 100644
--- a/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.min.js
+++ b/dashboard-ui/bower_components/prism/plugins/file-highlight/prism-file-highlight.min.js
@@ -1 +1 @@
-!function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var e={js:"javascript",html:"markup",svg:"markup",xml:"markup",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(t){for(var r,a=t.getAttribute("data-src"),s=t,n=/\blang(?:uage)?-(?!\*)(\w+)\b/i;s&&!n.test(s.className);)s=s.parentNode;if(s&&(r=(t.className.match(n)||[,""])[1]),!r){var o=(a.match(/\.(\w+)$/)||[,""])[1];r=e[o]||o}var l=document.createElement("code");l.className="language-"+r,t.textContent="",l.textContent="Loading…",t.appendChild(l);var i=new XMLHttpRequest;i.open("GET",a,!0),i.onreadystatechange=function(){4==i.readyState&&(i.status<400&&i.responseText?(l.textContent=i.responseText,Prism.highlightElement(l)):l.textContent=i.status>=400?"✖ Error "+i.status+" while fetching file: "+i.statusText:"✖ Error: File does not exist or is empty")},i.send(null)})},self.Prism.fileHighlight())}();
\ No newline at end of file
+!function(){"undefined"!=typeof self&&self.Prism&&self.document&&document.querySelector&&(self.Prism.fileHighlight=function(){var e={js:"javascript",html:"markup",svg:"markup",xml:"markup",py:"python",rb:"ruby",ps1:"powershell",psm1:"powershell"};Array.prototype.forEach&&Array.prototype.slice.call(document.querySelectorAll("pre[data-src]")).forEach(function(t){for(var r,a=t.getAttribute("data-src"),n=t,s=/\blang(?:uage)?-(?!\*)(\w+)\b/i;n&&!s.test(n.className);)n=n.parentNode;if(n&&(r=(t.className.match(s)||[,""])[1]),!r){var o=(a.match(/\.(\w+)$/)||[,""])[1];r=e[o]||o}var l=document.createElement("code");l.className="language-"+r,t.textContent="",l.textContent="Loading…",t.appendChild(l);var i=new XMLHttpRequest;i.open("GET",a,!0),i.onreadystatechange=function(){4==i.readyState&&(i.status<400&&i.responseText?(l.textContent=i.responseText,Prism.highlightElement(l)):l.textContent=i.status>=400?"✖ Error "+i.status+" while fetching file: "+i.statusText:"✖ Error: File does not exist or is empty")},i.send(null)})},document.addEventListener("DOMContentLoaded",self.Prism.fileHighlight))}();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.css b/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.css
index bea233840a..9af783d502 100644
--- a/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.css
+++ b/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.css
@@ -1,7 +1,16 @@
+.token.tab:not(:empty),
+.token.cr,
+.token.lf,
+.token.space {
+	position: relative;
+}
+
 .token.tab:not(:empty):before,
 .token.cr:before,
-.token.lf:before {
+.token.lf:before,
+.token.space:before {
 	color: hsl(24, 20%, 85%);
+	position: absolute;
 }
 
 .token.tab:not(:empty):before {
@@ -18,3 +27,7 @@
 .token.lf:before {
     content: '\240A';
 }
+
+.token.space:before {
+	content: '\00B7';
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.js b/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.js
index 5d9692b4df..72833fa949 100644
--- a/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.js
+++ b/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.js
@@ -7,13 +7,13 @@ if (
 	return;
 }
 
-for (var language in Prism.languages) {
-	var tokens = Prism.languages[language];
-	
-    tokens.tab = /\t/g;
-    tokens.crlf = /\r\n/g;
-    tokens.lf = /\n/g;
-	tokens.cr = /\r/g;
-}
+Prism.hooks.add('before-highlight', function(env) {
+	var tokens = env.grammar;
 
+	tokens.tab = /\t/g;
+	tokens.crlf = /\r\n/g;
+	tokens.lf = /\n/g;
+	tokens.cr = /\r/g;
+	tokens.space = / /g;
+});
 })();
diff --git a/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.min.js b/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.min.js
index 4575758f50..a8562ec977 100644
--- a/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.min.js
+++ b/dashboard-ui/bower_components/prism/plugins/show-invisibles/prism-show-invisibles.min.js
@@ -1 +1 @@
-!function(){if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism))for(var f in Prism.languages){var n=Prism.languages[f];n.tab=/\t/g,n.crlf=/\r\n/g,n.lf=/\n/g,n.cr=/\r/g}}();
\ No newline at end of file
+!function(){"undefined"!=typeof self&&!self.Prism||"undefined"!=typeof global&&!global.Prism||Prism.hooks.add("before-highlight",function(e){var f=e.grammar;f.tab=/\t/g,f.crlf=/\r\n/g,f.lf=/\n/g,f.cr=/\r/g,f.space=/ /g})}();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.css b/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.css
index 9fddc2b2c4..646daaf93b 100644
--- a/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.css
+++ b/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.css
@@ -2,7 +2,7 @@ div.prism-show-language {
 	position: relative;
 }
 
-div.prism-show-language > div.prism-show-language-label[data-language] {
+div.prism-show-language > div.prism-show-language-label {
 	color: black;
 	background-color: #CFCFCF;
 	display: inline-block;
diff --git a/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.js b/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.js
index 981384d6e1..e9248a3d82 100644
--- a/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.js
+++ b/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.js
@@ -5,14 +5,13 @@ if (typeof self === 'undefined' || !self.Prism || !self.document) {
 }
 
 // The languages map is built automatically with gulp
-var Languages = /*languages_placeholder[*/{"css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","asciidoc":"AsciiDoc","aspnet":"ASP.NET (C#)","autoit":"AutoIt","autohotkey":"AutoHotkey","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","fsharp":"F#","glsl":"GLSL","http":"HTTP","inform7":"Inform 7","latex":"LaTeX","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","jsx":"React JSX","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vhdl":"VHDL","vim":"vim","wiki":"Wiki markup","yaml":"YAML"}/*]*/;
+var Languages = /*languages_placeholder[*/{"css":"CSS","clike":"C-like","javascript":"JavaScript","abap":"ABAP","actionscript":"ActionScript","apacheconf":"Apache Configuration","apl":"APL","applescript":"AppleScript","asciidoc":"AsciiDoc","aspnet":"ASP.NET (C#)","autoit":"AutoIt","autohotkey":"AutoHotkey","basic":"BASIC","csharp":"C#","cpp":"C++","coffeescript":"CoffeeScript","css-extras":"CSS Extras","fsharp":"F#","glsl":"GLSL","http":"HTTP","inform7":"Inform 7","json":"JSON","latex":"LaTeX","lolcode":"LOLCODE","matlab":"MATLAB","mel":"MEL","nasm":"NASM","nginx":"nginx","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","parigp":"PARI/GP","php":"PHP","php-extras":"PHP Extras","powershell":"PowerShell","jsx":"React JSX","rest":"reST (reStructuredText)","sas":"SAS","sass":"Sass (Sass)","scss":"Sass (Scss)","sql":"SQL","typescript":"TypeScript","vhdl":"VHDL","vim":"vim","wiki":"Wiki markup","yaml":"YAML"}/*]*/;
 Prism.hooks.add('before-highlight', function(env) {
 	var pre = env.element.parentNode;
 	if (!pre || !/pre/i.test(pre.nodeName)) {
 		return;
 	}
-	var language = Languages[env.language] || (env.language.substring(0, 1).toUpperCase() + env.language.substring(1));
-	pre.setAttribute('data-language', language);
+	var language = pre.getAttribute('data-language') || Languages[env.language] || (env.language.substring(0, 1).toUpperCase() + env.language.substring(1));
 
 	/* check if the divs already exist */
 	var sib = pre.previousSibling;
@@ -21,23 +20,19 @@ Prism.hooks.add('before-highlight', function(env) {
 		sib.firstChild &&
 		/\s*\bprism-show-language-label\b\s*/.test(sib.firstChild.className)) {
 		div2 = sib.firstChild;
-		if (div2.getAttribute('data-language') !== language) {
-			div2.setAttribute('data-language', language);
-			div2.innerHTML = language;
-		}
 	} else {
 		div = document.createElement('div');
 		div2 = document.createElement('div');
 
 		div2.className = 'prism-show-language-label';
-		div2.setAttribute('data-language', language);
-		div2.innerHTML = language;
 
 		div.className = 'prism-show-language';
 		div.appendChild(div2);
 
 		pre.parentNode.insertBefore(div, pre);
 	}
+	
+	div2.innerHTML = language;
 });
 
 })();
diff --git a/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.min.js b/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.min.js
index 7d742c509e..7bb5204702 100644
--- a/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.min.js
+++ b/dashboard-ui/bower_components/prism/plugins/show-language/prism-show-language.min.js
@@ -1 +1 @@
-!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e={css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",asciidoc:"AsciiDoc",aspnet:"ASP.NET (C#)",autoit:"AutoIt",autohotkey:"AutoHotkey",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",fsharp:"F#",glsl:"GLSL",http:"HTTP",inform7:"Inform 7",latex:"LaTeX",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",parigp:"PARI/GP",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",jsx:"React JSX",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vhdl:"VHDL",vim:"vim",wiki:"Wiki markup",yaml:"YAML"};Prism.hooks.add("before-highlight",function(a){var s=a.element.parentNode;if(s&&/pre/i.test(s.nodeName)){var t=e[a.language]||a.language.substring(0,1).toUpperCase()+a.language.substring(1);s.setAttribute("data-language",t);var i,r,l=s.previousSibling;l&&/\s*\bprism-show-language\b\s*/.test(l.className)&&l.firstChild&&/\s*\bprism-show-language-label\b\s*/.test(l.firstChild.className)?(r=l.firstChild,r.getAttribute("data-language")!==t&&(r.setAttribute("data-language",t),r.innerHTML=t)):(i=document.createElement("div"),r=document.createElement("div"),r.className="prism-show-language-label",r.setAttribute("data-language",t),r.innerHTML=t,i.className="prism-show-language",i.appendChild(r),s.parentNode.insertBefore(i,s))}})}}();
\ No newline at end of file
+!function(){if("undefined"!=typeof self&&self.Prism&&self.document){var e={css:"CSS",clike:"C-like",javascript:"JavaScript",abap:"ABAP",actionscript:"ActionScript",apacheconf:"Apache Configuration",apl:"APL",applescript:"AppleScript",asciidoc:"AsciiDoc",aspnet:"ASP.NET (C#)",autoit:"AutoIt",autohotkey:"AutoHotkey",basic:"BASIC",csharp:"C#",cpp:"C++",coffeescript:"CoffeeScript","css-extras":"CSS Extras",fsharp:"F#",glsl:"GLSL",http:"HTTP",inform7:"Inform 7",json:"JSON",latex:"LaTeX",lolcode:"LOLCODE",matlab:"MATLAB",mel:"MEL",nasm:"NASM",nginx:"nginx",nsis:"NSIS",objectivec:"Objective-C",ocaml:"OCaml",parigp:"PARI/GP",php:"PHP","php-extras":"PHP Extras",powershell:"PowerShell",jsx:"React JSX",rest:"reST (reStructuredText)",sas:"SAS",sass:"Sass (Sass)",scss:"Sass (Scss)",sql:"SQL",typescript:"TypeScript",vhdl:"VHDL",vim:"vim",wiki:"Wiki markup",yaml:"YAML"};Prism.hooks.add("before-highlight",function(s){var a=s.element.parentNode;if(a&&/pre/i.test(a.nodeName)){var t,i,r=a.getAttribute("data-language")||e[s.language]||s.language.substring(0,1).toUpperCase()+s.language.substring(1),l=a.previousSibling;l&&/\s*\bprism-show-language\b\s*/.test(l.className)&&l.firstChild&&/\s*\bprism-show-language-label\b\s*/.test(l.firstChild.className)?i=l.firstChild:(t=document.createElement("div"),i=document.createElement("div"),i.className="prism-show-language-label",t.className="prism-show-language",t.appendChild(i),a.parentNode.insertBefore(t,a)),i.innerHTML=r}})}}();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.js b/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.js
index f02996731d..7900dd4ce5 100644
--- a/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.js
+++ b/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.js
@@ -69,7 +69,7 @@ Prism.hooks.add('wrap', function(env) {
 		
 		var href = 'http://docs.webplatform.org/';
 		
-		if (env.language == 'css') {
+		if (env.language == 'css' || env.language == 'scss') {
 			href += 'wiki/css/';
 			
 			if (env.type == 'property') {
diff --git a/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.min.js b/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.min.js
index 1d0ed3c37c..445e1a3435 100644
--- a/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.min.js
+++ b/dashboard-ui/bower_components/prism/plugins/wpd/prism-wpd.min.js
@@ -1 +1 @@
-!function(){function e(e){var n=e.toLowerCase();if(t.HTML[n])return"html";if(t.SVG[e])return"svg";if(t.MathML[e])return"mathml";if(0!==t.HTML[n]&&"undefined"!=typeof document){var a=(document.createElement(e).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(a&&"Unknown"!=a)return t.HTML[n]=1,"html"}if(t.HTML[n]=0,0!==t.SVG[e]&&"undefined"!=typeof document){var r=(document.createElementNS("http://www.w3.org/2000/svg",e).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(r&&"Unknown"!=r)return t.SVG[e]=1,"svg"}return t.SVG[e]=0,0!==t.MathML[e]&&0===e.indexOf("m")?(t.MathML[e]=1,"mathml"):(t.MathML[e]=0,null)}if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){if(Prism.languages.css&&(Prism.languages.css.atrule.inside["atrule-id"]=/^@[\w-]+/,Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var t={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var n;Prism.hooks.add("wrap",function(t){if(("tag-id"==t.type||"property"==t.type&&0!=t.content.indexOf("-")||"atrule-id"==t.type&&0!=t.content.indexOf("@-")||"pseudo-class"==t.type&&0!=t.content.indexOf(":-")||"pseudo-element"==t.type&&0!=t.content.indexOf("::-")||"attr-name"==t.type&&0!=t.content.indexOf("data-"))&&-1===t.content.indexOf("<")){var a="w/index.php?fulltext&search=";t.tag="a";var r="http://docs.webplatform.org/";"css"==t.language?(r+="wiki/css/","property"==t.type?r+="properties/":"atrule-id"==t.type?r+="atrules/":"pseudo-class"==t.type?r+="selectors/pseudo-classes/":"pseudo-element"==t.type&&(r+="selectors/pseudo-elements/")):"markup"==t.language&&("tag-id"==t.type?(n=e(t.content)||n,r+=n?"wiki/"+n+"/elements/":a):"attr-name"==t.type&&(r+=n?"wiki/"+n+"/attributes/":a)),r+=t.content,t.attributes.href=r,t.attributes.target="_blank"}})}}();
\ No newline at end of file
+!function(){function e(e){var a=e.toLowerCase();if(t.HTML[a])return"html";if(t.SVG[e])return"svg";if(t.MathML[e])return"mathml";if(0!==t.HTML[a]&&"undefined"!=typeof document){var n=(document.createElement(e).toString().match(/\[object HTML(.+)Element\]/)||[])[1];if(n&&"Unknown"!=n)return t.HTML[a]=1,"html"}if(t.HTML[a]=0,0!==t.SVG[e]&&"undefined"!=typeof document){var r=(document.createElementNS("http://www.w3.org/2000/svg",e).toString().match(/\[object SVG(.+)Element\]/)||[])[1];if(r&&"Unknown"!=r)return t.SVG[e]=1,"svg"}return t.SVG[e]=0,0!==t.MathML[e]&&0===e.indexOf("m")?(t.MathML[e]=1,"mathml"):(t.MathML[e]=0,null)}if(("undefined"==typeof self||self.Prism)&&("undefined"==typeof global||global.Prism)){if(Prism.languages.css&&(Prism.languages.css.atrule.inside["atrule-id"]=/^@[\w-]+/,Prism.languages.css.selector.pattern?(Prism.languages.css.selector.inside["pseudo-class"]=/:[\w-]+/,Prism.languages.css.selector.inside["pseudo-element"]=/::[\w-]+/):Prism.languages.css.selector={pattern:Prism.languages.css.selector,inside:{"pseudo-class":/:[\w-]+/,"pseudo-element":/::[\w-]+/}}),Prism.languages.markup){Prism.languages.markup.tag.inside.tag.inside["tag-id"]=/[\w-]+/;var t={HTML:{a:1,abbr:1,acronym:1,b:1,basefont:1,bdo:1,big:1,blink:1,cite:1,code:1,dfn:1,em:1,kbd:1,i:1,rp:1,rt:1,ruby:1,s:1,samp:1,small:1,spacer:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1,wbr:1,noframes:1,summary:1,command:1,dt:1,dd:1,figure:1,figcaption:1,center:1,section:1,nav:1,article:1,aside:1,hgroup:1,header:1,footer:1,address:1,noscript:1,isIndex:1,main:1,mark:1,marquee:1,meter:1,menu:1},SVG:{animateColor:1,animateMotion:1,animateTransform:1,glyph:1,feBlend:1,feColorMatrix:1,feComponentTransfer:1,feFuncR:1,feFuncG:1,feFuncB:1,feFuncA:1,feComposite:1,feConvolveMatrix:1,feDiffuseLighting:1,feDisplacementMap:1,feFlood:1,feGaussianBlur:1,feImage:1,feMerge:1,feMergeNode:1,feMorphology:1,feOffset:1,feSpecularLighting:1,feTile:1,feTurbulence:1,feDistantLight:1,fePointLight:1,feSpotLight:1,linearGradient:1,radialGradient:1,altGlyph:1,textPath:1,tref:1,altglyph:1,textpath:1,altglyphdef:1,altglyphitem:1,clipPath:1,"color-profile":1,cursor:1,"font-face":1,"font-face-format":1,"font-face-name":1,"font-face-src":1,"font-face-uri":1,foreignObject:1,glyphRef:1,hkern:1,vkern:1},MathML:{}}}var a;Prism.hooks.add("wrap",function(t){if(("tag-id"==t.type||"property"==t.type&&0!=t.content.indexOf("-")||"atrule-id"==t.type&&0!=t.content.indexOf("@-")||"pseudo-class"==t.type&&0!=t.content.indexOf(":-")||"pseudo-element"==t.type&&0!=t.content.indexOf("::-")||"attr-name"==t.type&&0!=t.content.indexOf("data-"))&&-1===t.content.indexOf("<")){var n="w/index.php?fulltext&search=";t.tag="a";var r="http://docs.webplatform.org/";"css"==t.language||"scss"==t.language?(r+="wiki/css/","property"==t.type?r+="properties/":"atrule-id"==t.type?r+="atrules/":"pseudo-class"==t.type?r+="selectors/pseudo-classes/":"pseudo-element"==t.type&&(r+="selectors/pseudo-elements/")):"markup"==t.language&&("tag-id"==t.type?(a=e(t.content)||a,r+=a?"wiki/"+a+"/elements/":n):"attr-name"==t.type&&(r+=a?"wiki/"+a+"/attributes/":n)),r+=t.content,t.attributes.href=r,t.attributes.target="_blank"}})}}();
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/prism.js b/dashboard-ui/bower_components/prism/prism.js
index dc6c4eb72b..ff115ba8bd 100644
--- a/dashboard-ui/bower_components/prism/prism.js
+++ b/dashboard-ui/bower_components/prism/prism.js
@@ -20,7 +20,8 @@ var _self = (typeof window !== 'undefined')
 var Prism = (function(){
 
 // Private helper vars
-var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i;
+var lang = /\blang(?:uage)?-(\w+)\b/i;
+var uniqueId = 0;
 
 var _ = _self.Prism = {
 	util: {
@@ -38,6 +39,13 @@ var _ = _self.Prism = {
 			return Object.prototype.toString.call(o).match(/\[object (\w+)\]/)[1];
 		},
 
+		objId: function (obj) {
+			if (!obj['__id']) {
+				Object.defineProperty(obj, '__id', { value: ++uniqueId });
+			}
+			return obj['__id'];
+		},
+
 		// Deep clone a language definition (e.g. to extend it)
 		clone: function (o) {
 			var type = _.util.type(o);
@@ -130,16 +138,19 @@ var _ = _self.Prism = {
 		},
 
 		// Traverse a language definition with Depth First Search
-		DFS: function(o, callback, type) {
+		DFS: function(o, callback, type, visited) {
+			visited = visited || {};
 			for (var i in o) {
 				if (o.hasOwnProperty(i)) {
 					callback.call(o, i, o[i], type || i);
 
-					if (_.util.type(o[i]) === 'Object') {
-						_.languages.DFS(o[i], callback);
+					if (_.util.type(o[i]) === 'Object' && !visited[_.util.objId(o[i])]) {
+						visited[_.util.objId(o[i])] = true;
+						_.languages.DFS(o[i], callback, null, visited);
 					}
-					else if (_.util.type(o[i]) === 'Array') {
-						_.languages.DFS(o[i], callback, i);
+					else if (_.util.type(o[i]) === 'Array' && !visited[_.util.objId(o[i])]) {
+						visited[_.util.objId(o[i])] = true;
+						_.languages.DFS(o[i], callback, i, visited);
 					}
 				}
 			}
@@ -412,10 +423,8 @@ if (!_self.document) {
 	return _self.Prism;
 }
 
-// Get current script and highlight
-var script = document.getElementsByTagName('script');
-
-script = script[script.length - 1];
+//Get current script and highlight
+var script = document.currentScript || [].slice.call(document.getElementsByTagName("script")).pop();
 
 if (script) {
 	_.filename = script.src;
@@ -703,6 +712,6 @@ Prism.languages.js = Prism.languages.javascript;
 
 	};
 
-	self.Prism.fileHighlight();
+	document.addEventListener('DOMContentLoaded', self.Prism.fileHighlight);
 
 })();
diff --git a/dashboard-ui/bower_components/prism/themes/prism-coy.css b/dashboard-ui/bower_components/prism/themes/prism-coy.css
index fbd559c9e5..147b59b9b6 100644
--- a/dashboard-ui/bower_components/prism/themes/prism-coy.css
+++ b/dashboard-ui/bower_components/prism/themes/prism-coy.css
@@ -7,6 +7,7 @@
 code[class*="language-"],
 pre[class*="language-"] {
 	color: black;
+	background: none;
 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 	direction: ltr;
 	text-align: left;
@@ -43,7 +44,6 @@ pre[class*="language-"] {
 	background-size: 3em 3em;
 	background-origin: content-box;
 	overflow: visible;
-	max-height: 30em;
 	padding: 0;
 }
 
@@ -77,6 +77,7 @@ pre[class*="language-"] {
 	color: #c92c2c;
 	border: 1px solid rgba(0, 0, 0, 0.1);
 	display: inline;
+	white-space: normal;
 }
 
 pre[class*="language-"]:before,
@@ -89,6 +90,7 @@ pre[class*="language-"]:after {
 	left: 0.18em;
 	width: 40%;
 	height: 20%;
+	max-height: 13em;
 	-webkit-box-shadow: 0px 13px 8px #979797;
 	-moz-box-shadow: 0px 13px 8px #979797;
 	box-shadow: 0px 13px 8px #979797;
diff --git a/dashboard-ui/bower_components/prism/themes/prism-dark.css b/dashboard-ui/bower_components/prism/themes/prism-dark.css
index 74b1a65d88..8d5c291561 100644
--- a/dashboard-ui/bower_components/prism/themes/prism-dark.css
+++ b/dashboard-ui/bower_components/prism/themes/prism-dark.css
@@ -7,6 +7,7 @@
 code[class*="language-"],
 pre[class*="language-"] {
 	color: white;
+	background: none;
 	text-shadow: 0 -.1em .2em black;
 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 	direction: ltr;
@@ -55,6 +56,7 @@ pre[class*="language-"] {
 	border-radius: .3em;
 	border: .13em solid hsl(30, 20%, 40%);
 	box-shadow: 1px 1px .3em -.1em black inset;
+	white-space: normal;
 }
 
 .token.comment,
diff --git a/dashboard-ui/bower_components/prism/themes/prism-funky.css b/dashboard-ui/bower_components/prism/themes/prism-funky.css
index 56dee03203..e4d676d6ca 100644
--- a/dashboard-ui/bower_components/prism/themes/prism-funky.css
+++ b/dashboard-ui/bower_components/prism/themes/prism-funky.css
@@ -45,6 +45,7 @@ code[class*="language-"] {
 	padding: .2em;
 	border-radius: .3em;
 	box-shadow: none;
+	white-space: normal;
 }
 
 .token.comment,
diff --git a/dashboard-ui/bower_components/prism/themes/prism-okaidia.css b/dashboard-ui/bower_components/prism/themes/prism-okaidia.css
index 3b9e2a6110..d7c6bb7d53 100644
--- a/dashboard-ui/bower_components/prism/themes/prism-okaidia.css
+++ b/dashboard-ui/bower_components/prism/themes/prism-okaidia.css
@@ -7,6 +7,7 @@
 code[class*="language-"],
 pre[class*="language-"] {
 	color: #f8f8f2;
+	background: none;
 	text-shadow: 0 1px rgba(0, 0, 0, 0.3);
 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 	direction: ltr;
@@ -44,6 +45,7 @@ pre[class*="language-"] {
 :not(pre) > code[class*="language-"] {
 	padding: .1em;
 	border-radius: .3em;
+	white-space: normal;
 }
 
 .token.comment,
diff --git a/dashboard-ui/bower_components/prism/themes/prism-solarizedlight.css b/dashboard-ui/bower_components/prism/themes/prism-solarizedlight.css
new file mode 100644
index 0000000000..4418410433
--- /dev/null
+++ b/dashboard-ui/bower_components/prism/themes/prism-solarizedlight.css
@@ -0,0 +1,149 @@
+/*
+ Solarized Color Schemes originally by Ethan Schoonover
+ http://ethanschoonover.com/solarized
+
+ Ported for PrismJS by Hector Matos
+ Website: https://krakendev.io
+ Twitter Handle: https://twitter.com/allonsykraken)
+*/
+
+/*
+SOLARIZED HEX
+--------- -------
+base03    #002b36
+base02    #073642
+base01    #586e75
+base00    #657b83
+base0     #839496
+base1     #93a1a1
+base2     #eee8d5
+base3     #fdf6e3
+yellow    #b58900
+orange    #cb4b16
+red       #dc322f
+magenta   #d33682
+violet    #6c71c4
+blue      #268bd2
+cyan      #2aa198
+green     #859900
+*/
+
+code[class*="language-"],
+pre[class*="language-"] {
+	color: #657b83; /* base00 */
+	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+	direction: ltr;
+	text-align: left;
+	white-space: pre;
+	word-spacing: normal;
+	word-break: normal;
+	word-wrap: normal;
+
+	line-height: 1.5;
+
+	-moz-tab-size: 4;
+	-o-tab-size: 4;
+	tab-size: 4;
+
+	-webkit-hyphens: none;
+	-moz-hyphens: none;
+	-ms-hyphens: none;
+	hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection {
+	background: #073642; /* base02 */
+}
+
+pre[class*="language-"]::selection, pre[class*="language-"] ::selection,
+code[class*="language-"]::selection, code[class*="language-"] ::selection {
+	background: #073642; /* base02 */
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+	padding: 1em;
+	margin: .5em 0;
+	overflow: auto;
+	border-radius: 0.3em;
+}
+
+:not(pre) > code[class*="language-"],
+pre[class*="language-"] {
+	background-color: #fdf6e3; /* base3 */
+}
+
+/* Inline code */
+:not(pre) > code[class*="language-"] {
+	padding: .1em;
+	border-radius: .3em;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+	color: #93a1a1; /* base1 */
+}
+
+.token.punctuation {
+	color: #586e75; /* base01 */
+}
+
+.namespace {
+	opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+	color: #268bd2; /* blue */
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.url,
+.token.inserted {
+	color: #2aa198; /* cyan */
+}
+
+.token.entity {
+	color: #657b83; /* base00 */
+	background: #eee8d5; /* base2 */
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+	color: #859900; /* green */
+}
+
+.token.function {
+	color: #b58900; /* yellow */
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+	color: #cb4b16; /* orange */
+}
+
+.token.important,
+.token.bold {
+	font-weight: bold;
+}
+.token.italic {
+	font-style: italic;
+}
+
+.token.entity {
+	cursor: help;
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/prism/themes/prism-tomorrow.css b/dashboard-ui/bower_components/prism/themes/prism-tomorrow.css
index f44ab818ff..5c192741d9 100644
--- a/dashboard-ui/bower_components/prism/themes/prism-tomorrow.css
+++ b/dashboard-ui/bower_components/prism/themes/prism-tomorrow.css
@@ -7,6 +7,7 @@
 code[class*="language-"],
 pre[class*="language-"] {
 	color: #ccc;
+	background: none;
 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 	direction: ltr;
 	text-align: left;
@@ -43,6 +44,7 @@ pre[class*="language-"] {
 :not(pre) > code[class*="language-"] {
 	padding: .1em;
 	border-radius: .3em;
+	white-space: normal;
 }
 
 .token.comment,
diff --git a/dashboard-ui/bower_components/prism/themes/prism-twilight.css b/dashboard-ui/bower_components/prism/themes/prism-twilight.css
index e873fa6f21..f70e5c50d8 100644
--- a/dashboard-ui/bower_components/prism/themes/prism-twilight.css
+++ b/dashboard-ui/bower_components/prism/themes/prism-twilight.css
@@ -6,6 +6,7 @@
 code[class*="language-"],
 pre[class*="language-"] {
 	color: white;
+	background: none;
 	direction: ltr;
 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 	text-align: left;
@@ -41,13 +42,13 @@ pre[class*="language-"] {
 	padding: 1em;
 }
 
-pre[class*="language-"]::selection {
-	/* Safari */
+pre[class*="language-"]::-moz-selection {
+	/* Firefox */
 	background: hsl(200, 4%, 16%); /* #282A2B */
 }
 
 pre[class*="language-"]::selection {
-	/* Firefox */
+	/* Safari */
 	background: hsl(200, 4%, 16%); /* #282A2B */
 }
 
@@ -70,6 +71,7 @@ code[class*="language-"]::selection, code[class*="language-"] ::selection {
 	border: .13em solid hsl(0, 0%, 33%); /* #545454 */
 	box-shadow: 1px 1px .3em -.1em black inset;
 	padding: .15em .2em .05em;
+	white-space: normal;
 }
 
 .token.comment,
diff --git a/dashboard-ui/bower_components/prism/themes/prism.css b/dashboard-ui/bower_components/prism/themes/prism.css
index e81ebeddc6..f677cdf81a 100644
--- a/dashboard-ui/bower_components/prism/themes/prism.css
+++ b/dashboard-ui/bower_components/prism/themes/prism.css
@@ -7,6 +7,7 @@
 code[class*="language-"],
 pre[class*="language-"] {
 	color: black;
+	background: none;
 	text-shadow: 0 1px white;
 	font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
 	direction: ltr;
@@ -62,6 +63,7 @@ pre[class*="language-"] {
 :not(pre) > code[class*="language-"] {
 	padding: .1em;
 	border-radius: .3em;
+	white-space: normal;
 }
 
 .token.comment,