{"version":3,"file":"index.min.js","sources":["../../xgplayer-helper-utils/es/events/index.js","../../xgplayer-helper-models/es/playlist.js","../../xgplayer-helper-models/es/remuxed-buffer.js","../../xgplayer-helper-models/es/data-view.js","../../xgplayer-helper-models/es/track.js","../../xgplayer-helper-models/es/u8a-buffer.js","../../xgplayer-helper-models/es/track-meta.js","../../xgplayer-helper-models/es/track-sample.js","../../xgplayer-helper-models/es/media-info.js","../../xgplayer-helper-models/es/ts-frag.js","../../xgplayer-helper-utils/node_modules/eventemitter3/index.js","../../xgplayer-helper-utils/es/context/index.js","../../xgplayer-helper-utils/es/crypto/index.js","../../xgplayer-helper-utils/es/mse/index.js","../../xgplayer-helper-utils/es/loader-fetch/speed.js","../../xgplayer-helper-utils/es/loader-fetch/fetch-loader.js","../../xgplayer-helper-utils/es/common/dev-logger.js","../../xgplayer-hls-live/es/mse/hls-live.js","../../xgplayer-helper-codec/es/aac/index.js","../../xgplayer-helper-codec/es/aac/adts.js","../../xgplayer-helper-codec/es/avc/golomb.js","../../xgplayer-helper-codec/es/avc/sps.js","../../xgplayer-helper-codec/es/avc/rbsp.js","../../xgplayer-helper-codec/es/avc/sei.js","../../xgplayer-helper-codec/es/avc/nalunit.js","../../xgplayer-helper-codec/es/hevc/golomb.js","../../xgplayer-helper-codec/es/hevc/sps.js","../../xgplayer-helper-codec/es/hevc/rbsp.js","../../xgplayer-helper-codec/es/hevc/sei.js","../../xgplayer-helper-codec/es/hevc/nalunit.js","../../xgplayer-helper-codec/es/compat/hls.js","../../xgplayer-helper-transmuxers/node_modules/eventemitter3/index.js","../../xgplayer-helper-transmuxers/es/hls/ts-demuxer.js","../../xgplayer-helper-transmuxers/es/hls/ts.js","../../xgplayer-helper-transmuxers/es/hls/m3u8.js","../../xgplayer-helper-transmuxers/node_modules/concat-typed-array/lib/concat.js","../../xgplayer-helper-transmuxers/node_modules/concat-typed-array/lib/index.js","../../xgplayer-helper-transmuxers/es/mp4-remux/buffer.js","../../xgplayer-helper-transmuxers/es/mp4-remux/fmp4.js","../../xgplayer-helper-transmuxers/es/mp4-remux/remuxer.js","../../xgplayer-helper-transmuxers/es/mp4-remux/index.js","../../xgplayer-hls-live/es/mse/config.js","../../xgplayer-hls-live/es/mse/index.js","../../xgplayer-hls-live/es/mobile/hls-live-mobile.js","../../xgplayer-hls-live/es/mobile/config.js","../../xgplayer-hls-live/es/mobile/index.js","../../xgplayer-hls-live/es/index.js","../../xgplayer-hls-vod/es/hls-vod.js","../../xgplayer-hls-vod/es/index.js","../../xgplayer-helper-utils/es/common/func/debounce.js","../src/index.js"],"sourcesContent":["var BROWSER_EVENTS = {\n VISIBILITY_CHANGE: 'VISIBILITY_CHANGE'\n};\nvar PLAYER_EVENTS = {\n SEEK: 'SEEK'\n};\n\nvar LOADER_EVENTS = {\n LADER_START: 'LOADER_START',\n LOADER_DATALOADED: 'LOADER_DATALOADED',\n LOADER_COMPLETE: 'LOADER_COMPLETE',\n LOADER_RESPONSE_HEADERS: 'LOADER_RESPONSE_HEADERS',\n LOADER_ERROR: 'LOADER_ERROR',\n LOADER_RETRY: 'LOADER_RETRY',\n LOADER_TTFB: 'LOADER_TTFB'\n};\n\nvar DEMUX_EVENTS = {\n DEMUX_START: 'DEMUX_START',\n DEMUX_COMPLETE: 'DEMUX_COMPLETE',\n DEMUX_ERROR: 'DEMUX_ERROR',\n METADATA_PARSED: 'METADATA_PARSED',\n SEI_PARSED: 'SEI_PARSED',\n VIDEO_METADATA_CHANGE: 'VIDEO_METADATA_CHANGE',\n AUDIO_METADATA_CHANGE: 'AUDIO_METADATA_CHANGE',\n MEDIA_INFO: 'MEDIA_INFO',\n ISKEYFRAME: 'ISKEYFRAME'\n};\n\nvar REMUX_EVENTS = {\n REMUX_METADATA: 'REMUX_METADATA',\n REMUX_MEDIA: 'REMUX_MEDIA',\n MEDIA_SEGMENT: 'MEDIA_SEGMENT',\n REMUX_ERROR: 'REMUX_ERROR',\n INIT_SEGMENT: 'INIT_SEGMENT',\n DETECT_CHANGE_STREAM: 'DETECT_CHANGE_STREAM',\n DETECT_CHANGE_STREAM_DISCONTINUE: 'DETECT_CHANGE_STREAM_DISCONTINUE',\n DETECT_AUDIO_GAP: 'DETECT_AUDIO_GAP',\n DETECT_LARGE_GAP: 'DETECT_LARGE_GAP',\n DETECT_AUDIO_OVERLAP: 'DETECT_AUDIO_OVERLAP',\n RANDOM_ACCESS_POINT: 'RANDOM_ACCESS_POINT',\n DETECT_FRAG_ID_DISCONTINUE: 'DETECT_FRAG_ID_DISCONTINUE'\n};\n\nvar MSE_EVENTS = {\n SOURCE_UPDATE_END: 'SOURCE_UPDATE_END',\n MSE_ERROR: 'MSE_ERROR',\n MSE_WRONG_TRACK_ADD: 'MSE_WRONG_TRACK_ADD'\n\n // hls专有events\n};var HLS_EVENTS = {\n RETRY_TIME_EXCEEDED: 'RETRY_TIME_EXCEEDED'\n};\n\nvar CRYPTO_EVENTS = {\n START_DECRYPTOO: 'START_DECRYPTO',\n DECRYPTED: 'DECRYPTED'\n};\nvar ALLEVENTS = Object.assign({}, LOADER_EVENTS, DEMUX_EVENTS, REMUX_EVENTS, MSE_EVENTS, HLS_EVENTS, PLAYER_EVENTS, BROWSER_EVENTS);\n\nvar FlvAllowedEvents = [];\nvar HlsAllowedEvents = [];\n\nfor (var key in ALLEVENTS) {\n if (ALLEVENTS.hasOwnProperty(key)) {\n FlvAllowedEvents.push(ALLEVENTS[key]);\n }\n}\n\nfor (var _key in ALLEVENTS) {\n if (ALLEVENTS.hasOwnProperty(_key)) {\n HlsAllowedEvents.push(ALLEVENTS[_key]);\n }\n}\n\nexport default {\n ALLEVENTS: ALLEVENTS,\n HLS_EVENTS: HLS_EVENTS,\n REMUX_EVENTS: REMUX_EVENTS,\n DEMUX_EVENTS: DEMUX_EVENTS,\n MSE_EVENTS: MSE_EVENTS,\n LOADER_EVENTS: LOADER_EVENTS,\n FlvAllowedEvents: FlvAllowedEvents,\n HlsAllowedEvents: HlsAllowedEvents,\n CRYPTO_EVENTS: CRYPTO_EVENTS,\n PLAYER_EVENTS: PLAYER_EVENTS,\n BROWSER_EVENTS: BROWSER_EVENTS\n};","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @typedef {Object} TSFrag\n * @property {number} duration\n * @property {boolean} downloaded\n * @property {boolean} downloading\n * @property {number=} start\n * @property {number} cc\n * @property {boolean} discontinue\n */\n\nvar Playlist = function () {\n function Playlist(configs) {\n _classCallCheck(this, Playlist);\n\n /** @type {string} */\n this._baseURL = '';\n /** @type {Object.} */\n this._list = {};\n /** @type {Object.} */\n this._ts = {};\n /** @type {number} */\n this.version = 0;\n /** @type {number} */\n this.sequence = -1;\n /** @type {number} */\n this.targetduration = 0;\n /** @type {number} */\n this.duration = 0;\n /** @type {number} */\n this.fragLength = 0;\n /** @type {TSFrag | undefined} */\n this._lastget = undefined;\n /** @type {boolean} */\n this.end = false; // 判断live | vod , 对点播或直播结束时存在 EXT-X-ENDLIST\n /** @type {boolean} */\n this.autoclear = configs.autoclear || false;\n /** @type {*} */\n this.logger = configs.logger;\n /** @type {string[]} */\n this.downloadedUrls = [];\n this._avgSegmentDuration = 4;\n }\n\n /**\n * @return {Object}\n */\n\n\n _createClass(Playlist, [{\n key: 'push',\n\n\n /**\n * add a ts frag to play list\n * @param {string} tsURL ts frag url\n * @param {number} duration ts frag duration\n * @param {boolean} discontinue has #EXT-X-DISCONTINUITY tag before this frag\n * @param {number} id\n * @param {number} cc\n */\n value: function push(tsURL, duration, discontinue, id, cc, isLast) {\n if (!this._ts[tsURL]) {\n this._ts[tsURL] = {\n duration: duration,\n downloaded: false,\n downloading: false,\n start: this.duration,\n discontinue: !!discontinue,\n id: id,\n cc: cc,\n isLast: isLast || false\n };\n this._list[this.duration] = tsURL;\n this.duration += duration;\n this.fragLength += 1;\n }\n }\n\n /**\n * delete a fragment from playlist\n * @param {string} url\n */\n\n }, {\n key: 'deleteFrag',\n value: function deleteFrag(url) {\n if (this._ts[url]) {\n if (this._ts[url].start > this._lastget.time) {\n this._lastget = {\n duration: this._ts[url].duration,\n time: this._ts[url].start,\n downloaded: false,\n downloading: false,\n url: url,\n id: this._ts[url].id\n };\n }\n delete this._list[this._ts[url].start];\n delete this._ts[url];\n this.fragLength -= 1;\n }\n }\n }, {\n key: '_calcAvgFrgmentDuration',\n value: function _calcAvgFrgmentDuration(data) {\n if (!data.frags) return data.targetduration;\n var fragLen = data.frags.length;\n return Math.floor(data.duration / fragLen / 1000);\n }\n\n /**\n * add m3u8 to current play list\n * @param {*} data\n * @param {boolean} deletepre\n */\n\n }, {\n key: 'pushM3U8',\n value: function pushM3U8(data, deletepre) {\n // 常规信息替换\n if (!data) {\n throw new Error('No m3u8 data received.');\n }\n this.version = data.version;\n\n this.targetduration = data.targetduration;\n\n this._avgSegmentDuration = Math.min(this.targetduration, this._calcAvgFrgmentDuration(data));\n\n if (data.encrypt && !this.encrypt) {\n this.encrypt = data.encrypt;\n }\n\n this.end = data.end || false;\n\n if (!data.sequence) {\n data.sequence = 0;\n }\n\n // 新分片信息\n if (data.sequence > this.sequence) {\n var len = data.frags.length;\n if (this.logger) {\n this.logger.log('PLAYLIST', 'new playlist [' + data.sequence + ', ' + (data.sequence + len - 1) + ']');\n }\n this.sequence = data.sequence;\n var newfraglist = [];\n for (var i = 0; i < len; i++) {\n var frag = data.frags[i];\n if (!this._ts[frag.url] && this.downloadedUrls.indexOf(frag.url) < 0) {\n newfraglist.push(frag.url);\n this.push(frag.url, frag.duration, frag.discontinue, frag.id, frag.cc, frag.isLast);\n }\n }\n\n if (newfraglist.length < 1) {\n throw new Error('Can not read ts file list.');\n }\n\n if (deletepre) {\n var tslist = this.getTsList();\n for (var _i = 0; _i < tslist.length; _i++) {\n if (newfraglist.indexOf(tslist[_i]) < 0) {\n this.deleteFrag(tslist[_i]);\n }\n }\n }\n } else {\n throw new Error('Old m3u8 file received, ' + data.sequence);\n }\n }\n\n /**\n * return ts url list\n * @return {string[]}\n */\n\n }, {\n key: 'getTsList',\n value: function getTsList() {\n return Object.keys(this._ts);\n }\n\n /**\n * mark a ts frag as downloaded / not downloaded\n * @param {string} tsname\n * @param {boolean} isloaded\n */\n\n }, {\n key: 'downloaded',\n value: function downloaded(tsname, isloaded) {\n var ts = this._ts[tsname];\n if (ts) {\n ts.downloaded = isloaded;\n }\n }\n\n /**\n * mark a ts frag as loading / not loading\n * @param {string} tsname\n * @param {boolean} loading\n */\n\n }, {\n key: 'downloading',\n value: function downloading(tsname, loading) {\n var ts = this._ts[tsname];\n if (ts) {\n ts.downloading = loading;\n }\n }\n\n /**\n * get a frag by ts name\n * @param name\n * @return {TSFrag}\n */\n\n }, {\n key: 'getTsByName',\n value: function getTsByName(name) {\n return this._ts[name];\n }\n\n /**\n * get ts frag by timestamp\n * @param {number} time\n * @return {undefined|TSFrag}\n */\n\n }, {\n key: 'getTs',\n value: function getTs(time) {\n var timelist = Object.keys(this._list);\n var ts = void 0;\n\n if (time === undefined) {\n if (this._lastget) {\n time = this._lastget.time + this._lastget.duration;\n } else {\n time = 0;\n }\n }\n\n if (timelist.length < 1 || time >= this.duration) {\n return undefined;\n }\n timelist = timelist.sort(function (a, b) {\n return parseFloat(a) - parseFloat(b);\n });\n for (var i = 0; i < timelist.length; i++) {\n if (time >= parseInt(timelist[i])) {\n var url = this._list[timelist[i]];\n var downloaded = this._ts[url].downloaded;\n var downloading = this._ts[url].downloading;\n ts = {\n url: url,\n downloaded: downloaded,\n downloading: downloading,\n time: parseInt(timelist[i]),\n duration: parseInt(this._ts[url].duration),\n id: this._ts[url].id,\n cc: this._ts[url].cc,\n isLast: this._ts[url].isLast\n };\n if (this.autoclear && this._lastget) {\n delete this._ts[this._lastget.url];\n delete this._list[this._lastget.time];\n }\n this._lastget = ts;\n } else {\n break;\n }\n }\n if (ts) {\n this.downloadedUrls.push(ts.url);\n }\n return ts;\n }\n\n /**\n * get last downloaded ts frag\n * @return {TSFrag|undefined}\n */\n\n }, {\n key: 'getLastDownloadedTs',\n value: function getLastDownloadedTs() {\n var timelist = Object.keys(this._list).sort(function (a, b) {\n var result = Number(a) - Number(b);\n return result;\n });\n var found = void 0;\n for (var i = 0; i < timelist.length; i++) {\n var url = this._list[timelist[i]];\n var downloaded = this._ts[url].downloaded;\n var downloading = this._ts[url].downloading;\n if (downloaded) {\n found = { url: url, downloaded: downloaded, downloading: downloading, time: parseInt(timelist[i]), duration: parseInt(this._ts[url].duration) };\n } else {\n break;\n }\n }\n\n return found;\n }\n }, {\n key: 'clear',\n value: function clear() {\n this._baseURL = '';\n this._list = {};\n this._ts = {};\n this.version = 0;\n this.sequence = -1;\n this.targetduration = 0;\n this.duration = 0;\n }\n }, {\n key: 'clearDownloaded',\n value: function clearDownloaded() {\n var list = Object.keys(this._ts);\n for (var i = 0, l = list.length; i < l; i++) {\n var ts = this._ts[list[i]];\n ts.downloaded = false;\n ts.downloading = false;\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this._baseURL = '';\n this._list = {};\n this._ts = {};\n this.version = 0;\n this.sequence = -1;\n this.targetduration = 0;\n this.duration = 0;\n this.fragLength = 0;\n this._lastget = undefined;\n this.autoclear = false;\n }\n }, {\n key: 'resetSequence',\n value: function resetSequence() {\n this.sequence = -1;\n }\n }, {\n key: 'list',\n get: function get() {\n return this._list;\n }\n\n /**\n * @param {string} baseURL\n */\n\n }, {\n key: 'baseURL',\n set: function set(baseURL) {\n if (this.baseURL !== baseURL) {\n this.clear();\n this._baseURL = baseURL;\n }\n }\n\n /**\n * base cdn url for ts fragments\n * @return {string}\n */\n ,\n get: function get() {\n return this._baseURL;\n }\n }, {\n key: 'avgSegmentDuration',\n get: function get() {\n return this._avgSegmentDuration;\n }\n }]);\n\n return Playlist;\n}();\n\nexport default Playlist;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nexport var RemuxedBuffer = function RemuxedBuffer() {\n _classCallCheck(this, RemuxedBuffer);\n\n /** @type{string} */\n this.mimetype = '';\n /** @type{Uint8Array|null} */\n this.init = null;\n /** @type{Uint8Array[]} */\n this.data = [];\n /** @type{number} */\n this.bufferDuration = 0;\n};\n\nvar RemuxedBufferManager = function () {\n function RemuxedBufferManager() {\n _classCallCheck(this, RemuxedBufferManager);\n\n /** @type{Object.} */\n this.sources = {};\n }\n\n /**\n *\n * @param {string} name\n * @return {RemuxedBuffer}\n */\n\n\n _createClass(RemuxedBufferManager, [{\n key: 'getSource',\n value: function getSource(name) {\n return this.sources[name];\n }\n\n /**\n * @param {string} name\n * @return {RemuxedBuffer}\n */\n\n }, {\n key: 'createSource',\n value: function createSource(name) {\n this.sources[name] = new RemuxedBuffer();\n return this.sources[name];\n }\n }, {\n key: 'clear',\n value: function clear() {\n this.sources = {};\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.clear();\n }\n }]);\n\n return RemuxedBufferManager;\n}();\n\nexport default RemuxedBufferManager;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar XGDataView = function () {\n function XGDataView(buffer) {\n _classCallCheck(this, XGDataView);\n\n if (buffer instanceof ArrayBuffer) {\n /** @type {ArrayBuffer} */\n this.buffer = buffer;\n /** @type {DataView} */\n this.dataview = new DataView(buffer);\n /** @type {number} */\n this.dataview.position = 0;\n } else {\n throw new Error('data is invalid');\n }\n }\n\n /**\n * byffer length\n * @return {number}\n */\n\n\n _createClass(XGDataView, [{\n key: 'back',\n\n\n /**\n * move read position backward\n * @param count\n */\n value: function back(count) {\n this.position -= count;\n }\n }, {\n key: 'getUint8',\n value: function getUint8(offset) {\n return this.dataview.getUint8(offset);\n }\n\n /**\n * move read position forward\n * @param count\n */\n\n }, {\n key: 'skip',\n value: function skip(count) {\n var loop = Math.floor(count / 4);\n var last = count % 4;\n for (var i = 0; i < loop; i++) {\n XGDataView.readByte(this.dataview, 4);\n }\n if (last > 0) {\n XGDataView.readByte(this.dataview, last);\n }\n }\n\n /**\n * [readByte 从DataView中读取数据]\n * @param {DataView} buffer [DataView实例]\n * @param {Number} size [读取字节数]\n * @return {Number} [整数]\n */\n\n }, {\n key: 'readUint8',\n\n\n /**\n * @return {Number}\n */\n value: function readUint8() {\n return XGDataView.readByte(this.dataview, 1);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readUint16',\n value: function readUint16() {\n return XGDataView.readByte(this.dataview, 2);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readUint24',\n value: function readUint24() {\n return XGDataView.readByte(this.dataview, 3);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readUint32',\n value: function readUint32() {\n return XGDataView.readByte(this.dataview, 4);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readUint64',\n value: function readUint64() {\n return XGDataView.readByte(this.dataview, 8);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readInt8',\n value: function readInt8() {\n return XGDataView.readByte(this.dataview, 1, true);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readInt16',\n value: function readInt16() {\n return XGDataView.readByte(this.dataview, 2, true);\n }\n\n /**\n * @return {Number}\n */\n\n }, {\n key: 'readInt32',\n value: function readInt32() {\n return XGDataView.readByte(this.dataview, 4, true);\n }\n\n /**\n * @return {Uint8Array}\n */\n\n }, {\n key: 'writeUint32',\n value: function writeUint32(value) {\n return new Uint8Array([value >>> 24 & 0xff, value >>> 16 & 0xff, value >>> 8 & 0xff, value & 0xff]);\n }\n }, {\n key: 'length',\n get: function get() {\n return this.buffer.byteLength;\n }\n\n /**\n * set current read position of data-view\n * @param value\n */\n\n }, {\n key: 'position',\n set: function set(value) {\n this.dataview.position = value;\n }\n\n /**\n * set current read position of data-view\n * @param value\n */\n ,\n get: function get() {\n return this.dataview.position;\n }\n }], [{\n key: 'readByte',\n value: function readByte(buffer, size, sign) {\n var res = void 0;\n switch (size) {\n case 1:\n if (sign) {\n res = buffer.getInt8(buffer.position);\n } else {\n res = buffer.getUint8(buffer.position);\n }\n break;\n case 2:\n if (sign) {\n res = buffer.getInt16(buffer.position);\n } else {\n res = buffer.getUint16(buffer.position);\n }\n break;\n case 3:\n if (sign) {\n throw new Error('not supported for readByte 3');\n } else {\n res = buffer.getUint8(buffer.position) << 16;\n res |= buffer.getUint8(buffer.position + 1) << 8;\n res |= buffer.getUint8(buffer.position + 2);\n }\n break;\n case 4:\n if (sign) {\n res = buffer.getInt32(buffer.position);\n } else {\n res = buffer.getUint32(buffer.position);\n }\n break;\n case 8:\n if (sign) {\n throw new Error('not supported for readBody 8');\n } else {\n res = buffer.getUint32(buffer.position) << 32;\n res |= buffer.getUint32(buffer.position + 4);\n }\n break;\n default:\n res = '';\n }\n buffer.position += size;\n return res;\n }\n }]);\n\n return XGDataView;\n}();\n\nexport default XGDataView;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Track = function () {\n function Track() {\n _classCallCheck(this, Track);\n\n /** @type {number} */\n this.id = -1;\n /** @type {number} */\n this.sequenceNumber = 0;\n /** @type {*} */\n this.samples = [];\n /** @type {*} */\n this.droppedSamples = [];\n /** @type {number} */\n this.length = 0;\n }\n\n _createClass(Track, [{\n key: 'reset',\n value: function reset() {\n this.sequenceNumber = 0;\n this.samples = [];\n this.length = 0;\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.reset();\n this.id = -1;\n }\n }]);\n\n return Track;\n}();\n\nexport default Track;\n\n\nexport var AudioTrack = function (_Track) {\n _inherits(AudioTrack, _Track);\n\n function AudioTrack() {\n _classCallCheck(this, AudioTrack);\n\n /** @type {string} */\n var _this = _possibleConstructorReturn(this, (AudioTrack.__proto__ || Object.getPrototypeOf(AudioTrack)).call(this));\n\n _this.TAG = 'AudioTrack';\n /** @type {string} */\n _this.type = 'audio';\n return _this;\n }\n\n return AudioTrack;\n}(Track);\n\nexport var VideoTrack = function (_Track2) {\n _inherits(VideoTrack, _Track2);\n\n function VideoTrack() {\n _classCallCheck(this, VideoTrack);\n\n /** @type {string} */\n var _this2 = _possibleConstructorReturn(this, (VideoTrack.__proto__ || Object.getPrototypeOf(VideoTrack)).call(this));\n\n _this2.TAG = 'VideoTrack';\n /** @type {string} */\n _this2.type = 'video';\n /** @type {number} */\n _this2.dropped = 0;\n /** @type {number} */\n _this2.sequenceNumber = 0;\n return _this2;\n }\n\n _createClass(VideoTrack, [{\n key: 'reset',\n value: function reset() {\n this.sequenceNumber = 0;\n this.samples = [];\n this.length = 0;\n this.dropped = 0;\n }\n }]);\n\n return VideoTrack;\n}(Track);\n\nexport var Tracks = function () {\n function Tracks() {\n _classCallCheck(this, Tracks);\n\n this.audioTrack = null;\n this.videoTrack = null;\n }\n\n _createClass(Tracks, [{\n key: 'destroy',\n value: function destroy() {\n this.audioTrack = null;\n this.videoTrack = null;\n }\n }]);\n\n return Tracks;\n}();","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar XgBuffer = function () {\n /**\n * A buffer to store loaded data.\n *\n * @class LoaderBuffer\n * @param {number} length - Optional the buffer size\n */\n function XgBuffer(length) {\n _classCallCheck(this, XgBuffer);\n\n this.length = length || 0;\n this.historyLen = length || 0;\n this.array = [];\n this.offset = 0;\n }\n\n /**\n * The function to push data.\n *\n * @param {Uint8Array} data - The data to push into the buffer\n */\n\n\n _createClass(XgBuffer, [{\n key: \"push\",\n value: function push(data) {\n this.array.push(data);\n this.length += data.byteLength;\n this.historyLen += data.byteLength;\n }\n\n /**\n * The function to shift data.\n *\n * @param {number} length - The size of shift.\n */\n\n }, {\n key: \"shift\",\n value: function shift(length) {\n if (this.array.length < 1) {\n return new Uint8Array(0);\n }\n\n if (length === undefined) {\n return this._shiftBuffer();\n }\n if (this.offset + length === this.array[0].length) {\n var _ret = this.array[0].slice(this.offset, this.offset + length);\n this.offset = 0;\n this.array.shift();\n this.length -= length;\n return _ret;\n }\n\n if (this.offset + length < this.array[0].length) {\n var _ret2 = this.array[0].slice(this.offset, this.offset + length);\n this.offset += length;\n this.length -= length;\n return _ret2;\n }\n\n var ret = new Uint8Array(length);\n var tmpoff = 0;\n while (this.array.length > 0 && length > 0) {\n if (this.offset + length < this.array[0].length) {\n var tmp = this.array[0].slice(this.offset, this.offset + length);\n ret.set(tmp, tmpoff);\n this.offset += length;\n this.length -= length;\n length = 0;\n break;\n } else {\n // console.log('mark1')\n var templength = this.array[0].length - this.offset;\n ret.set(this.array[0].slice(this.offset, this.array[0].length), tmpoff);\n this.array.shift();\n this.offset = 0;\n tmpoff += templength;\n this.length -= templength;\n length -= templength;\n }\n }\n return ret;\n }\n\n /**\n * Function to clear the buffer.\n */\n\n }, {\n key: \"clear\",\n value: function clear() {\n this.array = [];\n this.length = 0;\n this.offset = 0;\n }\n }, {\n key: \"destroy\",\n value: function destroy() {\n this.clear();\n this.historyLen = 0;\n }\n\n /**\n * Function to shift one unit8Array.\n */\n\n }, {\n key: \"_shiftBuffer\",\n value: function _shiftBuffer() {\n this.length -= this.array[0].length;\n this.offset = 0;\n return this.array.shift();\n }\n\n /**\n * Convert uint8 data to number.\n *\n * @param {number} start - the start postion.\n * @param {number} length - the length of data.\n */\n\n }, {\n key: \"toInt\",\n value: function toInt(start, length) {\n var retInt = 0;\n var i = this.offset + start;\n while (i < this.offset + length + start) {\n if (i < this.array[0].length) {\n retInt = retInt * 256 + this.array[0][i];\n } else if (this.array[1]) {\n retInt = retInt * 256 + this.array[1][i - this.array[0].length];\n }\n\n i++;\n }\n return retInt;\n }\n }]);\n\n return XgBuffer;\n}();\n\nexport default XgBuffer;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nexport var AudioTrackMeta = function () {\n function AudioTrackMeta(meta) {\n _classCallCheck(this, AudioTrackMeta);\n\n var _default = {\n sampleRate: 48000,\n channelCount: 2,\n codec: 'mp4a.40.2',\n config: [41, 401, 136, 0],\n duration: 0,\n id: 2,\n refSampleDuration: 21,\n sampleRateIndex: 3,\n timescale: 1000,\n type: 'audio'\n };\n if (meta) {\n return Object.assign({}, _default, meta);\n }\n return _default;\n }\n\n _createClass(AudioTrackMeta, [{\n key: 'destroy',\n value: function destroy() {\n this.init = null;\n }\n }]);\n\n return AudioTrackMeta;\n}();\n\nexport var VideoTrackMeta = function () {\n function VideoTrackMeta(meta) {\n _classCallCheck(this, VideoTrackMeta);\n\n var _default = {\n avcc: null,\n sps: new Uint8Array(0),\n pps: new Uint8Array(0),\n chromaFormat: 420,\n codec: 'avc1.640020',\n codecHeight: 720,\n codecWidth: 1280,\n duration: 0,\n frameRate: {\n fixed: true,\n fps: 25,\n fps_num: 25000,\n fps_den: 1000\n },\n id: 1,\n level: '3.2',\n presentHeight: 720,\n presentWidth: 1280,\n profile: 'High',\n refSampleDuration: 40,\n parRatio: {\n height: 1,\n width: 1\n },\n timescale: 1000,\n type: 'video'\n };\n\n if (meta) {\n return Object.assign({}, _default, meta);\n }\n return _default;\n }\n\n _createClass(VideoTrackMeta, [{\n key: 'destroy',\n value: function destroy() {\n this.init = null;\n this.sps = null;\n this.pps = null;\n }\n }]);\n\n return VideoTrackMeta;\n}();","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @typedef {Object} TAudioSample\n * @property {number} dts\n * @property {number} pts\n * @property {number} originDts\n * @property {Uint8Array} data\n */\n\n/**\n * @typedef {Object} TVideoSample\n * @property {number} dts\n * @property {number} pts\n * @property {boolean} isKeyframe\n * @property {number} originDts\n * @property {Uint8Array} data\n * @property {Array} nals\n */\n\nexport var AudioSample = function () {\n function AudioSample(info) {\n _classCallCheck(this, AudioSample);\n\n var _default = AudioSample.getDefault();\n if (!info) {\n return _default;\n }\n return Object.assign({}, _default, info);\n }\n\n /**\n * default audio sample\n * @return {TAudioSample}\n */\n\n\n _createClass(AudioSample, null, [{\n key: \"getDefault\",\n value: function getDefault() {\n return {\n dts: -1,\n pts: -1,\n originDts: -1,\n data: new Uint8Array()\n };\n }\n }]);\n\n return AudioSample;\n}();\n\nexport var VideoSample = function () {\n /**\n * @constructor\n * @param info\n * @return {TVideoSample}\n */\n function VideoSample(info) {\n _classCallCheck(this, VideoSample);\n\n var _default = VideoSample.getDefault();\n\n if (!info) {\n return _default;\n }\n var sample = Object.assign({}, _default, info);\n\n return sample;\n }\n\n /**\n * default video sample\n * @return {TVideoSample}\n */\n\n\n _createClass(VideoSample, null, [{\n key: \"getDefault\",\n value: function getDefault() {\n return {\n dts: -1,\n pts: undefined,\n isKeyframe: false, // is Random access point\n originDts: -1,\n data: new Uint8Array(),\n nals: []\n };\n }\n }]);\n\n return VideoSample;\n}();","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @typedef {Object} VideoMediaInfo\n * @property {string|null} codec\n * @property {number|null} width\n * @property {number|null} height\n * @property {string|null} profile\n * @property {{fixed: boolean,fps: number,fps_num: number,fps_den: number}} frameRate\n * @property {string|null} chromaFormat\n * @property {{width:number,height:number}} parRatio\n */\n\n/**\n * @typedef {Object} AudioMediaInfo\n * @property {string|null} codec\n * @property {number|null} sampleRate\n * @property {number|null} sampleRateIndex\n * @property {number|null} channelCount\n */\n\n/**\n * @param {Object} obj\n * @return {boolean}\n */\nvar isObjectFilled = function isObjectFilled(obj) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n if (obj[key] === null) {\n return false;\n }\n }\n }\n return true;\n};\n\nvar MediaInfo = function () {\n function MediaInfo() {\n _classCallCheck(this, MediaInfo);\n\n this.mimeType = null;\n this.duration = null;\n\n /** @type {boolean} */\n this.hasVideo = false;\n /**\n * video media info\n * @type {VideoMediaInfo}\n */\n this.video = {\n codec: null,\n width: null,\n height: null,\n profile: null,\n level: null,\n frameRate: {\n fixed: true,\n fps: 25,\n fps_num: 25000,\n fps_den: 1000\n },\n chromaFormat: null,\n parRatio: {\n width: 1,\n height: 1\n }\n /** @type {boolean} */\n };this.hasAudio = false;\n\n /**\n * video media info\n * @type {AudioMediaInfo}\n */\n this.audio = {\n codec: null,\n sampleRate: null,\n sampleRateIndex: null,\n channelCount: null\n };\n }\n\n _createClass(MediaInfo, [{\n key: \"isComplete\",\n value: function isComplete() {\n return MediaInfo.isBaseInfoReady(this) && MediaInfo.isVideoReady(this) && MediaInfo.isAudioReady(this);\n }\n }], [{\n key: \"isBaseInfoReady\",\n value: function isBaseInfoReady(mediaInfo) {\n return isObjectFilled(mediaInfo);\n }\n }, {\n key: \"isVideoReady\",\n value: function isVideoReady(mediaInfo) {\n if (!mediaInfo.hasVideo) {\n return true;\n }\n\n return isObjectFilled(mediaInfo.video);\n }\n }, {\n key: \"isAudioReady\",\n value: function isAudioReady(mediaInfo) {\n if (!mediaInfo.hasAudio) {\n return true;\n }\n\n return isObjectFilled(mediaInfo.video);\n }\n }]);\n\n return MediaInfo;\n}();\n\nexport default MediaInfo;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/**\n * @typedef {Object} TsFragProps\n * @property {number} start\n * @property {number} duration\n * @property {string} url\n * @property {boolean} discontinue\n * @property {number} id\n * @property {number} cc\n */\nvar TsFrag = function () {\n _createClass(TsFrag, null, [{\n key: 'getDefault',\n\n /**\n *\n * @return TsFrag\n */\n value: function getDefault() {\n return {\n id: -1,\n url: '',\n start: -1,\n duration: -1,\n discontinue: false,\n cc: -1\n };\n }\n /**\n *\n * @param {TsFragProps} props\n */\n\n }]);\n\n function TsFrag(props) {\n _classCallCheck(this, TsFrag);\n\n var merged = Object.assign({}, TsFrag.getDefault(), props);\n\n this.id = merged.id;\n\n this.url = merged.url;\n\n this.start = merged.start;\n\n this.duration = merged.duration;\n\n this.discontinue = merged.discontinue;\n\n this.cc = merged.cc;\n }\n\n return TsFrag;\n}();\n\nexport default TsFrag;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport EVENTS from '../events';\nimport { MediaInfo } from 'xgplayer-helper-models';\nimport EventEmitter from 'eventemitter3';\n\nvar DIRECT_EMIT_FLAG = '__TO__';\n\nvar Context = function () {\n /**\n *\n * @param {*} player\n * @param {*} configs\n * @param {string[]}allowedEvents\n */\n function Context(player, configs) {\n var allowedEvents = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n _classCallCheck(this, Context);\n\n this._emitter = new EventEmitter();\n if (!this._emitter.off) {\n this._emitter.off = this._emitter.removeListener;\n }\n\n this.mediaInfo = new MediaInfo();\n this._instanceMap = {}; // 所有的解码流程实例\n this._clsMap = {}; // 构造函数的map\n this._inited = false;\n this.allowedEvents = allowedEvents;\n this._configs = configs;\n this._player = player;\n this._hooks = {}; // 注册在事件前/后的钩子,例如 before('DEMUX_COMPLETE')\n }\n\n /**\n * 从上下文中获取解码流程实例,如果没有实例,构造一个\n * @param {string} tag\n * @returns {*}\n */\n\n\n _createClass(Context, [{\n key: 'getInstance',\n value: function getInstance(tag) {\n var instance = this._instanceMap[tag];\n if (instance) {\n return instance;\n } else {\n // throw new Error(`${tag}实例尚未初始化`)\n return null;\n }\n }\n\n /**\n * 初始化具体实例\n * @param {string} tag\n * @param {any[]}args\n */\n\n }, {\n key: 'initInstance',\n value: function initInstance(tag) {\n for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n\n var a = args[0],\n b = args[1],\n c = args[2],\n d = args[3];\n\n if (this._clsMap[tag]) {\n var newInstance = new this._clsMap[tag](a, b, c, d);\n this._instanceMap[tag] = newInstance;\n if (newInstance.init) {\n newInstance.init(); // TODO: lifecircle\n }\n return newInstance;\n } else {\n throw new Error(tag + '\\u672A\\u5728context\\u4E2D\\u6CE8\\u518C');\n }\n }\n\n /**\n * 避免大量的initInstance调用,初始化所有的组件\n * @param {*} config\n */\n\n }, {\n key: 'init',\n value: function init(config) {\n if (this._inited) {\n return;\n }\n for (var tag in this._clsMap) {\n // if not inited, init an instance\n if (this._clsMap.hasOwnProperty(tag) && !this._instanceMap[tag]) {\n this.initInstance(tag, config);\n }\n }\n this._inited = true;\n }\n\n /**\n * 注册一个上下文流程,提供安全的事件发送机制\n * @param {string} tag\n * @param {*} cls\n */\n\n }, {\n key: 'registry',\n value: function registry(tag, cls) {\n var _this2 = this;\n\n var emitter = this._emitter;\n var checkMessageName = this._isMessageNameValid.bind(this);\n var self = this;\n var enhanced = function (_cls) {\n _inherits(enhanced, _cls);\n\n function enhanced(a, b, c) {\n _classCallCheck(this, enhanced);\n\n var _this = _possibleConstructorReturn(this, (enhanced.__proto__ || Object.getPrototypeOf(enhanced)).call(this, a, b, c));\n\n _this.listeners = {};\n _this.onceListeners = {};\n _this.TAG = tag;\n _this._context = self;\n return _this;\n }\n\n /**\n * @param {string} messageName\n * @param {function} callback\n */\n\n\n _createClass(enhanced, [{\n key: 'on',\n value: function on(messageName, callback) {\n checkMessageName(messageName);\n\n if (this.listeners[messageName]) {\n this.listeners[messageName].push(callback);\n } else {\n this.listeners[messageName] = [callback];\n }\n\n emitter.on('' + messageName + DIRECT_EMIT_FLAG + tag, callback); // 建立定向通信监听\n return emitter.on(messageName, callback);\n }\n\n /**\n * @param {string} messageName\n * @param {function} callback\n */\n\n }, {\n key: 'before',\n value: function before(messageName, callback) {\n checkMessageName(messageName);\n if (self._hooks[messageName]) {\n self._hooks[messageName].push(callback);\n } else {\n self._hooks[messageName] = [callback];\n }\n }\n\n /**\n * @param {string} messageName\n * @param {function} callback\n */\n\n }, {\n key: 'once',\n value: function once(messageName, callback) {\n checkMessageName(messageName);\n\n if (this.onceListeners[messageName]) {\n this.onceListeners[messageName].push(callback);\n } else {\n this.onceListeners[messageName] = [callback];\n }\n\n emitter.once('' + messageName + DIRECT_EMIT_FLAG + tag, callback);\n return emitter.once(messageName, callback);\n }\n\n /**\n * @param {string} messageName\n * @param {any[]} args\n */\n\n }, {\n key: 'emit',\n value: function emit(messageName) {\n checkMessageName(messageName);\n // console.log('emit ', messageName);\n\n var beforeList = self._hooks ? self._hooks[messageName] : null;\n\n for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n if (beforeList) {\n for (var i = 0, len = beforeList.length; i < len; i++) {\n var callback = beforeList[i];\n // eslint-disable-next-line standard/no-callback-literal\n callback.apply(undefined, args);\n }\n }\n return emitter.emit.apply(emitter, [messageName].concat(args));\n }\n\n /**\n * 定向发送给某个组件单例的消息\n * @param {string} messageName\n * @param {any[]} args\n */\n\n }, {\n key: 'emitTo',\n value: function emitTo(tag, messageName) {\n checkMessageName(messageName);\n\n for (var _len3 = arguments.length, args = Array(_len3 > 2 ? _len3 - 2 : 0), _key3 = 2; _key3 < _len3; _key3++) {\n args[_key3 - 2] = arguments[_key3];\n }\n\n return emitter.emit.apply(emitter, ['' + messageName + DIRECT_EMIT_FLAG + tag].concat(args));\n }\n\n /**\n * 定向发送给某个组件单例的消息\n * @param {string} messageName\n * @param {function} callback\n */\n\n }, {\n key: 'off',\n value: function off(messageName, callback) {\n checkMessageName(messageName);\n return emitter.off(messageName, callback);\n }\n }, {\n key: 'removeListeners',\n value: function removeListeners() {\n var hasOwn = Object.prototype.hasOwnProperty.bind(this.listeners);\n\n for (var messageName in this.listeners) {\n if (hasOwn(messageName)) {\n var callbacks = this.listeners[messageName] || [];\n for (var i = 0; i < callbacks.length; i++) {\n var callback = callbacks[i];\n emitter.off(messageName, callback);\n emitter.off('' + messageName + DIRECT_EMIT_FLAG + tag, callback);\n }\n }\n }\n\n for (var _messageName in this.onceListeners) {\n if (hasOwn(_messageName)) {\n var _callbacks = this.onceListeners[_messageName] || [];\n for (var _i = 0; _i < _callbacks.length; _i++) {\n var _callback = _callbacks[_i];\n emitter.off(_messageName, _callback);\n emitter.off('' + _messageName + DIRECT_EMIT_FLAG + tag, _callback);\n }\n }\n }\n }\n\n /**\n * 在组件销毁时,默认将它注册的事件全部卸载,确保不会造成内存泄漏\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n // step1 unlisten events\n this.removeListeners();\n this.listeners = {};\n // step2 release from context\n delete self._instanceMap[tag];\n if (_get(enhanced.prototype.__proto__ || Object.getPrototypeOf(enhanced.prototype), 'destroy', this)) {\n return _get(enhanced.prototype.__proto__ || Object.getPrototypeOf(enhanced.prototype), 'destroy', this).call(this);\n }\n this._context = null;\n }\n }, {\n key: '_player',\n get: function get() {\n if (!this._context) {\n return null;\n }\n return this._context._player;\n },\n set: function set(v) {\n if (this._context) {\n this._context._player = v;\n }\n }\n }, {\n key: '_pluginConfig',\n get: function get() {\n if (!this._context) {\n return null;\n }\n return this._context._configs;\n }\n }]);\n\n return enhanced;\n }(cls);\n this._clsMap[tag] = enhanced;\n\n /**\n * get instance immediately\n * e.g const instance = context.registry(tag, Cls)(config)\n * */\n return function () {\n for (var _len4 = arguments.length, args = Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n return _this2.initInstance.apply(_this2, [tag].concat(args));\n };\n }\n\n /**\n * 各个模块处理seek\n * @param {number} time\n */\n\n }, {\n key: 'seek',\n value: function seek(time) {\n this._emitter.emit(EVENTS.PLAYER_EVENTS.SEEK, time);\n }\n\n /**\n * 对存在的实例进行\n */\n\n }, {\n key: 'destroyInstances',\n value: function destroyInstances() {\n var _this3 = this;\n\n Object.keys(this._instanceMap).forEach(function (tag) {\n if (_this3._instanceMap[tag].destroy) {\n _this3._instanceMap[tag].destroy();\n }\n });\n }\n\n /**\n * 编解码流程无需关注事件的解绑\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.destroyInstances();\n if (this._emitter) {\n this._emitter.removeAllListeners();\n }\n this._emitter = null;\n this.allowedEvents = [];\n this._clsMap = null;\n this._hooks = null;\n this._player = null;\n this._configs = null;\n }\n\n /**\n * 对信道进行收拢\n * @param {string} messageName\n * @private\n */\n\n }, {\n key: '_isMessageNameValid',\n value: function _isMessageNameValid(messageName) {\n if (!this.allowedEvents.indexOf(messageName) < 0) {\n throw new Error('unregistered message name: ' + messageName);\n }\n }\n }]);\n\n return Context;\n}();\n\nexport default Context;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport EVENTS from '../events';\n\nvar CRYPTO_EVENTS = EVENTS.CRYPTO_EVENTS;\n\nvar Crypto = function () {\n function Crypto(config) {\n _classCallCheck(this, Crypto);\n\n this.inputBuffer = config.inputbuffer;\n this.outputBuffer = config.outputbuffer;\n this.key = config.key;\n this.iv = config.iv;\n this.method = config.method;\n\n this.crypto = window.crypto || window.msCrypto;\n }\n\n _createClass(Crypto, [{\n key: 'init',\n value: function init() {\n this.on(CRYPTO_EVENTS.START_DECRYPTO, this.decrypto.bind(this));\n }\n }, {\n key: 'decrypto',\n value: function decrypto() {\n var _this = this;\n\n if (!this.aeskey) {\n var sbkey = this.crypto.subtle.importKey('raw', this.key.buffer, { name: 'AES-CBC' }, false, ['encrypt', 'decrypt']);\n sbkey.then(function (key) {\n _this.aeskey = key;\n _this.decryptoData();\n });\n } else {\n this.decryptoData();\n }\n }\n }, {\n key: 'decryptoData',\n value: function decryptoData() {\n var _this2 = this;\n\n var inputbuffer = this._context.getInstance(this.inputBuffer);\n var outputbuffer = this._context.getInstance(this.outputBuffer);\n var data = inputbuffer.shift();\n if (data) {\n this.crypto.subtle.decrypt({ name: 'AES-CBC', iv: this.iv.buffer }, this.aeskey, data).then(function (res) {\n outputbuffer.push(new Uint8Array(res));\n _this2.emit(CRYPTO_EVENTS.DECRYPTED);\n _this2.decryptoData(data);\n });\n }\n }\n }]);\n\n return Crypto;\n}();\n\nexport default Crypto;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport EVENTS from '../events';\n\nvar MSE_EVENTS = EVENTS.MSE_EVENTS;\n\nvar MSE = function () {\n function MSE(configs, context) {\n _classCallCheck(this, MSE);\n\n if (context) {\n this._context = context;\n this.emit = context._emitter.emit.bind(context._emitter);\n }\n\n this.TAG = 'MSE';\n\n this.configs = Object.assign({}, configs);\n this.container = this.configs.container;\n this.format = this.configs.format; // hls | flv\n this.mediaSource = null;\n this.sourceBuffers = {};\n this.preloadTime = this.configs.preloadTime || 1;\n this.onSourceOpen = this.onSourceOpen.bind(this);\n this.onTimeUpdate = this.onTimeUpdate.bind(this);\n this.onUpdateEnd = this.onUpdateEnd.bind(this);\n this.onWaiting = this.onWaiting.bind(this);\n this.opened = false;\n }\n\n _createClass(MSE, [{\n key: 'init',\n value: function init() {\n // eslint-disable-next-line no-undef\n this.mediaSource = new self.MediaSource();\n this.mediaSource.addEventListener('sourceopen', this.onSourceOpen);\n this._url = null;\n this.container.addEventListener('timeupdate', this.onTimeUpdate);\n this.container.addEventListener('waiting', this.onWaiting);\n }\n }, {\n key: 'resetContext',\n value: function resetContext(newCtx, keepBuffer) {\n this._context = newCtx;\n this.emit = newCtx._emitter.emit.bind(newCtx._emitter);\n if (!keepBuffer) {\n for (var i = 0; i < Object.keys(this.sourceBuffers).length; i++) {\n var buffer = this.sourceBuffers[Object.keys(this.sourceBuffers)[i]];\n if (!buffer.updating) {\n MSE.clearBuffer(buffer);\n }\n }\n }\n }\n }, {\n key: 'onTimeUpdate',\n value: function onTimeUpdate() {\n this.emit('TIME_UPDATE', this.container);\n }\n }, {\n key: 'onWaiting',\n value: function onWaiting() {\n this.emit('WAITING', this.container);\n }\n }, {\n key: 'onSourceOpen',\n value: function onSourceOpen() {\n this.opened = true;\n this.addSourceBuffers();\n }\n }, {\n key: 'onUpdateEnd',\n value: function onUpdateEnd() {\n this.emit(MSE_EVENTS.SOURCE_UPDATE_END);\n this.doAppend();\n }\n }, {\n key: 'addSourceBuffers',\n value: function addSourceBuffers() {\n if (!this.mediaSource || this.mediaSource.readyState !== 'open' || !this.opened) {\n return;\n }\n var sources = this._context.getInstance('PRE_SOURCE_BUFFER');\n var tracks = this._context.getInstance('TRACKS');\n var track = void 0;\n if (!sources || !tracks) {\n return;\n }\n\n sources = sources.sources;\n var add = false;\n for (var i = 0, k = Object.keys(sources).length; i < k; i++) {\n var type = Object.keys(sources)[i];\n add = false;\n if (type === 'audio') {\n track = tracks.audioTrack;\n } else if (type === 'video') {\n track = tracks.videoTrack;\n // return;\n }\n if (track && sources[type].init !== null && sources[type].data.length) {\n add = true;\n }\n }\n\n if (add) {\n if (Object.keys(this.sourceBuffers).length > 1) {\n return;\n }\n for (var _i = 0, _k = Object.keys(sources).length; _i < _k; _i++) {\n var _type = Object.keys(sources)[_i];\n if (this.sourceBuffers[_type]) {\n continue;\n }\n var source = sources[_type];\n var mime = _type === 'video' ? 'video/mp4;codecs=' + source.mimetype : 'audio/mp4;codecs=' + source.mimetype;\n\n try {\n // console.log('add sourcebuffer', mime);\n var sourceBuffer = this.mediaSource.addSourceBuffer(mime);\n this.sourceBuffers[_type] = sourceBuffer;\n sourceBuffer.addEventListener('updateend', this.onUpdateEnd);\n } catch (e) {\n if (e.code === 22 && Object.keys(this.sourceBuffers).length > 0) {\n return this.emit(MSE_EVENTS.MSE_WRONG_TRACK_ADD, _type);\n }\n this.emit(MSE_EVENTS.MSE_ERROR, this.TAG, new Error(e.message));\n }\n }\n if (Object.keys(this.sourceBuffers).length === this.sourceBufferLen) {\n this.doAppend();\n }\n }\n }\n }, {\n key: 'doAppend',\n value: function doAppend() {\n if (!this.mediaSource || this.mediaSource.readyState === 'closed') return;\n this._doCleanupSourceBuffer();\n var sources = this._context.getInstance('PRE_SOURCE_BUFFER');\n if (!sources) return;\n if (Object.keys(this.sourceBuffers).length < this.sourceBufferLen) {\n return;\n }\n for (var i = 0; i < Object.keys(this.sourceBuffers).length; i++) {\n var type = Object.keys(this.sourceBuffers)[i];\n var sourceBuffer = this.sourceBuffers[type];\n if (sourceBuffer.updating) continue;\n var source = sources.sources[type];\n if (this['no' + type]) {\n source.data = [];\n source.init.buffer = null;\n continue;\n }\n if (source && !source.inited) {\n try {\n // console.log('append init buffer: ', type)\n sourceBuffer.appendBuffer(source.init.buffer.buffer);\n source.inited = true;\n } catch (e) {\n // DO NOTHING\n }\n } else if (source) {\n var data = source.data.shift();\n if (data) {\n try {\n // console.log('append buffer: ', type);\n sourceBuffer.appendBuffer(data.buffer.buffer);\n } catch (e) {\n source.data.unshift(data);\n }\n }\n }\n }\n }\n }, {\n key: 'endOfStream',\n value: function endOfStream() {\n try {\n var readyState = this.mediaSource.readyState;\n\n if (readyState === 'open') {\n this.mediaSource.endOfStream();\n }\n } catch (e) {}\n }\n }, {\n key: 'remove',\n value: function remove(end) {\n var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n try {\n for (var i = 0; i < Object.keys(this.sourceBuffers).length; i++) {\n var buffer = this.sourceBuffers[Object.keys(this.sourceBuffers)[i]];\n if (!buffer.updating) {\n if (end > start) {\n buffer.remove(start, end);\n }\n }\n }\n } catch (e) {}\n }\n }, {\n key: '_doCleanupSourceBuffer',\n value: function _doCleanupSourceBuffer() {\n var currentTime = this.container.currentTime;\n var autoCleanupMinBackwardDuration = 60 * 3;\n var _pendingRemoveRanges = {\n video: [],\n audio: []\n };\n for (var i = 0; i < Object.keys(this.sourceBuffers).length; i++) {\n var type = Object.keys(this.sourceBuffers)[i];\n var sourceBuffer = this.sourceBuffers[type];\n var buffered = sourceBuffer.buffered;\n var doRemove = false;\n for (var j = 0; j < buffered.length; j++) {\n var start = buffered.start(j);\n var end = buffered.end(j);\n if (start <= currentTime && currentTime < end + 3) {\n if (currentTime - start >= autoCleanupMinBackwardDuration) {\n doRemove = true;\n var removeEnd = currentTime - autoCleanupMinBackwardDuration;\n _pendingRemoveRanges[type].push({ start: start, end: removeEnd });\n }\n } else if (end < currentTime && currentTime - start >= autoCleanupMinBackwardDuration) {\n doRemove = true;\n _pendingRemoveRanges[type].push({ start: start, end: end });\n }\n }\n if (doRemove && !sourceBuffer.updating) {\n this._doRemoveRanges(_pendingRemoveRanges);\n }\n }\n }\n }, {\n key: '_doRemoveRanges',\n value: function _doRemoveRanges(_pendingRemoveRanges) {\n for (var type in _pendingRemoveRanges) {\n if (!this.sourceBuffers[type] || this.sourceBuffers[type].updating) {\n continue;\n }\n var sb = this.sourceBuffers[type];\n var ranges = _pendingRemoveRanges[type];\n while (ranges.length && !sb.updating) {\n var range = ranges.shift();\n try {\n if (range && range.end > range.start) {\n sb.remove(range.start, range.end);\n }\n } catch (e) {}\n }\n }\n }\n }, {\n key: 'cleanBuffers',\n value: function cleanBuffers() {\n var _this = this;\n\n var taskList = [];\n\n var _loop = function _loop(i) {\n var buffer = _this.sourceBuffers[Object.keys(_this.sourceBuffers)[i]];\n\n var task = void 0;\n if (buffer.updating) {\n task = new Promise(function (resolve) {\n var doCleanBuffer = function doCleanBuffer() {\n var retryTime = 3;\n\n var clean = function clean() {\n if (!buffer.updating) {\n MSE.clearBuffer(buffer);\n buffer.addEventListener('updateend', function () {\n resolve();\n });\n } else if (retryTime > 0) {\n setTimeout(clean, 200);\n retryTime--;\n } else {\n resolve();\n }\n };\n\n setTimeout(clean, 200);\n buffer.removeEventListener('updateend', doCleanBuffer);\n };\n buffer.addEventListener('updateend', doCleanBuffer);\n });\n } else {\n task = new Promise(function (resolve) {\n MSE.clearBuffer(buffer);\n buffer.addEventListener('updateend', function () {\n resolve();\n });\n });\n\n // task = Promise.resolve()\n }\n\n taskList.push(task);\n };\n\n for (var i = 0; i < Object.keys(this.sourceBuffers).length; i++) {\n _loop(i);\n }\n\n return Promise.all(taskList);\n }\n }, {\n key: 'removeBuffers',\n value: function removeBuffers() {\n var _this2 = this;\n\n var taskList = [];\n\n var _loop2 = function _loop2(i) {\n var buffer = _this2.sourceBuffers[Object.keys(_this2.sourceBuffers)[i]];\n buffer.removeEventListener('updateend', _this2.onUpdateEnd);\n\n var task = void 0;\n if (buffer.updating) {\n task = new Promise(function (resolve) {\n var doCleanBuffer = function doCleanBuffer() {\n var retryTime = 3;\n\n var clean = function clean() {\n if (!buffer.updating) {\n MSE.clearBuffer(buffer);\n buffer.addEventListener('updateend', function () {\n resolve();\n });\n } else if (retryTime > 0) {\n setTimeout(clean, 200);\n retryTime--;\n } else {\n resolve();\n }\n };\n\n setTimeout(clean, 200);\n buffer.removeEventListener('updateend', doCleanBuffer);\n };\n buffer.addEventListener('updateend', doCleanBuffer);\n });\n } else {\n task = new Promise(function (resolve) {\n MSE.clearBuffer(buffer);\n buffer.addEventListener('updateend', function () {\n resolve();\n });\n });\n\n // task = Promise.resolve()\n }\n\n taskList.push(task);\n };\n\n for (var i = 0; i < Object.keys(this.sourceBuffers).length; i++) {\n _loop2(i);\n }\n\n return Promise.all(taskList);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var _this3 = this;\n\n if (!this.container) return Promise.resolve();\n this.container.removeEventListener('timeupdate', this.onTimeUpdate);\n this.container.removeEventListener('waiting', this.onWaiting);\n this.mediaSource.removeEventListener('sourceopen', this.onSourceOpen);\n return this.removeBuffers().then(function () {\n var sources = Object.keys(_this3.sourceBuffers);\n for (var i = 0; i < sources.length; i++) {\n var _buffer = _this3.sourceBuffers[sources[i]];\n delete _this3.sourceBuffers[sources[i]];\n\n if (_this3.mediaSource.readyState === 'open') {\n _this3.mediaSource.removeSourceBuffer(_buffer);\n }\n }\n\n _this3.endOfStream();\n try {\n window.URL.revokeObjectURL(_this3.url);\n } catch (e) {}\n\n _this3.url = null;\n _this3.configs = {};\n _this3.container = null;\n _this3.mediaSource = null;\n _this3.sourceBuffers = {};\n _this3.preloadTime = 1;\n\n _this3.onSourceOpen = null;\n _this3.onTimeUpdate = null;\n _this3.onUpdateEnd = null;\n _this3.onWaiting = null;\n _this3.noaudio = undefined;\n _this3.novideo = undefined;\n });\n }\n }, {\n key: 'sourceBufferLen',\n get: function get() {\n if (!this._context.mediaInfo) {\n if (this.noaudio || this.novideo) return 1;\n return 2;\n }\n return (!!this._context.mediaInfo.hasVideo && !this.novideo) + (!!this._context.mediaInfo.hasAudio && !this.noaudio);\n }\n }, {\n key: 'url',\n set: function set(val) {\n this._url = val;\n },\n get: function get() {\n if (!this._url) {\n try {\n this._url = window.URL.createObjectURL(this.mediaSource);\n } catch (e) {}\n }\n return this._url;\n }\n }], [{\n key: 'clearBuffer',\n value: function clearBuffer(buffer) {\n try {\n var buffered = buffer.buffered;\n var bEnd = 0.1;\n for (var i = 0, len = buffered.length; i < len; i++) {\n bEnd = buffered.end(i);\n }\n buffer.remove(0, bEnd);\n } catch (e) {\n // DO NOTHING\n }\n }\n }]);\n\n return MSE;\n}();\n\nexport default MSE;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Speed = function () {\n function Speed() {\n _classCallCheck(this, Speed);\n\n // milliseconds\n this._firstCheckpoint = 0;\n this._lastCheckpoint = 0;\n this._intervalBytes = 0;\n this._lastSamplingBytes = 0;\n\n this._now = Date.now;\n }\n\n _createClass(Speed, [{\n key: \"reset\",\n value: function reset() {\n this._firstCheckpoint = this._lastCheckpoint = 0;\n this._intervalBytes = 0;\n this._lastSamplingBytes = 0;\n }\n }, {\n key: \"addBytes\",\n value: function addBytes(bytes) {\n var duration = this._now() - this._lastCheckpoint;\n if (this._firstCheckpoint === 0) {\n this._firstCheckpoint = this._now();\n this._lastCheckpoint = this._firstCheckpoint;\n this._intervalBytes += bytes;\n } else if (duration < 5000) {\n this._intervalBytes += bytes;\n } else {\n // duration >= 1000\n this._lastSamplingBytes = this._intervalBytes / (duration / 1000);\n this._intervalBytes = bytes;\n this._lastCheckpoint = this._now();\n }\n }\n }, {\n key: \"currentKBps\",\n get: function get() {\n this.addBytes(0);\n\n var durationSeconds = (this._now() - this._lastCheckpoint) / 1000;\n if (durationSeconds === 0) durationSeconds = 1;\n return this._intervalBytes / durationSeconds / 1024;\n }\n }, {\n key: \"lastSamplingKBps\",\n get: function get() {\n this.addBytes(0);\n\n if (this._lastSamplingBytes !== 0) {\n return this._lastSamplingBytes / 1024;\n } else {\n // lastSecondBytes === 0\n if (this._now() - this._lastCheckpoint >= 500) {\n // if time interval since last checkpoint has exceeded 500ms\n // the speed is nearly accurate\n return this.currentKBps;\n } else {\n // We don't know\n return 0;\n }\n }\n }\n }]);\n\n return Speed;\n}();\n\nexport default Speed;","var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport EVENTS from '../events';\nimport Speed from './speed';\n\nvar LOADER_EVENTS = EVENTS.LOADER_EVENTS;\nvar READ_STREAM = 0;\nvar READ_TEXT = 1;\nvar READ_JSON = 2;\nvar READ_BUFFER = 3;\n\nvar FetchLoader = function () {\n function FetchLoader(configs) {\n _classCallCheck(this, FetchLoader);\n\n this.configs = Object.assign({}, configs);\n this.url = null;\n this.status = 0;\n this.error = null;\n this._reader = null;\n this._canceled = false;\n this._destroyed = false;\n this.readtype = this.configs.readtype;\n this.buffer = this.configs.buffer || 'LOADER_BUFFER';\n this._loaderTaskNo = 0;\n this._ttfb = 0;\n this._speed = new Speed();\n if (window.AbortController) {\n this.abortControllerEnabled = true;\n }\n }\n\n _createClass(FetchLoader, [{\n key: 'init',\n value: function init() {\n this.on(LOADER_EVENTS.LADER_START, this.load.bind(this));\n }\n }, {\n key: 'fetch',\n\n\n /**\n * @param {string} url\n * @param {RequestInit} params\n * @param {number} timeout\n * @return {Promise}\n */\n value: function (_fetch) {\n function fetch(_x, _x2, _x3) {\n return _fetch.apply(this, arguments);\n }\n\n fetch.toString = function () {\n return _fetch.toString();\n };\n\n return fetch;\n }(function (url, params, timeout) {\n var _this2 = this;\n\n var timer = null;\n if (this.abortControllerEnabled) {\n this.abortController = new window.AbortController();\n }\n Object.assign(params, { signal: this.abortController ? this.abortController.signal : undefined });\n var start = new Date().getTime();\n return Promise.race([fetch(url, params), new Promise(function (resolve, reject) {\n timer = setTimeout(function () {\n /* eslint-disable-next-line */\n reject({\n code: 999,\n message: 'fetch timeout'\n });\n if (_this2.abortController) {\n _this2.abortController.abort();\n }\n }, timeout || 1e4); // 10s\n })]).then(function (response) {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n var end = new Date().getTime();\n _this2.emit(LOADER_EVENTS.LOADER_TTFB, {\n start: start,\n end: end,\n elapsed: end - start\n });\n return response;\n });\n })\n\n /**\n * @param {string} url\n * @param {RequestInit} params\n * @param {number} retryTimes\n * @param {number} totalRetry\n * @param {number} delayTime\n * @return {Promise<{ok}>}\n */\n\n }, {\n key: 'internalLoad',\n value: function internalLoad(url, params, retryTimes, totalRetry) {\n var _this3 = this;\n\n var delayTime = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var loadTimeout = arguments[5];\n\n if (this._destroyed) return;\n this.loading = true;\n return this.fetch(this.url, params, loadTimeout).then(function (response) {\n !_this3._destroyed && _this3.emit(LOADER_EVENTS.LOADER_RESPONSE_HEADERS, _this3.TAG, response.headers);\n\n if (response.ok) {\n _this3.status = response.status;\n Promise.resolve().then(function () {\n _this3._onFetchResponse(response);\n });\n\n return Promise.resolve(response);\n }\n\n if (retryTimes-- > 0) {\n _this3._retryTimer = setTimeout(function () {\n _this3.emit(LOADER_EVENTS.LOADER_RETRY, _this3.TAG, {\n response: response,\n reason: 'response not ok',\n retryTime: totalRetry - retryTimes\n });\n return _this3.internalLoad(url, params, retryTimes, totalRetry, delayTime, loadTimeout);\n }, delayTime);\n } else {\n _this3.loading = false;\n _this3.emit(LOADER_EVENTS.LOADER_ERROR, _this3.TAG, {\n code: response.status || 21,\n message: response.status + ' (' + response.statusText + ')'\n });\n }\n }).catch(function (error) {\n if (_this3._destroyed) {\n _this3.loading = false;\n return;\n }\n\n if (retryTimes-- > 0) {\n _this3._retryTimer = setTimeout(function () {\n _this3.emit(LOADER_EVENTS.LOADER_RETRY, _this3.TAG, {\n error: error,\n reason: 'fetch error',\n retryTime: totalRetry - retryTimes\n });\n return _this3.internalLoad(url, params, retryTimes, totalRetry, delayTime, loadTimeout);\n }, delayTime);\n } else {\n _this3.loading = false;\n if (error && error.name === 'AbortError') {\n return;\n }\n _this3.emit(LOADER_EVENTS.LOADER_ERROR, _this3.TAG, Object.assign({ code: 21 }, error));\n }\n });\n }\n\n /**\n * @param {string} url\n * @param {RequestInit} opts\n * @param {retryCount, retryDelay, loadTimeout} pluginConfig\n * @return {Promise<{ok}>}\n */\n\n }, {\n key: 'load',\n value: function load(url) {\n var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},\n retryCount = _ref.retryCount,\n retryDelay = _ref.retryDelay,\n loadTimeout = _ref.loadTimeout;\n\n retryCount = retryCount === undefined ? 3 : retryCount;\n this.url = url;\n this._canceled = false;\n\n // TODO: Add Ranges\n var params = this.getParams(opts);\n\n return this.internalLoad(url, params, retryCount, retryCount, retryDelay, loadTimeout);\n }\n }, {\n key: '_onFetchResponse',\n value: function _onFetchResponse(response) {\n var _this4 = this;\n\n var _this = this;\n var buffer = this._context.getInstance(this.buffer);\n this._loaderTaskNo++;\n var taskno = this._loaderTaskNo;\n if (response.ok === true) {\n switch (this.readtype) {\n case READ_JSON:\n response.json().then(function (data) {\n _this.loading = false;\n if (!_this._canceled && !_this._destroyed) {\n if (buffer) {\n buffer.push(data);\n _this.emit(LOADER_EVENTS.LOADER_COMPLETE, buffer);\n } else {\n _this.emit(LOADER_EVENTS.LOADER_COMPLETE, data);\n }\n }\n });\n break;\n case READ_TEXT:\n response.text().then(function (data) {\n _this.loading = false;\n if (!_this._canceled && !_this._destroyed) {\n if (buffer) {\n buffer.push(data);\n _this.emit(LOADER_EVENTS.LOADER_COMPLETE, buffer);\n } else {\n _this.emit(LOADER_EVENTS.LOADER_COMPLETE, data);\n }\n }\n });\n break;\n case READ_BUFFER:\n response.arrayBuffer().then(function (data) {\n _this.loading = false;\n if (!_this._canceled && !_this._destroyed) {\n if (buffer) {\n buffer.push(new Uint8Array(data));\n _this4._speed.addBytes(data.byteLength);\n _this.emit(LOADER_EVENTS.LOADER_COMPLETE, buffer);\n } else {\n _this.emit(LOADER_EVENTS.LOADER_COMPLETE, data);\n }\n }\n }).catch(function () {});\n break;\n case READ_STREAM:\n default:\n return this._onReader(response.body.getReader(), taskno);\n }\n }\n }\n }, {\n key: '_onReader',\n value: function _onReader(reader, taskno) {\n var _this5 = this;\n\n var buffer = this._context.getInstance(this.buffer);\n if (!buffer && this._reader || this._destroyed) {\n try {\n this._reader.cancel();\n } catch (e) {\n // DO NOTHING\n }\n }\n\n this._reader = reader;\n if (this.loading === false) {\n return;\n }\n\n // reader read function returns a Promise. get data when callback and has value.done when disconnected.\n // read方法返回一个Promise. 回调中可以获取到数据。当value.done存在时,说明链接断开。\n this._noDataTimer = setTimeout(function () {\n if (_this5.loading === false) return;\n _this5.emit(LOADER_EVENTS.LOADER_COMPLETE);\n }, 3000);\n this._reader && this._reader.read().then(function (val) {\n clearTimeout(_this5._noDataTimer);\n if (_this5._canceled || _this5._destroyed) {\n if (_this5._reader) {\n try {\n _this5._reader.cancel();\n } catch (e) {\n // DO NOTHING\n }\n }\n return;\n }\n if (val.done) {\n _this5.loading = false;\n _this5.status = 0;\n Promise.resolve().then(function () {\n _this5.emit(LOADER_EVENTS.LOADER_COMPLETE, buffer);\n });\n return;\n }\n\n buffer.push(val.value);\n _this5._speed.addBytes(val.value.byteLength);\n Promise.resolve().then(function () {\n _this5.emit(LOADER_EVENTS.LOADER_DATALOADED, buffer);\n });\n return _this5._onReader(reader, taskno);\n }).catch(function (error) {\n clearTimeout(_this5._noDataTimer);\n _this5.loading = false;\n if (error && error.name === 'AbortError') return;\n _this5.emit(LOADER_EVENTS.LOADER_ERROR, _this5.TAG, error);\n });\n }\n\n /**\n *\n * @param {RequestInit} opts\n * @return {{mode: string, headers: Headers, cache: string, method: string}}\n */\n\n }, {\n key: 'getParams',\n value: function getParams(opts) {\n var options = Object.assign({}, opts);\n var headers = new Headers();\n\n var params = {\n method: 'GET',\n headers: headers,\n mode: 'cors',\n cache: 'default'\n\n // add custmor headers\n // 添加自定义头\n };if (_typeof(this.configs.headers) === 'object') {\n var configHeaders = this.configs.headers;\n for (var key in configHeaders) {\n if (configHeaders.hasOwnProperty(key)) {\n headers.append(key, configHeaders[key]);\n }\n }\n }\n\n if (_typeof(options.headers) === 'object') {\n var optHeaders = options.headers;\n for (var _key in optHeaders) {\n if (optHeaders.hasOwnProperty(_key)) {\n headers.append(_key, optHeaders[_key]);\n }\n }\n }\n\n if (options.cors === false) {\n params.mode = 'same-origin';\n }\n\n // withCredentials is disabled by default\n // withCredentials 在默认情况下不被使用。\n if (options.withCredentials) {\n params.credentials = 'include';\n }\n\n // TODO: Add ranges;\n return params;\n }\n\n // in KB/s\n\n }, {\n key: 'cancel',\n value: function cancel() {\n if (this._reader) {\n try {\n this._reader.cancel();\n } catch (e) {\n // 防止failed: 200错误被打印到控制台上\n }\n this._reader = null;\n this.loading = false;\n }\n clearTimeout(this._noDataTimer);\n this._canceled = true;\n if (this.abortController) {\n this.abortController.abort();\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this._destroyed = true;\n clearTimeout(this._retryTimer);\n clearTimeout(this._noDataTimer);\n this.cancel();\n this._speed.reset();\n }\n }, {\n key: 'currentSpeed',\n get: function get() {\n return this._speed.lastSamplingKBps;\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n return !!window.fetch;\n }\n }, {\n key: 'type',\n get: function get() {\n return 'loader';\n }\n }]);\n\n return FetchLoader;\n}();\n\nexport default FetchLoader;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar DevLogger = function () {\n function DevLogger() {\n var _this = this;\n\n _classCallCheck(this, DevLogger);\n\n try {\n var matched = /xgd=(\\d)/.exec(document.cookie);\n this._status = !!matched;\n this._level = matched && matched[1];\n } catch (e) {\n this._status = false;\n }\n\n ['group', 'groupEnd', 'log', 'warn', 'error'].forEach(function (funName) {\n _this[funName] = function (arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10) {\n var _console;\n\n if (!_this._status) return;\n var tagName = arg1;\n var args = [arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10].filter(function (x) {\n return x !== undefined;\n });\n (_console = console)[funName].apply(_console, ['[' + tagName + ']:'].concat(_toConsumableArray(args)));\n };\n });\n }\n\n /**\n * @return {*|boolean|boolean}\n */\n\n\n _createClass(DevLogger, [{\n key: 'enable',\n get: function get() {\n return this._status;\n }\n\n /**\n * @return {boolean}\n */\n\n }, {\n key: 'long',\n get: function get() {\n return this._level === '2';\n }\n }]);\n\n return DevLogger;\n}();\n\nexport default new DevLogger();","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { EVENTS, FetchLoader, Crypto } from 'xgplayer-helper-utils';\n\nimport Player from 'xgplayer';\n\nvar LOADER_EVENTS = EVENTS.LOADER_EVENTS;\nvar REMUX_EVENTS = EVENTS.REMUX_EVENTS;\nvar DEMUX_EVENTS = EVENTS.DEMUX_EVENTS;\nvar HLS_EVENTS = EVENTS.HLS_EVENTS;\nvar CRYTO_EVENTS = EVENTS.CRYTO_EVENTS;\nvar MSE_EVENTS = EVENTS.MSE_EVENTS;\nvar HLS_ERROR = 'HLS_ERROR';\n\nvar MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\n\\r]*)[\\r\\n]+([^\\r\\n]+)/g;\n\nvar HlsLiveController = function () {\n function HlsLiveController(configs) {\n _classCallCheck(this, HlsLiveController);\n\n this.configs = Object.assign({}, configs);\n this.url = '';\n this.sequence = 0;\n this._playlist = null;\n this.retrytimes = this.configs.retrytimes || 3;\n this.preloadTime = this.configs.preloadTime;\n this.container = this.configs.container;\n this._m3u8lasttime = 0;\n this._timmer = setInterval(this._checkStatus.bind(this), 300);\n this._lastCheck = 0;\n this.m3u8Text = null;\n }\n\n _createClass(HlsLiveController, [{\n key: 'init',\n value: function init() {\n // 初始化Buffer (M3U8/TS/Playlist);\n var _player$hlsOps = this._player.hlsOps,\n XgBuffer = _player$hlsOps.XgBuffer,\n Tracks = _player$hlsOps.Tracks,\n Playlist = _player$hlsOps.Playlist,\n RemuxedBufferManager = _player$hlsOps.RemuxedBufferManager,\n Compatibility = _player$hlsOps.Compatibility,\n FetchLoader = _player$hlsOps.FetchLoader,\n TsDemuxer = _player$hlsOps.TsDemuxer,\n Mp4Remuxer = _player$hlsOps.Mp4Remuxer,\n Mse = _player$hlsOps.Mse;\n\n this._context.registry('M3U8_BUFFER', XgBuffer);\n this._context.registry('TS_BUFFER', XgBuffer);\n this._context.registry('TRACKS', Tracks);\n\n this._playlist = this._context.registry('PLAYLIST', Playlist)({ autoclear: true });\n this._context.registry('PRE_SOURCE_BUFFER', RemuxedBufferManager);\n\n this._context.registry('COMPATIBILITY', Compatibility);\n\n // 初始化M3U8Loader;\n this._m3u8loader = this._context.registry('M3U8_LOADER', FetchLoader)({ buffer: 'M3U8_BUFFER', readtype: 1 });\n this._tsloader = this._context.registry('TS_LOADER', FetchLoader)({ buffer: 'TS_BUFFER', readtype: 3 });\n\n // 初始化TS Demuxer\n this._context.registry('TS_DEMUXER', TsDemuxer)({ inputbuffer: 'TS_BUFFER' });\n\n // 初始化MP4 Remuxer\n this._context.registry('MP4_REMUXER', Mp4Remuxer);\n\n // 初始化MSE\n this.mse = this._context.registry('MSE', Mse)({ container: this.container });\n this.initEvents();\n }\n }, {\n key: 'initEvents',\n value: function initEvents() {\n this.on(LOADER_EVENTS.LOADER_COMPLETE, this._onLoadComplete.bind(this));\n this.on(LOADER_EVENTS.LOADER_RETRY, this._handleFetchRetry.bind(this));\n\n this.on(REMUX_EVENTS.INIT_SEGMENT, this.mse.addSourceBuffers.bind(this.mse));\n\n this.on(REMUX_EVENTS.MEDIA_SEGMENT, this.mse.doAppend.bind(this.mse));\n\n this.on(DEMUX_EVENTS.METADATA_PARSED, this._onMetadataParsed.bind(this));\n\n this.on(DEMUX_EVENTS.SEI_PARSED, this._handleSEIParsed.bind(this));\n\n this.on(DEMUX_EVENTS.DEMUX_COMPLETE, this._onDemuxComplete.bind(this));\n\n this.on(LOADER_EVENTS.LOADER_ERROR, this._onLoadError.bind(this));\n\n this.on(DEMUX_EVENTS.DEMUX_ERROR, this._onDemuxError.bind(this));\n\n this.on(REMUX_EVENTS.REMUX_ERROR, this._onRemuxError.bind(this));\n\n this.on(MSE_EVENTS.MSE_ERROR, this._handleMseError.bind(this));\n }\n }, {\n key: '_onError',\n value: function _onError(type, mod, err, fatal) {\n var error = {\n code: err.code,\n errorType: type,\n errorDetails: '[' + mod + ']: ' + (err ? err.message : ''),\n errorFatal: fatal\n };\n this._player.emit(HLS_ERROR, error);\n }\n }, {\n key: '_onDemuxComplete',\n value: function _onDemuxComplete() {\n this.emit(REMUX_EVENTS.REMUX_MEDIA, 'ts');\n }\n }, {\n key: '_onMetadataParsed',\n value: function _onMetadataParsed(type) {\n if (type === 'video') {\n this._context.mediaInfo.hasVideo = true;\n }\n if (type === 'audio') {\n this._context.mediaInfo.hasAudio = true;\n }\n this.emit(REMUX_EVENTS.REMUX_METADATA, type);\n }\n }, {\n key: '_onLoadError',\n value: function _onLoadError(loader, error) {\n if (!this._tsloader.loading && !this._m3u8loader.loading && this.retrytimes >= 1) {\n this.retrytimes--;\n this._onError(LOADER_EVENTS.LOADER_ERROR, loader, error, false);\n } else if (this.retrytimes <= 1) {\n this._player.emit('error', {\n code: error.code,\n errorType: 'network',\n ex: '[' + loader + ']: ' + error.message,\n errd: {}\n });\n this._onError(LOADER_EVENTS.LOADER_ERROR, loader, error, true);\n this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED);\n this.mse.endOfStream();\n }\n }\n }, {\n key: '_onDemuxError',\n value: function _onDemuxError(mod, error, fatal) {\n if (fatal === undefined) {\n fatal = true;\n }\n this._player.emit('error', {\n code: error.code,\n errorType: 'network',\n ex: '[' + mod + ']: ' + (error ? error.message : ''),\n errd: {}\n });\n this._onError(LOADER_EVENTS.LOADER_ERROR, mod, error, fatal);\n }\n }, {\n key: '_onRemuxError',\n value: function _onRemuxError(mod, error, fatal) {\n if (fatal === undefined) {\n fatal = true;\n }\n this._player.emit('error', {\n errorType: 'parse',\n ex: '[' + mod + ']: ' + error.message,\n errd: {}\n });\n this._onError(REMUX_EVENTS.REMUX_ERROR, mod, error, fatal);\n }\n }, {\n key: '_handleMseError',\n value: function _handleMseError(tag, err, fatal) {\n if (fatal === undefined) {\n fatal = false;\n }\n this._player.emit('error', {\n errorType: 'format',\n ex: '[' + tag + ']: ' + err.message,\n errd: {}\n });\n this._onError(MSE_EVENTS.MSE_ERROR, tag, err, fatal);\n }\n }, {\n key: '_handleSEIParsed',\n value: function _handleSEIParsed(sei) {\n this._player.emit('SEI_PARSED', sei);\n }\n }, {\n key: '_onLoadComplete',\n value: function _onLoadComplete(buffer) {\n if (buffer.TAG === 'M3U8_BUFFER') {\n var mdata = void 0;\n try {\n this.m3u8Text = buffer.shift();\n var result = MASTER_PLAYLIST_REGEX.exec(this.m3u8Text);\n if (result && result[2]) {\n // redirect\n this.load(result[2]);\n } else {\n mdata = this._player.hlsOps.M3U8Parser.parse(this.m3u8Text, this.url);\n }\n } catch (error) {\n this._onError('M3U8_PARSER_ERROR', 'M3U8_PARSER', error, false);\n }\n\n if (!mdata) {\n if (this.retrytimes > 0) {\n this.retrytimes--;\n this._preload();\n } else {\n this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED);\n this.mse.endOfStream();\n }\n return;\n }\n\n try {\n this._playlist.pushM3U8(mdata, true);\n } catch (error) {\n this._onError('M3U8_PARSER_ERROR', 'PLAYLIST', error, false);\n }\n\n if (this._playlist.encrypt && this._playlist.encrypt.uri && !this._playlist.encrypt.key) {\n var XgBuffer = this._player.hlsOps.XgBuffer;\n\n this._context.registry('DECRYPT_BUFFER', XgBuffer)();\n this._context.registry('KEY_BUFFER', XgBuffer)();\n this._tsloader.buffer = 'DECRYPT_BUFFER';\n this._keyLoader = this._context.registry('KEY_LOADER', FetchLoader)({ buffer: 'KEY_BUFFER', readtype: 3 });\n\n var _ref = this._player.config.retry || {},\n times = _ref.count,\n delayTime = _ref.delay;\n\n this.emitTo('KEY_LOADER', LOADER_EVENTS.LADER_START, this._playlist.encrypt.uri, {}, times, delayTime);\n } else {\n this._m3u8Loaded(mdata);\n }\n } else if (buffer.TAG === 'TS_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.downloaded(this._tsloader.url, true);\n this.emit(DEMUX_EVENTS.DEMUX_START);\n } else if (buffer.TAG === 'DECRYPT_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.downloaded(this._tsloader.url, true);\n this.emitTo('CRYPTO', CRYTO_EVENTS.START_DECRYPT);\n } else if (buffer.TAG === 'KEY_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.encrypt.key = buffer.shift();\n this._crypto = this._context.registry('CRYPTO', Crypto)({\n key: this._playlist.encrypt.key,\n iv: this._playlist.encrypt.ivb,\n method: this._playlist.encrypt.method,\n inputbuffer: 'DECRYPT_BUFFER',\n outputbuffer: 'TS_BUFFER'\n });\n this._crypto.on(CRYTO_EVENTS.DECRYPTED, this._onDcripted.bind(this));\n }\n }\n }, {\n key: '_handleFetchRetry',\n value: function _handleFetchRetry(tag, info) {\n this._player.emit('retry', Object.assign({\n tag: tag\n }, info));\n }\n }, {\n key: '_onDcripted',\n value: function _onDcripted() {\n this.emit(DEMUX_EVENTS.DEMUX_START);\n }\n }, {\n key: '_m3u8Loaded',\n value: function _m3u8Loaded(mdata) {\n if (!this.preloadTime) {\n this.preloadTime = this._playlist.targetduration ? this._playlist.targetduration : 5;\n }\n if (this._playlist.fragLength > 0 && this._playlist.sequence < mdata.sequence) {\n this.retrytimes = this.configs.retrytimes || 3;\n } else {\n if (this.retrytimes > 0) {\n this.retrytimes--;\n this._preload();\n } else {\n this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED);\n this.mse.endOfStream();\n }\n }\n }\n }, {\n key: '_checkStatus',\n value: function _checkStatus() {\n if (this.retrytimes < 1 && Date.now() - this._lastCheck < 4000) {\n return;\n } else if (this.retrytimes < 1) {\n clearInterval(this._timmer);\n }\n this._lastCheck = new Date().getTime();\n if (this.container.buffered.length < 1) {\n this._preload();\n } else {\n // Check for load.\n var currentTime = this.container.currentTime;\n var bufferstart = this.container.buffered.start(this.container.buffered.length - 1);\n if (this.container.readyState <= 2) {\n if (currentTime < bufferstart) {\n this.container.currentTime = bufferstart;\n currentTime = bufferstart;\n } else {\n this._preload();\n }\n }\n var bufferend = this.container.buffered.end(this.container.buffered.length - 1);\n if (currentTime < bufferend - this.preloadTime * 2) {\n this.container.currentTime = bufferend - this.preloadTime;\n }\n\n if (currentTime > bufferend - this.preloadTime) {\n this._preload();\n }\n }\n }\n }, {\n key: '_preload',\n value: function _preload() {\n if (this._tsloader.loading || this._m3u8loader.loading) {\n return;\n }\n var frag = this._playlist.getTs();\n\n var _ref2 = this._player.config.retry || {},\n times = _ref2.count,\n delayTime = _ref2.delay;\n\n if (frag && !frag.downloaded && !frag.downloading) {\n this._playlist.downloading(frag.url, true);\n this.emitTo('TS_LOADER', LOADER_EVENTS.LADER_START, frag.url, {}, times, delayTime);\n } else {\n var preloadTime = this.preloadTime ? this.preloadTime : 0;\n var current = new Date().getTime();\n if ((!frag || frag.downloaded) && (current - this._m3u8lasttime) / 1000 > preloadTime) {\n this._m3u8lasttime = current;\n this.emitTo('M3U8_LOADER', LOADER_EVENTS.LADER_START, this.url, {}, times, delayTime);\n }\n }\n }\n }, {\n key: 'load',\n value: function load(url) {\n this.url = url;\n this._preload();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n clearInterval(this._timmer);\n this.off(LOADER_EVENTS.LOADER_COMPLETE, this._onLoadComplete);\n this.off(REMUX_EVENTS.INIT_SEGMENT, this.mse.addSourceBuffers);\n this.off(REMUX_EVENTS.MEDIA_SEGMENT, this.mse.doAppend);\n // this.off(REMUX_EVENTS.REMUX_ERROR);\n this.off(DEMUX_EVENTS.METADATA_PARSED, this._onMetadataParsed);\n this.off(DEMUX_EVENTS.DEMUX_COMPLETE, this._onDemuxComplete);\n\n this.mse = null;\n this.m3u8Text = null;\n }\n }]);\n\n return HlsLiveController;\n}();\n\nexport default HlsLiveController;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar AAC = function () {\n function AAC() {\n _classCallCheck(this, AAC);\n }\n\n _createClass(AAC, null, [{\n key: 'getSilentFrame',\n value: function getSilentFrame(codec, channelCount) {\n if (codec === 'mp4a.40.2') {\n // handle LC-AAC\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n } else if (channelCount === 2) {\n return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n } else if (channelCount === 3) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n } else if (channelCount === 4) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n } else if (channelCount === 5) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n } else if (channelCount === 6) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n }\n } else {\n // handle HE-AAC (mp4a.40.5 / mp4a.40.29)\n if (channelCount === 1) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0:d=0.05\" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 2) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 3) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n }\n }\n return null;\n }\n }]);\n\n return AAC;\n}();\n\nexport default AAC;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar ADTS = function () {\n function ADTS() {\n _classCallCheck(this, ADTS);\n }\n\n _createClass(ADTS, null, [{\n key: \"isHeader\",\n value: function isHeader(data, offset) {\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n if (offset + 1 < data.length && ADTS.isHeaderPattern(data, offset)) {\n return true;\n }\n\n return false;\n }\n }, {\n key: \"getFrameDuration\",\n value: function getFrameDuration(samplerate) {\n return 1024 * 90000 / samplerate;\n }\n }, {\n key: \"isHeaderPattern\",\n value: function isHeaderPattern(data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xf6) === 0xf0;\n }\n }, {\n key: \"getHeaderLength\",\n value: function getHeaderLength(data, offset) {\n return data[offset + 1] & 0x01 ? 7 : 9;\n }\n }, {\n key: \"getFullFrameLength\",\n value: function getFullFrameLength(data, offset) {\n return (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xE0) >>> 5;\n }\n }, {\n key: \"parseFrameHeader\",\n value: function parseFrameHeader(data, offset, pts, frameIndex, frameDuration) {\n var headerLength = void 0,\n frameLength = void 0,\n stamp = void 0;\n var length = data.length;\n\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n headerLength = ADTS.getHeaderLength(data, offset);\n // retrieve frame size\n frameLength = ADTS.getFullFrameLength(data, offset);\n frameLength -= headerLength;\n\n if (frameLength > 0 && offset + headerLength + frameLength <= length) {\n stamp = pts + frameIndex * frameDuration;\n // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n return { headerLength: headerLength, frameLength: frameLength, stamp: stamp };\n }\n\n return undefined;\n }\n }, {\n key: \"appendFrame\",\n value: function appendFrame(sampleRate, data, offset, pts, frameIndex) {\n var frameDuration = ADTS.getFrameDuration(sampleRate);\n var header = ADTS.parseFrameHeader(data, offset, pts, frameIndex, frameDuration);\n if (header) {\n var stamp = header.stamp;\n var headerLength = header.headerLength;\n var frameLength = header.frameLength;\n\n // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}/${(stamp/90).toFixed(0)}`);\n var aacSample = {\n unit: data.subarray(offset + headerLength, offset + headerLength + frameLength),\n pts: stamp,\n dts: stamp\n };\n\n return { sample: aacSample, length: frameLength + headerLength };\n }\n\n return undefined;\n }\n }]);\n\n return ADTS;\n}();\n\nexport default ADTS;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Golomb = function () {\n /**\n * @param {Uint8Array} uint8array\n */\n function Golomb(uint8array) {\n _classCallCheck(this, Golomb);\n\n this.TAG = 'Golomb';\n this._buffer = uint8array;\n this._bufferIndex = 0;\n this._totalBytes = uint8array.byteLength;\n this._totalBits = uint8array.byteLength * 8;\n this._currentWord = 0;\n this._currentWordBitsLeft = 0;\n }\n\n _createClass(Golomb, [{\n key: 'destroy',\n value: function destroy() {\n this._buffer = null;\n }\n }, {\n key: '_fillCurrentWord',\n value: function _fillCurrentWord() {\n var bufferBytesLeft = this._totalBytes - this._bufferIndex;\n if (bufferBytesLeft <= 0) {\n // TODO 异常处理\n }\n\n var bytesRead = Math.min(4, bufferBytesLeft);\n var word = new Uint8Array(4);\n word.set(this._buffer.subarray(this._bufferIndex, this._bufferIndex + bytesRead));\n this._currentWord = new DataView(word.buffer).getUint32(0);\n\n this._bufferIndex += bytesRead;\n this._currentWordBitsLeft = bytesRead * 8;\n }\n\n /**\n * @param size\n * @return {number|*|number}\n */\n\n }, {\n key: 'readBits',\n value: function readBits(size) {\n var bits = Math.min(this._currentWordBitsLeft, size); // :uint\n var valu = this._currentWord >>> 32 - bits;\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits at a time');\n }\n this._currentWordBitsLeft -= bits;\n if (this._currentWordBitsLeft > 0) {\n this._currentWord <<= bits;\n } else if (this._totalBytes - this._bufferIndex > 0) {\n this._fillCurrentWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this._currentWordBitsLeft) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n /**\n * @return {boolean}\n */\n\n }, {\n key: 'readBool',\n value: function readBool() {\n return this.readBits(1) === 1;\n }\n\n /**\n * @return {*|number}\n */\n\n }, {\n key: 'readByte',\n value: function readByte() {\n return this.readBits(8);\n }\n }, {\n key: '_skipLeadingZero',\n value: function _skipLeadingZero() {\n var zeroCount = void 0;\n for (zeroCount = 0; zeroCount < this._currentWordBitsLeft; zeroCount++) {\n if ((this._currentWord & 0x80000000 >>> zeroCount) !== 0) {\n this._currentWord <<= zeroCount;\n this._currentWordBitsLeft -= zeroCount;\n return zeroCount;\n }\n }\n this._fillCurrentWord();\n return zeroCount + this._skipLeadingZero();\n }\n\n /**\n * @return {number}\n */\n\n }, {\n key: 'readUEG',\n value: function readUEG() {\n // unsigned exponential golomb\n var leadingZeros = this._skipLeadingZero();\n return this.readBits(leadingZeros + 1) - 1;\n }\n\n /**\n * @return {number}\n */\n\n }, {\n key: 'readSEG',\n value: function readSEG() {\n // signed exponential golomb\n var value = this.readUEG();\n if (value & 0x01) {\n return value + 1 >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n }, {\n key: 'readSliceType',\n value: function readSliceType() {\n // skip NALu type Nal unit header 8bit\n this.readByte();\n // discard first_mb_in_slice\n this.readUEG();\n // return slice_type\n return this.readUEG();\n }\n }]);\n\n return Golomb;\n}();\n\nexport default Golomb;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport Golomb from './golomb';\n\nvar SPSParser = function () {\n function SPSParser() {\n _classCallCheck(this, SPSParser);\n }\n\n _createClass(SPSParser, null, [{\n key: '_ebsp2rbsp',\n\n /**\n * 0x00000300 -> 0x000000\n * 0x00000301 -> 0x000001\n * 0x00000302 -> 0x000002\n * 0x00000303 -> 0x000003\n */\n value: function _ebsp2rbsp(uint8array) {\n var src = uint8array;\n var srcLength = src.byteLength;\n var dst = new Uint8Array(srcLength);\n var dstIdx = 0;\n\n for (var i = 0; i < srcLength; i++) {\n if (i >= 2) {\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dstIdx] = src[i];\n dstIdx++;\n }\n\n return new Uint8Array(dst.buffer, 0, dstIdx);\n }\n }, {\n key: 'parseSPS',\n value: function parseSPS(uint8array) {\n var rbsp = SPSParser._ebsp2rbsp(uint8array);\n var gb = new Golomb(rbsp);\n\n gb.readByte();\n var profileIdc = gb.readByte();\n gb.readByte();\n var levelIdc = gb.readByte();\n gb.readUEG();\n\n var profile_string = SPSParser.getProfileString(profileIdc);\n var level_string = SPSParser.getLevelString(levelIdc);\n var chroma_format_idc = 1;\n var chroma_format = 420;\n var chroma_format_table = [0, 420, 422, 444];\n var bit_depth = 8;\n\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128 || profileIdc === 138 || profileIdc === 144) {\n chroma_format_idc = gb.readUEG();\n if (chroma_format_idc === 3) {\n gb.readBits(1);\n }\n if (chroma_format_idc <= 3) {\n chroma_format = chroma_format_table[chroma_format_idc];\n }\n\n bit_depth = gb.readUEG() + 8;\n gb.readUEG();\n gb.readBits(1);\n if (gb.readBool()) {\n var scaling_list_count = chroma_format_idc !== 3 ? 8 : 12;\n for (var i = 0; i < scaling_list_count; i++) {\n if (gb.readBool()) {\n if (i < 6) {\n SPSParser._skipScalingList(gb, 16);\n } else {\n SPSParser._skipScalingList(gb, 64);\n }\n }\n }\n }\n }\n gb.readUEG();\n var pic_order_cnt_type = gb.readUEG();\n if (pic_order_cnt_type === 0) {\n gb.readUEG();\n } else if (pic_order_cnt_type === 1) {\n gb.readBits(1);\n gb.readSEG();\n gb.readSEG();\n var num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG();\n for (var _i = 0; _i < num_ref_frames_in_pic_order_cnt_cycle; _i++) {\n gb.readSEG();\n }\n }\n gb.readUEG();\n gb.readBits(1);\n\n var pic_width_in_mbs_minus1 = gb.readUEG();\n var pic_height_in_map_units_minus1 = gb.readUEG();\n\n var frame_mbs_only_flag = gb.readBits(1);\n if (frame_mbs_only_flag === 0) {\n gb.readBits(1);\n }\n gb.readBits(1);\n\n var frame_crop_left_offset = 0;\n var frame_crop_right_offset = 0;\n var frame_crop_top_offset = 0;\n var frame_crop_bottom_offset = 0;\n\n var frame_cropping_flag = gb.readBool();\n if (frame_cropping_flag) {\n frame_crop_left_offset = gb.readUEG();\n frame_crop_right_offset = gb.readUEG();\n frame_crop_top_offset = gb.readUEG();\n frame_crop_bottom_offset = gb.readUEG();\n }\n\n var par_width = 1;var par_height = 1;\n var fps = 0;var fps_fixed = true;var fps_num = 0;var fps_den = 0;\n\n var vui_parameters_present_flag = gb.readBool();\n if (vui_parameters_present_flag) {\n if (gb.readBool()) {\n // aspect_ratio_info_present_flag\n var aspect_ratio_idc = gb.readByte();\n var par_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2];\n var par_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1];\n\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n par_width = par_w_table[aspect_ratio_idc - 1];\n par_height = par_h_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n par_width = gb.readByte() << 8 | gb.readByte();\n par_height = gb.readByte() << 8 | gb.readByte();\n }\n }\n\n if (gb.readBool()) {\n gb.readBool();\n }\n if (gb.readBool()) {\n gb.readBits(4);\n if (gb.readBool()) {\n gb.readBits(24);\n }\n }\n if (gb.readBool()) {\n gb.readUEG();\n gb.readUEG();\n }\n if (gb.readBool()) {\n var num_units_in_tick = gb.readBits(32);\n var time_scale = gb.readBits(32);\n fps_fixed = gb.readBool();\n\n fps_num = time_scale;\n fps_den = num_units_in_tick * 2;\n fps = fps_num / fps_den;\n }\n }\n\n var parScale = 1;\n if (par_width !== 1 || par_height !== 1) {\n parScale = par_width / par_height;\n }\n\n var crop_unit_x = 0;var crop_unit_y = 0;\n if (chroma_format_idc === 0) {\n crop_unit_x = 1;\n crop_unit_y = 2 - frame_mbs_only_flag;\n } else {\n var sub_wc = chroma_format_idc === 3 ? 1 : 2;\n var sub_hc = chroma_format_idc === 1 ? 2 : 1;\n crop_unit_x = sub_wc;\n crop_unit_y = sub_hc * (2 - frame_mbs_only_flag);\n }\n\n var codec_width = (pic_width_in_mbs_minus1 + 1) * 16;\n var codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16);\n\n codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x;\n codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y;\n\n var present_width = Math.ceil(codec_width * parScale);\n\n gb.destroy();\n gb = null;\n\n return {\n profile_string: profile_string,\n level_string: level_string,\n bit_depth: bit_depth,\n chroma_format: chroma_format,\n chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n\n frame_rate: {\n fixed: fps_fixed,\n fps: fps,\n fps_den: fps_den,\n fps_num: fps_num\n },\n\n par_ratio: {\n width: par_width,\n height: par_height\n },\n\n codec_size: {\n width: codec_width,\n height: codec_height\n },\n\n present_size: {\n width: present_width,\n height: codec_height\n }\n };\n }\n }, {\n key: '_skipScalingList',\n value: function _skipScalingList(gb, count) {\n var lastScale = 8;\n var nextScale = 8;\n var deltaScale = 0;\n for (var i = 0; i < count; i++) {\n if (nextScale !== 0) {\n deltaScale = gb.readSEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n }\n }, {\n key: 'getProfileString',\n value: function getProfileString(profileIdc) {\n switch (profileIdc) {\n case 66:\n return 'Baseline';\n case 77:\n return 'Main';\n case 88:\n return 'Extended';\n case 100:\n return 'High';\n case 110:\n return 'High10';\n case 122:\n return 'High422';\n case 244:\n return 'High444';\n default:\n return 'Unknown';\n }\n }\n }, {\n key: 'getLevelString',\n value: function getLevelString(levelIdc) {\n return (levelIdc / 10).toFixed(1);\n }\n }, {\n key: 'getChromaFormatString',\n value: function getChromaFormatString(chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0';\n case 422:\n return '4:2:2';\n case 444:\n return '4:4:4';\n default:\n return 'Unknown';\n }\n }\n }, {\n key: 'toVideoMeta',\n value: function toVideoMeta(spsConfig) {\n var meta = {};\n if (spsConfig && spsConfig.codec_size) {\n meta.codecWidth = spsConfig.codec_size.width;\n meta.codecHeight = spsConfig.codec_size.height;\n meta.presentWidth = spsConfig.present_size.width;\n meta.presentHeight = spsConfig.present_size.height;\n }\n\n meta.profile = spsConfig.profile_string;\n meta.level = spsConfig.level_string;\n meta.bitDepth = spsConfig.bit_depth;\n meta.chromaFormat = spsConfig.chroma_format;\n\n meta.parRatio = {\n width: spsConfig.par_ratio.width,\n height: spsConfig.par_ratio.height\n };\n\n meta.frameRate = spsConfig.frame_rate;\n\n var fpsDen = meta.frameRate.fps_den;\n var fpsNum = meta.frameRate.fps_num;\n meta.refSampleDuration = Math.floor(meta.timescale * (fpsDen / fpsNum));\n return meta;\n }\n }]);\n\n return SPSParser;\n}();\n\nexport default SPSParser;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RBSP = function () {\n function RBSP() {\n _classCallCheck(this, RBSP);\n }\n\n _createClass(RBSP, null, [{\n key: \"EBSP2RBSP\",\n\n /**\n * convert EBSP to RBSP\n * @param data {Uint8Array}\n * @returns {Uint8Array}\n * @constructor\n */\n value: function EBSP2RBSP(data) {\n return data.filter(function (el, idx) {\n if (idx < 2) {\n return true;\n } else {\n return !(data[idx - 2] === 0 && data[idx - 1] === 0 && el === 3);\n }\n });\n }\n\n /**\n * EBSP = SODB + '10000000'\n * @param data {Uint8Array}\n * @constructor\n */\n\n }, {\n key: \"EBSP2SODB\",\n value: function EBSP2SODB(data) {\n var lastByte = data[data.byteLength - 1];\n if (lastByte && lastByte === 128) {\n return data.slice(0, data.byteLength - 1);\n }\n\n return data;\n }\n }]);\n\n return RBSP;\n}();\n\nexport default RBSP;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport RBSP from './rbsp';\n\nvar u8aToString = function u8aToString(data) {\n var result = '';\n for (var i = 0; i < data.byteLength; i++) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n};\n\nvar SEIParser = function () {\n function SEIParser() {\n _classCallCheck(this, SEIParser);\n }\n\n _createClass(SEIParser, null, [{\n key: '_resolveNalu',\n value: function _resolveNalu(data) {\n if (data.length >= 1) {\n return RBSP.EBSP2SODB(RBSP.EBSP2RBSP(data.slice(1)));\n }\n return null;\n }\n /**\n *\n * @param data {Uint8Array}\n */\n\n }, {\n key: 'parse',\n value: function parse(data) {\n var sodb = SEIParser._resolveNalu(data);\n\n var _SEIParser$switchPayl = SEIParser.switchPayloadType(sodb),\n payloadType = _SEIParser$switchPayl.payloadType,\n offset = _SEIParser$switchPayl.offset;\n\n var content = sodb.slice(offset);\n\n switch (payloadType) {\n case 5:\n return SEIParser.user_data_unregistered(content);\n default:\n return {\n code: payloadType,\n content: content\n };\n }\n }\n\n /**\n *\n * @param data\n * @returns {{payloadType: number, offset: number}}\n */\n\n }, {\n key: 'switchPayloadType',\n value: function switchPayloadType(data) {\n var dv = new DataView(data.buffer);\n var payloadType = 0;\n var offset = 0;\n while (dv.getUint8(offset) === 255) {\n offset++;\n payloadType += 255;\n }\n payloadType += dv.getUint8(offset++);\n\n return {\n payloadType: payloadType,\n offset: offset\n };\n }\n\n /**\n *\n * @param data {Uint8Array}\n * @return {{ payloadLength: number, offset: number }}\n */\n\n }, {\n key: 'getPayloadLength',\n value: function getPayloadLength(data) {\n var dv = new DataView(data.buffer);\n\n var payloadLength = 0;\n var offset = 0;\n while (dv.getUint8(offset) === 255) {\n offset++;\n payloadLength += 255;\n }\n payloadLength += dv.getUint8(offset++);\n\n return {\n payloadLength: payloadLength,\n offset: offset\n };\n }\n\n /**\n * resolve 0x05 user data unregistered\n * @param data {Uint8Array}\n */\n // eslint-disable-next-line camelcase\n\n }, {\n key: 'user_data_unregistered',\n value: function user_data_unregistered(data) {\n var _SEIParser$getPayload = SEIParser.getPayloadLength(data),\n payloadLength = _SEIParser$getPayload.payloadLength,\n offset = _SEIParser$getPayload.offset;\n\n if (payloadLength < 16) {\n return {\n uuid: '',\n content: null\n };\n }\n var payload = data.slice(offset);\n\n var uuid = u8aToString(payload.slice(0, 16));\n var content = u8aToString(payload.slice(16, payloadLength));\n\n return {\n code: 5, // for user data unregistered\n uuid: uuid,\n content: content\n };\n }\n }]);\n\n return SEIParser;\n}();\n\nexport default SEIParser;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport SpsParser from './sps';\nimport SEIParser from './sei';\n\nvar Nalunit = function () {\n function Nalunit() {\n _classCallCheck(this, Nalunit);\n }\n\n _createClass(Nalunit, null, [{\n key: 'getNalunits',\n\n // https://en.wikipedia.org/wiki/Network_Abstraction_Layer\n value: function getNalunits(buffer) {\n if (buffer.length - buffer.position < 4) {\n return [];\n }\n\n var buf = buffer.dataview;\n var position = buffer.position;\n // 0x001 || 0x0001\n if (buf.getInt32(position) === 1 || buf.getInt16(position) === 0 && buf.getInt8(position + 2) === 1) {\n return Nalunit.getAnnexbNals(buffer);\n } else {\n return Nalunit.getAvccNals(buffer);\n }\n }\n }, {\n key: 'getAnnexbNals',\n value: function getAnnexbNals(buffer) {\n var nals = [];\n var position = Nalunit.getHeaderPositionAnnexB(buffer);\n var start = position.pos;\n var end = start;\n while (start < buffer.length - 4) {\n var header = buffer.buffer.slice(start, start + position.headerLength);\n if (position.pos === buffer.position) {\n buffer.skip(position.headerLength);\n }\n position = Nalunit.getHeaderPositionAnnexB(buffer);\n end = position.pos;\n var body = new Uint8Array(buffer.buffer.slice(start + header.byteLength, end));\n var unit = { header: header, body: body };\n Nalunit.analyseNal(unit);\n if (unit.type <= 9 && unit.type !== 0) {\n nals.push(unit);\n }\n buffer.skip(end - buffer.position);\n start = end;\n }\n return nals;\n }\n }, {\n key: 'getAvccNals',\n value: function getAvccNals(buffer) {\n // buffer.buffer = RBSP.EBSP2RBSP(new Uint8Array(buffer.buffer)).buffer;\n // buffer.dataview = new DataView(buffer.buffer)\n // buffer.dataview.position = 0;\n var nals = [];\n while (buffer.position < buffer.length - 4) {\n var length = buffer.dataview.getInt32(buffer.dataview.position);\n if (buffer.length - buffer.position >= length) {\n var header = buffer.buffer.slice(buffer.position, buffer.position + 4);\n buffer.skip(4);\n var body = new Uint8Array(buffer.buffer.slice(buffer.position, buffer.position + length));\n buffer.skip(length);\n var unit = { header: header, body: body };\n Nalunit.analyseNal(unit);\n if (unit.type <= 9 && unit.type !== 0) {\n nals.push(unit);\n }\n } else {\n break;\n }\n }\n return nals;\n }\n\n // * ISO-14496-10 7.3.1\n // * forbidden_zero_bit 1bit\n // * nal_ref_idc 2bit\n // * nal_unit_type 5bit\n\n }, {\n key: 'analyseNal',\n value: function analyseNal(unit) {\n var type = unit.body[0] & 0x1f;\n unit.type = type;\n switch (type) {\n case 1:\n // NDR\n unit.ndr = true;\n break;\n case 5:\n // IDR\n unit.idr = true;\n break;\n case 6:\n // SEI\n try {\n unit.sei = SEIParser.parse(unit.body);\n } catch (e) {}\n break;\n case 7:\n // SPS\n unit.sps = SpsParser.parseSPS(unit.body);\n break;\n case 8:\n // PPS\n unit.pps = true;\n break;\n case 9:\n // AUD\n break;\n default:\n break;\n }\n }\n }, {\n key: 'getHeaderPositionAnnexB',\n value: function getHeaderPositionAnnexB(buffer) {\n // seperate\n var pos = buffer.position;\n var headerLength = 0;\n var bufferLen = buffer.length;\n while (headerLength !== 3 && headerLength !== 4 && pos < bufferLen - 4) {\n if (buffer.dataview.getInt16(pos) === 0) {\n if (buffer.dataview.getInt16(pos + 2) === 1) {\n // 0x000001\n headerLength = 4;\n } else if (buffer.dataview.getInt8(pos + 2) === 1) {\n headerLength = 3;\n } else {\n pos++;\n }\n } else {\n pos++;\n }\n }\n\n if (pos === bufferLen - 4) {\n if (buffer.dataview.getInt16(pos) === 0) {\n if (buffer.dataview.getInt16(pos + 2) === 1) {\n // 0x000001\n headerLength = 4;\n } else {\n pos = bufferLen;\n }\n } else {\n pos++;\n if (buffer.dataview.getInt16(pos) === 0 && buffer.dataview.getInt8(pos) === 1) {\n // 0x0000001\n headerLength = 3;\n } else {\n pos = bufferLen;\n }\n }\n }\n return { pos: pos, headerLength: headerLength };\n }\n\n // 组装AvcDecoderConfigurationRecord\n // * configurationVerison = 1 uint(8)\n // * avcProfileIndication uint(8)\n // * profile_compatibility uint(8)\n // * avcLevelIndication uint(8)\n // * reserved `111111` bit(6)\n // * lengthSizeMinusOne uint(2)\n // * reserved `111` bit(3)\n // * numOfSPS uint(5)\n // * for(numOfSPS)\n // * spsLength uint(16)\n // * spsNALUnit spsLength个字节\n // * numOfPPS uint(8)\n // * for(numOfPPS)\n // * ppsLength uint(16)\n // * ppsNALUnit ppsLength个字节\n\n }, {\n key: 'getAvcc',\n value: function getAvcc(sps, pps) {\n var ret = new Uint8Array(sps.byteLength + pps.byteLength + 11);\n ret[0] = 0x01;\n ret[1] = sps[1];\n ret[2] = sps[2];\n ret[3] = sps[3];\n ret[4] = 255;\n ret[5] = 225; // 11100001\n\n var offset = 6;\n\n ret.set(new Uint8Array([sps.byteLength >>> 8 & 0xff, sps.byteLength & 0xff]), offset);\n offset += 2;\n ret.set(sps, offset);\n offset += sps.byteLength;\n\n ret[offset] = 1;\n offset++;\n\n ret.set(new Uint8Array([pps.byteLength >>> 8 & 0xff, pps.byteLength & 0xff]), offset);\n offset += 2;\n ret.set(pps, offset);\n return ret;\n }\n }]);\n\n return Nalunit;\n}();\n\nexport default Nalunit;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Golomb = function () {\n /**\n * @param {Uint8Array} uint8array\n */\n function Golomb(uint8array) {\n _classCallCheck(this, Golomb);\n\n this.TAG = 'Golomb';\n this._buffer = uint8array;\n this._bufferIndex = 0;\n this._totalBytes = uint8array.byteLength;\n this._totalBits = uint8array.byteLength * 8;\n this._currentWord = 0;\n this._currentWordBitsLeft = 0;\n }\n\n _createClass(Golomb, [{\n key: 'destroy',\n value: function destroy() {\n this._buffer = null;\n }\n }, {\n key: '_fillCurrentWord',\n value: function _fillCurrentWord() {\n var bufferBytesLeft = this._totalBytes - this._bufferIndex;\n if (bufferBytesLeft <= 0) {\n // TODO 异常处理\n }\n\n var bytesRead = Math.min(4, bufferBytesLeft);\n var word = new Uint8Array(4);\n word.set(this._buffer.subarray(this._bufferIndex, this._bufferIndex + bytesRead));\n this._currentWord = new DataView(word.buffer).getUint32(0);\n\n this._bufferIndex += bytesRead;\n this._currentWordBitsLeft = bytesRead * 8;\n }\n\n /**\n * @param size\n * @return {number|*|number}\n */\n\n }, {\n key: 'readBits',\n value: function readBits(size) {\n var bits = Math.min(this._currentWordBitsLeft, size); // :uint\n var valu = this._currentWord >>> 32 - bits;\n if (size > 32) {\n throw new Error('Cannot read more than 32 bits at a time');\n }\n this._currentWordBitsLeft -= bits;\n if (this._currentWordBitsLeft > 0) {\n this._currentWord <<= bits;\n } else if (this._totalBytes - this._bufferIndex > 0) {\n this._fillCurrentWord();\n }\n\n bits = size - bits;\n if (bits > 0 && this._currentWordBitsLeft) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n /**\n * @return {boolean}\n */\n\n }, {\n key: 'readBool',\n value: function readBool() {\n return this.readBits(1) === 1;\n }\n\n /**\n * @return {*|number}\n */\n\n }, {\n key: 'readByte',\n value: function readByte() {\n return this.readBits(8);\n }\n }, {\n key: '_skipLeadingZero',\n value: function _skipLeadingZero() {\n var zeroCount = void 0;\n for (zeroCount = 0; zeroCount < this._currentWordBitsLeft; zeroCount++) {\n if ((this._currentWord & 0x80000000 >>> zeroCount) !== 0) {\n this._currentWord <<= zeroCount;\n this._currentWordBitsLeft -= zeroCount;\n return zeroCount;\n }\n }\n this._fillCurrentWord();\n return zeroCount + this._skipLeadingZero();\n }\n\n /**\n * @return {number}\n */\n\n }, {\n key: 'readUEG',\n value: function readUEG() {\n // unsigned exponential golomb\n var leadingZeros = this._skipLeadingZero();\n return this.readBits(leadingZeros + 1) - 1;\n }\n\n /**\n * @return {number}\n */\n\n }, {\n key: 'readSEG',\n value: function readSEG() {\n // signed exponential golomb\n var value = this.readUEG();\n if (value & 0x01) {\n return value + 1 >>> 1;\n } else {\n return -1 * (value >>> 1);\n }\n }\n }, {\n key: 'readSliceType',\n value: function readSliceType() {\n // skip NALu type Nal unit header 8bit\n this.readByte();\n // discard first_mb_in_slice\n this.readUEG();\n // return slice_type\n return this.readUEG();\n }\n }]);\n\n return Golomb;\n}();\n\nexport default Golomb;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport Golomb from './golomb';\n\nvar SPSParser = function () {\n function SPSParser() {\n _classCallCheck(this, SPSParser);\n }\n\n _createClass(SPSParser, null, [{\n key: '_ebsp2rbsp',\n\n /**\n *\n * @param {Uint8Array} uint8array\n * @return {Uint8Array}\n */\n value: function _ebsp2rbsp(uint8array) {\n var src = uint8array;\n var srcLength = src.byteLength;\n var dst = new Uint8Array(srcLength);\n var dstIdx = 0;\n\n for (var i = 0; i < srcLength; i++) {\n if (i >= 2) {\n if (src[i] === 0x03 && src[i - 1] === 0x00 && src[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dstIdx] = src[i];\n dstIdx++;\n }\n\n return new Uint8Array(dst.buffer, 0, dstIdx);\n }\n\n /**\n * @param {Uint8Array} uint8array\n * @return {{width: *, general_profile_idc: number, chromaFormatIdc: *, general_level_idc: number, general_tier_flag: number, bitDepthLumaMinus8: (*|number), bitDepthChromaMinus8: (*|number), general_profile_space: number, height: *}}\n */\n\n }, {\n key: 'parseSPS',\n value: function parseSPS(uint8array) {\n var rbsp = SPSParser._ebsp2rbsp(uint8array);\n var gb = new Golomb(rbsp);\n\n var vpsId = 0;\n var maxSubLayersMinus1 = 0;\n var tINf = 0;\n var spsId = 0;\n var separate_colour_plane_flag = 0;\n var chromaFormatIdc = 0;\n var width = 0;\n var height = 0;\n var conf_win_left_offset = 0;\n var conf_win_right_offset = 0;\n var conf_win_top_offset = 0;\n var conf_win_bottom_offset = 0;\n var conformanceWindowFlag = 0;\n var bitDepthLumaMinus8 = 0;\n var bitDepthChromaMinus8 = 0;\n var sub_width_c = 0;\n var sub_height_c = 0;\n var profileTierLevel = {};\n\n gb.readByte(); // NAL header\n gb.readByte();\n\n vpsId = gb.readBits(4); // vps_id\n maxSubLayersMinus1 = gb.readBits(3); // max_sub_layers_minus1\n tINf = gb.readBits(1); // temporal_id_nesting_flag\n\n profileTierLevel = SPSParser._readProfileTierLevel(gb, maxSubLayersMinus1);\n\n spsId = gb.readUEG(); // sps id\n chromaFormatIdc = gb.readUEG();\n if (chromaFormatIdc === 3) {\n separate_colour_plane_flag = gb.readBits(1); // separate_colour_plane_flag\n }\n\n width = gb.readUEG(); // pic_width_in_luma_samples\n height = gb.readUEG(); // pic_height_in_luma_samples\n\n conformanceWindowFlag = gb.readBits(1);\n if (conformanceWindowFlag === 1) {\n conf_win_left_offset = gb.readUEG(); // conf_win_left_offset\n conf_win_right_offset = gb.readUEG(); // conf_win_right_offset\n conf_win_top_offset = gb.readUEG(); // conf_win_top_offset\n conf_win_bottom_offset = gb.readUEG(); // conf_win_bottom_offset\n }\n\n bitDepthLumaMinus8 = gb.readUEG(); // bit_depth_luma_minus8\n bitDepthChromaMinus8 = gb.readUEG(); // bit_depth_chroma_minus8\n\n if (conformanceWindowFlag === 1) {\n sub_width_c = (chromaFormatIdc === 1 || chromaFormatIdc === 2) && separate_colour_plane_flag === 0 ? 2 : 1;\n sub_height_c = chromaFormatIdc === 1 && separate_colour_plane_flag === 0 ? 2 : 1;\n width -= sub_width_c * conf_win_right_offset + sub_width_c * conf_win_left_offset;\n height -= sub_height_c * conf_win_bottom_offset + sub_height_c * conf_win_top_offset;\n }\n\n gb.destroy();\n gb = null;\n\n return { width: width,\n height: height,\n general_profile_space: profileTierLevel.general_profile_space,\n general_tier_flag: profileTierLevel.general_tier_flag,\n general_profile_idc: profileTierLevel.general_profile_idc,\n general_level_idc: profileTierLevel.general_level_idc,\n chromaFormatIdc: chromaFormatIdc,\n bitDepthLumaMinus8: bitDepthLumaMinus8,\n bitDepthChromaMinus8: bitDepthChromaMinus8 };\n }\n\n // static parseSPS (uint8array) {\n // let rbsp = SPSParser._ebsp2rbsp(uint8array)\n // let gb = new Golomb(rbsp)\n //\n // gb.readByte()\n // let profileIdc = gb.readByte()\n // gb.readByte()\n // let levelIdc = gb.readByte()\n // gb.readUEG()\n //\n // let profile_string = SPSParser.getProfileString(profileIdc)\n // let level_string = SPSParser.getLevelString(levelIdc)\n // let chroma_format_idc = 1\n // let chroma_format = 420\n // let chroma_format_table = [0, 420, 422, 444]\n // let bit_depth = 8\n //\n // if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 ||\n // profileIdc === 244 || profileIdc === 44 || profileIdc === 83 ||\n // profileIdc === 86 || profileIdc === 118 || profileIdc === 128 ||\n // profileIdc === 138 || profileIdc === 144) {\n // chroma_format_idc = gb.readUEG()\n // if (chroma_format_idc === 3) {\n // gb.readBits(1)\n // }\n // if (chroma_format_idc <= 3) {\n // chroma_format = chroma_format_table[chroma_format_idc]\n // }\n //\n // bit_depth = gb.readUEG() + 8\n // gb.readUEG()\n // gb.readBits(1)\n // if (gb.readBool()) {\n // let scaling_list_count = (chroma_format_idc !== 3) ? 8 : 12\n // for (let i = 0; i < scaling_list_count; i++) {\n // if (gb.readBool()) {\n // if (i < 6) {\n // SPSParser._skipScalingList(gb, 16)\n // } else {\n // SPSParser._skipScalingList(gb, 64)\n // }\n // }\n // }\n // }\n // }\n // gb.readUEG()\n // let pic_order_cnt_type = gb.readUEG()\n // if (pic_order_cnt_type === 0) {\n // gb.readUEG()\n // } else if (pic_order_cnt_type === 1) {\n // gb.readBits(1)\n // gb.readSEG()\n // gb.readSEG()\n // let num_ref_frames_in_pic_order_cnt_cycle = gb.readUEG()\n // for (let i = 0; i < num_ref_frames_in_pic_order_cnt_cycle; i++) {\n // gb.readSEG()\n // }\n // }\n // gb.readUEG()\n // gb.readBits(1)\n //\n // let pic_width_in_mbs_minus1 = gb.readUEG()\n // let pic_height_in_map_units_minus1 = gb.readUEG()\n //\n // let frame_mbs_only_flag = gb.readBits(1)\n // if (frame_mbs_only_flag === 0) {\n // gb.readBits(1)\n // }\n // gb.readBits(1)\n //\n // let frame_crop_left_offset = 0\n // let frame_crop_right_offset = 0\n // let frame_crop_top_offset = 0\n // let frame_crop_bottom_offset = 0\n //\n // let frame_cropping_flag = gb.readBool()\n // if (frame_cropping_flag) {\n // frame_crop_left_offset = gb.readUEG()\n // frame_crop_right_offset = gb.readUEG()\n // frame_crop_top_offset = gb.readUEG()\n // frame_crop_bottom_offset = gb.readUEG()\n // }\n //\n // let par_width = 1, par_height = 1\n // let fps = 0, fps_fixed = true, fps_num = 0, fps_den = 0\n //\n // let vui_parameters_present_flag = gb.readBool()\n // if (vui_parameters_present_flag) {\n // if (gb.readBool()) { // aspect_ratio_info_present_flag\n // let aspect_ratio_idc = gb.readByte()\n // let par_w_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2]\n // let par_h_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1]\n //\n // if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n // par_width = par_w_table[aspect_ratio_idc - 1]\n // par_height = par_h_table[aspect_ratio_idc - 1]\n // } else if (aspect_ratio_idc === 255) {\n // par_width = gb.readByte() << 8 | gb.readByte()\n // par_height = gb.readByte() << 8 | gb.readByte()\n // }\n // }\n //\n // if (gb.readBool()) {\n // gb.readBool()\n // }\n // if (gb.readBool()) {\n // gb.readBits(4)\n // if (gb.readBool()) {\n // gb.readBits(24)\n // }\n // }\n // if (gb.readBool()) {\n // gb.readUEG()\n // gb.readUEG()\n // }\n // if (gb.readBool()) {\n // let num_units_in_tick = gb.readBits(32)\n // let time_scale = gb.readBits(32)\n // fps_fixed = gb.readBool()\n //\n // fps_num = time_scale\n // fps_den = num_units_in_tick * 2\n // fps = fps_num / fps_den\n // }\n // }\n //\n // let parScale = 1\n // if (par_width !== 1 || par_height !== 1) {\n // parScale = par_width / par_height\n // }\n //\n // let crop_unit_x = 0, crop_unit_y = 0\n // if (chroma_format_idc === 0) {\n // crop_unit_x = 1\n // crop_unit_y = 2 - frame_mbs_only_flag\n // } else {\n // let sub_wc = (chroma_format_idc === 3) ? 1 : 2\n // let sub_hc = (chroma_format_idc === 1) ? 2 : 1\n // crop_unit_x = sub_wc\n // crop_unit_y = sub_hc * (2 - frame_mbs_only_flag)\n // }\n //\n // let codec_width = (pic_width_in_mbs_minus1 + 1) * 16\n // let codec_height = (2 - frame_mbs_only_flag) * ((pic_height_in_map_units_minus1 + 1) * 16)\n //\n // codec_width -= (frame_crop_left_offset + frame_crop_right_offset) * crop_unit_x\n // codec_height -= (frame_crop_top_offset + frame_crop_bottom_offset) * crop_unit_y\n //\n // let present_width = Math.ceil(codec_width * parScale)\n //\n // gb.destroy()\n // gb = null\n //\n // return {\n // profile_string: profile_string,\n // level_string: level_string,\n // bit_depth: bit_depth,\n // chroma_format: chroma_format,\n // chroma_format_string: SPSParser.getChromaFormatString(chroma_format),\n //\n // frame_rate: {\n // fixed: fps_fixed,\n // fps: fps,\n // fps_den: fps_den,\n // fps_num: fps_num\n // },\n //\n // par_ratio: {\n // width: par_width,\n // height: par_height\n // },\n //\n // codec_size: {\n // width: codec_width,\n // height: codec_height\n // },\n //\n // present_size: {\n // width: present_width,\n // height: codec_height\n // }\n // }\n // }\n /**\n * @param gb\n * @param maxSubLayersMinus1\n * @return {{general_profile_idc: (*|number), general_level_idc: (*|number), general_tier_flag: (*|number), general_profile_space: (*|number)}}\n */\n\n }, {\n key: '_readProfileTierLevel',\n value: function _readProfileTierLevel(gb, maxSubLayersMinus1) {\n var general_profile_space = 0;\n var general_tier_flag = 0;\n var general_profile_idc = 0;\n var general_level_idc = 0;\n general_profile_space = gb.readBits(2) || 0; // profile_space\n general_tier_flag = gb.readBits(1) || 0; // tierFlag\n general_profile_idc = gb.readBits(5) || 0; // profileIdc\n\n gb.readBits(16); // some 32bits\n gb.readBits(16);\n\n gb.readBits(1); // progressiveSourceFlag\n gb.readBits(1); // interlacedSourceFlag\n gb.readBits(1); // nonPackedConstraintFlag\n gb.readBits(1); // frameOnlyConstraintFlag\n\n gb.readBits(16); // reserved zero bits\n gb.readBits(16);\n gb.readBits(12);\n\n general_level_idc = gb.readBits(8) || 0; // level_idc\n\n var subLayerProfilePresentFlag = [];\n var subLayerLevelPresentFlag = [];\n for (var j = 0; j < maxSubLayersMinus1; j++) {\n subLayerProfilePresentFlag[j] = gb.readBits(1);\n subLayerLevelPresentFlag[j] = gb.readBits(1);\n }\n\n if (maxSubLayersMinus1 > 0) {\n gb.readBits((8 - maxSubLayersMinus1) * 2);\n }\n\n for (var i = 0; i < maxSubLayersMinus1; i++) {\n if (subLayerProfilePresentFlag[i] !== 0) {\n gb.readBits(2);\n gb.readBits(1);\n gb.readBits(5);\n\n gb.readBits(16);\n gb.readBits(16);\n\n gb.readBits(4);\n\n gb.readBits(16);\n gb.readBits(16);\n gb.readBits(12);\n }\n if (subLayerLevelPresentFlag[i] !== 0) {\n gb.readBits(8);\n }\n }\n\n return {\n general_profile_space: general_profile_space,\n general_tier_flag: general_tier_flag,\n general_profile_idc: general_profile_idc,\n general_level_idc: general_level_idc\n };\n }\n\n /**\n *\n * @param {any} gb\n * @param {number}count\n */\n\n }, {\n key: '_skipScalingList',\n value: function _skipScalingList(gb, count) {\n var lastScale = 8;\n var nextScale = 8;\n var deltaScale = 0;\n for (var i = 0; i < count; i++) {\n if (nextScale !== 0) {\n deltaScale = gb.readSEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n }\n\n /**\n *\n * @param {number} profileIdc\n * @return {string}\n */\n\n }, {\n key: 'getProfileString',\n value: function getProfileString(profileIdc) {\n switch (profileIdc) {\n case 66:\n return 'Baseline';\n case 77:\n return 'Main';\n case 88:\n return 'Extended';\n case 100:\n return 'High';\n case 110:\n return 'High10';\n case 122:\n return 'High422';\n case 244:\n return 'High444';\n default:\n return 'Unknown';\n }\n }\n\n /**\n * @param {number} levelIdc\n * @return {string}\n */\n\n }, {\n key: 'getLevelString',\n value: function getLevelString(levelIdc) {\n return (levelIdc / 10).toFixed(1);\n }\n\n /**\n * @param {number} chroma\n * @return {string}\n */\n\n }, {\n key: 'getChromaFormatString',\n value: function getChromaFormatString(chroma) {\n switch (chroma) {\n case 420:\n return '4:2:0';\n case 422:\n return '4:2:2';\n case 444:\n return '4:4:4';\n default:\n return 'Unknown';\n }\n }\n\n /**\n * @param {any} spsConfig\n * @return {any}\n */\n\n }, {\n key: 'toVideoMeta',\n value: function toVideoMeta(spsConfig) {\n var meta = {};\n if (spsConfig && spsConfig.codec_size) {\n meta.codecWidth = spsConfig.codec_size.width;\n meta.codecHeight = spsConfig.codec_size.height;\n meta.presentWidth = spsConfig.present_size.width;\n meta.presentHeight = spsConfig.present_size.height;\n } else if (spsConfig.width && spsConfig.height) {\n meta.codecWidth = spsConfig.width;\n meta.codecHeight = spsConfig.height;\n meta.presentWidth = spsConfig.width;\n meta.presentHeight = spsConfig.height;\n }\n\n meta.profile = spsConfig.profile_string;\n meta.level = spsConfig.level_string;\n meta.bitDepth = spsConfig.bit_depth;\n meta.chromaFormat = spsConfig.chroma_format;\n\n // meta.parRatio = {\n // width: spsConfig.par_ratio.width,\n // height: spsConfig.par_ratio.height\n // }\n\n // meta.frameRate = spsConfig.frame_rate\n\n // let fpsDen = meta.frameRate.fps_den\n // let fpsNum = meta.frameRate.fps_num\n // meta.refSampleDuration = Math.floor(meta.timescale * (fpsDen / fpsNum))\n return meta;\n }\n }]);\n\n return SPSParser;\n}();\n\nexport default SPSParser;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar RBSP = function () {\n function RBSP() {\n _classCallCheck(this, RBSP);\n }\n\n _createClass(RBSP, null, [{\n key: \"EBSP2RBSP\",\n\n /**\n * convert EBSP to RBSP\n * @param {Uint8Array} data\n * @returns {Uint8Array}\n * @constructor\n */\n value: function EBSP2RBSP(data) {\n return data.filter(function (el, idx) {\n if (idx < 2) {\n return true;\n } else {\n return !(data[idx - 2] === 0 && data[idx - 1] === 0 && el === 3);\n }\n });\n }\n\n /**\n * @param {Uint8Array} data\n * @constructor\n */\n\n }, {\n key: \"EBSP2SODB\",\n value: function EBSP2SODB(data) {\n var lastByte = data[data.byteLength - 1];\n if (lastByte && lastByte === 128) {\n return data.slice(0, data.byteLength - 1);\n }\n\n return data;\n }\n }]);\n\n return RBSP;\n}();\n\nexport default RBSP;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport RBSP from './rbsp';\n\n/**\n * @param {Uint8Array} data\n * @return {string}\n */\nvar u8aToString = function u8aToString(data) {\n var result = '';\n for (var i = 0; i < data.byteLength; i++) {\n result += String.fromCharCode(data[i]);\n }\n return result;\n};\n\nvar SEIParser = function () {\n function SEIParser() {\n _classCallCheck(this, SEIParser);\n }\n\n _createClass(SEIParser, null, [{\n key: '_resolveNalu',\n value: function _resolveNalu(data) {\n if (data.length >= 1) {\n return RBSP.EBSP2SODB(RBSP.EBSP2RBSP(data.slice(1)));\n }\n return null;\n }\n\n /**\n * @param {Uint8Array} data\n * @return {{uuid: string, content: null}|{code: number, uuid: string, content: string}|{code: number, content: Uint8Array}}\n */\n\n }, {\n key: 'parse',\n value: function parse(data) {\n var sodb = SEIParser._resolveNalu(data);\n\n var _SEIParser$switchPayl = SEIParser.switchPayloadType(sodb),\n payloadType = _SEIParser$switchPayl.payloadType,\n offset = _SEIParser$switchPayl.offset;\n\n var content = sodb.slice(offset);\n\n switch (payloadType) {\n case 5:\n return SEIParser.user_data_unregistered(content);\n default:\n return {\n code: payloadType,\n content: content\n };\n }\n }\n\n /**\n *\n * @param {Uint8Array} data\n * @returns {{payloadType: number, offset: number}}\n */\n\n }, {\n key: 'switchPayloadType',\n value: function switchPayloadType(data) {\n var dv = new DataView(data.buffer);\n var payloadType = 0;\n var offset = 0;\n while (dv.getUint8(offset) === 255) {\n offset++;\n payloadType += 255;\n }\n payloadType += dv.getUint8(offset++);\n\n return {\n payloadType: payloadType,\n offset: offset\n };\n }\n\n /**\n *\n * @param {Uint8Array} data\n * @return {{ payloadLength: number, offset: number }}\n */\n\n }, {\n key: 'getPayloadLength',\n value: function getPayloadLength(data) {\n var dv = new DataView(data.buffer);\n\n var payloadLength = 0;\n var offset = 0;\n while (dv.getUint8(offset) === 255) {\n offset++;\n payloadLength += 255;\n }\n payloadLength += dv.getUint8(offset++);\n\n return {\n payloadLength: payloadLength,\n offset: offset\n };\n }\n\n /**\n * resolve 0x05 user data unregistered\n * @param {Uint8Array} data\n */\n // eslint-disable-next-line camelcase\n\n }, {\n key: 'user_data_unregistered',\n value: function user_data_unregistered(data) {\n var _SEIParser$getPayload = SEIParser.getPayloadLength(data),\n payloadLength = _SEIParser$getPayload.payloadLength,\n offset = _SEIParser$getPayload.offset;\n\n if (payloadLength < 16) {\n return {\n uuid: '',\n content: null\n };\n }\n var payload = data.slice(offset);\n\n var uuid = u8aToString(payload.slice(0, 16));\n var content = u8aToString(payload.slice(16, payloadLength));\n\n return {\n code: 5, // for user data unregistered\n uuid: uuid,\n content: content\n };\n }\n }]);\n\n return SEIParser;\n}();\n\nexport default SEIParser;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport SpsParser from './sps';\nimport SEIParser from './sei';\n\nvar Nalunit = function () {\n function Nalunit() {\n _classCallCheck(this, Nalunit);\n }\n\n _createClass(Nalunit, null, [{\n key: 'getNalunits',\n\n /**\n * @param {any} buffer\n * @return {[]|*[]}\n */\n value: function getNalunits(buffer) {\n if (buffer.length - buffer.position < 4) {\n return [];\n }\n\n var buf = buffer.dataview;\n var position = buffer.position;\n\n if (buf.getInt32(position) === 1 || buf.getInt16(position) === 0 && buf.getInt8(position + 2) === 1) {\n return Nalunit.getAnnexbNals(buffer);\n } else {\n return Nalunit.getHvccNals(buffer);\n }\n }\n\n /**\n * @param {any} buffer\n * @return {[]}\n */\n\n }, {\n key: 'getAnnexbNals',\n value: function getAnnexbNals(buffer) {\n var nals = [];\n var position = Nalunit.getHeaderPositionAnnexB(buffer);\n var start = position.pos;\n var end = start;\n while (start < buffer.length - 4) {\n var header = buffer.buffer.slice(start, start + position.headerLength);\n if (position.pos === buffer.position) {\n buffer.skip(position.headerLength);\n }\n position = Nalunit.getHeaderPositionAnnexB(buffer);\n end = position.pos;\n var body = new Uint8Array(buffer.buffer.slice(start + header.byteLength, end));\n var unit = { header: header, body: body };\n Nalunit.analyseNal(unit);\n if (unit.type <= 40) {\n nals.push(unit);\n }\n buffer.skip(end - buffer.position);\n start = end;\n }\n return nals;\n }\n\n // |四字节 nalSize| nalUnit |\n /**\n * @param {any} buffer\n * @return {[]}\n */\n\n }, {\n key: 'getHvccNals',\n value: function getHvccNals(buffer) {\n // console.log('getHvccNals')\n var nals = [];\n while (buffer.position < buffer.length - 4) {\n // console.log('buffer')\n // console.log(buffer)\n // console.log(buffer.position)\n // console.log(buffer.length)\n // console.log(buffer.dataview)\n // let length = buffer.dataview.getInt32();\n var length = buffer.dataview.getInt32(buffer.dataview.position);\n if (buffer.length - buffer.position >= length) {\n var header = buffer.buffer.slice(buffer.position, buffer.position + 4);\n buffer.skip(4);\n var body = new Uint8Array(buffer.buffer.slice(buffer.position, buffer.position + length));\n buffer.skip(length);\n var unit = { header: header, body: body };\n try {\n Nalunit.analyseNal(unit);\n } catch (e) {\n continue;\n }\n if (unit.type <= 40) {\n nals.push(unit);\n }\n } else {\n break;\n }\n }\n return nals;\n }\n\n /**\n * @param {any} unit\n */\n\n }, {\n key: 'analyseNal',\n value: function analyseNal(unit) {\n var type = unit.body[0] >>> 1 & 0x3f;\n unit.type = type;\n switch (type) {\n case 0:\n // SLICE_TRAIL_N\n unit.slice_trail_n = true;\n break;\n case 1:\n // SLICE_TRAIL_R\n unit.slice_trail_r = true;\n unit.key = true;\n break;\n case 2:\n // SLICE_TSA_N\n unit.slice_tsa_n = true;\n break;\n case 3:\n // SLICE_TSA_R\n unit.slice_tsa_r = true;\n unit.key = true;\n break;\n case 4:\n // SLICE_STSA_N\n unit.slice_stsa_n = true;\n break;\n case 5:\n // SLICE_STSA_R\n unit.slice_stsa_r = true;\n unit.key = true;\n break;\n case 6:\n // SLICE_RADL_N\n unit.slice_radl_n = true;\n break;\n case 7:\n // SLICE_RADL_R\n unit.slice_radl_r = true;\n unit.key = true;\n break;\n case 8:\n // SLICE_RASL_N\n unit.slice_rasl_n = true;\n break;\n case 9:\n // SLICE_RASL_R\n unit.slice_rasl_r = true;\n unit.key = true;\n break;\n case 16:\n // SLICE_BLA_W_LP\n unit.slice_bla_w_lp = true;\n break;\n case 17:\n // SLICE_BLA_W_RADL\n unit.slice_bla_w_radl = true;\n break;\n case 18:\n // SLICE_BLA_N_LP\n unit.slice_bla_n_lp = true;\n break;\n case 19:\n // SLICE_IDR_W_RADL\n unit.slice_idl_w_radl = true;\n unit.key = true;\n break;\n case 20:\n // SLICE_IDR_N_LP\n unit.slice_idr_n_lp = true;\n unit.key = true;\n break;\n case 21:\n // SLICE_CRA_NUT\n unit.slice_cra_nut = true;\n unit.key = true;\n break;\n case 32:\n // VPS\n unit.vps = true;\n break;\n case 33:\n // SPS\n unit.sps = SpsParser.parseSPS(unit.body);\n break;\n case 34:\n // PPS\n unit.pps = true;\n break;\n case 35:\n // AUD\n break;\n case 36:\n // EOS\n unit.aud = true;\n break;\n case 37:\n // EOB\n unit.eob = true;\n break;\n case 38:\n // FD\n unit.fd = true;\n break;\n case 39:\n // PREFIX_SEI\n // unit.prefix_sei = true;\n try {\n unit.sei = SEIParser.parse(unit.body.slice(1));\n } catch (e) {}\n break;\n case 40:\n // SUFFIX_SEI\n unit.sei = SEIParser.parse(unit.body.slice(1));\n break;\n default:\n break;\n }\n }\n }, {\n key: 'getHeaderPositionAnnexB',\n value: function getHeaderPositionAnnexB(buffer) {\n // seperate\n var pos = buffer.position;\n var headerLength = 0;\n var bufferLen = buffer.length;\n while (headerLength !== 3 && headerLength !== 4 && pos < bufferLen - 4) {\n if (buffer.dataview.getInt16(pos) === 0) {\n if (buffer.dataview.getInt16(pos + 2) === 1) {\n // 0x00000001\n headerLength = 4;\n } else if (buffer.dataview.getInt8(pos + 2) === 1) {\n headerLength = 3;\n } else {\n pos++;\n }\n } else {\n pos++;\n }\n }\n\n if (pos === bufferLen - 4) {\n if (buffer.dataview.getInt16(pos) === 0) {\n if (buffer.dataview.getInt16(pos + 2) === 1) {\n // 0x00000001\n headerLength = 4;\n }\n } else {\n pos++;\n if (buffer.dataview.getInt16(pos) === 0 && buffer.dataview.getInt8(pos) === 1) {\n // 0x000001\n headerLength = 3;\n } else {\n pos = bufferLen;\n }\n }\n }\n return { pos: pos, headerLength: headerLength };\n }\n }]);\n\n return Nalunit;\n}();\n\nexport default Nalunit;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { EVENTS, common, logger } from 'xgplayer-helper-utils';\nimport AAC from '../aac';\n\nvar REMUX_EVENTS = EVENTS.REMUX_EVENTS;\nvar caculate = common.caculate;\n\nvar Compatibility = function () {\n function Compatibility() {\n var _this = this;\n\n _classCallCheck(this, Compatibility);\n\n this.TAG = 'Compatibility';\n this.nextAudioDts = 0; // 模拟下一段音频数据的dts\n this.nextVideoDts = 0; // 模拟下一段视频数据的dts\n\n this.lastAudioSamplesLen = 0; // 上一段音频数据的长度\n this.lastVideoSamplesLen = 0; // 上一段视频数据的长度\n\n this.lastVideoDts = undefined; // 上一段音频数据的长度\n this.lastAudioDts = undefined; // 上一段视频数据的长度\n\n this.allAudioSamplesCount = 0; // 音频总数据量(原始帧)\n this.allVideoSamplesCount = 0; // 视频总数据量(原始帧)\n\n this._firstAudioSample = null;\n this._firstVideoSample = null;\n\n this.filledAudioSamples = []; // 补充音频帧()\n this.filledVideoSamples = []; // 补充视频帧()\n\n this._lastSegmentId = 0;\n this._currentSegmentId = 0;\n this.videoLastSample = null;\n this.audioLastSample = null; // stash last sample for duration compat\n\n Object.defineProperties(this, {\n _videoLargeGap: {\n set: function set(value) {\n _this.___videoLargeGap = value;\n if (value !== 0) {\n _this.emit(REMUX_EVENTS.DETECT_LARGE_GAP, 'video', value);\n }\n },\n get: function get() {\n return _this.___videoLargeGap || 0;\n }\n },\n _audioLargeGap: {\n set: function set(value) {\n _this.___audioLargeGap = value;\n if (value !== 0) {\n _this.emit(REMUX_EVENTS.DETECT_LARGE_GAP, 'audio', value);\n }\n },\n get: function get() {\n return _this.___audioLargeGap || 0;\n }\n }\n });\n this.audioUnsyncTime = 0;\n }\n\n _createClass(Compatibility, [{\n key: 'init',\n value: function init() {\n this.before(REMUX_EVENTS.REMUX_MEDIA, this.doFix.bind(this));\n }\n }, {\n key: 'reset',\n value: function reset() {\n this.nextAudioDts = null; // 估算下一段音频数据的dts\n this.nextVideoDts = null; // 估算下一段视频数据的dts\n\n this.lastAudioSamplesLen = 0; // 上一段音频数据的长度\n this.lastVideoSamplesLen = 0; // 上一段视频数据的长度\n\n this.lastVideoDts = undefined; // 上一段音频数据的dts\n this.lastAudioDts = undefined; // 上一段视频数据的dts\n\n // this.allAudioSamplesCount = 0 // 音频总数据量(原始帧)\n // this.allVideoSamplesCount = 0 // 视频总数据量(原始帧)\n\n this._audioLargeGap = 0;\n this._videoLargeGap = 0;\n\n // this._firstAudioSample = null\n // this._firstVideoSample = null\n // this._firstAudioSample = null\n // this._firstVideoSample = null\n this.videoLastSample = null;\n this.audioLastSample = null;\n\n this.filledAudioSamples = []; // 补充音频帧()\n this.filledVideoSamples = []; // 补充视频帧()\n\n this.audioUnsyncTime = 0;\n }\n }, {\n key: '_isSegmentsContinuous',\n value: function _isSegmentsContinuous() {\n return this._lastSegmentId === 0 || this._currentSegmentId - this._lastSegmentId === 1;\n }\n }, {\n key: 'doFix',\n value: function doFix() {\n var ops = void 0;\n var vSamp0 = void 0;\n var aSamp0 = void 0;\n var avDelta = 0;\n if (this.videoTrack.samples.length) {\n vSamp0 = this.videoTrack.samples[0];\n ops = vSamp0.options;\n if (logger.long) {\n logger.log(this.TAG, this.videoTrack.samples.slice());\n }\n }\n\n if (this.audioTrack.samples.length) {\n aSamp0 = this.audioTrack.samples[0];\n if (logger.long) {\n logger.log(this.TAG, this.audioTrack.samples.slice());\n }\n }\n\n if (vSamp0 && aSamp0) {\n avDelta = aSamp0.dts - vSamp0.dts;\n }\n\n // eslint-disable-next-line no-mixed-operators\n this._currentSegmentId = ops && ops.id || this._currentSegmentId + 1;\n\n logger.log(this.TAG, 'lastSeg:' + this._lastSegmentId + ' , currentSeg:' + this._currentSegmentId + ', discontinue:' + (ops && ops.discontinue) + ' vSamp0:' + (vSamp0 && vSamp0.dts) + ' aSamp0:' + (aSamp0 && aSamp0.dts));\n\n var _getFirstSample = this.getFirstSample(),\n isFirstAudioSamples = _getFirstSample.isFirstAudioSamples,\n isFirstVideoSamples = _getFirstSample.isFirstVideoSamples;\n\n this.recordSamplesCount();\n\n if (this._firstVideoSample) {\n this.fixVideoRefSampleDuration(this.videoTrack.meta, this.videoTrack.samples);\n }\n\n var _Compatibility$detect = Compatibility.detectChangeStream(this.videoTrack.samples, isFirstVideoSamples),\n videoChanged = _Compatibility$detect.changed,\n videoChangedIdxes = _Compatibility$detect.changedIdxes;\n\n if (videoChanged) {\n var disContinue = false;\n for (var i = 0; i < videoChangedIdxes.length; i++) {\n if (this.fixChangeStreamVideo(videoChangedIdxes[i], isFirstVideoSamples)) {\n disContinue = true;\n }\n }\n if (!disContinue) {\n this.doFixVideo(isFirstVideoSamples);\n }\n } else {\n if (!this._isSegmentsContinuous() && ops && ops.start !== undefined) {\n this.videoLastSample = null;\n var start = ops.start;\n // id 不连续时考虑上av之间的差值\n if (avDelta < 0) {\n start -= avDelta;\n }\n logger.log(this.TAG, 'fix video for _isSegmentsContinuous(), delta:', avDelta);\n this.doFixVideo(isFirstVideoSamples, start);\n this.emit(REMUX_EVENTS.DETECT_FRAG_ID_DISCONTINUE, ops.start / 1000);\n } else {\n this.doFixVideo(isFirstVideoSamples);\n }\n }\n\n this._appendSampleForLastSegment(ops && ops.isLast);\n\n var _Compatibility$detect2 = Compatibility.detectChangeStream(this.audioTrack.samples, isFirstAudioSamples),\n audioChanged = _Compatibility$detect2.changed,\n audioChangedIdxes = _Compatibility$detect2.changedIdxes;\n\n if (audioChanged) {\n var _disContinue = false;\n for (var _i = 0; _i < audioChangedIdxes.length; _i++) {\n if (this.fixChangeStreamAudio(audioChangedIdxes[_i], isFirstAudioSamples)) {\n _disContinue = true;\n }\n }\n if (!_disContinue) {\n this.doFixAudio(isFirstAudioSamples);\n } else {\n return;\n }\n } else {\n if (!this._isSegmentsContinuous() && ops && ops.start !== undefined) {\n logger.log(this.TAG, 'fix audio for _isSegmentsContinuous()');\n var sam0 = this.audioTrack.samples[0];\n this.nextAudioDts = ops.start || sam0 && sam0.dts;\n this.doFixAudio(isFirstAudioSamples, ops.start);\n this.emit(REMUX_EVENTS.DETECT_FRAG_ID_DISCONTINUE, ops.start / 1000);\n } else {\n this.doFixAudio(isFirstAudioSamples);\n }\n }\n\n this.removeInvalidSamples();\n\n this._lastSegmentId = this._currentSegmentId;\n }\n }, {\n key: 'doFixVideo',\n value: function doFixVideo(first, streamChangeStart) {\n var _videoTrack = this.videoTrack,\n videoSamples = _videoTrack.samples,\n meta = _videoTrack.meta;\n\n var len = videoSamples.length;\n\n for (var i = 0; i < len; i++) {\n var sample = videoSamples[i];\n sample.originDts = sample.dts;\n sample.originPts = sample.pts;\n }\n\n if (!videoSamples || !len || !this._firstVideoSample) {\n return;\n }\n\n var firstSample = videoSamples[0];\n\n logger.log(this.TAG, 'doFixVideo:: lastVideoDts: ' + this.lastVideoDts + ' , _videoLargeGap: ' + this._videoLargeGap + ' ,streamChangeStart:' + streamChangeStart + ', lastVideoSample:[dts=' + (this.videoLastSample && this.videoLastSample.dts) + ' , pts=' + (this.videoLastSample && this.videoLastSample.pts) + '] , firstDTS:' + firstSample.dts + ' ,firstPTS:' + firstSample.pts + ' ,lastDTS:' + videoSamples[len - 1].dts + ' , lastPTS: ' + videoSamples[len - 1].pts);\n\n if (!first && streamChangeStart === undefined && this.videoLastSample && Compatibility.detectVideoLargeGap(this.videoLastSample ? this.videoLastSample.dts : 0, firstSample.dts + this._videoLargeGap)) {\n // large gap 不准确,出现了非换流场景的时间戳跳变\n this._videoLargeGap = this.videoLastSample.dts + meta.refSampleDuration - firstSample.dts;\n }\n // step0.修复hls流出现巨大gap,需要强制重定位的问题。\n if (this._videoLargeGap !== 0) {\n Compatibility.doFixLargeGap(videoSamples, this._videoLargeGap);\n if (this._videoLargeGap !== this.preVideoGap) {\n this.preVideoGap = this._videoLargeGap;\n this.emit(REMUX_EVENTS.DETECT_CHANGE_STREAM_DISCONTINUE, 'video', { prevDts: this.videoLastSample && this.videoLastSample.originDts, curDts: firstSample.originDts });\n }\n }\n\n if (!first && streamChangeStart !== undefined && streamChangeStart !== 0) {\n this._videoLargeGap = streamChangeStart - firstSample.dts;\n Compatibility.doFixLargeGap(videoSamples, this._videoLargeGap);\n }\n\n // step1. 修复与audio首帧差距太大的问题\n if (first && this._firstAudioSample) {\n var videoFirstDts = this._firstVideoSample.originDts;\n var audioFirstDts = this._firstAudioSample.dts;\n var gap = videoFirstDts - audioFirstDts;\n if (gap > 2 * meta.refSampleDuration && gap < 10 * meta.refSampleDuration) {\n var fillCount = Math.floor(gap / meta.refSampleDuration);\n\n for (var _i2 = 0; _i2 < fillCount; _i2++) {\n var clonedFirstSample = Object.assign({}, firstSample); // 视频头部帧缺失需要复制第一帧\n // 重新计算sample的dts和pts\n clonedFirstSample.dts = videoFirstDts - (_i2 + 1) * meta.refSampleDuration;\n clonedFirstSample.pts = clonedFirstSample.dts + clonedFirstSample.cts;\n\n videoSamples.unshift(clonedFirstSample);\n\n this.filledVideoSamples.push({\n dts: clonedFirstSample.dts,\n size: clonedFirstSample.data.byteLength\n });\n }\n this._firstVideoSample = this.filledVideoSamples[0] || this._firstVideoSample;\n } else if (Math.abs(gap) > 2 * meta.refSampleDuration && !this._videoLargeGap) {\n this._videoLargeGap = -1 * gap;\n Compatibility.doFixLargeGap(videoSamples, -1 * gap);\n }\n }\n\n // 分片中间时间戳跳变\n var segLen = videoSamples.length;\n for (var _i3 = 1; _i3 < segLen; _i3++) {\n var c = videoSamples[_i3];\n var pre = videoSamples[_i3 - 1];\n var cts = c.dts - c.pts;\n if (Math.abs(cts) < 2000) {\n // 单帧 dts、pts差距不大\n if (Math.abs(c.dts - pre.dts) > 10000) {\n c.dts = pre.dts + meta.refSampleDuration;\n c.pts = pre.pts + meta.refSampleDuration;\n }\n }\n }\n\n var curLastSample = videoSamples.pop();\n if (videoSamples.length) {\n videoSamples[videoSamples.length - 1].duration = curLastSample.dts - videoSamples[videoSamples.length - 1].dts;\n }\n\n // 分片 < 4帧,不能起播的\n if (segLen < 4) {\n var _sample = videoSamples[videoSamples.length - 1];\n _sample = _sample || curLastSample;\n var duration = _sample.options && _sample.options.duration;\n var refDuration = meta.refSampleDuration;\n if (duration && refDuration && duration / refDuration > 5) {\n var pts = _sample.pts;\n var dts = _sample.dts;\n for (var _i4 = 0; _i4 < 3; _i4++) {\n dts += refDuration;\n pts += refDuration;\n var sam = Object.assign({}, _sample, { dts: dts, pts: pts });\n if (_i4 === 2) {\n // 最后一帧拉长duration\n sam.duration = duration;\n }\n videoSamples.push(sam);\n }\n }\n curLastSample = null;\n }\n\n if (this.videoLastSample) {\n var videoLastSample = this.videoLastSample;\n videoLastSample.duration = firstSample.dts - videoLastSample.dts;\n videoSamples.unshift(this.videoLastSample);\n }\n\n // videoSamples.forEach((sample, idx) => {\n // if (idx !== 0 && idx !== videoSamples.length - 1) {\n // const pre = videoSamples[idx - 1];\n // const next = videoSamples[idx + 1];\n // if (sample.dts - pre.dts < 5) {\n // sample.dts = (pre.dts + next.dts) / 2\n // sample.pts = (pre.pts + next.pts) / 2\n // }\n // }\n // })\n\n this.videoLastSample = curLastSample;\n if (videoSamples[videoSamples.length - 1]) {\n this.lastVideoDts = videoSamples[videoSamples.length - 1].dts;\n }\n this.videoTrack.samples = videoSamples;\n }\n }, {\n key: '_appendSampleForLastSegment',\n value: function _appendSampleForLastSegment(isLast) {\n if (isLast && this.videoLastSample) {\n this.videoTrack.samples.push(this.videoLastSample);\n }\n }\n }, {\n key: 'doFixAudio',\n value: function doFixAudio(first, streamChangeStart) {\n var _this2 = this;\n\n var _audioTrack = this.audioTrack,\n audioSamples = _audioTrack.samples,\n meta = _audioTrack.meta;\n\n\n if (!audioSamples || !audioSamples.length) {\n return;\n }\n\n this.fixAudioRefSampleDuration(meta);\n\n for (var i = 0, len = audioSamples.length; i < len; i++) {\n var sample = audioSamples[i];\n sample.originDts = sample.dts;\n }\n\n // console.log(`audio lastSample, ${audioSamples[audioSamples.length - 1].dts}`)\n\n var samplesLen = audioSamples.length;\n var silentFrame = AAC.getSilentFrame(meta.originCodec, meta.channelCount);\n var iRefSampleDuration = Math.floor(meta.refSampleDuration);\n\n var firstSample = this._firstAudioSample;\n\n var _firstSample = audioSamples[0];\n\n logger.log(this.TAG, 'doFixAudio:: audioDtsBase:' + this.audioDtsBase + ' , _audioLargeGap: ' + this._audioLargeGap + ', streamChangeStart:' + streamChangeStart + ' , nextAudioDts:' + this.nextAudioDts + ', audio: firstDTS:' + _firstSample.dts + ' ,firstPTS:' + _firstSample.pts + ' ,lastDTS:' + audioSamples[samplesLen - 1].dts + ' , lastPTS: ' + audioSamples[samplesLen - 1].pts);\n\n if (!first && this.nextAudioDts === null && _firstSample.options && _firstSample.options.start) {\n if (streamChangeStart !== undefined) {\n streamChangeStart = _firstSample.options.start;\n }\n }\n\n if (!first && streamChangeStart === undefined && this.nextAudioDts && Compatibility.detectAudioLargeGap(this.nextAudioDts || 0, _firstSample.dts + this._audioLargeGap)) {\n // large gap 不准确,出现了非换流场景的时间戳跳变\n var _audioLargeGap = this.nextAudioDts - _firstSample.dts;\n this._audioLargeGap = Math.abs(_audioLargeGap - this._videoLargeGap) < 200 ? this._videoLargeGap : _audioLargeGap;\n }\n\n // 对audioSamples按照dts做排序\n if (this._audioLargeGap !== 0) {\n Compatibility.doFixLargeGap(audioSamples, this._audioLargeGap);\n if (this._audioLargeGap !== this.preAudioGap) {\n this.preAudioGap = this._audioLargeGap;\n this.emit(REMUX_EVENTS.DETECT_CHANGE_STREAM_DISCONTINUE, 'audio', { prevDts: this.lastAudioOriginDts, curDts: _firstSample.originDts });\n }\n } else if (!first && (streamChangeStart !== undefined || Compatibility.detectAudioLargeGap(this.nextAudioDts, _firstSample.dts))) {\n if (streamChangeStart !== undefined && streamChangeStart !== 0) {\n this.nextAudioDts = streamChangeStart; // FIX: Hls中途切codec,在如果直接seek到后面的点会导致largeGap计算失败\n }\n this._audioLargeGap = this.nextAudioDts - _firstSample.dts;\n\n if (_firstSample.options.start && !_firstSample.options.start.isContinue) {\n Compatibility.doFixLargeGap(audioSamples, this._audioLargeGap);\n }\n }\n // step0. 首帧与video首帧间距大的问题\n if (this._firstVideoSample && first) {\n var videoFirstPts = this._firstVideoSample.originDts || this._firstVideoSample.dts;\n var _gap = firstSample.dts - videoFirstPts;\n\n if (_gap === this._videoLargeGap) {\n // already fixed by doFixVideo\\\n } else if (_gap > meta.refSampleDuration && _gap < 10 * meta.refSampleDuration) {\n var silentSampleCount = Math.floor((firstSample.dts - videoFirstPts) / meta.refSampleDuration);\n logger.warn(this.TAG, 'fill ' + silentSampleCount + ' frames for av align');\n for (var _i5 = 0; _i5 < silentSampleCount; _i5++) {\n var silentSample = {\n data: silentFrame,\n datasize: silentFrame.byteLength,\n dts: firstSample.dts - (_i5 + 1) * meta.refSampleDuration,\n filtered: 0\n };\n\n audioSamples.unshift(silentSample);\n\n this.filledAudioSamples.push({\n dts: silentSample.dts,\n size: silentSample.data.byteLength\n });\n }\n this._firstAudioSample = this.filledAudioSamples[0] || this._firstAudioSample;\n } else if (_gap < -1 * meta.refSampleDuration) {\n this._audioLargeGap = -1 * _gap;\n Compatibility.doFixLargeGap(audioSamples, -1 * _gap);\n }\n }\n\n var gap = void 0;\n var firstDts = audioSamples[0].dts;\n\n if (this.nextAudioDts) {\n // step1. 处理samples段之间的丢帧情况\n // 当发现duration差距大于1帧时进行补帧\n gap = firstDts - this.nextAudioDts;\n var absGap = Math.abs(gap);\n\n if (gap >= iRefSampleDuration && gap < 10000 && silentFrame) {\n var silentFrameCount = Math.ceil(gap / iRefSampleDuration);\n\n for (var _i6 = 0; _i6 < silentFrameCount; _i6++) {\n var computed = firstDts - (_i6 + 1) * iRefSampleDuration;\n var _silentSample = {\n dts: computed > this.nextAudioDts ? computed : this.nextAudioDts,\n pts: computed > this.nextAudioDts ? computed : this.nextAudioDts,\n datasize: silentFrame.byteLength,\n filtered: 0,\n data: silentFrame\n };\n\n this.filledAudioSamples.push({\n dts: _silentSample.dts,\n size: _silentSample.data.byteLength\n });\n this.audioTrack.samples.unshift(_silentSample);\n _firstSample = _silentSample;\n }\n this.emit(REMUX_EVENTS.DETECT_AUDIO_GAP, gap, silentFrameCount);\n } else if (absGap < meta.refSampleDuration && absGap > 0) {\n // 当差距比较小的时候将音频帧重定位\n // console.log('重定位音频帧dts', audioSamples[0].dts, this.nextAudioDts)\n _firstSample.dts = this.nextAudioDts;\n _firstSample.pts = this.nextAudioDts;\n } else if (gap < 0 && absGap < iRefSampleDuration) {\n Compatibility.doFixLargeGap(audioSamples, -1 * gap);\n this.emit(REMUX_EVENTS.DETECT_AUDIO_OVERLAP, gap);\n }\n }\n\n // 分片内采样间补帧\n var nextDts = audioSamples[0].dts + iRefSampleDuration;\n for (var _i7 = 1; _i7 < audioSamples.length;) {\n var _sample2 = audioSamples[_i7];\n var delta = _sample2.dts - nextDts;\n if (delta <= -1 * iRefSampleDuration) {\n logger.warn('drop 1 audio sample for ' + delta + ' ms overlap');\n audioSamples.splice(_i7, 1);\n continue;\n }\n if (delta >= 10 * iRefSampleDuration) {\n var missingCount = Math.round(delta / iRefSampleDuration);\n if (missingCount > 1000) {\n break;\n }\n logger.warn(this.TAG, 'inject ' + missingCount + ' audio frame for ' + delta + ' ms gap, index=' + _i7);\n for (var j = 0; j < missingCount; j++) {\n var _silentSample2 = {\n data: silentFrame,\n datasize: silentFrame.byteLength,\n dts: nextDts,\n originDts: nextDts,\n filtered: 0\n };\n audioSamples.splice(_i7, 0, _silentSample2);\n nextDts += iRefSampleDuration;\n _i7++;\n }\n _sample2.dts = _sample2.pts = _sample2.originDts = nextDts;\n nextDts += iRefSampleDuration;\n _i7++;\n } else {\n _sample2.dts = _sample2.pts = _sample2.originDts = nextDts;\n nextDts += iRefSampleDuration;\n _i7++;\n }\n }\n\n var unSyncDuration = meta.refSampleDuration - iRefSampleDuration;\n audioSamples.forEach(function (sample, idx) {\n if (idx !== 0) {\n var _lastSample = audioSamples[idx - 1];\n sample.dts = sample.pts = _lastSample.dts + _lastSample.duration;\n }\n sample.duration = iRefSampleDuration;\n _this2.audioUnsyncTime = _this2.audioUnsyncTime + unSyncDuration;\n if (_this2.audioUnsyncTime >= 1) {\n sample.duration += 1;\n _this2.audioUnsyncTime -= 1;\n }\n });\n\n var lastSample = audioSamples[audioSamples.length - 1];\n this.lastAudioDts = lastSample.dts;\n var lastDuration = lastSample.duration;\n // const lastSampleDuration = audioSamples.length >= 2 ? lastOriginDts - audioSamples[audioSamples.length - 2].originDts : meta.refSampleDuration\n\n this.lastAudioSamplesLen = samplesLen;\n this.nextAudioDts = this.lastAudioDts + (lastDuration || iRefSampleDuration);\n this.lastAudioOriginDts = lastSample.originDts;\n\n this.audioTrack.samples = Compatibility.sortAudioSamples(audioSamples);\n }\n }, {\n key: 'fixChangeStreamVideo',\n value: function fixChangeStreamVideo(changeIdx) {\n logger.log(this.TAG, 'fixChangeStreamVideo(), changeIdx=', changeIdx);\n var samples = this.videoTrack.samples;\n\n var prevDts = changeIdx === 0 ? this.lastVideoDts ? this.lastVideoDts : this.getStreamChangeStart(samples[0]) : samples[changeIdx - 1].dts;\n var curDts = samples[changeIdx].dts;\n var isContinue = Math.abs(prevDts - curDts) <= 10000;\n this.emit(REMUX_EVENTS.DETECT_CHANGE_STREAM, 'video', curDts);\n if (isContinue) {\n if (!samples[changeIdx].options) {\n samples[changeIdx].options = {\n isContinue: true\n };\n } else {\n samples[changeIdx].options.isContinue = true;\n }\n return false;\n }\n\n this.emit(REMUX_EVENTS.DETECT_CHANGE_STREAM_DISCONTINUE, 'video', { prevDts: prevDts, curDts: curDts });\n\n var firstPartSamples = samples.slice(0, changeIdx);\n var secondPartSamples = samples.slice(changeIdx);\n var changeSample = samples[changeIdx];\n\n var streamChangeStart = void 0;\n\n this._videoLargeGap = 0;\n this.videoLastSample = null;\n this.lastVideoDts = null;\n if (changeSample.options && changeSample.options.start !== undefined) {\n streamChangeStart = changeSample.options.start;\n } else {\n streamChangeStart = prevDts - this.videoDtsBase;\n }\n\n this.videoTrack.samples = samples.slice(0, changeIdx);\n\n this.doFixVideo(false);\n\n this.videoTrack.samples = samples.slice(changeIdx);\n\n this.doFixVideo(false, streamChangeStart);\n\n this.videoTrack.samples = firstPartSamples.concat(secondPartSamples);\n\n return true;\n }\n }, {\n key: 'fixChangeStreamAudio',\n value: function fixChangeStreamAudio(changeIdx) {\n logger.log(this.TAG, 'fixChangeStreamAudio(), changeIdx=', changeIdx);\n var samples = this.audioTrack.samples;\n\n\n var prevDts = changeIdx === 0 ? this.lastAudioDts : samples[changeIdx - 1].dts;\n var curDts = samples[changeIdx].dts;\n var isContinue = Math.abs(prevDts - curDts) <= 10000;\n this.emit(REMUX_EVENTS.DETECT_CHANGE_STREAM, 'audio', curDts);\n if (isContinue) {\n if (!samples[changeIdx].options) {\n samples[changeIdx].options = {\n isContinue: true\n };\n } else {\n samples[changeIdx].options.isContinue = true;\n }\n return false;\n }\n this.emit(REMUX_EVENTS.DETECT_CHANGE_STREAM_DISCONTINUE, 'audio', { prevDts: prevDts, curDts: curDts });\n this._audioLargeGap = 0;\n var cacheNextAudioDts = this.nextAudioDts;\n this.nextAudioDts = null;\n var firstPartSamples = samples.slice(0, changeIdx);\n var secondPartSamples = samples.slice(changeIdx);\n var changeSample = samples[changeIdx];\n\n var streamChangeStart = void 0;\n if (changeSample.options && changeSample.options.start !== undefined) {\n streamChangeStart = changeSample.options.start;\n } else {\n streamChangeStart = cacheNextAudioDts;\n changeSample.options.isContinue = true;\n }\n\n this.audioTrack.samples = firstPartSamples;\n\n this.doFixAudio(false);\n\n this.audioTrack.samples = secondPartSamples;\n\n this.doFixAudio(false, streamChangeStart);\n\n this.audioTrack.samples = firstPartSamples.concat(secondPartSamples);\n\n return true;\n }\n }, {\n key: 'getFirstSample',\n value: function getFirstSample() {\n // 获取video和audio的首帧数据\n var videoSamples = this.videoTrack.samples;\n var audioSamples = this.audioTrack.samples;\n\n\n var isFirstVideoSamples = false;\n var isFirstAudioSamples = false;\n\n if (!this._firstVideoSample && videoSamples.length) {\n this._firstVideoSample = Compatibility.findFirstVideoSample(videoSamples);\n this.removeInvalidSamples();\n isFirstVideoSamples = true;\n }\n\n if (!this._firstAudioSample && audioSamples.length) {\n this._firstAudioSample = Compatibility.findFirstAudioSample(audioSamples); // 寻找dts最小的帧作为首个音频帧\n this.removeInvalidSamples();\n isFirstAudioSamples = true;\n }\n\n return {\n isFirstVideoSamples: isFirstVideoSamples,\n isFirstAudioSamples: isFirstAudioSamples\n };\n }\n\n /**\n * 在没有refSampleDuration的问题流中,\n */\n\n }, {\n key: 'fixVideoRefSampleDuration',\n value: function fixVideoRefSampleDuration(meta, samples) {\n if (!meta) {\n return;\n }\n var allSamplesCount = this.allVideoSamplesCount;\n var firstDts = this._firstVideoSample.dts;\n var filledSamplesCount = this.filledVideoSamples.length;\n if (!Compatibility.isRefSampleDurationValid(meta.refSampleDuration)) {\n if (samples.length >= 1) {\n var lastDts = samples[samples.length - 1].dts;\n\n var fixed = Math.floor((lastDts - firstDts) / (allSamplesCount + filledSamplesCount - 1)); // 将refSampleDuration重置为计算后的平均值\n\n if (Compatibility.isRefSampleDurationValid(fixed)) {\n meta.refSampleDuration = fixed;\n }\n }\n } else if (meta.refSampleDuration) {\n if (samples.length >= 5) {\n var _lastDts = samples[samples.length - 1].dts;\n var _firstDts = samples[0].dts;\n var durationAvg = (_lastDts - _firstDts) / (samples.length - 1);\n if (durationAvg > 0 && durationAvg < 1000) {\n var _fixed = Math.floor(Math.abs(meta.refSampleDuration - durationAvg) <= 5 ? meta.refSampleDuration : durationAvg); // 将refSampleDuration重置为计算后的平均值\n if (Compatibility.isRefSampleDurationValid(_fixed)) {\n meta.refSampleDuration = _fixed;\n }\n }\n }\n }\n\n if (!Compatibility.isRefSampleDurationValid(meta.refSampleDuration)) {\n meta.refSampleDuration = 66;\n }\n }\n }, {\n key: 'fixAudioRefSampleDuration',\n value: function fixAudioRefSampleDuration(meta) {\n if (!meta) {\n return;\n }\n meta.refSampleDuration = meta.timescale * 1024 / meta.sampleRate;\n }\n\n /**\n * 记录截止目前一共播放了多少帧\n */\n\n }, {\n key: 'recordSamplesCount',\n value: function recordSamplesCount() {\n var audioTrack = this.audioTrack,\n videoTrack = this.videoTrack;\n\n\n this.allAudioSamplesCount += audioTrack.samples.length;\n this.allVideoSamplesCount += videoTrack.samples.length;\n }\n\n /**\n * 去除不合法的帧(倒退、重复帧)\n */\n\n }, {\n key: 'removeInvalidSamples',\n value: function removeInvalidSamples() {\n var firstAudioSample = this.audioTrack.samples[0];\n var firstVideoSample = this.videoTrack.samples[0];\n // const { _firstVideoSample, _firstAudioSample } = this\n\n if (firstAudioSample) {\n this.audioTrack.samples = this.audioTrack.samples.filter(function (sample, index) {\n if (sample === firstAudioSample) {\n return true;\n }\n return sample.dts >= firstAudioSample.dts;\n });\n }\n\n if (firstVideoSample) {\n this.videoTrack.samples = this.videoTrack.samples.filter(function (sample, index) {\n if (sample === firstVideoSample) {\n return true;\n }\n return sample.dts >= firstVideoSample.dts;\n });\n }\n }\n }, {\n key: 'getStreamChangeStart',\n value: function getStreamChangeStart(sample) {\n if (sample.options && sample.options.start) {\n return sample.options.start - this.dtsBase;\n }\n return Infinity;\n }\n }, {\n key: 'tracks',\n get: function get() {\n return this._context.getInstance('TRACKS');\n }\n }, {\n key: 'audioTrack',\n get: function get() {\n if (this.tracks && this.tracks.audioTrack) {\n return this.tracks.audioTrack;\n }\n return {\n samples: [],\n meta: {}\n };\n }\n }, {\n key: 'videoTrack',\n get: function get() {\n if (this.tracks && this.tracks.videoTrack) {\n return this.tracks.videoTrack;\n }\n return {\n samples: [],\n meta: {}\n };\n }\n }, {\n key: 'dtsBase',\n get: function get() {\n var remuxer = this._context.getInstance('MP4_REMUXER');\n if (remuxer) {\n return remuxer._dtsBase;\n }\n return 0;\n }\n }, {\n key: 'audioDtsBase',\n get: function get() {\n var remuxer = this._context.getInstance('MP4_REMUXER');\n if (remuxer && remuxer._audioDtsBase !== null) {\n return remuxer._audioDtsBase;\n }\n\n return this.dtsBase;\n }\n }, {\n key: 'videoDtsBase',\n get: function get() {\n var remuxer = this._context.getInstance('MP4_REMUXER');\n if (remuxer && remuxer._videoDtsBase !== null) {\n return remuxer._videoDtsBase;\n }\n\n return this.dtsBase;\n }\n }], [{\n key: 'sortAudioSamples',\n value: function sortAudioSamples(samples) {\n if (samples.length === 1) {\n return samples;\n }\n\n return [].concat(_toConsumableArray(samples)).sort(function (a, b) {\n return a.dts - b.dts;\n });\n }\n }, {\n key: 'isRefSampleDurationValid',\n value: function isRefSampleDurationValid(refSampleDuration) {\n return refSampleDuration && refSampleDuration > 0 && !Number.isNaN(refSampleDuration);\n }\n /**\n * 寻找dts最小的sample\n * @param samples\n */\n\n }, {\n key: 'findFirstAudioSample',\n value: function findFirstAudioSample(samples) {\n if (!samples || samples.length === 0) {\n return null;\n }\n\n return Compatibility.sortAudioSamples(samples)[0];\n }\n }, {\n key: 'findFirstVideoSample',\n value: function findFirstVideoSample(samples) {\n if (!samples.length) {\n return null;\n }\n\n var sorted = [].concat(_toConsumableArray(samples)).sort(function (a, b) {\n return a.dts - b.dts;\n });\n\n for (var i = 0, len = sorted.length; i < len; i++) {\n if (sorted[i].isKeyframe) {\n return sorted[i];\n }\n }\n }\n }, {\n key: 'detectVideoLargeGap',\n value: function detectVideoLargeGap(nextDts, firstSampleDts) {\n if (nextDts === null) {\n return;\n }\n var delta = 1000;\n return nextDts - firstSampleDts >= delta || firstSampleDts - nextDts >= delta; // fix hls流出现大量流dts间距问题\n }\n }, {\n key: 'detectAudioLargeGap',\n value: function detectAudioLargeGap(nextDts, firstSampleDts) {\n if (nextDts === null) {\n return;\n }\n return nextDts - firstSampleDts >= 1000 || firstSampleDts - nextDts >= 1000; // fix hls流出现大量流dts间距问题\n }\n }, {\n key: 'doFixLargeGap',\n value: function doFixLargeGap(samples, gap) {\n // console.log('fix large gap...... ', gap)\n for (var i = 0, len = samples.length; i < len; i++) {\n var sample = samples[i];\n sample.dts += gap;\n if (sample.pts) {\n sample.pts += gap;\n }\n }\n var first = samples[0];\n if (first && first.dts === 0) {\n first.dts = first.pts = 1;\n }\n }\n\n /**\n * 中途换流\n * |-------------------frag2---------------|\n * | frag1 | -----sample 0~n -------sample n+1 ~ m |\n *\n * 换流可能开始于新分片的第一帧 或者分片中间\n *\n */\n\n }, {\n key: 'detectChangeStream',\n value: function detectChangeStream(samples, isFirst) {\n var changed = false;\n var changedIdxes = [];\n for (var i = 0, len = samples.length; i < len; i++) {\n var sample = samples[i];\n if (sample.options && sample.options.meta && !(isFirst && i === 0)) {\n changed = true;\n changedIdxes.push(i);\n // break;\n }\n }\n\n return {\n changed: changed,\n changedIdxes: changedIdxes\n };\n }\n }]);\n\n return Compatibility;\n}();\n\nexport default Compatibility;","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"]) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); } }; }();\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport EventEmitter from 'eventemitter3';\nimport { logger } from 'xgplayer-helper-utils';\nimport { XGDataView, AudioTrackMeta, VideoTrackMeta, AudioSample, VideoSample } from 'xgplayer-helper-models';\nimport { ADTS, avc, hevc } from 'xgplayer-helper-codec';\n\n/**\n * @typedef {import('xgplayer-helper-models').TsFrag } TsFrag\n */\n/**\n * @typedef {import('xgplayer-helper-models').Buffer } Buffer\n */\nvar NalUnit = avc.NalUnit;\nvar NalUnitHEVC = hevc.NalUnitHEVC;\n\nvar StreamType = {\n 0x01: ['video', 'MPEG-1'],\n 0x02: ['video', 'MPEG-2'],\n 0x1b: ['video', 'AVC.H264'],\n 0x24: ['video', 'HVC.H265'],\n 0xea: ['video', 'VC-1'],\n 0x03: ['audio', 'MPEG-1'],\n 0x04: ['audio', 'MPEG-2'],\n 0x0f: ['audio', 'MPEG-2.AAC'],\n 0x11: ['audio', 'MPEG-4.AAC'],\n 0x80: ['audio', 'LPCM'],\n 0x81: ['audio', 'AC3'],\n 0x06: ['audio', 'AC3'],\n 0x82: ['audio', 'DTS'],\n 0x83: ['audio', 'Dolby TrueHD'],\n 0x84: ['audio', 'AC3-Plus'],\n 0x85: ['audio', 'DTS-HD'],\n 0x86: ['audio', 'DTS-MA'],\n 0xa1: ['audio', 'AC3-Plus-SEC'],\n 0xa2: ['audio', 'DTS-HD-SEC']\n};\n\nvar TsDemuxer = function (_EventEmitter) {\n _inherits(TsDemuxer, _EventEmitter);\n\n _createClass(TsDemuxer, null, [{\n key: 'EVENTS',\n get: function get() {\n return {\n DEMUX_COMPLETE: 'DEMUX_COMPLETE',\n METADATA_PARSED: 'METADATA_PARSED',\n VIDEO_SAMPLE_PARSED: 'VIDEO_SAMPLE_PARSED',\n AUDIO_SAMPLE_PARSED: 'AUDIO_SAMPLES_PARSED',\n SEI_PARSED: 'SEI_PARSED'\n };\n }\n\n /**\n * @param {any} videoTrack\n * @param {any} audioTrack\n */\n\n }]);\n\n function TsDemuxer(_ref) {\n var videoTrack = _ref.videoTrack,\n audioTrack = _ref.audioTrack;\n\n _classCallCheck(this, TsDemuxer);\n\n var _this = _possibleConstructorReturn(this, (TsDemuxer.__proto__ || Object.getPrototypeOf(TsDemuxer)).call(this));\n\n _this.TAG = 'TsDemuxer';\n _this.demuxing = false;\n _this.videoTrack = videoTrack;\n _this.audioTrack = audioTrack;\n _this.pat = [];\n _this.pmt = [];\n _this._hasVideoMeta = false;\n _this._hasAudioMeta = false;\n _this.gopId = 0;\n return _this;\n }\n\n /**\n *\n * @param {TsFrag} frag ts fragment parsed from m3u8\n * @param {Buffer} buffer u8a-buffer\n * @param {boolean} isVod is a vod m3u8\n */\n\n\n _createClass(TsDemuxer, [{\n key: 'demux',\n value: function demux(frag, buffer, isVod) {\n if (frag) {\n logger.log(this.TAG, 'do demux: id=' + frag.id + ',demuxing=' + this.demuxing);\n }\n if (this.demuxing) {\n return;\n }\n\n var frags = { pat: [], pmt: [] };\n var peses = {};\n while (buffer.length >= 188) {\n if (buffer.length >= 1 && buffer.array[0][buffer.offset] !== 71) {\n throw new Error('Untrust sync code: ' + buffer.array[0][buffer.offset] + ', try to recover;');\n }\n while (buffer.length >= 1 && buffer.array[0][buffer.offset] !== 71) {\n buffer.shift(1);\n }\n if (buffer.length < 188) {\n continue;\n }\n var buf = buffer.shift(188);\n // console.log(buf);\n var tsStream = new XGDataView(buf.buffer);\n var ts = {};\n TsDemuxer.read(tsStream, ts, frags);\n var pes = peses[ts.header.pid];\n if (ts.pes) {\n ts.pes.codec = ts.header.codec;\n ts.pes.streamType = ts.header.streamType;\n if (!peses[ts.header.pid]) {\n peses[ts.header.pid] = [];\n }\n peses[ts.header.pid].push(ts.pes);\n ts.pes.ES.buffer = [ts.pes.ES.buffer];\n } else if (pes) {\n pes[pes.length - 1].ES.buffer.push(ts.payload.stream);\n }\n }\n\n var AudioOptions = Object.assign({}, frag);\n var VideoOptions = Object.assign({}, frag);\n\n var noAudio = isVod && this._hasVideoMeta && !this._hasAudioMeta;\n var noVideo = isVod && this._hasAudioMeta && !this._hasVideoMeta;\n\n // Get Frames data\n for (var i = 0; i < Object.keys(peses).length; i++) {\n var epeses = peses[Object.keys(peses)[i]];\n for (var j = 0; j < epeses.length; j++) {\n var cPes = epeses[j];\n cPes.id = Object.keys(peses)[i];\n\n // 1. !noAudio 首片无音频,后续分片当无音频处理\n // 2. cPes.streamType === 0x0f || cPes.streamType === 0x11 只处理aac,其他音频格式当无音频\n var isAAC = cPes.streamType === 0x0f || cPes.streamType === 0x11;\n if (cPes.type === 'audio' && !noAudio && isAAC) {\n cPes.ES.buffer = TsDemuxer.mergeAudioES(cPes.ES.buffer);\n this.pushAudioSample(cPes, AudioOptions);\n AudioOptions = {};\n } else if (cPes.type === 'video' && !noVideo) {\n cPes.ES.buffer = TsDemuxer.mergeVideoES(cPes.ES.buffer);\n if (cPes.codec === 'HVC.H265') {\n this.pushVideoSampleHEVC(epeses[j], VideoOptions);\n } else {\n this.pushVideoSample(epeses[j], VideoOptions);\n }\n VideoOptions = { spsFound: !!VideoOptions.spsFound };\n }\n }\n }\n }\n }, {\n key: 'pushAudioSample',\n value: function pushAudioSample(pes, options) {\n var meta = new AudioTrackMeta({\n audioSampleRate: pes.ES.frequence,\n sampleRate: pes.ES.frequence,\n channelCount: pes.ES.channel,\n codec: 'mp4a.40.' + pes.ES.audioObjectType,\n originCodec: 'mp4a.40.' + pes.ES.originAudioObjectType,\n originObjectType: pes.ES.originAudioObjectType,\n config: pes.ES.audioConfig,\n id: 2,\n sampleRateIndex: pes.ES.frequencyIndex\n });\n meta.refSampleDuration = Math.floor(1024 / meta.audioSampleRate * meta.timescale);\n\n var metaEqual = TsDemuxer.compareMeta(this.audioTrack.meta, meta, true);\n\n if (!this._hasAudioMeta || !metaEqual) {\n this._hasAudioMeta = true;\n if (options) {\n options.meta = Object.assign({}, meta);\n } else {\n options = {\n meta: Object.assign({}, meta)\n };\n }\n this.emit(TsDemuxer.EVENTS.METADATA_PARSED, 'audio', meta);\n }\n\n var frameIndex = 0;\n pes.ES.buffer.skip(pes.pesHeaderLength + 9);\n var streamChanged = false;\n while (pes.ES.buffer.position < pes.ES.buffer.length) {\n if (ADTS.isHeader(new Uint8Array(pes.ES.buffer.buffer), pes.ES.buffer.position) && pes.ES.buffer.position + 5 < pes.ES.buffer.length) {\n var frame = ADTS.appendFrame(this.audioTrack.meta.sampleRate, new Uint8Array(pes.ES.buffer.buffer), pes.ES.buffer.position, pes.pts, frameIndex);\n if (frame && frame.sample) {\n // logger.log(`${Math.round(frame.sample.pts)} : AAC`);\n pes.ES.buffer.skip(frame.length);\n var sample = new AudioSample({\n dts: frame.sample.dts,\n pts: frame.sample.pts,\n data: frame.sample.unit,\n options: streamChanged ? {} : options\n });\n if (options.meta) {\n streamChanged = true;\n }\n sample.dts = sample.pts = Math.ceil(sample.pts / 90);\n this.emit(TsDemuxer.EVENTS.AUDIO_SAMPLE_PARSED, sample);\n frameIndex++;\n } else {\n // logger.log('Unable to parse AAC frame');\n break;\n }\n } else {\n // nothing found, keep looking\n pes.ES.buffer.skip(1);\n }\n }\n }\n }, {\n key: 'pushVideoSample',\n value: function pushVideoSample(pes, options) {\n var _this2 = this;\n\n var nals = NalUnit.getNalunits(pes.ES.buffer);\n var meta = new VideoTrackMeta();\n var spsFound = options.spsFound; // 保存当前分片内是否解析过sps\n var sampleLength = 0;\n var sps = false;\n var pps = false;\n var seiList = [];\n for (var i = 0; i < nals.length; i++) {\n var nal = nals[i];\n if (nal.type < 9 && !nal.sei) {\n sampleLength += 4 + nal.body.byteLength;\n }\n if (nal.sps) {\n sps = nal;\n meta.sps = nal.body;\n meta.chromaFormat = sps.sps.chroma_format;\n meta.codec = 'avc1.';\n for (var j = 1; j < 4; j++) {\n var h = sps.body[j].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n meta.codec += h;\n }\n meta.codecHeight = sps.sps.codec_size.height;\n meta.codecWidth = sps.sps.codec_size.width;\n meta.frameRate = sps.sps.frame_rate;\n meta.id = 1;\n meta.level = sps.sps.level_string;\n meta.presentHeight = sps.sps.present_size.height;\n meta.presentWidth = sps.sps.present_size.width;\n meta.profile = sps.sps.profile_string;\n meta.refSampleDuration = Math.floor(meta.timescale * (sps.sps.frame_rate.fps_den / sps.sps.frame_rate.fps_num));\n meta.sarRatio = sps.sps.sar_ratio ? sps.sps.sar_ratio : sps.sps.par_ratio;\n } else if (nal.pps) {\n meta.pps = nal.body;\n pps = nal;\n } else if (nal.sei) {\n seiList.push(nal.sei);\n }\n }\n\n if (sps && pps) {\n meta.avcc = NalUnit.getAvcc(sps.body, pps.body);\n var metaEqual = TsDemuxer.compareMeta(this.videoTrack.meta, meta, true);\n if (!this._hasVideoMeta || !metaEqual) {\n if (options) {\n options.meta = Object.assign({}, meta);\n } else {\n options = {\n meta: Object.assign({}, meta)\n };\n }\n if (!spsFound) {\n this.emit(TsDemuxer.EVENTS.METADATA_PARSED, 'video', meta);\n }\n options.spsFound = true;\n this._hasVideoMeta = true;\n }\n }\n\n var data = new Uint8Array(sampleLength);\n var offset = 0;\n var isKeyframe = false;\n for (var _i = 0; _i < nals.length; _i++) {\n var _nal = nals[_i];\n if (_nal.type && _nal.type >= 9) {\n continue;\n }\n var length = _nal.body.byteLength;\n if (_nal.idr) {\n isKeyframe = true;\n }\n if (!_nal.sei) {\n data.set(new Uint8Array([length >>> 24 & 0xff, length >>> 16 & 0xff, length >>> 8 & 0xff, length & 0xff]), offset);\n offset += 4;\n data.set(_nal.body, offset);\n offset += length;\n }\n }\n var dts = parseInt(pes.dts / 90);\n var pts = parseInt(pes.pts / 90);\n\n if (seiList.length) {\n seiList.forEach(function (sei) {\n sei.dts = dts;\n _this2.emit(TsDemuxer.EVENTS.SEI_PARSED, sei);\n });\n }\n var sample = new VideoSample({\n dts: dts,\n pts: pts,\n cts: pts - dts,\n originDts: pes.dts,\n purePts: pes.purePts,\n isKeyframe: isKeyframe,\n data: data,\n nals: nals,\n options: options,\n firstInGop: isKeyframe,\n gopId: isKeyframe ? ++this.gopId : this.gopId\n });\n this.emit(TsDemuxer.EVENTS.VIDEO_SAMPLE_PARSED, sample);\n }\n }, {\n key: 'pushVideoSampleHEVC',\n value: function pushVideoSampleHEVC(pes, options) {\n var _this3 = this;\n\n var nals = NalUnitHEVC.getNalunits(pes.ES.buffer);\n nals = nals.filter(function (x) {\n return x.body && x.body.length;\n });\n var meta = new VideoTrackMeta();\n meta.streamType = 0x24;\n\n var sampleLength = 0;\n var vps = false;\n var sps = false;\n var pps = false;\n var seiList = [];\n var hasVPS = false;\n var hasSPS = false;\n var hasPPS = false;\n var firstInGop = false;\n for (var i = 0; i < nals.length; i++) {\n var nal = nals[i];\n\n if (nal.vps) {\n if (hasVPS) {\n continue;\n } else {\n hasVPS = true;\n }\n } else if (nal.sps) {\n if (hasSPS) {\n continue;\n } else {\n hasSPS = true;\n }\n } else if (nal.pps) {\n if (hasPPS) {\n continue;\n } else {\n hasPPS = true;\n }\n } else if (nal.key) {\n if (nal.type === 20 || nal.type === 19) {\n firstInGop = true;\n }\n } else if (nal.type === 0) {\n // if (!hasKeyframe) {\n // continue;\n // }\n } else if (nal.type === 35) {\n continue;\n }\n if (nal.sps) {\n sps = nal;\n meta.sps = nal.body;\n\n meta.presentWidth = sps.sps.width;\n meta.presentHeight = sps.sps.height;\n meta.general_profile_space = sps.sps.general_profile_space;\n meta.general_tier_flag = sps.sps.general_tier_flag;\n meta.general_profile_idc = sps.sps.general_profile_idc;\n meta.general_level_idc = sps.sps.general_level_idc;\n // meta.duration = this._duration;\n meta.codec = 'hev1.1.6.L93.B0';\n meta.chromaFormatIdc = sps.sps.chromaFormatIdc;\n meta.bitDepthLumaMinus8 = sps.sps.bitDepthLumaMinus8;\n meta.bitDepthChromaMinus8 = sps.sps.bitDepthChromaMinus8;\n } else if (nal.pps) {\n meta.pps = nal.body;\n pps = nal;\n } else if (nal.vps) {\n meta.vps = nal.body;\n vps = nal;\n } else if (nal.sei) {\n seiList.push(nal.sei);\n }\n if (nal.type <= 40) {\n sampleLength += 4 + nal.body.byteLength;\n }\n }\n\n if (sps && pps && vps) {\n // meta.avcc = NalUnitHEVC.getAvcc(sps.body, pps.body);\n var metaEqual = TsDemuxer.compareMeta(this.videoTrack.meta, meta, true);\n if (!this._hasVideoMeta || !metaEqual) {\n if (options) {\n options.meta = Object.assign({}, meta);\n } else {\n options = {\n meta: Object.assign({}, meta)\n };\n }\n meta.streamType = 0x24;\n this.videoTrack.meta = meta;\n this._hasVideoMeta = true;\n this.emit(TsDemuxer.EVENTS.METADATA_PARSED, 'video', meta);\n }\n }\n\n var data = new Uint8Array(sampleLength);\n var offset = 0;\n var isKeyframe = false;\n hasVPS = false;\n hasSPS = false;\n hasPPS = false;\n for (var _i2 = 0; _i2 < nals.length; _i2++) {\n var _nal2 = nals[_i2];\n if (_nal2.type && _nal2.type > 40) {\n continue;\n }\n\n if (_nal2.vps) {\n if (hasVPS) {\n continue;\n } else {\n hasVPS = true;\n }\n } else if (_nal2.sps) {\n if (hasSPS) {\n continue;\n } else {\n hasSPS = true;\n }\n } else if (_nal2.pps) {\n if (hasPPS) {\n continue;\n } else {\n hasPPS = true;\n }\n } else if (_nal2.key) {} else if (_nal2.type === 0) {\n // if (!hasKeyframe) {\n // continue;\n // }\n } else if (_nal2.type === 35) {\n continue;\n }\n var length = _nal2.body.byteLength;\n if (_nal2.key) {\n isKeyframe = true;\n }\n // if (!nal.vps && !nal.pps && !nal.sps) {\n data.set(new Uint8Array([length >>> 24 & 0xff, length >>> 16 & 0xff, length >>> 8 & 0xff, length & 0xff]), offset);\n offset += 4;\n data.set(_nal2.body, offset);\n offset += length;\n // }\n }\n var dts = parseInt(pes.dts / 90);\n var pts = parseInt(pes.pts / 90);\n\n if (seiList) {\n seiList.forEach(function (sei) {\n sei.dts = dts;\n _this3.emit(TsDemuxer.EVENTS.SEI_PARSED, sei);\n });\n }\n\n var sample = new VideoSample({\n dts: dts,\n pts: pts,\n cts: pts - dts,\n originDts: pes.dts,\n purePts: pes.purePts,\n isKeyframe: isKeyframe,\n data: data,\n nals: nals,\n options: options,\n firstInGop: firstInGop,\n gopId: firstInGop ? ++this.gopId : this.gopId\n });\n this.emit(TsDemuxer.EVENTS.VIDEO_SAMPLE_PARSED, sample);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.removeAllListeners();\n this.configs = {};\n this.demuxing = false;\n this.pat = [];\n this.pmt = [];\n this._hasVideoMeta = false;\n this._hasAudioMeta = false;\n }\n }], [{\n key: 'compareArray',\n value: function compareArray(a, b, type) {\n var al = 0;\n var bl = 0;\n if (type === 'Uint8Array') {\n al = a.byteLength;\n bl = b.byteLength;\n } else if (type === 'Array') {\n al = a.length;\n bl = b.length;\n }\n if (al !== bl) {\n return false;\n }\n\n for (var i = 0; i < al; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n }\n }, {\n key: 'compareMeta',\n value: function compareMeta(a, b, ignoreDuration) {\n if (!a || !b) {\n return false;\n }\n\n for (var i = 0, k = Object.keys(a).length; i < k; i++) {\n var itema = a[Object.keys(a)[i]];\n var itemb = b[Object.keys(a)[i]];\n if (!itema && !itemb) {\n return true;\n }\n\n if ((itema === undefined || itema === null) && itemb || itema && itemb === undefined) {\n return false;\n }\n\n if ((typeof itema === 'undefined' ? 'undefined' : _typeof(itema)) !== 'object') {\n if (ignoreDuration && Object.keys(a)[i] !== 'duration' && Object.keys(a)[i] !== 'refSampleDuration' && Object.keys(a)[i] !== 'refSampleDurationFixed' && itema !== itemb) {\n return false;\n }\n } else if (itema.byteLength !== undefined) {\n if (itemb.byteLength === undefined) {\n return false;\n }\n if (!TsDemuxer.compareArray(itema, itemb, 'Uint8Array')) {\n return false;\n }\n } else if (itema.length !== undefined) {\n if (itemb.length === undefined) {\n return false;\n }\n if (!TsDemuxer.compareArray(itema, itemb, 'Array')) {\n return false;\n }\n } else {\n if (!TsDemuxer.compareMeta(itema, itemb)) {\n return false;\n }\n }\n }\n return true;\n }\n }, {\n key: 'mergeVideoES',\n value: function mergeVideoES(buffers) {\n var data = void 0;\n var length = 0;\n var offset = 0;\n for (var i = 0; i < buffers.length; i++) {\n length += buffers[i].length - buffers[i].position;\n }\n\n data = new Uint8Array(length);\n for (var _i3 = 0; _i3 < buffers.length; _i3++) {\n var buffer = buffers[_i3];\n data.set(new Uint8Array(buffer.buffer, buffer.position), offset);\n offset += buffer.length - buffer.position;\n }\n return new XGDataView(data.buffer);\n }\n }, {\n key: 'mergeAudioES',\n value: function mergeAudioES(buffers) {\n var data = void 0;\n var length = 0;\n var offset = 0;\n for (var i = 0; i < buffers.length; i++) {\n length += buffers[i].length;\n }\n\n data = new Uint8Array(length);\n for (var _i4 = 0; _i4 < buffers.length; _i4++) {\n var buffer = buffers[_i4];\n data.set(new Uint8Array(buffer.buffer), offset);\n offset += buffer.length;\n }\n\n return new XGDataView(data.buffer);\n }\n }, {\n key: 'read',\n value: function read(stream, ts, frags) {\n TsDemuxer.readHeader(stream, ts);\n TsDemuxer.readPayload(stream, ts, frags);\n // console.log('start', window.performance.now());\n // console.log('end', window.performance.now());\n if (ts.header.packet === 'MEDIA' && ts.header.payload === 1 && !ts.unknownPIDs) {\n ts.pes = TsDemuxer.PES(ts);\n }\n }\n }, {\n key: 'readPayload',\n value: function readPayload(stream, ts, frags) {\n var header = ts.header;\n var pid = header.pid;\n switch (pid) {\n case 0:\n TsDemuxer.PAT(stream, ts, frags);\n break;\n case 1:\n TsDemuxer.CAT(stream, ts, frags);\n break;\n case 2:\n TsDemuxer.TSDT(stream, ts, frags);\n break;\n case 0x1fff:\n break;\n default:\n var isPMT = false;\n for (var i = 0, len = frags.pat.length; i < len; i++) {\n if (frags.pat[i].pid === pid) {\n isPMT = true;\n break;\n }\n }\n // TODO: some的写法不太好,得改\n if (isPMT) {\n TsDemuxer.PMT(stream, ts, frags);\n } else {\n var sts = [];\n for (var _i5 = 0, _len = frags.pmt.length; _i5 < _len; _i5++) {\n if (frags.pmt[_i5].pid === pid) {\n sts.push(frags.pmt[_i5]);\n break;\n }\n }\n if (sts.length > 0) {\n var streamType = sts[0].streamType;\n TsDemuxer.Media(stream, ts, streamType);\n } else {\n ts.unknownPIDs = true;\n }\n }\n }\n }\n }, {\n key: 'readHeader',\n value: function readHeader(stream, ts) {\n var header = {};\n header.sync = stream.readUint8();\n var next = stream.readUint16();\n header.error = next >>> 15;\n header.payload = next >>> 14 & 1;\n header.priority = next >>> 13 & 1;\n header.pid = next & 0x1fff;\n\n next = stream.readUint8();\n\n header.scrambling = next >> 6 & 0x3; // 是否加密,00表示不加密\n\n /**\n * 00 ISO/IEC未来使用保留\n * 01 没有调整字段,仅含有184B有效净荷\n * 02 没有有效净荷,仅含有183B调整字段\n * 03 0~182B调整字段后为有效净荷\n */\n header.adaptation = next >> 4 & 0x3;\n header.continuity = next & 15;\n header.packet = header.pid === 0 ? 'PAT' : 'MEDIA';\n ts.header = header;\n }\n }, {\n key: 'PAT',\n value: function PAT(stream, ts, frags) {\n var ret = {};\n var next = stream.readUint8();\n stream.skip(next);\n next = stream.readUint8();\n ret.tabelID = next;\n next = stream.readUint16();\n ret.error = next >>> 7;\n ret.zero = next >>> 6 & 1;\n ret.sectionLength = next & 0xfff;\n ret.streamID = stream.readUint16();\n ret.current = stream.readUint8() & 1;\n ret.sectionNumber = stream.readUint8();\n ret.lastSectionNumber = stream.readUint8();\n var N = (ret.sectionLength - 9) / 4;\n var list = [];\n for (var i = 0; i < N; i++) {\n var programNumber = stream.readUint16();\n var pid = stream.readUint16() & 0x1fff;\n list.push({\n program: programNumber,\n pid: pid,\n type: programNumber === 0 ? 'network' : 'mapPID'\n });\n }\n if (list.length > 0) {\n frags.pat = frags.pat.concat(list);\n }\n ret.list = list;\n ret.program = stream.readUint16();\n ret.pid = stream.readUint16() & 0x1fff;\n ts.payload = ret;\n // TODO CRC\n }\n\n /**\n * ISO-13818-1 Table-2-25\n * payload 针对 PMT:\n * 1 字节: table id [table 第一字节]\n * section_length : 12bit 【table 第2字节后四位,3字节】\n * program_number : 16bit 【table第4,5字节】\n * program_info_length : 12bit 【table 第11字节后 4bit + 第12 byte】\n * N * 8 : descriptor\n * stream_type : 8bit\n * pid\n *\n * // 4 字节\n * reserved : 3bit\n * elementary_PID : 13bit\n * reserved : 4bit\n * ES_info_length: 12bit\n */\n\n }, {\n key: 'PMT',\n value: function PMT(stream, ts, frags) {\n var header = ts.header;\n header.packet = 'PMT';\n\n var offset = stream.position;\n\n offset += stream.getUint8(offset);\n\n offset += 1; // add 1 byte for table id\n\n var sectionLength = (stream.getUint8(offset + 1) & 0x0f) << 8 | stream.getUint8(offset + 2);\n\n var tableEnd = offset + 3 + sectionLength - 4;\n\n var programInfoLength = (stream.getUint8(offset + 10) & 0x0f) << 8 | stream.getUint8(offset + 11);\n\n offset += 12 + programInfoLength;\n\n var list = [];\n\n while (offset < tableEnd) {\n var pid = (stream.getUint8(offset + 1) & 0x1f) << 8 | stream.getUint8(offset + 2);\n list.push({\n streamType: stream.getUint8(offset),\n pid: pid\n });\n offset += ((stream.getUint8(offset + 3) & 0x0f) << 8 | stream.getUint8(offset + 4)) + 5;\n }\n frags.pmt = list;\n stream.skip(tableEnd + 4);\n }\n }, {\n key: 'Media',\n value: function Media(stream, ts, streamType) {\n var header = ts.header;\n var payload = {};\n\n var _StreamType$streamTyp = _slicedToArray(StreamType[streamType], 2),\n type = _StreamType$streamTyp[0],\n codec = _StreamType$streamTyp[1];\n\n header.streamType = streamType;\n header.type = type;\n header.codec = codec;\n\n if (header.adaptation === 0x03) {\n payload.adaptationLength = stream.readUint8();\n if (payload.adaptationLength > 0) {\n var next = stream.readUint8();\n payload.discontinue = next >>> 7;\n payload.access = next >>> 6 & 0x01;\n payload.priority = next >>> 5 & 0x01;\n payload.PCR = next >>> 4 & 0x01;\n payload.OPCR = next >>> 3 & 0x01;\n payload.splicePoint = next >>> 2 & 0x01;\n payload.transportPrivate = next >>> 1 & 0x01;\n payload.adaptationField = next & 0x01;\n var _start = stream.position;\n if (payload.PCR === 1) {\n payload.programClockBase = stream.readUint32() << 1;\n next = stream.readUint16();\n payload.programClockBase |= next >>> 15;\n payload.programClockExtension = next & 0x1ff;\n }\n if (payload.OPCR === 1) {\n payload.originProgramClockBase = stream.readUint32() << 1;\n next = stream.readUint16();\n payload.originProgramClockBase += next >>> 15;\n payload.originProgramClockExtension = next & 0x1ff;\n }\n if (payload.splicePoint === 1) {\n payload.spliceCountdown = stream.readUint8();\n }\n if (payload.transportPrivate === 1) {\n var length = stream.readUint8();\n var transportPrivateData = [];\n for (var i = 0; i < length; i++) {\n transportPrivateData.push(stream.readUint8());\n }\n }\n if (payload.adaptationField === 1) {\n var _length = stream.readUint8();\n var _next = stream.readUint8();\n var start = stream.position;\n var ltw = _next >>> 7;\n var piecewise = _next >>> 6 & 0x1;\n var seamless = _next >>> 5 & 0x1;\n if (ltw === 1) {\n _next = stream.readUint16();\n payload.ltwValid = _next >>> 15;\n payload.ltwOffset = _next & 0xefff;\n }\n if (piecewise === 1) {\n _next = stream.readUint24();\n payload.piecewiseRate = _next & 0x3fffff;\n }\n if (seamless === 1) {\n _next = stream.readInt8();\n payload.spliceType = _next >>> 4;\n payload.dtsNextAU1 = _next >>> 1 & 0x7;\n payload.marker1 = _next & 0x1;\n _next = stream.readUint16();\n payload.dtsNextAU2 = _next >>> 1;\n payload.marker2 = _next & 0x1;\n _next = stream.readUint16();\n payload.dtsNextAU3 = _next;\n }\n stream.skip(_length - 1 - (stream.position - start));\n }\n var lastStuffing = payload.adaptationLength - 1 - (stream.position - _start);\n stream.skip(lastStuffing);\n }\n }\n payload.stream = new XGDataView(stream.buffer.slice(stream.position));\n ts.payload = payload;\n }\n\n /**\n * http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n * ISO-13818-1 Table-2-17\n * packet_start_code_prefix : 24bit 0x000001\n * stream_id : 8bit\n * PES_packet_length : 16bit\n * PTS_DTS_flags : 2bit 【PES_packet_length后第2字节前2位】& 0xc0 [0x10 0x11]\n * PES_header_data_length : 【PTS_DTS_flags 后第1字节】\n *\n * | 6字节header | 3字节扩展 | PES Header data | payload |\n */\n\n }, {\n key: 'PES',\n value: function PES(ts) {\n var ret = {};\n var buffer = ts.payload.stream;\n\n var next = buffer.readUint24();\n if (next !== 1) {\n ret.ES = {};\n ret.ES.buffer = buffer;\n } else {\n var streamID = buffer.readUint8();\n if (streamID >= 0xe0 && streamID <= 0xef) {\n ret.type = 'video';\n }\n if (streamID >= 0xc0 && streamID <= 0xdf) {\n ret.type = 'audio';\n }\n var packetLength = buffer.readUint16();\n ret.packetLength = packetLength;\n if (ret.type === 'video' || ret.type === 'audio') {\n var _next2 = buffer.readUint8();\n var first = _next2 >>> 6;\n if (first !== 0x02) {\n throw new Error('error when parse pes header');\n }\n _next2 = buffer.readUint8();\n ret.ptsDTSFlag = _next2 >>> 6;\n ret.escrFlag = _next2 >>> 5 & 0x01;\n ret.esRateFlag = _next2 >>> 4 & 0x01;\n ret.dsmFlag = _next2 >>> 3 & 0x01;\n ret.additionalFlag = _next2 >>> 2 & 0x01;\n ret.crcFlag = _next2 >>> 1 & 0x01;\n ret.extensionFlag = _next2 & 0x01;\n ret.pesHeaderLength = buffer.readUint8();\n var N1 = ret.pesHeaderLength;\n\n // 计算pts\n var pts = [];\n\n pts.push(buffer.readUint8());\n pts.push(buffer.readUint8());\n pts.push(buffer.readUint8());\n pts.push(buffer.readUint8());\n pts.push(buffer.readUint8());\n\n var p = (pts[0] & 0x0e) * 536870912 + // 1 << 29\n (pts[1] & 0xff) * 4194304 + // 1 << 22\n (pts[2] & 0xfe) * 16384 + // 1 << 14\n (pts[3] & 0xff) * 128 + // 1 << 7\n (pts[4] & 0xfe) / 2;\n // 不经过任何处理的原始的pts\n ret.purePts = p;\n buffer.dataview.position -= 5;\n pts = [];\n\n _next2 = buffer.readUint8();\n pts.push(_next2 >>> 1 & 0x07);\n _next2 = buffer.readUint16();\n pts.push(_next2 >>> 1);\n _next2 = buffer.readUint16();\n pts.push(_next2 >>> 1);\n ret.pts = pts[0] << 30 | pts[1] << 15 | pts[2];\n N1 -= 5;\n\n // 视频如果没有dts用pts\n if (ret.type === 'video') {\n ret.dts = ret.pts;\n }\n\n if (ret.ptsDTSFlag === 3) {\n var dts = [];\n _next2 = buffer.readUint8();\n dts.push(_next2 >>> 1 & 0x07);\n _next2 = buffer.readUint16();\n dts.push(_next2 >>> 1);\n _next2 = buffer.readUint16();\n dts.push(_next2 >>> 1);\n ret.dts = dts[0] << 30 | dts[1] << 15 | dts[2];\n N1 -= 5;\n }\n\n if (ret.escrFlag === 1) {\n var escr = [];\n var ex = [];\n _next2 = buffer.readUint8();\n escr.push(_next2 >>> 3 & 0x07);\n escr.push(_next2 & 0x03);\n _next2 = buffer.readUint16();\n escr.push(_next2 >>> 13);\n escr.push(_next2 & 0x03);\n _next2 = buffer.readUint16();\n escr.push(_next2 >>> 13);\n ex.push(_next2 & 0x03);\n _next2 = buffer.readUint8();\n ex.push(_next2 >>> 1);\n ret.escr = (escr[0] << 30 | escr[1] << 28 | escr[2] << 15 | escr[3] << 13 | escr[4]) * 300 + (ex[0] << 7 | ex[1]);\n N1 -= 6;\n }\n if (ret.esRateFlag === 1) {\n _next2 = buffer.readUint24();\n ret.esRate = _next2 >>> 1 & 0x3fffff;\n N1 -= 3;\n }\n if (ret.dsmFlag === 1) {\n throw new Error('not support DSM_trick_mode');\n }\n if (ret.additionalFlag === 1) {\n _next2 = buffer.readUint8();\n ret.additionalCopyInfo = _next2 & 0x7f;\n N1 -= 1;\n }\n if (ret.crcFlag === 1) {\n ret.pesCRC = buffer.readUint16();\n N1 -= 2;\n }\n if (ret.extensionFlag === 1) {\n throw new Error('not support extension');\n }\n if (N1 > 0) {\n buffer.skip(N1);\n }\n if (ret.dts > ret.pts) {\n ret.dts = ret.pts;\n }\n ret.ES = TsDemuxer.ES(buffer, ret.type, ts.header.streamType);\n } else {\n throw new Error('format is not supported');\n }\n }\n return ret;\n }\n }, {\n key: 'ES',\n value: function ES(buffer, type, streamType) {\n var ret = {};\n if (type === 'video') {\n // TODO readnalu\n ret.buffer = buffer;\n } else if (type === 'audio') {\n if (streamType === 0x0f || streamType === 0x11) {\n ret = TsDemuxer.parseADTSHeader(buffer);\n }\n ret.buffer = buffer;\n } else {\n throw new Error('ES ' + type + ' is not supported');\n }\n\n return ret;\n }\n }, {\n key: 'parseADTSHeader',\n value: function parseADTSHeader(buffer) {\n var ret = {};\n var next = buffer.readUint16();\n // adts的同步字节,12位\n if (next >>> 4 !== 0xfff) {\n throw new Error('aac ES parse Error');\n }\n var fq = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n ret.id = (next >>> 3 & 0x01) === 0 ? 'MPEG-4' : 'MPEG-2';\n ret.layer = next >>> 1 & 0x03;\n ret.absent = next & 0x01;\n next = buffer.readUint16();\n ret.audioObjectType = (next >>> 14 & 0x03) + 1;\n ret.profile = ret.audioObjectType - 1;\n ret.frequencyIndex = next >>> 10 & 0x0f;\n ret.frequence = fq[ret.frequencyIndex];\n ret.channel = next >>> 6 & 0x07;\n ret.frameLength = (next & 0x03) << 11 | buffer.readUint16() >>> 5;\n TsDemuxer.getAudioConfig(ret);\n buffer.skip(1);\n ret.buffer = buffer;\n return ret;\n }\n }, {\n key: 'TSDT',\n value: function TSDT(stream, ts, frags) {\n // TODO\n ts.payload = {};\n }\n }, {\n key: 'CAT',\n value: function CAT(stream, ts, frags) {\n var ret = {};\n ret.tableID = stream.readUint8();\n var next = stream.readUint16();\n ret.sectionIndicator = next >>> 7;\n ret.sectionLength = next & 0x0fff;\n stream.skip(2);\n next = stream.readUint8();\n ret.version = next >>> 3;\n ret.currentNextIndicator = next & 0x01;\n ret.sectionNumber = stream.readUint8();\n ret.lastSectionNumber = stream.readUint8();\n var N = (this.sectionLength - 9) / 4;\n var list = [];\n for (var i = 0; i < N; i++) {\n list.push({});\n }\n ret.crc32 = stream.readUint32();\n ts.payload = ret;\n }\n }, {\n key: 'getAudioConfig',\n value: function getAudioConfig(ret) {\n var userAgent = navigator.userAgent.toLowerCase();\n var config = void 0;\n var extensionSampleIndex = void 0;\n ret.originAudioObjectType = ret.audioObjectType;\n if (/firefox/i.test(userAgent)) {\n if (ret.frequencyIndex >= 8) {\n ret.audioObjectType = 5;\n config = new Array(4);\n extensionSampleIndex = ret.frequencyIndex - 3;\n } else {\n ret.audioObjectType = 2;\n config = new Array(2);\n extensionSampleIndex = ret.frequencyIndex;\n }\n } else if (userAgent.indexOf('android') !== -1) {\n ret.audioObjectType = 2;\n config = new Array(2);\n extensionSampleIndex = ret.frequencyIndex;\n } else {\n ret.audioObjectType = 5;\n config = new Array(4);\n if (ret.frequencyIndex >= 6) {\n extensionSampleIndex = ret.frequencyIndex - 3;\n } else {\n if (ret.channel === 1) {\n ret.audioObjectType = 2;\n config = new Array(2);\n }\n extensionSampleIndex = ret.frequencyIndex;\n }\n }\n\n config[0] = ret.audioObjectType << 3;\n config[0] |= (ret.frequencyIndex & 0x0e) >> 1;\n config[1] = (ret.frequencyIndex & 0x01) << 7;\n config[1] |= ret.channel << 3;\n if (ret.audioObjectType === 5) {\n config[1] |= (extensionSampleIndex & 0x0e) >> 1;\n config[2] = (extensionSampleIndex & 0x01) << 7;\n config[2] |= 2 << 2;\n config[3] = 0;\n }\n\n ret.audioConfig = config;\n }\n }]);\n\n return TsDemuxer;\n}(EventEmitter);\n\nexport default TsDemuxer;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { EVENTS } from 'xgplayer-helper-utils';\nimport { AudioTrack, VideoTrack } from 'xgplayer-helper-models';\nimport Demuxer from './ts-demuxer';\nvar DEMUX_EVENTS = EVENTS.DEMUX_EVENTS;\n\n/**\n * @typedef {import('xgplayer-helper-models').TsFrag} TsFrag\n */\n\nvar TsDemuxer = function () {\n function TsDemuxer(configs) {\n _classCallCheck(this, TsDemuxer);\n\n this.configs = Object.assign({}, configs);\n this.demuxer = null;\n }\n\n _createClass(TsDemuxer, [{\n key: 'init',\n value: function init() {\n this.on(DEMUX_EVENTS.DEMUX_START, this.demux.bind(this));\n }\n }, {\n key: 'initDemuxer',\n value: function initDemuxer() {\n this.demuxer.on(Demuxer.EVENTS.METADATA_PARSED, this.onMetaDataParsed.bind(this));\n this.demuxer.on(Demuxer.EVENTS.VIDEO_SAMPLE_PARSED, this.onVideoSampleParsed.bind(this));\n this.demuxer.on(Demuxer.EVENTS.AUDIO_SAMPLE_PARSED, this.onAudioSampleParsed.bind(this));\n this.demuxer.on(Demuxer.EVENTS.SEI_PARSED, this.emit.bind(this, DEMUX_EVENTS.SEI_PARSED));\n }\n\n /**\n * @param {TsFrag} frag\n * @param {boolean} isVod\n */\n\n }, {\n key: 'demux',\n value: function demux(frag, isVod) {\n if (!this._tracks) {\n return;\n }\n if (!this._tracks.audioTrack) {\n this._tracks.audioTrack = new AudioTrack();\n }\n\n if (!this._tracks.videoTrack) {\n this._tracks.videoTrack = new VideoTrack();\n }\n\n if (!this.demuxer) {\n this.demuxer = new Demuxer(this._tracks);\n this.initDemuxer();\n }\n try {\n this.demuxer.demux(frag, this.inputBuffer, isVod);\n } catch (e) {\n this.emit(DEMUX_EVENTS.DEMUX_ERROR, this.TAG, e, false);\n }\n var hasVideo = this._tracks.videoTrack && this._tracks.videoTrack.samples.length ? 1 : 0;\n var hasAudio = this._tracks.audioTrack && this._tracks.audioTrack.samples.length ? 1 : 0;\n this.emit(DEMUX_EVENTS.DEMUX_COMPLETE, hasVideo, hasAudio);\n }\n }, {\n key: 'onMetaDataParsed',\n value: function onMetaDataParsed(type, meta) {\n var _tracks = this._tracks,\n videoTrack = _tracks.videoTrack,\n audioTrack = _tracks.audioTrack;\n\n var track = videoTrack;\n\n switch (type) {\n case 'video':\n track = videoTrack;\n break;\n case 'audio':\n track = audioTrack;\n break;\n default:\n track = videoTrack;\n }\n track.meta = meta;\n this.emit(DEMUX_EVENTS.METADATA_PARSED, type, meta);\n }\n }, {\n key: 'onVideoSampleParsed',\n value: function onVideoSampleParsed(sample) {\n if (sample.isKeyframe) {\n this.emit(DEMUX_EVENTS.ISKEYFRAME, sample.pts);\n }\n this._tracks.videoTrack.samples.push(sample);\n }\n }, {\n key: 'onAudioSampleParsed',\n value: function onAudioSampleParsed(sample) {\n this._tracks.audioTrack.samples.push(sample);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n this.off(DEMUX_EVENTS.DEMUX_START, this.demux);\n this.configs = {};\n this.demuxer && this.demuxer.destroy();\n }\n }, {\n key: 'inputBuffer',\n get: function get() {\n return this._context.getInstance(this.configs.inputbuffer);\n }\n }, {\n key: '_tracks',\n get: function get() {\n return this._context.getInstance('TRACKS');\n }\n }]);\n\n return TsDemuxer;\n}();\n\nexport default TsDemuxer;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { TsFrag } from 'xgplayer-helper-models';\n\nvar REGEXP_ABSOLUTE_URL = /^(?:[a-zA-Z0-9+\\-.]+:)?\\/\\//;\nvar REGEXP_URL_PAIR = /^((?:[a-zA-Z0-9+\\-.]+:)?\\/\\/[^/?#]*)?([^?#]*\\/)?/;\n\nfunction getAbsoluteUrl(url, parentUrl) {\n if (!parentUrl || !url || REGEXP_ABSOLUTE_URL.test(url)) return url;\n var pairs = REGEXP_URL_PAIR.exec(parentUrl);\n if (!pairs) return url;\n if (url[0] === '/') return pairs[1] + url;\n return pairs[1] + pairs[2] + url;\n}\n\n/**\n * Reference: https://tools.ietf.org/html/rfc8216#section-4.3\n */\n\nvar M3U8Parser = function () {\n function M3U8Parser() {\n _classCallCheck(this, M3U8Parser);\n }\n\n _createClass(M3U8Parser, null, [{\n key: 'parse',\n\n /**\n * @param {string} text\n * @param {string} baseurl\n * @return {{duration: number}}\n */\n value: function parse(text) {\n var baseurl = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n\n var ret = {\n duration: 0\n };\n if (!text || !text.split) {\n return;\n }\n var refs = text.split(/\\r|\\n/);\n refs = refs.filter(function (ref) {\n return ref;\n });\n var ref = refs.shift();\n if (!ref.match('#EXTM3U')) {\n throw new Error('Invalid m3u8 file: not \"#EXTM3U\"');\n }\n ref = refs.shift();\n var nextDiscontinue = false;\n var nextId = 0;\n while (ref) {\n var refm = ref.match(/#(.[A-Z|-]*):(.*)/);\n var refd = ref.match(/#(.[A-Z|-]*)/);\n if (refd && refm && refm.length > 2) {\n switch (refm[1]) {\n case 'EXT-X-VERSION':\n ret.version = parseInt(refm[2]);\n break;\n case 'EXT-X-MEDIA-SEQUENCE':\n ret.sequence = parseInt(refm[2]);\n break;\n case 'EXT-X-TARGETDURATION':\n ret.targetduration = parseFloat(refm[2]);\n break;\n case 'EXTINF':\n nextId = M3U8Parser.parseFrag(refm, refs, ret, baseurl, nextDiscontinue, nextId);\n nextDiscontinue = false;\n break;\n case 'EXT-X-KEY':\n M3U8Parser.parseDecrypt(refm[2], ret);\n break;\n default:\n break;\n }\n }if (refd && refd.length > 1) {\n switch (refd[1]) {\n case 'EXT-X-DISCONTINUITY':\n nextDiscontinue = true;\n break;\n case 'EXT-X-ENDLIST':\n var last = ret.frags[ret.frags.length - 1];\n last.isLast = true;\n ret.end = true;\n break;\n default:\n break;\n }\n }\n ref = refs[nextId++];\n }\n return ret;\n }\n\n /**\n *\n * @param {string[]}refm\n * @param {string[]}refs\n * @param {*} ret\n * @param {string} baseurl\n * @param {boolean} discontinue\n * @param {number} nextId\n * @return {*}\n */\n\n }, {\n key: 'parseFrag',\n value: function parseFrag(refm, refs, ret, baseurl, discontinue, nextId) {\n if (!ret.frags) {\n ret.frags = [];\n }\n\n var frag = new TsFrag({\n start: ret.duration,\n duration: parseInt(parseFloat(refm[2]) * 1000)\n });\n\n if (frag.duration < 200) {\n return nextId;\n }\n\n ret.duration += frag.duration;\n var nextline = refs[nextId++];\n if (nextline.match(/#(.*):(.*)/) || nextline.match(/^#/)) {\n nextline = refs[nextId++];\n }\n\n frag.url = getAbsoluteUrl(nextline, baseurl);\n\n frag.discontinue = discontinue;\n // add id\n if (ret.frags.length) {\n var last = ret.frags[ret.frags.length - 1];\n frag.id = last.id + 1;\n frag.cc = discontinue ? last.cc + 1 : last.cc;\n } else {\n frag.id = ret.sequence || 1;\n frag.cc = 0;\n }\n ret.frags.push(frag);\n return nextId;\n }\n\n /**\n * @param {string[]}refm\n * @param {*} ret\n */\n\n }, {\n key: 'parseDecrypt',\n value: function parseDecrypt(refm, ret) {\n ret.encrypt = {};\n var refs = refm.split(',');\n for (var i in refs) {\n var cmd = refs[i];\n if (cmd.match(/METHOD=(.*)/)) {\n ret.encrypt.method = cmd.match(/METHOD=(.*)/)[1];\n }\n if (cmd.match(/URI=\"(.*)\"/)) {\n ret.encrypt.uri = cmd.match(/URI=\"(.*)\"/)[1];\n }\n\n if (cmd.match(/IV=0x(.*)/)) {\n var iv = cmd.match(/IV=0x(.*)/)[1];\n var length = Math.ceil(iv.length / 2);\n ret.encrypt.ivb = new Uint8Array(length);\n for (var _i = length - 1; _i >= 0; _i--) {\n var im = parseInt(iv.substr(_i * 2, 2), 16);\n ret.encrypt.ivb[_i] = im;\n }\n ret.encrypt.iv = iv;\n }\n };\n }\n\n /**\n * @param {string} url\n * @return {boolean}\n */\n\n }, {\n key: 'isHTTPS',\n value: function isHTTPS(url) {\n var httpsUrlRegex = /^https:\\/\\//i;\n return httpsUrlRegex.test(url);\n }\n }]);\n\n return M3U8Parser;\n}();\n\nexport default M3U8Parser;","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nexports.default = function (ResultConstructor) {\n var totalLength = 0;\n\n for (var _len = arguments.length, arrays = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n arrays[_key - 1] = arguments[_key];\n }\n\n var _iteratorNormalCompletion = true;\n var _didIteratorError = false;\n var _iteratorError = undefined;\n\n try {\n for (var _iterator = arrays[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {\n var arr = _step.value;\n\n totalLength += arr.length;\n }\n } catch (err) {\n _didIteratorError = true;\n _iteratorError = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion && _iterator.return) {\n _iterator.return();\n }\n } finally {\n if (_didIteratorError) {\n throw _iteratorError;\n }\n }\n }\n\n var result = new ResultConstructor(totalLength);\n var offset = 0;\n var _iteratorNormalCompletion2 = true;\n var _didIteratorError2 = false;\n var _iteratorError2 = undefined;\n\n try {\n for (var _iterator2 = arrays[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {\n var _arr = _step2.value;\n\n result.set(_arr, offset);\n offset += _arr.length;\n }\n } catch (err) {\n _didIteratorError2 = true;\n _iteratorError2 = err;\n } finally {\n try {\n if (!_iteratorNormalCompletion2 && _iterator2.return) {\n _iterator2.return();\n }\n } finally {\n if (_didIteratorError2) {\n throw _iteratorError2;\n }\n }\n }\n\n return result;\n};","'use strict';\n\nvar _concat = require('./concat');\n\nvar _concat2 = _interopRequireDefault(_concat);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = _concat2.default;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport Concat from 'concat-typed-array';\n\nvar Buffer = function () {\n function Buffer(buffer) {\n _classCallCheck(this, Buffer);\n\n this.buffer = buffer || new Uint8Array(0);\n }\n\n _createClass(Buffer, [{\n key: 'write',\n value: function write() {\n var _this = this;\n\n for (var _len = arguments.length, buffer = Array(_len), _key = 0; _key < _len; _key++) {\n buffer[_key] = arguments[_key];\n }\n\n buffer.forEach(function (item) {\n _this.buffer = Concat(Uint8Array, _this.buffer, item);\n });\n }\n }], [{\n key: 'writeUint32',\n value: function writeUint32(value) {\n return new Uint8Array([value >> 24, value >> 16 & 0xff, value >> 8 & 0xff, value & 0xff]);\n }\n }, {\n key: 'readAsInt',\n value: function readAsInt(arr) {\n var temp = '';\n\n function padStart4Hex(hexNum) {\n var hexStr = hexNum.toString(16);\n return hexStr.padStart(2, '0');\n }\n\n arr.forEach(function (num) {\n temp += padStart4Hex(num);\n });\n return parseInt(temp, 16);\n }\n }]);\n\n return Buffer;\n}();\n\nexport default Buffer;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport Buffer from './buffer';\n\n// const UINT32_MAX = Math.pow(2, 32) - 1;\n\nvar Fmp4 = function () {\n function Fmp4() {\n _classCallCheck(this, Fmp4);\n }\n\n _createClass(Fmp4, null, [{\n key: 'size',\n value: function size(value) {\n return Buffer.writeUint32(value);\n }\n }, {\n key: 'initBox',\n value: function initBox(size, name) {\n var buffer = new Buffer();\n\n for (var _len = arguments.length, content = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n content[_key - 2] = arguments[_key];\n }\n\n buffer.write.apply(buffer, [Fmp4.size(size), Fmp4.type(name)].concat(content));\n return buffer.buffer;\n }\n }, {\n key: 'extension',\n value: function extension(version, flag) {\n return new Uint8Array([version, flag >> 16 & 0xff, flag >> 8 & 0xff, flag & 0xff]);\n }\n }, {\n key: 'ftyp',\n value: function ftyp() {\n return Fmp4.initBox(24, 'ftyp', new Uint8Array([0x69, 0x73, 0x6F, 0x6D, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x6D, // isom\n 0x61, 0x76, 0x63, 0x31 // avc1\n ]));\n }\n }, {\n key: 'ftypHEVC',\n value: function ftypHEVC() {\n return Fmp4.initBox(24, 'ftyp', new Uint8Array([0x69, 0x73, 0x6F, 0x6D, // isom,\n 0x0, 0x0, 0x00, 0x01, // minor_version: 0x01\n 0x69, 0x73, 0x6F, 0x6D, // isom\n 0x64, 0x61, 0x73, 0x68 // hev1\n ]));\n }\n }, {\n key: 'moov',\n value: function moov(_ref) {\n var type = _ref.type,\n meta = _ref.meta;\n\n var size = 8;\n var mvhd = Fmp4.mvhd(meta.duration, meta.timescale);\n var trak = void 0;\n\n if (type === 'video') {\n trak = Fmp4.videoTrak(meta);\n } else {\n trak = Fmp4.audioTrak(meta);\n }\n\n var mvex = Fmp4.mvex(meta.duration, meta.timescale || 1000, meta.id);\n [mvhd, trak, mvex].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'moov', mvhd, trak, mvex);\n }\n }, {\n key: 'mvhd',\n value: function mvhd(duration) {\n var timescale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n\n // duration *= timescale;\n var bytes = new Uint8Array([0x00, 0x00, 0x00, 0x00, // version(0) + flags 1位的box版本+3位flags box版本,0或1,一般为0。(以下字节数均按version=0)\n 0x00, 0x00, 0x00, 0x00, // creation_time 创建时间 (相对于UTC时间1904-01-01零点的秒数)\n 0x00, 0x00, 0x00, 0x00, // modification_time 修改时间\n\n /**\n * timescale: 4 bytes文件媒体在1秒时间内的刻度值,可以理解为1秒长度\n */\n timescale >>> 24 & 0xFF, timescale >>> 16 & 0xFF, timescale >>> 8 & 0xFF, timescale & 0xFF,\n\n /**\n * duration: 4 bytes该track的时间长度,用duration和time scale值可以计算track时长,比如audio track的time scale = 8000,\n * duration = 560128,时长为70.016,video track的time scale = 600, duration = 42000,时长为70\n */\n duration >>> 24 & 0xFF, duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, 0x00, 0x01, 0x00, 0x00, // Preferred rate: 1.0 推荐播放速率,高16位和低16位分别为小数点整数部分和小数部分,即[16.16] 格式,该值为1.0(0x00010000)表示正常前向播放\n /**\n * PreferredVolume(1.0, 2bytes) + reserved(2bytes)\n * 与rate类似,[8.8] 格式,1.0(0x0100)表示最大音量\n */\n 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved: 4 + 4 bytes保留位\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // 视频变换矩阵 线性代数\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n 0x00, 0x00, 0x00, 0x00, // ----begin pre_defined 6 * 4 bytes----\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre-defined 保留位\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ----end pre_defined 6 * 4 bytes----\n 0xFF, 0xFF, 0xFF, 0xFF // next_track_ID 下一个track使用的id号\n ]);\n return Fmp4.initBox(8 + bytes.length, 'mvhd', new Uint8Array(bytes));\n }\n }, {\n key: 'videoTrak',\n value: function videoTrak(data) {\n var size = 8;\n\n var tkhd = Fmp4.tkhd({\n id: 1,\n duration: data.duration,\n timescale: data.timescale || 1000,\n width: data.presentWidth,\n height: data.presentHeight,\n type: 'video'\n });\n var mdia = Fmp4.mdia({\n type: 'video',\n timescale: data.timescale || 1000,\n duration: data.duration,\n avcc: data.avcc,\n parRatio: data.parRatio,\n width: data.presentWidth,\n height: data.presentHeight,\n streamType: data.streamType\n });\n [tkhd, mdia].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'trak', tkhd, mdia);\n }\n }, {\n key: 'audioTrak',\n value: function audioTrak(data) {\n var size = 8;\n var tkhd = Fmp4.tkhd({\n id: 2,\n duration: data.duration,\n timescale: data.timescale || 1000,\n width: 0,\n height: 0,\n type: 'audio'\n });\n var mdia = Fmp4.mdia({\n type: 'audio',\n timescale: data.timescale || 1000,\n duration: data.duration,\n channelCount: data.channelCount,\n samplerate: data.sampleRate,\n config: data.config\n });\n [tkhd, mdia].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'trak', tkhd, mdia);\n }\n }, {\n key: 'tkhd',\n value: function tkhd(data) {\n var id = data.id;\n var duration = data.duration;\n var width = data.width;\n var height = data.height;\n var content = new Uint8Array([0x00, 0x00, 0x00, 0x07, // version(0) + flags 1位版本 box版本,0或1,一般为0。(以下字节数均按version=0)按位或操作结果值,预定义如下:\n // 0x000001 track_enabled,否则该track不被播放;\n // 0x000002 track_in_movie,表示该track在播放中被引用;\n // 0x000004 track_in_preview,表示该track在预览时被引用。\n // 一般该值为7,1+2+4 如果一个媒体所有track均未设置track_in_movie和track_in_preview,将被理解为所有track均设置了这两项;对于hint track,该值为0\n // hint track 这个特殊的track并不包含媒体数据,而是包含了一些将其他数据track打包成流媒体的指示信息。\n 0x00, 0x00, 0x00, 0x00, // creation_time创建时间(相对于UTC时间1904-01-01零点的秒数)\n 0x00, 0x00, 0x00, 0x00, // modification time 修改时间\n id >>> 24 & 0xFF, // track_ID: 4 bytes id号,不能重复且不能为0\n id >>> 16 & 0xFF, id >>> 8 & 0xFF, id & 0xFF, 0x00, 0x00, 0x00, 0x00, // reserved: 4 bytes 保留位\n duration >>> 24 & 0xFF, // duration: 4 bytes track的时间长度\n duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, 0x00, 0x00, 0x00, 0x00, // reserved: 2 * 4 bytes 保留位\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // layer(2bytes) + alternate_group(2bytes) 视频层,默认为0,值小的在上层.track分组信息,默认为0表示该track未与其他track有群组关系\n 0x00, 0x00, 0x00, 0x00, // volume(2bytes) + reserved(2bytes) [8.8] 格式,如果为音频track,1.0(0x0100)表示最大音量;否则为0 +保留位\n 0x00, 0x01, 0x00, 0x00, // ----begin composition matrix----\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, // 视频变换矩阵\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, // ----end composition matrix----\n width >>> 8 & 0xFF, // //宽度\n width & 0xFF, 0x00, 0x00, height >>> 8 & 0xFF, // 高度\n height & 0xFF, 0x00, 0x00]);\n return Fmp4.initBox(8 + content.byteLength, 'tkhd', content);\n }\n }, {\n key: 'edts',\n value: function edts(data) {\n var buffer = new Buffer();\n var duration = data.duration;\n var mediaTime = data.mediaTime;\n buffer.write(Fmp4.size(36), Fmp4.type('edts'));\n // elst\n buffer.write(Fmp4.size(28), Fmp4.type('elst'));\n buffer.write(new Uint8Array([0x00, 0x00, 0x00, 0x01, // entry count\n duration >> 24 & 0xff, duration >> 16 & 0xff, duration >> 8 & 0xff, duration & 0xff, mediaTime >> 24 & 0xff, mediaTime >> 16 & 0xff, mediaTime >> 8 & 0xff, mediaTime & 0xff, 0x00, 0x00, 0x00, 0x01 // media rate\n ]));\n return buffer.buffer;\n }\n }, {\n key: 'mdia',\n value: function mdia(data) {\n var size = 8;\n var mdhd = Fmp4.mdhd(data.timescale, data.duration);\n var hdlr = Fmp4.hdlr(data.type);\n var minf = Fmp4.minf(data);\n [mdhd, hdlr, minf].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'mdia', mdhd, hdlr, minf);\n }\n }, {\n key: 'mdhd',\n value: function mdhd() {\n var timescale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1000;\n var duration = arguments[1];\n\n var content = new Uint8Array([0x00, 0x00, 0x00, 0x00, // creation_time 创建时间\n 0x00, 0x00, 0x00, 0x00, // modification_time修改时间\n timescale >>> 24 & 0xFF, // timescale: 4 bytes 文件媒体在1秒时间内的刻度值,可以理解为1秒长度\n timescale >>> 16 & 0xFF, timescale >>> 8 & 0xFF, timescale & 0xFF, duration >>> 24 & 0xFF, // duration: 4 bytes track的时间长度\n duration >>> 16 & 0xFF, duration >>> 8 & 0xFF, duration & 0xFF, 0x55, 0xC4, // language: und (undetermined) 媒体语言码。最高位为0,后面15位为3个字符(见ISO 639-2/T标准中定义)\n 0x00, 0x00 // pre_defined = 0\n ]);\n return Fmp4.initBox(12 + content.byteLength, 'mdhd', Fmp4.extension(0, 0), content);\n }\n }, {\n key: 'hdlr',\n value: function hdlr(type) {\n var value = [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, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ];\n if (type === 'audio') {\n value.splice.apply(value, [8, 4].concat([0x73, 0x6f, 0x75, 0x6e]));\n value.splice.apply(value, [24, 13].concat([0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00]));\n }\n return Fmp4.initBox(8 + value.length, 'hdlr', new Uint8Array(value));\n }\n }, {\n key: 'minf',\n value: function minf(data) {\n var size = 8;\n var vmhd = data.type === 'video' ? Fmp4.vmhd() : Fmp4.smhd();\n var dinf = Fmp4.dinf();\n var stbl = Fmp4.stbl(data);\n [vmhd, dinf, stbl].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'minf', vmhd, dinf, stbl);\n }\n }, {\n key: 'vmhd',\n value: function vmhd() {\n return Fmp4.initBox(20, 'vmhd', new Uint8Array([0x00, // version\n 0x00, 0x00, 0x01, // flags\n 0x00, 0x00, // graphicsmode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor\n ]));\n }\n }, {\n key: 'smhd',\n value: function smhd() {\n return Fmp4.initBox(16, 'smhd', new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, // balance\n 0x00, 0x00 // reserved\n ]));\n }\n }, {\n key: 'dinf',\n value: function dinf() {\n var buffer = new Buffer();\n var dref = [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 buffer.write(Fmp4.size(36), Fmp4.type('dinf'), Fmp4.size(28), Fmp4.type('dref'), new Uint8Array(dref));\n return buffer.buffer;\n }\n }, {\n key: 'stbl',\n value: function stbl(data) {\n var size = 8;\n var stsd = Fmp4.stsd(data);\n var stts = Fmp4.stts();\n var stsc = Fmp4.stsc();\n var stsz = Fmp4.stsz();\n var stco = Fmp4.stco();\n [stsd, stts, stsc, stsz, stco].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'stbl', stsd, stts, stsc, stsz, stco);\n }\n }, {\n key: 'stsd',\n value: function stsd(data) {\n var content = void 0;\n if (data.type === 'audio') {\n // if (!data.isAAC && data.codec === 'mp4') {\n // content = FMP4.mp3(data);\n // } else {\n //\n // }\n\n // 支持mp4a\n content = Fmp4.mp4a(data);\n } else {\n if (data.streamType === 0x24) {\n content = Fmp4.hvc1(data);\n } else {\n content = Fmp4.avc1(data);\n }\n }\n return Fmp4.initBox(16 + content.byteLength, 'stsd', Fmp4.extension(0, 0), new Uint8Array([0x00, 0x00, 0x00, 0x01]), content);\n }\n }, {\n key: 'mp4a',\n value: function mp4a(data) {\n var content = new Uint8Array([0x00, 0x00, 0x00, // reserved\n 0x00, 0x00, 0x00, // reserved\n 0x00, 0x01, // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // reserved\n 0x00, data.channelCount, // channelcount\n 0x00, 0x10, // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00, // reserved2\n data.samplerate >> 8 & 0xff, data.samplerate & 0xff, //\n 0x00, 0x00]);\n var esds = Fmp4.esds(data.config);\n return Fmp4.initBox(8 + content.byteLength + esds.byteLength, 'mp4a', content, esds);\n }\n }, {\n key: 'esds',\n value: function esds() {\n var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [43, 146, 8, 0];\n\n var configlen = config.length;\n var buffer = new Buffer();\n var content = new Uint8Array([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(config).concat([0x06, 0x01, 0x02]));\n buffer.write(Fmp4.size(8 + content.byteLength), Fmp4.type('esds'), content);\n return buffer.buffer;\n }\n }, {\n key: 'avc1',\n value: function avc1(data) {\n var buffer = new Buffer();\n var size = 40; // 8(avc1)+8(avcc)+8(btrt)+16(pasp)\n // let sps = data.sps\n // let pps = data.pps\n var width = data.width;\n var height = data.height;\n var hSpacing = data.parRatio.width;\n var vSpacing = data.parRatio.height;\n // let avccBuffer = new Buffer()\n // avccBuffer.write(new Uint8Array([\n // 0x01, // version\n // sps[1], // profile\n // sps[2], // profile compatible\n // sps[3], // level\n // 0xfc | 3,\n // 0xE0 | 1 // 目前只处理一个sps\n // ].concat([sps.length >>> 8 & 0xff, sps.length & 0xff])))\n // avccBuffer.write(sps, new Uint8Array([1, pps.length >>> 8 & 0xff, pps.length & 0xff]), pps)\n\n var avcc = data.avcc;\n var avc1 = new Uint8Array([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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n width >> 8 & 0xff, width & 0xff, // width\n height >> 8 & 0xff, 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, 0x64, 0x61, 0x69, 0x6C, // dailymotion/hls.js\n 0x79, 0x6D, 0x6F, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x68, 0x6C, 0x73, 0x2E, 0x6A, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0x11, 0x11]); // pre_defined = -1\n var btrt = new Uint8Array([0x00, 0x1c, 0x9c, 0x80, // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0, // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0 // avgBitrate\n ]);\n var pasp = new Uint8Array([hSpacing >> 24, // hSpacing\n hSpacing >> 16 & 0xff, hSpacing >> 8 & 0xff, hSpacing & 0xff, vSpacing >> 24, // vSpacing\n vSpacing >> 16 & 0xff, vSpacing >> 8 & 0xff, vSpacing & 0xff]);\n\n buffer.write(Fmp4.size(size + avc1.byteLength + avcc.byteLength + btrt.byteLength), Fmp4.type('avc1'), avc1, Fmp4.size(8 + avcc.byteLength), Fmp4.type('avcC'), avcc, Fmp4.size(20), Fmp4.type('btrt'), btrt, Fmp4.size(16), Fmp4.type('pasp'), pasp);\n return buffer.buffer;\n }\n }, {\n key: 'hvc1',\n value: function hvc1(track) {\n var buffer = new Buffer();\n var content = new Uint8Array([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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // pre_defined\n track.width >> 8 & 0xFF, track.width & 0xff, // width\n track.height >> 8 & 0xFF, track.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 0x00, 0x00, 0x00, 0x00, 0x00, // dailymotion/hls.js\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // compressorname\n 0x00, 0x18, // depth = 24\n 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x7A, 0x68, 0x76, 0x63, 0x43, 0x01, // configurationVersion\n 0x01, // profile_space + tier_flag + profile_idc\n 0x60, 0x00, 0x00, 0x00, // general_profile_compatibility\n 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, // constraint_indicator_flags\n 0x5D, // level_idc=90\n 0xF0, 0x00, 0xFC, 0xFD, // profile_compatibility_indications\n 0xF8, // ‘11111’b + bitDepthLumaMinus8\n 0xF8, // ‘11111’b + bitDepthChromaMinus8\n 0x00, 0x00, // avgFrameRate\n 0x0F, // constantFrameRate + numTemporalLayers + ‘1’b + lengthSizeMinusOne\n 0x03, // numOfArrays\n\n // vps\n 0xA0, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x18, // nalUnitLength\n 0x40, 0x01, 0x0C, 0x01, 0xFF, 0xFF, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0x99, 0x98, 0x09,\n\n // sps\n 0xA1, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x2D, // nalUnitLength\n 0x42, 0x01, 0x01, 0x01, 0x60, 0x00, 0x00, 0x03, 0x00, 0x90, 0x00, 0x00, 0x03, 0x00, 0x00, 0x03, 0x00, 0x5D, 0xA0, 0x02, 0x80, 0x80, 0x2D, 0x16, 0x59, 0x99, 0xA4, 0x93, 0x2B, 0x9A, 0x80, 0x80, 0x80, 0x82, 0x00, 0x00, 0x03, 0x00, 0x02, 0x00, 0x00, 0x03, 0x00, 0x32, 0x10,\n\n // pps\n 0xA2, 0x00, 0x01, // array_completeness + ‘0’b + NAL_unit_type + numNalus\n 0x00, 0x07, // nalUnitLength\n 0x44, 0x01, 0xC1, 0x72, 0xB4, 0x62, 0x40]);\n buffer.write(Fmp4.size(8 + content.byteLength + 10), Fmp4.type('hvc1'), content, Fmp4.size(10), Fmp4.type('fiel'), new Uint8Array([0x01, 0x00]));\n return buffer.buffer;\n }\n }, {\n key: 'stts',\n value: function stts() {\n var content = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n return Fmp4.initBox(16, 'stts', content);\n }\n }, {\n key: 'stsc',\n value: function stsc() {\n var content = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n return Fmp4.initBox(16, 'stsc', content);\n }\n }, {\n key: 'stco',\n value: function stco() {\n var content = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n return Fmp4.initBox(16, 'stco', content);\n }\n }, {\n key: 'stsz',\n value: function stsz() {\n var content = new Uint8Array([0x00, // version\n 0x00, 0x00, 0x00, // flags\n 0x00, 0x00, 0x00, 0x00, // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n return Fmp4.initBox(20, 'stsz', content);\n }\n }, {\n key: 'mvex',\n value: function mvex(duration) {\n var timescale = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1000;\n var trackID = arguments[2];\n\n var buffer = new Buffer();\n var mehd = Buffer.writeUint32(duration);\n buffer.write(Fmp4.size(56), Fmp4.type('mvex'), Fmp4.size(16), Fmp4.type('mehd'), Fmp4.extension(0, 0), mehd, Fmp4.trex(trackID));\n return buffer.buffer;\n }\n }, {\n key: 'trex',\n value: function trex(id) {\n var content = new Uint8Array([0x00, // version 0\n 0x00, 0x00, 0x00, // flags\n id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, 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 return Fmp4.initBox(8 + content.byteLength, 'trex', content);\n }\n }, {\n key: 'moof',\n value: function moof(data) {\n var size = 8;\n var mfhd = Fmp4.mfhd();\n var traf = Fmp4.traf(data);\n [mfhd, traf].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'moof', mfhd, traf);\n }\n }, {\n key: 'mfhd',\n value: function mfhd() {\n var content = Buffer.writeUint32(Fmp4.sequence);\n Fmp4.sequence += 1;\n return Fmp4.initBox(16, 'mfhd', Fmp4.extension(0, 0), content);\n }\n }, {\n key: 'traf',\n value: function traf(data) {\n var size = 8;\n var tfhd = Fmp4.tfhd(data.id);\n var tfdt = Fmp4.tfdt(data.time);\n var sdtp = Fmp4.sdtp(data);\n var trun = Fmp4.trun(data, sdtp.byteLength);\n\n [tfhd, tfdt, trun, sdtp].forEach(function (item) {\n size += item.byteLength;\n });\n return Fmp4.initBox(size, 'traf', tfhd, tfdt, trun, sdtp);\n }\n }, {\n key: 'tfhd',\n value: function tfhd(id) {\n var content = Buffer.writeUint32(id);\n return Fmp4.initBox(16, 'tfhd', Fmp4.extension(0, 0), content);\n }\n }, {\n key: 'tfdt',\n value: function tfdt(time) {\n // let upper = Math.floor(time / (UINT32_MAX + 1)),\n // lower = Math.floor(time % (UINT32_MAX + 1));\n return Fmp4.initBox(16, 'tfdt', Fmp4.extension(0, 0), Buffer.writeUint32(time));\n }\n }, {\n key: 'trun',\n value: function trun(data, sdtpLength) {\n // let id = data.id;\n // let ceil = id === 1 ? 16 : 12;\n var buffer = new Buffer();\n var sampleCount = Buffer.writeUint32(data.samples.length);\n // mdat-header 8\n // moof-header 8\n // mfhd 16\n // traf-header 8\n // thhd 16\n // tfdt 20\n // trun-header 12\n // sampleCount 4\n // data-offset 4\n // samples.length\n var offset = Buffer.writeUint32(8 + 8 + 16 + 8 + 16 + 16 + 12 + 4 + 4 + 16 * data.samples.length + sdtpLength);\n buffer.write(Fmp4.size(20 + 16 * data.samples.length), Fmp4.type('trun'), new Uint8Array([0x00, 0x00, 0x0F, 0x01]), sampleCount, offset);\n\n // let size = buffer.buffer.byteLength\n // let writeOffset = 0\n // data.samples.forEach(() => {\n // size += 16\n // })\n //\n // let trunBox = new Uint8Array(size)\n\n // trunBox.set(buffer.buffer, 0)\n\n data.samples.forEach(function (item) {\n var flags = item.flags;\n // console.log(item.type, item.dts, item.duration)\n\n buffer.write(new Uint8Array([item.duration >>> 24 & 0xFF, // sample_duration\n item.duration >>> 16 & 0xFF, item.duration >>> 8 & 0xFF, item.duration & 0xFF, item.size >>> 24 & 0xFF, // sample_size\n item.size >>> 16 & 0xFF, item.size >>> 8 & 0xFF, item.size & 0xFF, flags.isLeading << 2 | flags.dependsOn, // sample_flags\n flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.isNonSync, 0x00, 0x00, // sample_degradation_priority\n item.cts >>> 24 & 0xFF, // sample_composition_time_offset\n item.cts >>> 16 & 0xFF, item.cts >>> 8 & 0xFF, item.cts & 0xFF]));\n // writeOffset += 16\n // buffer.write(Buffer.writeUint32(0));\n });\n return buffer.buffer;\n }\n }, {\n key: 'sdtp',\n value: function sdtp(data) {\n var buffer = new Buffer();\n buffer.write(Fmp4.size(12 + data.samples.length), Fmp4.type('sdtp'), Fmp4.extension(0, 0));\n data.samples.forEach(function (item) {\n var flags = item.flags;\n var num = flags.isLeading << 6 | // is_leading: 2 (bit)\n flags.dependsOn << 4 | // sample_depends_on\n flags.isDependedOn << 2 | // sample_is_depended_on\n flags.hasRedundancy; // sample_has_redundancy\n\n buffer.write(new Uint8Array([num]));\n });\n return buffer.buffer;\n }\n }, {\n key: 'mdat',\n value: function mdat(data) {\n var buffer = new Buffer();\n var size = 8;\n data.samples.forEach(function (item) {\n size += item.size;\n });\n buffer.write(Fmp4.size(size), Fmp4.type('mdat'));\n var mdatBox = new Uint8Array(size);\n var offset = 0;\n mdatBox.set(buffer.buffer, offset);\n offset += 8;\n data.samples.forEach(function (item) {\n item.buffer.forEach(function (unit) {\n mdatBox.set(unit, offset);\n offset += unit.byteLength;\n // buffer.write(unit.data);\n });\n });\n return mdatBox;\n }\n }]);\n\n return Fmp4;\n}();\n\nFmp4.type = function (name) {\n return new Uint8Array([name.charCodeAt(0), name.charCodeAt(1), name.charCodeAt(2), name.charCodeAt(3)]);\n};\nFmp4.sequence = 1;\n\nexport default Fmp4;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport { logger } from 'xgplayer-helper-utils';\nimport EventEmitter from 'eventemitter3';\nimport Buffer from './buffer';\nimport Fmp4 from './fmp4';\n\n/**\n * @typedef { import('xgplayer-helper-models').VideoTrack } VideoTrack\n */\n/**\n * @typedef { import('xgplayer-helper-models').AudioTrack } AudioTrack\n */\n\nvar Mp4Remuxer = function (_EventEmitter) {\n _inherits(Mp4Remuxer, _EventEmitter);\n\n function Mp4Remuxer(_ref) {\n var videoMeta = _ref.videoMeta,\n audioMeta = _ref.audioMeta,\n curTime = _ref.curTime;\n\n _classCallCheck(this, Mp4Remuxer);\n\n var _this = _possibleConstructorReturn(this, (Mp4Remuxer.__proto__ || Object.getPrototypeOf(Mp4Remuxer)).call(this));\n\n _this.TAG = 'Fmp4Remuxer';\n _this._dtsBase = curTime * 1000;\n\n _this._videoMeta = videoMeta;\n _this._audioMeta = audioMeta;\n\n _this._audioDtsBase = null;\n _this._videoDtsBase = null;\n _this._isDtsBaseInited = false;\n\n _this.isFirstVideo = true;\n _this.isFirstAudio = true;\n\n _this.videoAllDuration = 0;\n _this.audioAllDuration = 0;\n\n _this.audioRemuxed = 0;\n _this.videoRemuxed = 0;\n _this.mp4Durations = {\n keys: []\n };\n return _this;\n }\n\n _createClass(Mp4Remuxer, [{\n key: 'destroy',\n value: function destroy() {\n this._dtsBase = -1;\n this._isDtsBaseInited = false;\n this.mp4Durations = {\n keys: []\n };\n\n this.removeAllListeners();\n }\n\n /**\n * @param {AudioTrack} audioTrack\n * @param {VideoTrack} videoTrack\n */\n\n }, {\n key: 'remux',\n value: function remux(audioTrack, videoTrack) {\n !this._isDtsBaseInited && this.calcDtsBase(audioTrack, videoTrack);\n this.remuxVideo(videoTrack);\n this.remuxAudio(audioTrack);\n\n logger.groupEnd();\n }\n }, {\n key: 'resetDtsBase',\n value: function resetDtsBase() {\n this._dtsBase = 0;\n }\n }, {\n key: 'seek',\n value: function seek(time) {\n logger.log(this.TAG, 'set dtsBase for seek(),time=', time);\n if (!this._isDtsBaseInited) {\n this._dtsBase = time * 1000;\n } else {\n this._isDtsBaseInited = false;\n this._dtsBase = time * 1000;\n }\n\n this._audioDtsBase = this._videoDtsBase = null;\n }\n\n /**\n * @param {'video' | 'audio' } type\n * @param {*} meta\n * @return {Buffer}\n */\n\n }, {\n key: 'remuxInitSegment',\n value: function remuxInitSegment(type, meta) {\n logger.log(this.TAG, 'remuxInitSegment: type=', type);\n var initSegment = new Buffer();\n var ftyp = meta.streamType === 0x24 ? Fmp4.ftypHEVC() : Fmp4.ftyp();\n var moov = Fmp4.moov({ type: type, meta: meta });\n\n initSegment.write(ftyp, moov);\n return initSegment;\n }\n\n /**\n * @param {AudioTrack} audioTrack\n * @param {VideoTrack} videoTrack\n */\n\n }, {\n key: 'calcDtsBase',\n value: function calcDtsBase(audioTrack, videoTrack) {\n if (!audioTrack && videoTrack.samples.length) {\n var firstSample = videoTrack.samples[0];\n var _start = void 0;\n if (firstSample.options && firstSample.options.start) {\n _start = firstSample.options.start;\n }\n this._videoDtsBase = firstSample.dts - (_start || this._dtsBase);\n this._isDtsBaseInited = true;\n return;\n }\n\n if ((!audioTrack || !audioTrack.samples.length) && (!videoTrack || !videoTrack.samples.length)) {\n return;\n }\n\n var audioBase = null;\n var videoBase = null;\n var start = null;\n if (audioTrack && audioTrack.samples && audioTrack.samples.length) {\n var _firstSample = audioTrack.samples[0];\n audioBase = _firstSample.dts;\n if (_firstSample.options && _firstSample.options.start) {\n start = _firstSample.options.start;\n }\n }\n if (videoTrack && videoTrack.samples && videoTrack.samples.length) {\n var _firstSample2 = videoTrack.samples[0];\n videoBase = _firstSample2.dts;\n if (_firstSample2.options && _firstSample2.options.start) {\n start = _firstSample2.options.start;\n }\n }\n\n var delta = audioBase - videoBase;\n // 临时兼容逻辑, hls 考虑上av之间的差值\n if (!!audioBase && delta < 0 && start !== null) {\n videoTrack.samples.forEach(function (x) {\n x.dts -= delta;\n if (x.pts) {\n x.pts -= delta;\n }\n });\n }\n\n this._videoDtsBase = (videoBase || audioBase) - (start || this._dtsBase);\n this._audioDtsBase = (audioBase || videoBase) - (start || this._dtsBase);\n this._dtsBase = Math.min(videoBase, audioBase);\n this._isDtsBaseInited = true;\n\n logger.log(this.TAG, 'calcDtsBase');\n logger.log(this.TAG, 'video first dts: ' + videoBase + ' , start:' + start + ' , _videoDtsBase:' + this._videoDtsBase + ' , _dtsBase:' + this._dtsBase);\n logger.log(this.TAG, 'audio first dts: ' + audioBase + ' , start:' + start + ' , _audioDtsBase:' + this._audioDtsBase + ', _dtsBase:' + this._dtsBase);\n }\n\n /**\n * @param {VideoTrack}videoTrack\n * @return {*}\n * @private\n */\n\n }, {\n key: 'remuxVideo',\n value: function remuxVideo(videoTrack) {\n var _this2 = this;\n\n var track = videoTrack || {};\n\n if (!videoTrack || !videoTrack.samples || !videoTrack.samples.length) {\n return;\n }\n\n var samples = track.samples,\n meta = track.meta;\n\n\n if (!meta) return;\n\n var firstDts = -1;\n\n var initSegment = null;\n var mp4Samples = [];\n var mdatBox = {\n samples: []\n };\n\n var maxLoop = 10000;\n while (samples.length && maxLoop-- > 0) {\n var avcSample = samples.shift();\n\n var isKeyframe = avcSample.isKeyframe,\n options = avcSample.options;\n\n if (!this.isFirstVideo && options && options.meta) {\n initSegment = this.remuxInitSegment('video', options.meta);\n options.meta = null;\n samples.unshift(avcSample);\n if (!options.isContinue) {\n this._videoDtsBase = 0;\n }\n break;\n }\n var dts = Math.max(0, avcSample.dts - this.videoDtsBase);\n if (firstDts === -1) {\n firstDts = dts;\n }\n\n var cts = void 0;\n var pts = void 0;\n if (avcSample.pts !== undefined) {\n pts = avcSample.pts - this._dtsBase;\n cts = pts - dts;\n }\n if (avcSample.cts !== undefined) {\n pts = avcSample.cts + dts;\n cts = avcSample.cts;\n }\n\n var mdatSample = {\n buffer: [],\n size: 0\n };\n\n var sampleDuration = 0;\n if (avcSample.duration) {\n sampleDuration = avcSample.duration;\n } else if (samples.length >= 1) {\n var nextDts = samples[0].dts - this.videoDtsBase;\n sampleDuration = nextDts - dts;\n } else {\n if (mp4Samples.length >= 1) {\n // lastest sample, use second last duration\n sampleDuration = mp4Samples[mp4Samples.length - 1].duration;\n } else {\n // the only one sample, use reference duration\n sampleDuration = this._videoMeta.refSampleDuration;\n }\n }\n this.videoAllDuration += sampleDuration;\n if (logger.long) {\n logger.log(this.TAG, 'video dts ' + dts, 'pts ' + pts, 'cts: ' + cts, isKeyframe, 'originDts ' + avcSample.originDts, 'duration ' + sampleDuration);\n }\n if (sampleDuration >= 0) {\n mdatBox.samples.push(mdatSample);\n mdatSample.buffer.push(avcSample.data);\n mdatSample.size += avcSample.data.byteLength;\n // manage same pts sample\n // if (this.mp4Durations[pts]) {\n // pts += this.mp4Durations[pts]\n // cts = pts - dts\n // }\n mp4Samples.push({\n dts: dts,\n cts: cts,\n pts: pts,\n data: avcSample.data,\n size: avcSample.data.byteLength,\n isKeyframe: isKeyframe,\n duration: sampleDuration,\n flags: {\n isLeading: 0,\n dependsOn: isKeyframe ? 2 : 1,\n isDependedOn: isKeyframe ? 1 : 0,\n hasRedundancy: 0,\n isNonSync: isKeyframe ? 0 : 1\n },\n originDts: dts,\n type: 'video'\n });\n this.mp4Durations[pts] = sampleDuration;\n this.mp4Durations.keys.push(pts);\n }\n\n if (isKeyframe) {\n this.emit(Mp4Remuxer.EVENTS.RANDOM_ACCESS_POINT, pts);\n }\n }\n // delete too much data\n if (this.mp4Durations.keys.length > 1e4) {\n var tmp = this.mp4Durations;\n this.mp4Durations = {};\n this.mp4Durations.keys = tmp.keys.slice(-100);\n this.mp4Durations.keys.forEach(function (key) {\n _this2.mp4Durations[key] = tmp[key];\n });\n }\n if (mp4Samples.length) {\n logger.log(this.TAG, 'remux to mp4 video:', [firstDts / 1000, mp4Samples[mp4Samples.length - 1].dts / 1000]);\n }\n\n var moofMdat = new Buffer();\n if (mp4Samples.length && track.meta) {\n var moof = Fmp4.moof({\n id: track.meta.id,\n time: firstDts,\n samples: mp4Samples\n });\n var mdat = Fmp4.mdat(mdatBox);\n moofMdat.write(moof, mdat);\n\n this.segmentRemuxed('video', moofMdat, mp4Samples[mp4Samples.length - 1].pts - mp4Samples[0].pts);\n }\n\n if (initSegment) {\n this.segmentRemuxed('video', initSegment);\n\n if (samples.length) {\n // second part of stream change\n track.samples = samples;\n return this.remuxVideo(track);\n }\n }\n\n this.isFirstVideo = false;\n this.emit(Mp4Remuxer.EVENTS.TRACK_REMUXED, 'video', moofMdat);\n\n track.samples = [];\n track.length = 0;\n }\n\n /**\n *\n * @param {AudioTrack} track\n * @return {*}\n * @private\n */\n\n }, {\n key: 'remuxAudio',\n value: function remuxAudio(track) {\n var _ref2 = track || {},\n samples = _ref2.samples;\n\n var firstDts = -1;\n var mp4Samples = [];\n\n var initSegment = null;\n var mdatBox = {\n samples: []\n };\n if (!samples || !samples.length) {\n return;\n }\n\n var maxLoop = 10000;\n var isFirstDtsInited = false;\n while (samples.length && maxLoop-- > 0) {\n var sample = samples.shift();\n var data = sample.data,\n options = sample.options;\n\n if (!this.isFirstAudio && options && options.meta) {\n initSegment = this.remuxInitSegment('audio', options.meta);\n options.meta = null;\n samples.unshift(sample);\n if (!options.isContinue) {\n this._audioDtsBase = 0;\n }\n break;\n }\n\n var dts = Math.max(0, sample.dts - this.audioDtsBase);\n var originDts = sample.originDts;\n if (!isFirstDtsInited) {\n firstDts = dts;\n isFirstDtsInited = true;\n }\n\n var sampleDuration = 0;\n if (sample.duration) {\n sampleDuration = sample.duration;\n } else if (this._audioMeta.refSampleDurationFixed) {\n sampleDuration = this._audioMeta.refSampleDurationFixed;\n } else if (samples.length >= 1) {\n var nextDts = samples[0].dts - this.audioDtsBase;\n sampleDuration = nextDts - dts;\n } else {\n if (mp4Samples.length >= 1) {\n // use second last sample duration\n sampleDuration = mp4Samples[mp4Samples.length - 1].duration;\n } else {\n // the only one sample, use reference sample duration\n sampleDuration = this._audioMeta.refSampleDuration;\n }\n }\n\n if (logger.long) {\n // logger.log(this.TAG, `audio dts ${dts}`, `pts ${dts}`, `originDts ${originDts}`, `duration ${sampleDuration}`)\n }\n this.audioAllDuration += sampleDuration;\n var mp4Sample = {\n dts: dts,\n pts: dts,\n cts: 0,\n size: data.byteLength,\n duration: sample.duration ? sample.duration : sampleDuration,\n flags: {\n isLeading: 0,\n dependsOn: 1,\n isDependedOn: 0,\n hasRedundancy: 0,\n isNonSync: 0\n },\n isKeyframe: true,\n originDts: originDts,\n type: 'audio'\n };\n\n var mdatSample = {\n buffer: [],\n size: 0\n };\n\n if (sampleDuration >= 0) {\n mdatSample.buffer.push(data);\n mdatSample.size += data.byteLength;\n\n mdatBox.samples.push(mdatSample);\n mp4Samples.push(mp4Sample);\n }\n }\n\n var moofMdat = new Buffer();\n\n if (mp4Samples.length && track.meta) {\n logger.log(this.TAG, 'remux to mp4 audio:', [firstDts / 1000, mp4Samples[mp4Samples.length - 1].dts / 1000]);\n var moof = Fmp4.moof({\n id: track.meta.id,\n time: firstDts,\n samples: mp4Samples\n });\n var mdat = Fmp4.mdat(mdatBox);\n moofMdat.write(moof, mdat);\n\n this.segmentRemuxed('audio', moofMdat, mp4Samples[mp4Samples.length - 1].dts - mp4Samples[0].dts);\n }\n\n if (initSegment) {\n this.segmentRemuxed('audio', initSegment);\n if (samples.length) {\n // second part of stream change\n track.samples = samples;\n return this.remuxAudio(track);\n }\n }\n\n this.isFirstAudio = false;\n this.emit(Mp4Remuxer.EVENTS.TRACK_REMUXED, 'audio', moofMdat);\n\n track.samples = [];\n track.length = 0;\n }\n }, {\n key: 'segmentRemuxed',\n value: function segmentRemuxed(type, buffer, bufferDuration) {\n this.emit(Mp4Remuxer.EVENTS.MEDIA_SEGMENT, type, buffer, bufferDuration);\n }\n }, {\n key: 'videoDtsBase',\n get: function get() {\n if (this._videoDtsBase !== null) {\n return this._videoDtsBase;\n }\n return this._dtsBase;\n },\n set: function set(value) {\n this._videoDtsBase = value;\n }\n }, {\n key: 'audioDtsBase',\n get: function get() {\n if (this._audioDtsBase !== null) {\n return this._audioDtsBase;\n }\n return this._dtsBase;\n }\n }], [{\n key: 'EVENTS',\n get: function get() {\n return {\n MEDIA_SEGMENT: 'MEDIA_SEGMENT',\n INIT_SEGMENT: 'INIT_SEGMENT',\n RANDOM_ACCESS_POINT: 'RANDOM_ACCESS_POINT',\n TRACK_REMUXED: 'TRACK_REMUXED'\n };\n }\n }]);\n\n return Mp4Remuxer;\n}(EventEmitter);\n\nexport default Mp4Remuxer;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { EVENTS } from 'xgplayer-helper-utils';\nimport Remuxer from './remuxer';\n\nvar REMUX_EVENTS = EVENTS.REMUX_EVENTS;\nvar PLAYER_EVENTS = EVENTS.PLAYER_EVENTS;\n\nvar Mp4Remuxer = function () {\n function Mp4Remuxer() {\n var curTime = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;\n\n _classCallCheck(this, Mp4Remuxer);\n\n this.TAG = 'Mp4Remuxer';\n this._curTime = curTime;\n if (!this.remuxer) {\n this.initRemuxer();\n }\n }\n\n _createClass(Mp4Remuxer, [{\n key: 'init',\n value: function init() {\n this.on(REMUX_EVENTS.REMUX_MEDIA, this.remux.bind(this));\n this.on(REMUX_EVENTS.REMUX_METADATA, this.onMetaDataReady.bind(this));\n this.on(REMUX_EVENTS.DETECT_CHANGE_STREAM, this.resetDtsBase.bind(this));\n this.on(REMUX_EVENTS.DETECT_FRAG_ID_DISCONTINUE, this.seek.bind(this));\n this.on(PLAYER_EVENTS.SEEK, this.seek.bind(this));\n }\n }, {\n key: 'initRemuxer',\n value: function initRemuxer() {\n this.remuxer = new Remuxer({\n audioMeta: null,\n videoMeta: null,\n curTime: this._curTime\n });\n this.remuxer.on(Remuxer.EVENTS.MEDIA_SEGMENT, this.writeToSource.bind(this));\n this.remuxer.on(Remuxer.EVENTS.TRACK_REMUXED, this.onTrackRemuxed.bind(this));\n }\n }, {\n key: 'remux',\n value: function remux() {\n if (!this.remuxer._videoMeta) {\n this.remuxer._videoMeta = this.videoMeta;\n this.remuxer._audioMeta = this.audioMeta;\n }\n\n var _context$getInstance = this._context.getInstance('TRACKS'),\n audioTrack = _context$getInstance.audioTrack,\n videoTrack = _context$getInstance.videoTrack;\n\n return this.remuxer.remux(audioTrack, videoTrack);\n }\n }, {\n key: 'resetDtsBase',\n value: function resetDtsBase() {\n this.remuxer && this.remuxer.resetDtsBase();\n }\n }, {\n key: 'seek',\n value: function seek(time) {\n this.remuxer && this.remuxer.seek(time);\n }\n }, {\n key: 'onMetaDataReady',\n value: function onMetaDataReady(type) {\n if (!this.remuxer) {\n this.initRemuxer();\n }\n var track = void 0;\n\n if (type === 'audio') {\n var _context$getInstance2 = this._context.getInstance('TRACKS'),\n audioTrack = _context$getInstance2.audioTrack;\n\n track = audioTrack;\n } else {\n var _context$getInstance3 = this._context.getInstance('TRACKS'),\n videoTrack = _context$getInstance3.videoTrack;\n\n track = videoTrack;\n }\n\n var presourcebuffer = this._context.getInstance('PRE_SOURCE_BUFFER');\n var source = presourcebuffer.getSource(type);\n if (!source) {\n source = presourcebuffer.createSource(type);\n }\n\n source.mimetype = track.meta.codec;\n source.init = this.remuxer.remuxInitSegment(type, track.meta);\n\n this.emit(REMUX_EVENTS.INIT_SEGMENT, type);\n }\n }, {\n key: 'onTrackRemuxed',\n value: function onTrackRemuxed(track) {\n this.emit(REMUX_EVENTS.MEDIA_SEGMENT, track);\n }\n }, {\n key: 'writeToSource',\n value: function writeToSource(type, buffer, bufferDuration) {\n var presourcebuffer = this._context.getInstance('PRE_SOURCE_BUFFER');\n var source = presourcebuffer.getSource(type);\n if (!source) {\n source = presourcebuffer.createSource(type);\n }\n source.data.push(buffer);\n if (bufferDuration) {\n source.bufferDuration = bufferDuration + (source.bufferDuration || 0);\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n if (this.remuxer) {\n this.remuxer.destroy();\n }\n this.remuxer = null;\n }\n }, {\n key: 'videoMeta',\n get: function get() {\n return this._context.getInstance('TRACKS').videoTrack.meta;\n }\n }, {\n key: 'audioMeta',\n get: function get() {\n return this._context.getInstance('TRACKS').audioTrack.meta;\n }\n }]);\n\n return Mp4Remuxer;\n}();\n\nexport default Mp4Remuxer;","import { Mse, FetchLoader, Crypto } from 'xgplayer-helper-utils';\nimport { Tracks, RemuxedBufferManager, Buffer as XgBuffer, Playlist } from 'xgplayer-helper-models';\n\nimport { CompatHls as Compatibility } from 'xgplayer-helper-codec';\nimport { Mp4Remuxer, M3U8Parser, TsDemuxer } from 'xgplayer-helper-transmuxers';\n\nexport default {\n Mse: Mse,\n Tracks: Tracks,\n RemuxedBufferManager: RemuxedBufferManager,\n XgBuffer: XgBuffer,\n FetchLoader: FetchLoader,\n Compatibility: Compatibility,\n Mp4Remuxer: Mp4Remuxer,\n Crypto: Crypto,\n M3U8Parser: M3U8Parser,\n TsDemuxer: TsDemuxer,\n Playlist: Playlist\n};","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Player from 'xgplayer';\nimport { EVENTS, Context } from 'xgplayer-helper-utils';\nimport HlsLiveController from './hls-live';\nimport defaultConfig from './config';\nvar HlsAllowedEvents = EVENTS.HlsAllowedEvents;\nvar REMUX_EVENTS = EVENTS.REMUX_EVENTS;\n\nvar util = Player.util;\n\nvar HlsLivePlayer = function (_Player) {\n _inherits(HlsLivePlayer, _Player);\n\n function HlsLivePlayer(options) {\n _classCallCheck(this, HlsLivePlayer);\n\n var _this = _possibleConstructorReturn(this, (HlsLivePlayer.__proto__ || Object.getPrototypeOf(HlsLivePlayer)).call(this, options));\n\n _this.hlsOps = {};\n _this.hlsOps = Object.assign(_this.hlsOps, defaultConfig);\n util.deepCopy(_this.hlsOps, options);\n _this._played = false;\n // this.started = false;\n return _this;\n }\n\n _createClass(HlsLivePlayer, [{\n key: '_initEvents',\n value: function _initEvents() {\n var _this2 = this;\n\n this.__core__.once(REMUX_EVENTS.INIT_SEGMENT, function () {\n var mse = _this2._context.getInstance('MSE');\n if (!_this2.started) {\n var live = util.createDom('xg-live', '正在直播', {}, 'xgplayer-live');\n util.addClass(_this2.root, 'xgplayer-is-live');\n _this2.controls.appendChild(live);\n }\n _this2.started = true;\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'start', _this2).call(_this2, mse.url);\n });\n }\n }, {\n key: 'start',\n value: function start() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.config.url;\n\n if (!url || this.started) {\n return;\n }\n\n if (!this._context) {\n this._context = new Context(this, this.hlsOps, HlsAllowedEvents);\n }\n\n if (!this.hlsOps) {\n this.hlsOps = {};\n this.hlsOps = Object.assign(this.hlsOps, defaultConfig);\n util.deepCopy(this.hlsOps, this.config);\n this._played = false;\n }\n\n this.__core__ = this._context.registry('HLS_LIVE_CONTROLLER', HlsLiveController)({ player: this, container: this.video, preloadTime: this.config.preloadTime });\n this._context.init();\n this.url = url;\n this.__core__.load(url);\n this._initEvents();\n this.started = true;\n }\n }, {\n key: 'play',\n value: function play() {\n var _this3 = this;\n\n if (this._played) {\n this.src = this.config.url;\n this.once('canplay', function () {\n _this3.video.play();\n });\n return;\n }\n this._played = true;\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'play', this).call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var _this4 = this;\n\n if (this._context) {\n this._context.destroy();\n }\n var prom = new Promise(function (resolve) {\n if (_this4.__core__ && _this4.__core__.mse) {\n _this4.__core__.mse.destroy().then(function () {\n setTimeout(function () {\n resolve();\n }, 50);\n });\n } else {\n setTimeout(function () {\n resolve();\n }, 50);\n }\n });\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'destroy', this).call(this);\n\n return prom;\n }\n }, {\n key: 'src',\n set: function set(url) {\n var _this5 = this;\n\n this.onWaiting = this.onWaiting.bind(this);\n this.__core__.mse.destroy().then(function () {\n _this5._context.destroy();\n _this5._context = null;\n _this5.started = false;\n _this5.video.currentTime = 0;\n\n _this5.start(url);\n });\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n }\n }, {\n key: 'install',\n value: function install(name, plugin) {\n return Player.install(name, plugin);\n }\n }]);\n\n return HlsLivePlayer;\n}(Player);\n\nexport default HlsLivePlayer;\n\n\nHlsLivePlayer.install = Player.install.bind(Player);","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { EVENTS } from 'xgplayer-helper-utils';\nimport { XGDataView } from 'xgplayer-helper-models';\nimport { avc, hevc } from 'xgplayer-helper-codec';\n\nvar NalUnitHEVC = hevc.NalUnitHEVC;\nvar NalUnit = avc.NalUnit;\n\nvar LOADER_EVENTS = EVENTS.LOADER_EVENTS;\nvar DEMUX_EVENTS = EVENTS.DEMUX_EVENTS;\nvar HLS_EVENTS = EVENTS.HLS_EVENTS;\nvar CRYTO_EVENTS = EVENTS.CRYTO_EVENTS;\nvar HLS_ERROR = 'HLS_ERROR';\n\nvar MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\n\\r]*)[\\r\\n]+([^\\r\\n]+)/g;\n\nvar HlsLiveController = function () {\n function HlsLiveController(configs) {\n _classCallCheck(this, HlsLiveController);\n\n this.configs = Object.assign({}, configs);\n this.url = '';\n this.sequence = 0;\n this._playlist = null;\n this.retrytimes = this.configs.retrytimes || 3;\n this.preloadTime = this.configs.preloadTime;\n this.container = this.configs.container;\n this._m3u8lasttime = 0;\n this._timmer = setInterval(this._checkStatus.bind(this), 50);\n this._lastCheck = 0;\n\n this.m3u8Text = null;\n }\n\n _createClass(HlsLiveController, [{\n key: 'init',\n value: function init() {\n var _player$hlsOps = this._player.hlsOps,\n XgBuffer = _player$hlsOps.XgBuffer,\n Tracks = _player$hlsOps.Tracks,\n Playlist = _player$hlsOps.Playlist,\n FetchLoader = _player$hlsOps.FetchLoader,\n TsDemuxer = _player$hlsOps.TsDemuxer;\n // 初始化Buffer (M3U8/TS/Playlist);\n\n this._context.registry('M3U8_BUFFER', XgBuffer);\n this._context.registry('TS_BUFFER', XgBuffer);\n this._context.registry('TRACKS', Tracks);\n\n this._playlist = this._context.registry('PLAYLIST', Playlist)({ autoclear: true });\n\n // 初始化M3U8Loader;\n this._m3u8loader = this._context.registry('M3U8_LOADER', FetchLoader)({ buffer: 'M3U8_BUFFER', readtype: 1 });\n this._tsloader = this._context.registry('TS_LOADER', FetchLoader)({ buffer: 'TS_BUFFER', readtype: 3 });\n\n // 初始化TS Demuxer\n this._context.registry('TS_DEMUXER', TsDemuxer)({ inputbuffer: 'TS_BUFFER' });\n\n this.initEvents();\n }\n }, {\n key: 'initEvents',\n value: function initEvents() {\n this.on(LOADER_EVENTS.LOADER_COMPLETE, this._onLoadComplete.bind(this));\n\n this.on(DEMUX_EVENTS.METADATA_PARSED, this._onMetadataParsed.bind(this));\n\n this.on(DEMUX_EVENTS.SEI_PARSED, this._handleSEIParsed.bind(this));\n\n this.on(DEMUX_EVENTS.DEMUX_COMPLETE, this._onDemuxComplete.bind(this));\n\n this.on(LOADER_EVENTS.LOADER_ERROR, this._onLoadError.bind(this));\n\n this.on(DEMUX_EVENTS.DEMUX_ERROR, this._onDemuxError.bind(this));\n }\n }, {\n key: '_onError',\n value: function _onError(type, mod, err, fatal) {\n var error = {\n errorType: type,\n errorDetails: '[' + mod + ']: ' + (err ? err.message : ''),\n errorFatal: fatal\n };\n this._player.emit(HLS_ERROR, error);\n }\n }, {\n key: '_onDemuxComplete',\n value: function _onDemuxComplete() {\n var _this = this;\n\n if (this._player.video) {\n var _context$getInstance = this._context.getInstance('TRACKS'),\n videoTrack = _context$getInstance.videoTrack,\n audioTrack = _context$getInstance.audioTrack;\n\n videoTrack.samples.forEach(function (sample) {\n if (sample.analyzed) {\n return;\n }\n sample.analyzed = true;\n var buffer = new XGDataView(sample.data.buffer);\n var nals = void 0;\n if (_this._isHEVC(videoTrack.meta)) {\n nals = NalUnitHEVC.getHvccNals(buffer);\n } else {\n nals = NalUnit.getNalunits(buffer);\n }\n var nalsLength = nals.reduce(function (len, current) {\n return len + 4 + current.body.byteLength;\n }, 0);\n var newData = new Uint8Array(nalsLength);\n var offset = 0;\n nals.forEach(function (nal) {\n newData.set([0, 0, 0, 1], offset);\n offset += 4;\n newData.set(new Uint8Array(nal.body), offset);\n offset += nal.body.byteLength;\n });\n\n sample.data = newData;\n });\n this._player.video.onDemuxComplete(videoTrack, audioTrack);\n }\n }\n }, {\n key: '_onMetadataParsed',\n value: function _onMetadataParsed(type) {\n if (type === 'audio') {\n // 将音频meta信息交给audioContext,不走remux封装\n var _context$getInstance2 = this._context.getInstance('TRACKS'),\n audioTrack = _context$getInstance2.audioTrack;\n\n if (audioTrack && audioTrack.meta) {\n this._setMetaToAudio(audioTrack.meta);\n }\n } else {\n var _context$getInstance3 = this._context.getInstance('TRACKS'),\n videoTrack = _context$getInstance3.videoTrack;\n\n if (videoTrack && videoTrack.meta) {\n this._setMetaToVideo(videoTrack.meta);\n }\n }\n }\n }, {\n key: '_setMetaToAudio',\n value: function _setMetaToAudio(audioMeta) {\n if (this._player.video) {\n this._player.video.setAudioMeta(audioMeta);\n }\n }\n }, {\n key: '_setMetaToVideo',\n value: function _setMetaToVideo(videoMeta) {\n if (this._player.video) {\n this._player.video.setVideoMeta(videoMeta);\n }\n }\n }, {\n key: '_onLoadError',\n value: function _onLoadError(loader, error) {\n if (!this._tsloader.loading && !this._m3u8loader.loading && this.retrytimes > 1) {\n this.retrytimes--;\n this._onError(LOADER_EVENTS.LOADER_ERROR, loader, error, false);\n } else if (this.retrytimes <= 1) {\n this._onError(LOADER_EVENTS.LOADER_ERROR, loader, error, true);\n this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED);\n if (this._player.video) {\n this._player.video.handleEnded();\n }\n }\n }\n }, {\n key: '_onDemuxError',\n value: function _onDemuxError(mod, error, fatal) {\n if (fatal === undefined) {\n fatal = true;\n }\n this._onError(LOADER_EVENTS.LOADER_ERROR, mod, error, fatal);\n }\n }, {\n key: '_handleSEIParsed',\n value: function _handleSEIParsed(sei) {\n this._player.emit('SEI_PARSED', sei);\n }\n }, {\n key: '_onLoadComplete',\n value: function _onLoadComplete(buffer) {\n if (buffer.TAG === 'M3U8_BUFFER') {\n var mdata = void 0;\n try {\n this.m3u8Text = buffer.shift();\n var result = MASTER_PLAYLIST_REGEX.exec(this.m3u8Text);\n if (result && result[2]) {\n // redirect\n this.load(result[2]);\n } else {\n mdata = this._player.hlsOps.M3U8Parser.parse(this.m3u8Text, this.url);\n }\n } catch (error) {\n this._onError('M3U8_PARSER_ERROR', 'M3U8_PARSER', error, false);\n }\n\n if (!mdata) {\n if (this.retrytimes > 0) {\n this.retrytimes--;\n this._preload();\n } else {\n this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED);\n if (this._player.video) {\n this._player.video.handleEnded();\n }\n }\n return;\n }\n\n try {\n this._playlist.pushM3U8(mdata, true);\n } catch (error) {\n this._onError('M3U8_PARSER_ERROR', 'PLAYLIST', error, false);\n }\n\n if (this._playlist.encrypt && this._playlist.encrypt.uri && !this._playlist.encrypt.key) {\n var _player$hlsOps2 = this._player.hlsOps,\n XgBuffer = _player$hlsOps2.XgBuffer,\n FetchLoader = _player$hlsOps2.FetchLoader;\n\n this._context.registry('DECRYPT_BUFFER', XgBuffer)();\n this._context.registry('KEY_BUFFER', XgBuffer)();\n this._tsloader.buffer = 'DECRYPT_BUFFER';\n this._keyLoader = this._context.registry('KEY_LOADER', FetchLoader)({ buffer: 'KEY_BUFFER', readtype: 3 });\n this.emitTo('KEY_LOADER', LOADER_EVENTS.LADER_START, this._playlist.encrypt.uri);\n } else {\n this._m3u8Loaded(mdata);\n }\n } else if (buffer.TAG === 'TS_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.downloaded(this._tsloader.url, true);\n this.emit(DEMUX_EVENTS.DEMUX_START);\n } else if (buffer.TAG === 'DECRYPT_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.downloaded(this._tsloader.url, true);\n this.emitTo('CRYPTO', CRYTO_EVENTS.START_DECRYPT);\n } else if (buffer.TAG === 'KEY_BUFFER') {\n var Crypto = this._player.hlsOps.Crypto;\n\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.encrypt.key = buffer.shift();\n this._crypto = this._context.registry('CRYPTO', Crypto)({\n key: this._playlist.encrypt.key,\n iv: this._playlist.encrypt.ivb,\n method: this._playlist.encrypt.method,\n inputbuffer: 'DECRYPT_BUFFER',\n outputbuffer: 'TS_BUFFER'\n });\n this._crypto.on(CRYTO_EVENTS.DECRYPTED, this._onDcripted.bind(this));\n }\n }\n }, {\n key: '_onDcripted',\n value: function _onDcripted() {\n this.emit(DEMUX_EVENTS.DEMUX_START);\n }\n }, {\n key: '_m3u8Loaded',\n value: function _m3u8Loaded(mdata) {\n if (!this.preloadTime) {\n this.preloadTime = this._playlist.targetduration ? this._playlist.targetduration : 5;\n }\n if (this._playlist.fragLength > 0 && this._playlist.sequence < mdata.sequence) {\n this.retrytimes = this.configs.retrytimes || 3;\n } else {\n if (this.retrytimes > 0) {\n this.retrytimes--;\n this._preload();\n } else {\n this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED);\n if (this._player.video) {\n this._player.video.handleEnded();\n }\n }\n }\n }\n }, {\n key: '_checkStatus',\n value: function _checkStatus() {\n if (this.retrytimes < 1 && new Date().getTime() - this._lastCheck < 10000) {\n return;\n }\n this._lastCheck = new Date().getTime();\n if (this.container.buffered.length < 1) {\n this._preload();\n } else {\n // Check for load.\n var currentTime = this.container.currentTime;\n if (this.container.readyState <= 2) {\n this._preload();\n }\n var bufferend = this.container.buffered.end(this.container.buffered.length - 1);\n\n if (currentTime > bufferend - this.preloadTime) {\n this._preload();\n }\n }\n }\n }, {\n key: '_preload',\n value: function _preload() {\n if (this._tsloader.loading || this._m3u8loader.loading) {\n return;\n }\n var frag = this._playlist.getTs();\n\n if (frag && !frag.downloaded && !frag.downloading) {\n this._playlist.downloading(frag.url, true);\n this.emitTo('TS_LOADER', LOADER_EVENTS.LADER_START, frag.url);\n } else {\n var preloadTime = this.preloadTime ? this.preloadTime : 0;\n var current = new Date().getTime();\n if ((!frag || frag.downloaded) && (current - this._m3u8lasttime) / 1000 > preloadTime) {\n this._m3u8lasttime = current;\n this.emitTo('M3U8_LOADER', LOADER_EVENTS.LADER_START, this.url);\n }\n }\n }\n }, {\n key: '_isHEVC',\n value: function _isHEVC(meta) {\n return meta && meta.codec === 'hev1.1.6.L93.B0';\n }\n }, {\n key: 'load',\n value: function load(url) {\n this.url = url;\n this._preload();\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n clearInterval(this._timmer);\n this.off(LOADER_EVENTS.LOADER_COMPLETE, this._onLoadComplete);\n // this.off(REMUX_EVENTS.REMUX_ERROR);\n this.off(DEMUX_EVENTS.METADATA_PARSED, this._onMetadataParsed);\n this.off(DEMUX_EVENTS.DEMUX_COMPLETE, this._onDemuxComplete);\n\n this.m3u8Text = null;\n }\n }]);\n\n return HlsLiveController;\n}();\n\nexport default HlsLiveController;","import { Tracks, Buffer as XgBuffer, Playlist } from 'xgplayer-helper-models';\nimport { Crypto, FetchLoader } from 'xgplayer-helper-utils';\nimport { M3U8Parser, TsDemuxer } from 'xgplayer-helper-transmuxers';\n\nexport default {\n Tracks: Tracks,\n XgBuffer: XgBuffer,\n FetchLoader: FetchLoader,\n Crypto: Crypto,\n M3U8Parser: M3U8Parser,\n TsDemuxer: TsDemuxer,\n Playlist: Playlist\n};","var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Player from 'xgplayer';\nimport { EVENTS, Context } from 'xgplayer-helper-utils';\nimport HlsLiveController from './hls-live-mobile';\nimport defaultConfig from './config';\n// import 'xgplayer-mobilevideo'\nvar HlsAllowedEvents = EVENTS.HlsAllowedEvents;\n\nvar HlsLivePlayer = function (_Player) {\n _inherits(HlsLivePlayer, _Player);\n\n _createClass(HlsLivePlayer, null, [{\n key: 'isSupported',\n value: function isSupported() {\n var wasmSupported = 'WebAssembly' in window;\n var WebComponentSupported = 'customElements' in window && window.customElements.define;\n var isComponentDefined = false;\n if (WebComponentSupported) {\n isComponentDefined = window.customElements.get('live-video');\n }\n return wasmSupported && isComponentDefined;\n }\n }]);\n\n function HlsLivePlayer(options) {\n _classCallCheck(this, HlsLivePlayer);\n\n if (!options.mediaType) {\n options.mediaType = 'live-video';\n if (options.videoConfig) {\n options.videoConfig.preloadtime = options.preloadTime || 5;\n } else {\n options.videoConfig = {\n preloadtime: options.preloadTime || 5\n };\n }\n }\n\n var _this = _possibleConstructorReturn(this, (HlsLivePlayer.__proto__ || Object.getPrototypeOf(HlsLivePlayer)).call(this, options));\n\n _this.hlsOps = {};\n _this.util = Player.util;\n _this.hlsOps = Object.assign(_this.hlsOps, defaultConfig);\n _this.util.deepCopy(_this.hlsOps, options);\n if (!_this.playerInited) {\n _this.initPlayer();\n }\n // this.started = false;\n return _this;\n }\n\n _createClass(HlsLivePlayer, [{\n key: 'initPlayer',\n value: function initPlayer() {\n this.video.width = Number.parseInt(this.hlsOps.width || 600);\n this.video.height = Number.parseInt(this.hlsOps.height || 337.5);\n this.video.style.outline = 'none';\n this.playerInited = true;\n }\n }, {\n key: '_initEvents',\n value: function _initEvents() {\n var _this2 = this;\n\n this.once('canplay', function () {\n _this2.video.play();\n });\n }\n }, {\n key: 'start',\n value: function start() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.hlsOps.url;\n\n if (!url || this.started) {\n return;\n }\n\n if (!this.playerInited) {\n this.initPlayer();\n }\n\n if (!this._context) {\n this._context = new Context(HlsAllowedEvents);\n }\n\n this.__core__ = this._context.registry('HLS_LIVE_CONTROLLER', HlsLiveController)({ player: this, container: this.video, preloadTime: this.config.preloadTime });\n this._context.init();\n this.url = url;\n this.__core__.load(url);\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'start', this).call(this, url);\n this._initEvents();\n this.started = true;\n this.addLiveFlag();\n }\n }, {\n key: 'play',\n value: function play() {\n if (this.started) {\n this._context.destroy();\n this._context = new Context(HlsAllowedEvents);\n this.__core__ = this._context.registry('HLS_LIVE_CONTROLLER', HlsLiveController)({ player: this, container: this.video, preloadTime: this.config.preloadTime });\n this._context.init();\n this._initEvents();\n this.__core__.load(this.url);\n }\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'play', this).call(this);\n }\n }, {\n key: 'addLiveFlag',\n value: function addLiveFlag() {\n var player = this;\n Player.util.addClass(player.root, 'xgplayer-is-live');\n if (!Player.util.findDom(this.root, 'xg-live')) {\n var live = Player.util.createDom('xg-live', '正在直播', {}, 'xgplayer-live');\n player.controls.appendChild(live);\n }\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var _this3 = this;\n\n var isDelDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n\n return new Promise(function (resolve) {\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'destroy', _this3).call(_this3);\n var video = _this3.video,\n root = _this3.root;\n\n _get(HlsLivePlayer.prototype.__proto__ || Object.getPrototypeOf(HlsLivePlayer.prototype), 'destroy', _this3).call(_this3, isDelDOM);\n if (video && video.remove) {\n video.remove();\n } else if (root) {\n root.removeChild(video);\n }\n if (video) {\n video.destroy();\n }\n setTimeout(function () {\n resolve();\n }, 50);\n });\n }\n }, {\n key: 'src',\n set: function set(url) {\n this.onWaiting = this.onWaiting.bind(this);\n this._context.destroy();\n this._context = null;\n this.started = false;\n this.video.currentTime = 0;\n\n this.start(url);\n }\n }], [{\n key: 'install',\n value: function install(name, plugin) {\n return Player.install(name, plugin);\n }\n }]);\n\n return HlsLivePlayer;\n}(Player);\n\nexport default HlsLivePlayer;\n\n\nHlsLivePlayer.install = Player.install.bind(Player);","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport Player from 'xgplayer';\nimport HlsLiveMsePlayer from './mse';\nimport HlsLiveMobilePlayer from './mobile';\nimport { EVENTS } from 'xgplayer-helper-utils';\n// import 'xgplayer-mobilevideo'\n\nvar HlsLivePlayer = function () {\n function HlsLivePlayer(config) {\n _classCallCheck(this, HlsLivePlayer);\n\n if (HlsLiveMobilePlayer.isSupported() && config.useWASM) {\n return new HlsLiveMobilePlayer(config);\n }if (HlsLiveMsePlayer.isSupported()) {\n return new HlsLiveMsePlayer(config);\n } else {\n return new Player(config);\n }\n }\n\n _createClass(HlsLivePlayer, null, [{\n key: 'install',\n value: function install(name, plugin) {\n return Player.install(name, plugin);\n }\n }]);\n\n return HlsLivePlayer;\n}();\n\nexport default HlsLivePlayer;\n\n\nHlsLivePlayer.EVENTS = EVENTS;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nimport { EVENTS, Mse, Crypto, FetchLoader, logger } from 'xgplayer-helper-utils';\nimport { RemuxedBufferManager, Tracks, Buffer as XgBuffer, Playlist } from 'xgplayer-helper-models';\nimport { CompatHls as Compatibility } from 'xgplayer-helper-codec';\nimport { Mp4Remuxer, M3U8Parser, TsDemuxer } from 'xgplayer-helper-transmuxers';\n\nvar LOADER_EVENTS = EVENTS.LOADER_EVENTS;\nvar REMUX_EVENTS = EVENTS.REMUX_EVENTS;\nvar DEMUX_EVENTS = EVENTS.DEMUX_EVENTS;\nvar HLS_EVENTS = EVENTS.HLS_EVENTS;\nvar CRYTO_EVENTS = EVENTS.CRYTO_EVENTS;\nvar MSE_EVENTS = EVENTS.MSE_EVENTS;\n\nvar HLS_ERROR = 'HLS_ERROR';\n\nvar HlsVodController = function () {\n function HlsVodController(configs) {\n _classCallCheck(this, HlsVodController);\n\n this.TAG = 'HlsVodController';\n this.configs = Object.assign({}, configs);\n this.url = '';\n this.sequence = 0;\n this._playlist = null;\n this.retrytimes = this.configs.retrytimes || 3;\n this.container = this.configs.container;\n this.preloadTime = this.configs.preloadTime || 5;\n this.mse = this.configs.mse;\n this._lastSeekTime = 0;\n\n this.m3u8Text = null;\n }\n\n _createClass(HlsVodController, [{\n key: 'init',\n value: function init() {\n // 初始化Buffer (M3U8/TS/Playlist);\n this._context.registry('M3U8_BUFFER', XgBuffer);\n this._tsBuffer = this._context.registry('TS_BUFFER', XgBuffer)();\n this._tracks = this._context.registry('TRACKS', Tracks)();\n\n this._playlist = this._context.registry('PLAYLIST', Playlist)({ autoclear: false });\n this._presource = this._context.registry('PRE_SOURCE_BUFFER', RemuxedBufferManager)();\n\n this._compat = this._context.registry('COMPATIBILITY', Compatibility)();\n\n // 初始化M3U8Loader;\n this._context.registry('M3U8_LOADER', FetchLoader)({ buffer: 'M3U8_BUFFER', readtype: 1 });\n this._tsloader = this._context.registry('TS_LOADER', FetchLoader)({ buffer: 'TS_BUFFER', readtype: 3 });\n\n // 初始化TS Demuxer\n this._demuxer = this._context.registry('TS_DEMUXER', TsDemuxer)({ inputbuffer: 'TS_BUFFER' });\n\n // 初始化MP4 Remuxer\n this._context.registry('MP4_REMUXER', Mp4Remuxer)(this._player.currentTime);\n\n // 初始化MSE\n if (!this.mse) {\n this.mse = new Mse({ container: this.container, preloadTime: this.preloadTime }, this._context);\n this.mse.init();\n }\n this.initEvents();\n }\n }, {\n key: 'initEvents',\n value: function initEvents() {\n this._onLoaderCompete = this._onLoaderCompete.bind(this);\n this._onLoadError = this._onLoadError.bind(this);\n this._onInitSegment = this._onInitSegment.bind(this);\n this._handleSEIParsed = this._handleSEIParsed.bind(this);\n this._onMediaSegment = this._onMediaSegment.bind(this);\n this._onMetadataParsed = this._onMetadataParsed.bind(this);\n this._onDemuxComplete = this._onDemuxComplete.bind(this);\n this._onDemuxError = this._onDemuxError.bind(this);\n this._onRemuxError = this._onRemuxError.bind(this);\n this._handleMseError = this._handleMseError.bind(this);\n this._onUpdateEnd = this._onUpdateEnd.bind(this);\n this._onTimeUpdate = this._onTimeUpdate.bind(this);\n this._onWaiting = this._onWaiting.bind(this);\n\n this.on(LOADER_EVENTS.LOADER_COMPLETE, this._onLoaderCompete);\n\n this.on(LOADER_EVENTS.LOADER_ERROR, this._onLoadError);\n\n this.on(REMUX_EVENTS.INIT_SEGMENT, this._onInitSegment);\n\n this.on(DEMUX_EVENTS.SEI_PARSED, this._handleSEIParsed);\n\n this.on(REMUX_EVENTS.MEDIA_SEGMENT, this._onMediaSegment);\n\n this.on(DEMUX_EVENTS.METADATA_PARSED, this._onMetadataParsed);\n\n this.on(DEMUX_EVENTS.DEMUX_COMPLETE, this._onDemuxComplete);\n\n this.on(DEMUX_EVENTS.DEMUX_ERROR, this._onDemuxError);\n\n this.on(REMUX_EVENTS.REMUX_ERROR, this._onRemuxError);\n this.on(MSE_EVENTS.MSE_ERROR, this._handleMseError);\n this.on(MSE_EVENTS.SOURCE_UPDATE_END, this._onUpdateEnd);\n\n this.on('TIME_UPDATE', this._onTimeUpdate);\n\n this.on(MSE_EVENTS.SOURCE_UPDATE_END, this._onTimeUpdate);\n\n this.on('WAITING', this._onWaiting);\n }\n }, {\n key: '_onError',\n value: function _onError(type, mod, err, fatal) {\n var error = {\n errorType: type,\n errorDetails: '[' + mod + ']: ' + (err ? err.message : ''),\n errorFatal: fatal\n };\n this._player && this._player.emit(HLS_ERROR, error);\n }\n }, {\n key: '_onLoadError',\n value: function _onLoadError(mod, error) {\n this._player.emit('error', {\n errorType: 'network',\n ex: '[' + mod + ']: ' + error.message,\n errd: {}\n });\n this._onError(LOADER_EVENTS.LOADER_ERROR, mod, error, true);\n // this.emit(HLS_EVENTS.RETRY_TIME_EXCEEDED)\n }\n }, {\n key: '_onDemuxError',\n value: function _onDemuxError(mod, error, fatal) {\n if (fatal === undefined) {\n fatal = true;\n }\n this._player.emit('error', {\n errorType: 'parse',\n ex: '[' + mod + ']: ' + error.message,\n errd: {}\n });\n this._onError(LOADER_EVENTS.LOADER_ERROR, mod, error, fatal);\n }\n }, {\n key: '_onRemuxError',\n value: function _onRemuxError(mod, error, fatal) {\n if (fatal === undefined) {\n fatal = true;\n }\n this._player.emit('error', {\n errorType: 'parse',\n ex: '[' + mod + ']: ' + error.message,\n errd: {}\n });\n this._onError(REMUX_EVENTS.REMUX_ERROR, mod, error, fatal);\n }\n }, {\n key: '_handleMseError',\n value: function _handleMseError(tag, err, fatal) {\n if (fatal === undefined) {\n fatal = false;\n }\n this._player.emit('error', {\n errorType: 'format',\n ex: '[' + tag + ']: ' + err.message,\n errd: {}\n });\n this._onError(MSE_EVENTS.MSE_ERROR, tag, err, fatal);\n }\n }, {\n key: '_onWaiting',\n value: function _onWaiting(container) {\n var end = true;\n\n logger.log(this.TAG, 'waiting.......', this._player.video.currentTime);\n this._seekToBufferStart();\n var playList = Object.keys(this._playlist.list);\n var playListLen = playList.length;\n if (!playListLen) {\n return;\n }\n\n for (var i = 0; i < playListLen; i++) {\n if (this.container.currentTime * 1000 < parseInt(playList[i])) {\n end = false;\n }\n }\n if (end) {\n var ts = this._playlist.getTs(this.container.currentTime * 1000);\n if (!ts) {\n this._player.emit('ended');\n this.mse.endOfStream();\n } else {\n if (ts.downloaded) {\n this._player.emit('ended');\n this.mse.endOfStream();\n }\n }\n }\n }\n }, {\n key: '_seekToBufferStart',\n value: function _seekToBufferStart() {\n var video = this._player.video;\n var buffered = video.buffered;\n var range = [0, 0];\n var currentTime = video.currentTime;\n if (buffered) {\n for (var i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i);\n range[1] = buffered.end(i);\n if (range[0] <= currentTime && currentTime <= range[1]) {\n return;\n }\n }\n }\n\n var bufferStart = range[0];\n\n if (currentTime === 0 && currentTime < bufferStart && Math.abs(currentTime - bufferStart) < 5) {\n video.currentTime = bufferStart;\n }\n }\n }, {\n key: '_checkEnd',\n value: function _checkEnd() {\n var video = this._player.video;\n var buffered = video.buffered;\n var len = buffered.length;\n if (!len) return;\n var end = buffered.end(len - 1);\n if (Math.abs(end - video.duration) < 1) {\n this.mse.endOfStream();\n }\n }\n }, {\n key: '_onUpdateEnd',\n value: function _onUpdateEnd() {\n this._checkEnd();\n this._seekToBufferStart();\n this._preload(this._player.currentTime);\n }\n }, {\n key: '_onTimeUpdate',\n value: function _onTimeUpdate() {\n this._seekToBufferStart();\n // this.cleanBuffer()\n this._preload(this._player.currentTime);\n }\n }, {\n key: '_onDemuxComplete',\n value: function _onDemuxComplete() {\n this.emit(REMUX_EVENTS.REMUX_MEDIA, 'ts');\n }\n }, {\n key: '_handleSEIParsed',\n value: function _handleSEIParsed(sei) {\n this._player.emit('SEI_PARSED', sei);\n }\n }, {\n key: '_onMetadataParsed',\n value: function _onMetadataParsed(type) {\n try {\n var m = this._tracks[type + 'Track'].meta;\n logger.warn(this.TAG, 'meta detect or changed , ', type, Object.assign({}, m));\n } catch (e) {}\n var duration = parseInt(this._playlist.duration);\n if (type === 'video') {\n this._context.mediaInfo.hasVideo = true;\n this._tracks.videoTrack.meta.duration = duration;\n } else if (type === 'audio') {\n this._context.mediaInfo.hasAudio = true;\n this._tracks.audioTrack.meta.duration = duration;\n }\n this.emit(REMUX_EVENTS.REMUX_METADATA, type);\n }\n }, {\n key: '_onMediaSegment',\n value: function _onMediaSegment() {\n if (Object.keys(this.mse.sourceBuffers).length < 1) {\n this.mse.addSourceBuffers();\n }\n\n this.mse.doAppend();\n }\n }, {\n key: '_onInitSegment',\n value: function _onInitSegment() {\n this.mse.addSourceBuffers();\n }\n }, {\n key: '_onLoaderCompete',\n value: function _onLoaderCompete(buffer) {\n if (buffer.TAG === 'M3U8_BUFFER') {\n this.m3u8Text = buffer.shift();\n try {\n var mdata = M3U8Parser.parse(this.m3u8Text, this.url);\n this._playlist.pushM3U8(mdata);\n } catch (error) {\n this._onError('M3U8_PARSER_ERROR', 'PLAYLIST', error, true);\n }\n if (this._playlist.encrypt && this._playlist.encrypt.uri && !this._playlist.encrypt.key) {\n this._context.registry('DECRYPT_BUFFER', XgBuffer)();\n this._context.registry('KEY_BUFFER', XgBuffer)();\n this._tsloader.buffer = 'DECRYPT_BUFFER';\n this._keyLoader = this._context.registry('KEY_LOADER', FetchLoader)({ buffer: 'KEY_BUFFER', readtype: 3 });\n this.emitTo('KEY_LOADER', LOADER_EVENTS.LADER_START, this._playlist.encrypt.uri);\n } else {\n if (!this.preloadTime) {\n if (this._playlist.targetduration) {\n this.preloadTime = this._playlist.targetduration;\n this.mse.preloadTime = this._playlist.targetduration;\n } else {\n this.preloadTime = 5;\n this.mse.preloadTime = 5;\n }\n }\n // 起播分片 < 0.5s的过滤掉\n var frag = this._playlist.getTs((this._player.currentTime + 0.5) * 1000);\n if (frag) {\n this._logDownSegment(frag);\n this._playlist.downloading(frag.url, true);\n this.emitTo('TS_LOADER', LOADER_EVENTS.LADER_START, frag.url);\n } else {\n if (this.retrytimes > 0) {\n this.retrytimes--;\n this.emitTo('M3U8_LOADER', LOADER_EVENTS.LADER_START, this.url);\n }\n }\n }\n } else if (buffer.TAG === 'TS_BUFFER') {\n this._playlist.downloaded(this._tsloader.url, true);\n this._demuxer.demux(Object.assign({ url: this._tsloader.url }, this._playlist._ts[this._tsloader.url]), true);\n this._preload(this.mse.container.currentTime);\n } else if (buffer.TAG === 'DECRYPT_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.downloaded(this._tsloader.url, true);\n this.emitTo('CRYPTO', CRYTO_EVENTS.START_DECRYPT, Object.assign({ url: this._tsloader.url }, this._playlist._ts[this._tsloader.url]));\n } else if (buffer.TAG === 'KEY_BUFFER') {\n this.retrytimes = this.configs.retrytimes || 3;\n this._playlist.encrypt.key = buffer.shift();\n this._crypto = this._context.registry('CRYPTO', Crypto)({\n key: this._playlist.encrypt.key,\n iv: this._playlist.encrypt.ivb,\n method: this._playlist.encrypt.method,\n inputbuffer: 'DECRYPT_BUFFER',\n outputbuffer: 'TS_BUFFER'\n });\n\n this._crypto.on(CRYTO_EVENTS.DECRYPTED, this._onDcripted.bind(this));\n\n var _frag = this._playlist.getTs();\n if (_frag) {\n this._playlist.downloading(_frag.url, true);\n this.emitTo('TS_LOADER', LOADER_EVENTS.LADER_START, _frag.url);\n } else {\n if (this.retrytimes > 0) {\n this.retrytimes--;\n this.emitTo('M3U8_LOADER', LOADER_EVENTS.LADER_START, this.url);\n }\n }\n }\n }\n }, {\n key: '_onDcripted',\n value: function _onDcripted() {\n this.emit(DEMUX_EVENTS.DEMUX_START);\n }\n }, {\n key: 'seek',\n value: function seek(time) {\n var video = this._player.video;\n\n\n for (var i = 0; i < video.buffered.length; i++) {\n if (time >= video.buffered.start(i) && time < video.buffered.end(i)) {\n // this._playlist.clearDownloaded();\n return;\n }\n }\n\n logger.warn(this.TAG, 'seek: ', time, 'tsloading:', this._tsloader.loading);\n\n // 连续seek,匹配的是同一个分片且正在加载,tsloader不销毁\n var frag = this._playlist.getTs((time + 0.5) * 1000);\n if (frag && this._tsloader.loading && this._tsloader.url === frag.url) return;\n\n this._lastSeekTime = time;\n this._tsloader.destroy();\n this._tsloader = this._context.registry('TS_LOADER', FetchLoader)({ buffer: 'TS_BUFFER', readtype: 3 });\n if (this._presource.sources.video) {\n this._presource.sources.video.data = [];\n }\n if (this._presource.sources.audio) {\n this._presource.sources.audio.data = [];\n }\n if (this._tracks.audioTrack) {\n this._tracks.audioTrack.samples = [];\n }\n if (this._tracks.videoTrack) {\n this._tracks.videoTrack.samples = [];\n }\n\n if (this._compat) {\n this._compat.reset();\n }\n\n if (this._tsBuffer) {\n this._tsBuffer.array = [];\n this._tsBuffer.length = 0;\n this._tsBuffer.offset = 0;\n }\n this._playlist.clearDownloaded();\n this._context.seek(time);\n this._preload(time);\n }\n }, {\n key: 'replay',\n value: function replay() {\n this._compat.reset();\n this._playlist.clearDownloaded();\n }\n }, {\n key: 'load',\n value: function load(url) {\n this.url = url;\n this.emitTo('M3U8_LOADER', LOADER_EVENTS.LADER_START, url, null, 0);\n }\n }, {\n key: '_preload',\n value: function _preload(time) {\n time = Math.floor(time);\n if (this._tsloader.loading) {\n return;\n }\n logger.log(this.TAG, 'preload: time=', time);\n var video = this.mse.container;\n // Get current time range\n var currentbufferend = -1;\n if (!time && video.buffered.length) {\n time = video.buffered.start(0);\n }\n\n for (var i = 0; i < video.buffered.length; i++) {\n if (time >= Math.floor(video.buffered.start(i)) && time <= Math.ceil(video.buffered.end(i))) {\n currentbufferend = video.buffered.end(i);\n }\n }\n\n if (currentbufferend < 0) {\n var frag = this._playlist.getTs((time + 0.5) * 1000); // FIXME: Last frame buffer shortens duration\n if (frag && frag.downloaded) {\n frag = this._playlist.getTs(frag.time + frag.duration);\n }\n if (frag && !frag.downloading && !frag.downloaded) {\n this._logDownSegment(frag);\n this._playlist.downloading(frag.url, true);\n this.emitTo('TS_LOADER', LOADER_EVENTS.LADER_START, frag.url);\n }\n } else if (currentbufferend < time + this.preloadTime) {\n var _frag2 = this._playlist.getLastDownloadedTs() || this._playlist.getTs(currentbufferend * 1000);\n\n if (!_frag2) {\n return;\n }\n\n // let fragend = frag ? (frag.time + frag.duration) / 1000 : 0;\n\n var curTime = _frag2.time + _frag2.duration;\n var curFragTime = _frag2.time;\n\n if (_frag2.downloaded) {\n var loopMax = 1000;\n while (loopMax-- > 0) {\n curTime += 10;\n _frag2 = this._playlist.getTs(curTime);\n if (!_frag2 || _frag2.time > curFragTime) {\n break;\n }\n }\n }\n\n if (_frag2 && !_frag2.downloading && !_frag2.downloaded) {\n this._logDownSegment(_frag2);\n this._playlist.downloading(_frag2.url, true);\n this.emitTo('TS_LOADER', LOADER_EVENTS.LADER_START, _frag2.url);\n }\n }\n }\n }, {\n key: 'cleanBuffer',\n value: function cleanBuffer() {\n var _this = this;\n\n var time = this._player.currentTime;\n\n var video = this._player.video;\n var buffered = video.buffered;\n\n if (!buffered || !buffered.length) {\n return;\n }\n\n var range = [0, 0];\n var currentTime = video.currentTime;\n if (buffered) {\n for (var i = 0, len = buffered.length; i < len; i++) {\n range[0] = buffered.start(i);\n range[1] = buffered.end(i);\n if (range[0] <= currentTime && currentTime <= range[1]) {\n break;\n }\n }\n }\n\n var bufferStart = range[0];\n var bufferEnd = range[1];\n\n if (time - bufferStart > 10 || buffered.length > 1) {\n this.mse.remove(Math.max(Math.min(time - 10, bufferEnd - 10), 0.1), 0);\n\n this.bufferClearTimer = setTimeout(function () {\n _this.bufferClearTimer = null;\n }, 5000);\n }\n }\n }, {\n key: 'destory',\n value: function destory() {\n this.configs = {};\n this.url = '';\n this.sequence = 0;\n this._playlist = null;\n this.retrytimes = 3;\n this.container = undefined;\n this.preloadTime = 5;\n this._lastSeekTime = 0;\n this.m3u8Text = null;\n this.mse = null;\n\n this.off(LOADER_EVENTS.LOADER_COMPLETE, this._onLoaderCompete);\n\n this.off(LOADER_EVENTS.LOADER_ERROR, this._onLoadError);\n\n this.off(REMUX_EVENTS.INIT_SEGMENT, this._onInitSegment);\n\n this.off(REMUX_EVENTS.MEDIA_SEGMENT, this._onMediaSegment);\n\n this.off(DEMUX_EVENTS.METADATA_PARSED, this._onMetadataParsed);\n\n this.off(DEMUX_EVENTS.DEMUX_COMPLETE, this._onDemuxComplete);\n\n this.off('TIME_UPDATE', this._onTimeUpdate);\n\n this.off('WAITING', this._onWaiting);\n }\n }, {\n key: '_logDownSegment',\n value: function _logDownSegment(frag) {\n if (!frag) return;\n logger.groupEnd();\n logger.group(this.TAG, 'load ' + frag.id + ': [' + frag.time / 1000 + ' , ' + (frag.time + frag.duration) / 1000 + '], downloading: ' + frag.downloading + ' , donwloaded: ' + frag.downloaded);\n }\n }]);\n\n return HlsVodController;\n}();\n\nexport default HlsVodController;","var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _set = function set(object, property, value, receiver) { var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent !== null) { set(parent, property, value, receiver); } } else if (\"value\" in desc && desc.writable) { desc.value = value; } else { var setter = desc.set; if (setter !== undefined) { setter.call(receiver, value); } } return value; };\n\nvar _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { return get(parent, property, receiver); } } else if (\"value\" in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } };\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\nimport Player from 'xgplayer';\nimport { EVENTS, common, Context } from 'xgplayer-helper-utils';\nimport HlsVodController from './hls-vod';\n\nvar debounce = common.debounce;\n\nvar HlsAllowedEvents = EVENTS.HlsAllowedEvents;\nvar REMUX_EVENTS = EVENTS.REMUX_EVENTS;\nvar HLS_EVENTS = EVENTS.HLS_EVENTS;\nvar MSE_EVENTS = EVENTS.MSE_EVENTS;\n\nvar HlsVodPlayer = function (_Player) {\n _inherits(HlsVodPlayer, _Player);\n\n function HlsVodPlayer(options) {\n _classCallCheck(this, HlsVodPlayer);\n\n var _this = _possibleConstructorReturn(this, (HlsVodPlayer.__proto__ || Object.getPrototypeOf(HlsVodPlayer)).call(this, options));\n\n _this.hlsOps = {};\n _this.util = Player.util;\n _this.util.deepCopy(_this.hlsOps, options);\n _this._handleSetCurrentTime = debounce(_this._handleSetCurrentTime.bind(_this), 200);\n _this.onWaiting = _this.onWaiting.bind(_this);\n // this.started = false;\n return _this;\n }\n\n _createClass(HlsVodPlayer, [{\n key: '_handleSetCurrentTime',\n value: function _handleSetCurrentTime(time) {\n time = parseFloat(time);\n if (time === this.currentTime) return;\n _set(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'currentTime', time, this);\n if (this._context) {\n this.__core__.seek(time);\n }\n }\n }, {\n key: 'play',\n value: function play() {\n var _this2 = this;\n\n return this.video.play().catch(function (e) {\n if (e && e.code === 20) {\n // fix: chrome The play() request was interrupted by a new load request.\n _this2.once('canplay', function () {\n _this2.video.play();\n });\n }\n });\n }\n }, {\n key: 'replay',\n value: function replay() {\n var _this3 = this;\n\n this.__core__.mse.cleanBuffers().then(function () {\n _this3.__core__.replay();\n _get(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'replay', _this3).call(_this3);\n });\n }\n }, {\n key: '_initEvents',\n value: function _initEvents() {\n var _this4 = this;\n\n this.__core__.once(REMUX_EVENTS.INIT_SEGMENT, function () {\n var mse = _this4.__core__.mse;\n _get(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'start', _this4).call(_this4, mse.url);\n });\n\n this.__core__.once(HLS_EVENTS.RETRY_TIME_EXCEEDED, function () {\n _this4.emit('error', new Player.Errors('network', _this4.config.url));\n });\n\n this.__core__.on(MSE_EVENTS.SOURCE_UPDATE_END, function () {\n _this4._onSourceUpdateEnd();\n });\n\n this.once('canplay', function () {\n if (_this4.config.autoplay) {\n _this4.play();\n }\n });\n }\n }, {\n key: 'initHlsBackupEvents',\n value: function initHlsBackupEvents(hls, ctx) {\n var _this5 = this;\n\n hls.once(REMUX_EVENTS.INIT_SEGMENT, function () {\n if (!_this5.video.src) {\n console.log('挂载 src blob');\n var mse = hls.mse;\n _get(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'start', _this5).call(_this5, mse.url);\n }\n });\n hls.once(EVENTS.REMUX_EVENTS.MEDIA_SEGMENT, function () {\n _this5.__core__ = hls;\n _this5.__core__.mse.cleanBuffers().then(function () {\n _this5.__core__.mse.resetContext(ctx);\n _this5.__core__.mse.doAppend();\n _this5._context = ctx;\n });\n });\n\n hls.once(EVENTS.LOADER_EVENTS.LOADER_ERROR, function () {\n ctx.destroy();\n });\n }\n }, {\n key: '_onSourceUpdateEnd',\n value: function _onSourceUpdateEnd() {\n if (this.video.readyState === 1 || this.video.readyState === 2) {\n var _detectBufferGap = this.detectBufferGap(),\n gap = _detectBufferGap.gap,\n start = _detectBufferGap.start,\n method = _detectBufferGap.method;\n\n if (gap) {\n if (method === 'ceil' && this.currentTime < Math[method](start)) {\n this.currentTime = Math[method](start);\n } else if (method === 'floor' && this.currentTime > Math[method](start)) {\n this.currentTime = Math[method](start);\n }\n }\n }\n }\n }, {\n key: 'start',\n value: function start() {\n var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.config.url;\n\n if (!url || this.started) {\n return;\n }\n if (!this._context) {\n this._context = new Context(this, this.hlsOps, HlsAllowedEvents);\n }\n\n this.__core__ = this._context.registry('HLS_VOD_CONTROLLER', HlsVodController)({ player: this, container: this.video, preloadTime: this.config.preloadTime });\n this._context.init();\n this.__core__.load(url);\n this._initEvents();\n\n this.started = true;\n }\n }, {\n key: 'switchURL',\n value: function switchURL(url) {\n this.config.url = url;\n var context = new Context(this, this.hlsOps, HlsAllowedEvents);\n var hls = context.registry('HLS_VOD_CONTROLLER', HlsVodController)({\n player: this,\n container: this.video,\n mse: this.__core__.mse,\n preloadTime: this.config.preloadTime\n });\n this.newContext = context;\n this.newHls = hls;\n context.init();\n this._context.destroy();\n this.initHlsBackupEvents(hls, context);\n this.__core__.mse.cleanBuffers().then(function () {\n hls.load(url);\n });\n }\n }, {\n key: 'destroy',\n value: function destroy() {\n var _this6 = this;\n\n return new Promise(function (resolve) {\n if (_this6.__core__ && _this6.__core__.mse) {\n _this6.__core__.mse.destroy().then(function () {\n if (_this6._context) {\n _this6._context.destroy();\n }\n _get(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'destroy', _this6).call(_this6);\n resolve();\n });\n setTimeout(function () {\n resolve();\n }, 100);\n } else {\n _get(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'destroy', _this6).call(_this6);\n setTimeout(function () {\n resolve();\n }, 50);\n }\n });\n }\n }, {\n key: 'detectBufferGap',\n value: function detectBufferGap() {\n var video = this.video;\n\n var result = {\n gap: false,\n start: -1\n };\n var isStartPlay = this.currentTime === 0;\n for (var i = 0; i < video.buffered.length; i++) {\n var bufferStart = video.buffered.start(i);\n var bufferEnd = video.buffered.end(i);\n if ((!video.played.length || bufferStart <= this.currentTime && bufferEnd - this.currentTime >= 0.5) && !isStartPlay) {\n break;\n }\n var startGap = bufferStart - this.currentTime;\n var endGap = this.currentTime - bufferEnd;\n if (startGap > 0.01 && (startGap <= 2 || isStartPlay)) {\n result = {\n gap: true,\n start: bufferStart,\n method: 'ceil'\n };\n break;\n } else if (endGap > 0.1 && (endGap <= 2 || isStartPlay)) {\n result = {\n gap: true,\n start: bufferEnd,\n method: 'floor'\n };\n } else {\n result = {\n gap: false,\n start: -1\n };\n }\n }\n\n return result;\n }\n }, {\n key: 'currentTime',\n get: function get() {\n return _get(HlsVodPlayer.prototype.__proto__ || Object.getPrototypeOf(HlsVodPlayer.prototype), 'currentTime', this);\n },\n set: function set(time) {\n this._handleSetCurrentTime(time);\n }\n }, {\n key: 'src',\n get: function get() {\n return this.currentSrc;\n },\n set: function set(url) {\n var _this7 = this;\n\n this.onWaiting = this.onWaiting.bind(this);\n this.__core__.mse.destroy().then(function () {\n _this7._context.destroy();\n _this7._context = null;\n _this7.video.src = '';\n _this7.video.load();\n _this7.started = false;\n _this7.video.currentTime = 0;\n\n if (!_this7.paused) {\n _this7.pause();\n _this7.once('canplay', function () {\n _this7.play();\n });\n } else {\n _this7.play();\n }\n\n _this7.start(url);\n });\n }\n }, {\n key: 'context',\n get: function get() {\n return this._context;\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n }\n }, {\n key: 'install',\n value: function install(name, plugin) {\n return Player.install(name, plugin);\n }\n }]);\n\n return HlsVodPlayer;\n}(Player);\n\nexport default HlsVodPlayer;","/**\n * @param {number} num\n * @param {number} fixed\n * @return {number}\n */\nexport default (function (fn, wait) {\n var lastTime = Date.now();\n var timer = null;\n var isFirstTime = true;\n\n return function () {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var now = Date.now();\n if (isFirstTime) {\n lastTime = Date.now();\n isFirstTime = false;\n fn.apply(undefined, args);\n }\n if (now - lastTime > wait) {\n lastTime = now;\n fn.apply(undefined, args);\n } else {\n if (timer) {\n window.clearTimeout(timer);\n }\n timer = setTimeout(function () {\n fn.apply(undefined, args);\n }, wait);\n }\n };\n});","import HlsLivePlayer from 'xgplayer-hls-live';\nimport HlsVodPlayer from 'xgplayer-hls-vod';\nimport Player from 'xgplayer';\n\nexport default class HlsPlayer {\n constructor (config) {\n if (config.isLive) {\n return new HlsLivePlayer(config)\n } else {\n return new HlsVodPlayer(config)\n }\n }\n\n static isSupported () {\n return window.MediaSource &&\n window.MediaSource.isTypeSupported('video/mp4; codecs=\"avc1.42E01E,mp4a.40.2\"');\n }\n\n static install (name, plugin) {\n return Player.install(name, plugin)\n }\n}\n"],"names":["BROWSER_EVENTS","PLAYER_EVENTS","LOADER_EVENTS","DEMUX_EVENTS","REMUX_EVENTS","MSE_EVENTS","HLS_EVENTS","ALLEVENTS","Object","assign","FlvAllowedEvents","HlsAllowedEvents","key","hasOwnProperty","push","_key","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","defineProperty","Constructor","protoProps","staticProps","prototype","Playlist","configs","instance","TypeError","this","_baseURL","_list","_ts","version","sequence","targetduration","duration","fragLength","_lastget","undefined","end","autoclear","logger","downloadedUrls","_avgSegmentDuration","tsURL","discontinue","id","cc","isLast","url","start","time","data","frags","fragLen","Math","floor","deletepre","Error","min","_calcAvgFrgmentDuration","encrypt","len","log","newfraglist","frag","indexOf","tslist","getTsList","_i","deleteFrag","keys","tsname","isloaded","ts","downloaded","loading","downloading","name","timelist","sort","a","b","parseFloat","parseInt","Number","found","list","l","baseURL","clear","get","_classCallCheck","RemuxedBuffer","mimetype","init","bufferDuration","RemuxedBufferManager","sources","XGDataView","buffer","ArrayBuffer","dataview","DataView","position","count","offset","getUint8","loop","last","readByte","value","Uint8Array","byteLength","size","sign","res","getInt8","getInt16","getUint16","getInt32","getUint32","_possibleConstructorReturn","self","call","ReferenceError","_inherits","subClass","superClass","create","constructor","setPrototypeOf","__proto__","Track","sequenceNumber","samples","droppedSamples","reset","AudioTrack","_Track","_this","getPrototypeOf","TAG","type","VideoTrack","_Track2","_this2","dropped","Tracks","audioTrack","videoTrack","XgBuffer","historyLen","array","_shiftBuffer","_ret","slice","shift","_ret2","ret","tmpoff","tmp","set","templength","retInt","AudioTrackMeta","meta","_default","VideoTrackMeta","sps","pps","AudioSample","info","getDefault","VideoSample","isObjectFilled","obj","MediaInfo","mimeType","hasVideo","video","hasAudio","audio","isBaseInfoReady","isVideoReady","isAudioReady","mediaInfo","TsFrag","merged","has","prefix","Events","EE","fn","context","once","addListener","emitter","event","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","eventNames","events","names","getOwnPropertySymbols","concat","listeners","handlers","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","args","arguments","removeListener","apply","j","on","removeAllListeners","off","prefixed","_get","object","property","receiver","Function","desc","getOwnPropertyDescriptor","parent","getter","DIRECT_EMIT_FLAG","Context","player","allowedEvents","_emitter","_instanceMap","_clsMap","_inited","_configs","_player","_hooks","tag","_len","c","d","newInstance","config","initInstance","cls","checkMessageName","_isMessageNameValid","bind","enhanced","_cls","onceListeners","_context","messageName","callback","beforeList","_len2","_key2","_len3","_key3","hasOwn","callbacks","_messageName","_callbacks","_callback","removeListeners","v","_len4","_key4","EVENTS","SEEK","_this3","forEach","destroy","destroyInstances","CRYPTO_EVENTS","Crypto","inputBuffer","inputbuffer","outputBuffer","outputbuffer","iv","method","crypto","window","msCrypto","START_DECRYPTO","decrypto","aeskey","decryptoData","subtle","importKey","then","getInstance","decrypt","DECRYPTED","MSE","container","format","mediaSource","sourceBuffers","preloadTime","onSourceOpen","onTimeUpdate","onUpdateEnd","onWaiting","opened","MediaSource","addEventListener","_url","newCtx","keepBuffer","updating","clearBuffer","addSourceBuffers","SOURCE_UPDATE_END","doAppend","readyState","tracks","track","add","k","_k","_type","source","mime","sourceBuffer","addSourceBuffer","e","code","MSE_WRONG_TRACK_ADD","MSE_ERROR","message","sourceBufferLen","_doCleanupSourceBuffer","inited","appendBuffer","unshift","endOfStream","remove","currentTime","_pendingRemoveRanges","buffered","doRemove","removeEnd","_doRemoveRanges","sb","ranges","range","taskList","_loop","task","Promise","resolve","doCleanBuffer","retryTime","clean","removeEventListener","all","_loop2","removeBuffers","_buffer","removeSourceBuffer","URL","revokeObjectURL","noaudio","novideo","val","createObjectURL","bEnd","Speed","_firstCheckpoint","_lastCheckpoint","_intervalBytes","_lastSamplingBytes","_now","Date","now","bytes","addBytes","durationSeconds","currentKBps","_typeof","Symbol","_typeof2","iterator","FetchLoader","status","error","_reader","_canceled","_destroyed","readtype","_loaderTaskNo","_ttfb","_speed","AbortController","abortControllerEnabled","LADER_START","load","_fetch","fetch","_x","_x2","_x3","toString","params","timeout","timer","abortController","signal","getTime","race","reject","setTimeout","abort","response","LOADER_TTFB","retryTimes","totalRetry","delayTime","loadTimeout","LOADER_RESPONSE_HEADERS","headers","ok","_onFetchResponse","_retryTimer","LOADER_RETRY","internalLoad","LOADER_ERROR","statusText","catch","opts","_ref","retryCount","retryDelay","getParams","_this4","taskno","json","LOADER_COMPLETE","text","arrayBuffer","_onReader","body","getReader","reader","_this5","cancel","_noDataTimer","read","done","LOADER_DATALOADED","options","Headers","configHeaders","append","optHeaders","cors","mode","withCredentials","credentials","lastSamplingKBps","DevLogger","matched","exec","document","cookie","_status","_level","funName","arg1","arg2","arg3","arg4","arg5","arg6","arg7","arg8","arg9","arg10","_console","tagName","filter","x","console","arr","isArray","arr2","from","_toConsumableArray","CRYTO_EVENTS","MASTER_PLAYLIST_REGEX","HlsLiveController","_playlist","retrytimes","_m3u8lasttime","_timmer","setInterval","_checkStatus","_lastCheck","m3u8Text","_player$hlsOps","hlsOps","Compatibility","TsDemuxer","Mp4Remuxer","Mse","registry","_m3u8loader","_tsloader","mse","initEvents","_onLoadComplete","_handleFetchRetry","INIT_SEGMENT","MEDIA_SEGMENT","METADATA_PARSED","_onMetadataParsed","SEI_PARSED","_handleSEIParsed","DEMUX_COMPLETE","_onDemuxComplete","_onLoadError","DEMUX_ERROR","_onDemuxError","REMUX_ERROR","_onRemuxError","_handleMseError","mod","err","fatal","REMUX_MEDIA","REMUX_METADATA","loader","_onError","RETRY_TIME_EXCEEDED","sei","mdata","result","M3U8Parser","parse","_preload","pushM3U8","uri","_keyLoader","retry","times","delay","emitTo","_m3u8Loaded","DEMUX_START","START_DECRYPT","_crypto","ivb","_onDcripted","bufferstart","bufferend","getTs","_ref2","current","AAC","codec","channelCount","ADTS","isHeaderPattern","samplerate","pts","frameIndex","frameDuration","headerLength","frameLength","getHeaderLength","getFullFrameLength","stamp","sampleRate","getFrameDuration","header","parseFrameHeader","sample","subarray","Golomb","uint8array","_bufferIndex","_totalBytes","_totalBits","_currentWord","_currentWordBitsLeft","bufferBytesLeft","bytesRead","word","bits","valu","_fillCurrentWord","readBits","zeroCount","_skipLeadingZero","leadingZeros","readUEG","SPSParser","src","srcLength","dst","dstIdx","rbsp","_ebsp2rbsp","gb","profileIdc","levelIdc","profile_string","getProfileString","level_string","getLevelString","chroma_format_idc","chroma_format","bit_depth","readBool","scaling_list_count","_skipScalingList","pic_order_cnt_type","readSEG","num_ref_frames_in_pic_order_cnt_cycle","pic_width_in_mbs_minus1","pic_height_in_map_units_minus1","frame_mbs_only_flag","frame_crop_left_offset","frame_crop_right_offset","frame_crop_top_offset","frame_crop_bottom_offset","par_width","par_height","fps","fps_fixed","fps_num","fps_den","aspect_ratio_idc","num_units_in_tick","time_scale","parScale","crop_unit_x","crop_unit_y","codec_width","codec_height","present_width","ceil","getChromaFormatString","lastScale","nextScale","toFixed","chroma","spsConfig","codec_size","codecWidth","width","codecHeight","height","presentWidth","present_size","presentHeight","profile","level","bitDepth","chromaFormat","parRatio","par_ratio","frameRate","frame_rate","fpsDen","fpsNum","refSampleDuration","timescale","RBSP","el","idx","lastByte","u8aToString","String","fromCharCode","SEIParser","EBSP2SODB","EBSP2RBSP","sodb","_resolveNalu","_SEIParser$switchPayl","switchPayloadType","payloadType","content","user_data_unregistered","dv","payloadLength","_SEIParser$getPayload","getPayloadLength","payload","Nalunit","buf","getAnnexbNals","getAvccNals","nals","getHeaderPositionAnnexB","pos","skip","unit","analyseNal","ndr","idr","SpsParser","parseSPS","bufferLen","maxSubLayersMinus1","chromaFormatIdc","conformanceWindowFlag","bitDepthLumaMinus8","bitDepthChromaMinus8","profileTierLevel","separate_colour_plane_flag","conf_win_left_offset","conf_win_right_offset","conf_win_top_offset","conf_win_bottom_offset","sub_width_c","sub_height_c","_readProfileTierLevel","general_profile_space","general_tier_flag","general_profile_idc","general_level_idc","subLayerProfilePresentFlag","subLayerLevelPresentFlag","getHvccNals","slice_trail_n","slice_trail_r","slice_tsa_n","slice_tsa_r","slice_stsa_n","slice_stsa_r","slice_radl_n","slice_radl_r","slice_rasl_n","slice_rasl_r","slice_bla_w_lp","slice_bla_w_radl","slice_bla_n_lp","slice_idl_w_radl","slice_idr_n_lp","slice_cra_nut","vps","aud","eob","fd","nextAudioDts","nextVideoDts","lastAudioSamplesLen","lastVideoSamplesLen","lastVideoDts","lastAudioDts","allAudioSamplesCount","allVideoSamplesCount","_firstAudioSample","_firstVideoSample","filledAudioSamples","filledVideoSamples","_lastSegmentId","_currentSegmentId","videoLastSample","audioLastSample","___videoLargeGap","DETECT_LARGE_GAP","___audioLargeGap","audioUnsyncTime","before","doFix","_audioLargeGap","_videoLargeGap","ops","vSamp0","aSamp0","avDelta","long","dts","_getFirstSample","getFirstSample","isFirstAudioSamples","isFirstVideoSamples","recordSamplesCount","fixVideoRefSampleDuration","_Compatibility$detect","detectChangeStream","videoChanged","changed","videoChangedIdxes","changedIdxes","disContinue","fixChangeStreamVideo","doFixVideo","_isSegmentsContinuous","DETECT_FRAG_ID_DISCONTINUE","_appendSampleForLastSegment","_Compatibility$detect2","audioChanged","audioChangedIdxes","_disContinue","fixChangeStreamAudio","doFixAudio","sam0","removeInvalidSamples","first","streamChangeStart","_videoTrack","videoSamples","originDts","originPts","firstSample","detectVideoLargeGap","doFixLargeGap","preVideoGap","DETECT_CHANGE_STREAM_DISCONTINUE","prevDts","curDts","videoFirstDts","gap","fillCount","_i2","clonedFirstSample","cts","abs","segLen","_i3","pre","curLastSample","pop","_sample","refDuration","_i4","sam","_audioTrack","audioSamples","fixAudioRefSampleDuration","samplesLen","silentFrame","getSilentFrame","originCodec","iRefSampleDuration","_firstSample","audioDtsBase","detectAudioLargeGap","preAudioGap","lastAudioOriginDts","isContinue","videoFirstPts","_gap","silentSampleCount","warn","_i5","silentSample","firstDts","absGap","silentFrameCount","_i6","computed","_silentSample","DETECT_AUDIO_GAP","DETECT_AUDIO_OVERLAP","nextDts","_i7","_sample2","delta","splice","missingCount","round","_silentSample2","unSyncDuration","_lastSample","lastSample","lastDuration","sortAudioSamples","changeIdx","getStreamChangeStart","DETECT_CHANGE_STREAM","firstPartSamples","secondPartSamples","changeSample","videoDtsBase","cacheNextAudioDts","findFirstVideoSample","findFirstAudioSample","allSamplesCount","filledSamplesCount","isRefSampleDurationValid","durationAvg","_fixed","lastDts","fixed","firstAudioSample","firstVideoSample","index","dtsBase","Infinity","remuxer","_dtsBase","_audioDtsBase","_videoDtsBase","isNaN","sorted","isKeyframe","firstSampleDts","isFirst","_slicedToArray","_arr","_n","_d","_e","_s","next","sliceIterator","NalUnit","avc","NalUnitHEVC","hevc","StreamType","_EventEmitter","demuxing","pat","pmt","_hasVideoMeta","_hasAudioMeta","gopId","isVod","peses","tsStream","pes","pid","streamType","ES","stream","AudioOptions","VideoOptions","noAudio","noVideo","epeses","cPes","isAAC","mergeAudioES","pushAudioSample","mergeVideoES","pushVideoSampleHEVC","pushVideoSample","spsFound","frequence","channel","audioObjectType","originAudioObjectType","audioConfig","frequencyIndex","audioSampleRate","metaEqual","compareMeta","pesHeaderLength","streamChanged","isHeader","frame","appendFrame","AUDIO_SAMPLE_PARSED","getNalunits","sampleLength","seiList","nal","h","sarRatio","sar_ratio","avcc","getAvcc","_nal","purePts","VIDEO_SAMPLE_PARSED","hasVPS","hasSPS","hasPPS","firstInGop","_nal2","al","bl","ignoreDuration","itema","itemb","compareArray","buffers","readHeader","readPayload","packet","unknownPIDs","PES","PAT","CAT","TSDT","isPMT","PMT","sts","Media","sync","readUint8","readUint16","priority","scrambling","adaptation","continuity","tabelID","zero","sectionLength","streamID","sectionNumber","lastSectionNumber","N","programNumber","program","tableEnd","_StreamType$streamTyp","adaptationLength","access","PCR","OPCR","splicePoint","transportPrivate","adaptationField","_start","programClockBase","readUint32","programClockExtension","originProgramClockBase","originProgramClockExtension","spliceCountdown","transportPrivateData","_length","_next","piecewise","seamless","ltwValid","ltwOffset","readUint24","piecewiseRate","readInt8","spliceType","dtsNextAU1","marker1","dtsNextAU2","marker2","dtsNextAU3","lastStuffing","packetLength","_next2","ptsDTSFlag","escrFlag","esRateFlag","dsmFlag","additionalFlag","crcFlag","extensionFlag","N1","p","escr","ex","esRate","additionalCopyInfo","pesCRC","parseADTSHeader","layer","absent","getAudioConfig","tableID","sectionIndicator","currentNextIndicator","crc32","userAgent","navigator","toLowerCase","extensionSampleIndex","test","demuxer","demux","Demuxer","onMetaDataParsed","onVideoSampleParsed","onAudioSampleParsed","_tracks","initDemuxer","ISKEYFRAME","REGEXP_ABSOLUTE_URL","REGEXP_URL_PAIR","baseurl","split","refs","ref","match","nextDiscontinue","nextId","refm","refd","parseFrag","parseDecrypt","nextline","parentUrl","pairs","getAbsoluteUrl","cmd","im","substr","exports","ResultConstructor","totalLength","arrays","_iteratorNormalCompletion","_didIteratorError","_iteratorError","_step","_iterator","return","_iteratorNormalCompletion2","_didIteratorError2","_iteratorError2","_step2","_iterator2","_concat2","_concat","__esModule","default","module","Buffer","item","Concat","temp","num","padStart","Fmp4","writeUint32","write","flag","initBox","mvhd","trak","videoTrak","audioTrak","mvex","tkhd","mdia","mediaTime","mdhd","hdlr","minf","extension","vmhd","smhd","dinf","stbl","stsd","stts","stsc","stsz","stco","mp4a","hvc1","avc1","esds","configlen","hSpacing","vSpacing","btrt","pasp","trackID","mehd","trex","mfhd","traf","tfhd","tfdt","sdtp","trun","sdtpLength","sampleCount","flags","isLeading","dependsOn","isDependedOn","hasRedundancy","isNonSync","mdatBox","charCodeAt","videoMeta","audioMeta","curTime","_videoMeta","_audioMeta","_isDtsBaseInited","isFirstVideo","isFirstAudio","videoAllDuration","audioAllDuration","audioRemuxed","videoRemuxed","mp4Durations","calcDtsBase","remuxVideo","remuxAudio","groupEnd","initSegment","ftyp","ftypHEVC","moov","audioBase","videoBase","_firstSample2","mp4Samples","maxLoop","avcSample","remuxInitSegment","max","mdatSample","sampleDuration","RANDOM_ACCESS_POINT","moofMdat","moof","mdat","segmentRemuxed","TRACK_REMUXED","isFirstDtsInited","refSampleDurationFixed","mp4Sample","_curTime","initRemuxer","remux","onMetaDataReady","resetDtsBase","seek","Remuxer","writeToSource","onTrackRemuxed","_context$getInstance","presourcebuffer","getSource","createSource","util","Player","HlsLivePlayer","_Player","defaultConfig","deepCopy","_played","__core__","started","live","createDom","addClass","root","controls","appendChild","_initEvents","play","prom","isTypeSupported","plugin","install","analyzed","nalsLength","_isHEVC","reduce","newData","onDemuxComplete","_setMetaToAudio","_setMetaToVideo","setAudioMeta","setVideoMeta","handleEnded","_player$hlsOps2","mediaType","videoConfig","preloadtime","playerInited","initPlayer","wasmSupported","isComponentDefined","customElements","define","style","outline","addLiveFlag","findDom","isDelDOM","removeChild","HlsLiveMobilePlayer","isSupported","useWASM","HlsLiveMsePlayer","HlsVodController","_lastSeekTime","_tsBuffer","_presource","_compat","_demuxer","_onLoaderCompete","_onInitSegment","_onMediaSegment","_onUpdateEnd","_onTimeUpdate","_onWaiting","_seekToBufferStart","playList","playListLen","bufferStart","_checkEnd","m","_logDownSegment","_frag","clearDownloaded","currentbufferend","_frag2","getLastDownloadedTs","curFragTime","loopMax","bufferEnd","bufferClearTimer","group","_set","setter","debounce","wait","lastTime","isFirstTime","clearTimeout","HlsVodPlayer","_handleSetCurrentTime","cleanBuffers","replay","Errors","_onSourceUpdateEnd","autoplay","hls","ctx","resetContext","_detectBufferGap","detectBufferGap","newContext","newHls","initHlsBackupEvents","_this6","isStartPlay","played","startGap","endGap","currentSrc","_this7","paused","pause","isLive"],"mappings":"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"}