{"version":3,"file":"371-bundle.js","mappings":"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","sources":["webpack://client/./node_modules/@videojs/xhr/lib/http-handler.js","webpack://client/./node_modules/@videojs/xhr/lib/index.js","webpack://client/./node_modules/@xmldom/xmldom/lib/conventions.js","webpack://client/./node_modules/@xmldom/xmldom/lib/dom-parser.js","webpack://client/./node_modules/@xmldom/xmldom/lib/dom.js","webpack://client/./node_modules/@xmldom/xmldom/lib/entities.js","webpack://client/./node_modules/@xmldom/xmldom/lib/index.js","webpack://client/./node_modules/@xmldom/xmldom/lib/sax.js","webpack://client/./node_modules/global/document.js","webpack://client/./node_modules/global/window.js","webpack://client/./node_modules/is-function/index.js","webpack://client/./node_modules/keycode/index.js","webpack://client/./node_modules/mux.js/lib/tools/parse-sidx.js","webpack://client/./node_modules/mux.js/lib/utils/clock.js","webpack://client/./node_modules/mux.js/lib/utils/numbers.js","webpack://client/./node_modules/safe-json-parse/tuple.js","webpack://client/./node_modules/url-toolkit/src/url-toolkit.js","webpack://client/./node_modules/@babel/runtime/helpers/esm/extends.js","webpack://client/./node_modules/@videojs/vhs-utils/es/resolve-url.js","webpack://client/./node_modules/m3u8-parser/node_modules/@videojs/vhs-utils/es/stream.js","webpack://client/./node_modules/m3u8-parser/node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","webpack://client/./node_modules/m3u8-parser/dist/m3u8-parser.es.js","webpack://client/./node_modules/@videojs/vhs-utils/es/codecs.js","webpack://client/./node_modules/@videojs/vhs-utils/es/byte-helpers.js","webpack://client/./node_modules/@videojs/vhs-utils/es/media-types.js","webpack://client/./node_modules/@videojs/vhs-utils/es/decode-b64-to-uint8-array.js","webpack://client/./node_modules/mpd-parser/dist/mpd-parser.es.js","webpack://client/./node_modules/@videojs/vhs-utils/es/media-groups.js","webpack://client/./node_modules/@videojs/vhs-utils/es/mp4-helpers.js","webpack://client/./node_modules/@videojs/vhs-utils/es/id3-helpers.js","webpack://client/./node_modules/@videojs/vhs-utils/es/opus-helpers.js","webpack://client/./node_modules/@videojs/vhs-utils/es/ebml-helpers.js","webpack://client/./node_modules/@videojs/vhs-utils/es/nal-helpers.js","webpack://client/./node_modules/@videojs/vhs-utils/es/containers.js","webpack://client/./node_modules/video.js/dist/video.es.js","webpack://client/./node_modules/videojs-vtt.js/lib/browser-index.js","webpack://client/./node_modules/videojs-vtt.js/lib/vtt.js","webpack://client/./node_modules/videojs-vtt.js/lib/vttcue.js","webpack://client/./node_modules/videojs-vtt.js/lib/vttregion.js","webpack://client/./node_modules/@babel/runtime/helpers/extends.js"],"sourcesContent":["\"use strict\";\n\nvar window = require('global/window');\n\nvar httpResponseHandler = function httpResponseHandler(callback, decodeResponseBody) {\n if (decodeResponseBody === void 0) {\n decodeResponseBody = false;\n }\n\n return function (err, response, responseBody) {\n // if the XHR failed, return that error\n if (err) {\n callback(err);\n return;\n } // if the HTTP status code is 4xx or 5xx, the request also failed\n\n\n if (response.statusCode >= 400 && response.statusCode <= 599) {\n var cause = responseBody;\n\n if (decodeResponseBody) {\n if (window.TextDecoder) {\n var charset = getCharset(response.headers && response.headers['content-type']);\n\n try {\n cause = new TextDecoder(charset).decode(responseBody);\n } catch (e) {}\n } else {\n cause = String.fromCharCode.apply(null, new Uint8Array(responseBody));\n }\n }\n\n callback({\n cause: cause\n });\n return;\n } // otherwise, request succeeded\n\n\n callback(null, responseBody);\n };\n};\n\nfunction getCharset(contentTypeHeader) {\n if (contentTypeHeader === void 0) {\n contentTypeHeader = '';\n }\n\n return contentTypeHeader.toLowerCase().split(';').reduce(function (charset, contentType) {\n var _contentType$split = contentType.split('='),\n type = _contentType$split[0],\n value = _contentType$split[1];\n\n if (type.trim() === 'charset') {\n return value.trim();\n }\n\n return charset;\n }, 'utf-8');\n}\n\nmodule.exports = httpResponseHandler;","\"use strict\";\n\nvar window = require(\"global/window\");\n\nvar _extends = require(\"@babel/runtime/helpers/extends\");\n\nvar isFunction = require('is-function');\n\ncreateXHR.httpHandler = require('./http-handler.js');\n/**\n * @license\n * slighly modified parse-headers 2.0.2 \n * Copyright (c) 2014 David Björklund\n * Available under the MIT license\n * \n */\n\nvar parseHeaders = function parseHeaders(headers) {\n var result = {};\n\n if (!headers) {\n return result;\n }\n\n headers.trim().split('\\n').forEach(function (row) {\n var index = row.indexOf(':');\n var key = row.slice(0, index).trim().toLowerCase();\n var value = row.slice(index + 1).trim();\n\n if (typeof result[key] === 'undefined') {\n result[key] = value;\n } else if (Array.isArray(result[key])) {\n result[key].push(value);\n } else {\n result[key] = [result[key], value];\n }\n });\n return result;\n};\n\nmodule.exports = createXHR; // Allow use of default import syntax in TypeScript\n\nmodule.exports.default = createXHR;\ncreateXHR.XMLHttpRequest = window.XMLHttpRequest || noop;\ncreateXHR.XDomainRequest = \"withCredentials\" in new createXHR.XMLHttpRequest() ? createXHR.XMLHttpRequest : window.XDomainRequest;\nforEachArray([\"get\", \"put\", \"post\", \"patch\", \"head\", \"delete\"], function (method) {\n createXHR[method === \"delete\" ? \"del\" : method] = function (uri, options, callback) {\n options = initParams(uri, options, callback);\n options.method = method.toUpperCase();\n return _createXHR(options);\n };\n});\n\nfunction forEachArray(array, iterator) {\n for (var i = 0; i < array.length; i++) {\n iterator(array[i]);\n }\n}\n\nfunction isEmpty(obj) {\n for (var i in obj) {\n if (obj.hasOwnProperty(i)) return false;\n }\n\n return true;\n}\n\nfunction initParams(uri, options, callback) {\n var params = uri;\n\n if (isFunction(options)) {\n callback = options;\n\n if (typeof uri === \"string\") {\n params = {\n uri: uri\n };\n }\n } else {\n params = _extends({}, options, {\n uri: uri\n });\n }\n\n params.callback = callback;\n return params;\n}\n\nfunction createXHR(uri, options, callback) {\n options = initParams(uri, options, callback);\n return _createXHR(options);\n}\n\nfunction _createXHR(options) {\n if (typeof options.callback === \"undefined\") {\n throw new Error(\"callback argument missing\");\n }\n\n var called = false;\n\n var callback = function cbOnce(err, response, body) {\n if (!called) {\n called = true;\n options.callback(err, response, body);\n }\n };\n\n function readystatechange() {\n if (xhr.readyState === 4) {\n setTimeout(loadFunc, 0);\n }\n }\n\n function getBody() {\n // Chrome with requestType=blob throws errors arround when even testing access to responseText\n var body = undefined;\n\n if (xhr.response) {\n body = xhr.response;\n } else {\n body = xhr.responseText || getXml(xhr);\n }\n\n if (isJson) {\n try {\n body = JSON.parse(body);\n } catch (e) {}\n }\n\n return body;\n }\n\n function errorFunc(evt) {\n clearTimeout(timeoutTimer);\n\n if (!(evt instanceof Error)) {\n evt = new Error(\"\" + (evt || \"Unknown XMLHttpRequest Error\"));\n }\n\n evt.statusCode = 0;\n return callback(evt, failureResponse);\n } // will load the data & process the response in a special response object\n\n\n function loadFunc() {\n if (aborted) return;\n var status;\n clearTimeout(timeoutTimer);\n\n if (options.useXDR && xhr.status === undefined) {\n //IE8 CORS GET successful response doesn't have a status field, but body is fine\n status = 200;\n } else {\n status = xhr.status === 1223 ? 204 : xhr.status;\n }\n\n var response = failureResponse;\n var err = null;\n\n if (status !== 0) {\n response = {\n body: getBody(),\n statusCode: status,\n method: method,\n headers: {},\n url: uri,\n rawRequest: xhr\n };\n\n if (xhr.getAllResponseHeaders) {\n //remember xhr can in fact be XDR for CORS in IE\n response.headers = parseHeaders(xhr.getAllResponseHeaders());\n }\n } else {\n err = new Error(\"Internal XMLHttpRequest Error\");\n }\n\n return callback(err, response, response.body);\n }\n\n var xhr = options.xhr || null;\n\n if (!xhr) {\n if (options.cors || options.useXDR) {\n xhr = new createXHR.XDomainRequest();\n } else {\n xhr = new createXHR.XMLHttpRequest();\n }\n }\n\n var key;\n var aborted;\n var uri = xhr.url = options.uri || options.url;\n var method = xhr.method = options.method || \"GET\";\n var body = options.body || options.data;\n var headers = xhr.headers = options.headers || {};\n var sync = !!options.sync;\n var isJson = false;\n var timeoutTimer;\n var failureResponse = {\n body: undefined,\n headers: {},\n statusCode: 0,\n method: method,\n url: uri,\n rawRequest: xhr\n };\n\n if (\"json\" in options && options.json !== false) {\n isJson = true;\n headers[\"accept\"] || headers[\"Accept\"] || (headers[\"Accept\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n if (method !== \"GET\" && method !== \"HEAD\") {\n headers[\"content-type\"] || headers[\"Content-Type\"] || (headers[\"Content-Type\"] = \"application/json\"); //Don't override existing accept header declared by user\n\n body = JSON.stringify(options.json === true ? body : options.json);\n }\n }\n\n xhr.onreadystatechange = readystatechange;\n xhr.onload = loadFunc;\n xhr.onerror = errorFunc; // IE9 must have onprogress be set to a unique function.\n\n xhr.onprogress = function () {// IE must die\n };\n\n xhr.onabort = function () {\n aborted = true;\n };\n\n xhr.ontimeout = errorFunc;\n xhr.open(method, uri, !sync, options.username, options.password); //has to be after open\n\n if (!sync) {\n xhr.withCredentials = !!options.withCredentials;\n } // Cannot set timeout with sync request\n // not setting timeout on the xhr object, because of old webkits etc. not handling that correctly\n // both npm's request and jquery 1.x use this kind of timeout, so this is being consistent\n\n\n if (!sync && options.timeout > 0) {\n timeoutTimer = setTimeout(function () {\n if (aborted) return;\n aborted = true; //IE9 may still call readystatechange\n\n xhr.abort(\"timeout\");\n var e = new Error(\"XMLHttpRequest timeout\");\n e.code = \"ETIMEDOUT\";\n errorFunc(e);\n }, options.timeout);\n }\n\n if (xhr.setRequestHeader) {\n for (key in headers) {\n if (headers.hasOwnProperty(key)) {\n xhr.setRequestHeader(key, headers[key]);\n }\n }\n } else if (options.headers && !isEmpty(options.headers)) {\n throw new Error(\"Headers cannot be set on an XDomainRequest object\");\n }\n\n if (\"responseType\" in options) {\n xhr.responseType = options.responseType;\n }\n\n if (\"beforeSend\" in options && typeof options.beforeSend === \"function\") {\n options.beforeSend(xhr);\n } // Microsoft Edge browser sends \"undefined\" when send is called with undefined value.\n // XMLHttpRequest spec says to pass null as body to indicate no body\n // See https://github.com/naugtur/xhr/issues/100.\n\n\n xhr.send(body || null);\n return xhr;\n}\n\nfunction getXml(xhr) {\n // xhr.responseXML will throw Exception \"InvalidStateError\" or \"DOMException\"\n // See https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseXML.\n try {\n if (xhr.responseType === \"document\") {\n return xhr.responseXML;\n }\n\n var firefoxBugTakenEffect = xhr.responseXML && xhr.responseXML.documentElement.nodeName === \"parsererror\";\n\n if (xhr.responseType === \"\" && !firefoxBugTakenEffect) {\n return xhr.responseXML;\n }\n } catch (e) {}\n\n return null;\n}\n\nfunction noop() {}","'use strict'\n\n/**\n * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.\n *\n * Works with anything that has a `length` property and index access properties, including NodeList.\n *\n * @template {unknown} T\n * @param {Array | ({length:number, [number]: T})} list\n * @param {function (item: T, index: number, list:Array | ({length:number, [number]: T})):boolean} predicate\n * @param {Partial>?} ac `Array.prototype` by default,\n * \t\t\t\tallows injecting a custom implementation in tests\n * @returns {T | undefined}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find\n * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find\n */\nfunction find(list, predicate, ac) {\n\tif (ac === undefined) {\n\t\tac = Array.prototype;\n\t}\n\tif (list && typeof ac.find === 'function') {\n\t\treturn ac.find.call(list, predicate);\n\t}\n\tfor (var i = 0; i < list.length; i++) {\n\t\tif (Object.prototype.hasOwnProperty.call(list, i)) {\n\t\t\tvar item = list[i];\n\t\t\tif (predicate.call(undefined, item, i, list)) {\n\t\t\t\treturn item;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * \"Shallow freezes\" an object to render it immutable.\n * Uses `Object.freeze` if available,\n * otherwise the immutability is only in the type.\n *\n * Is used to create \"enum like\" objects.\n *\n * @template T\n * @param {T} object the object to freeze\n * @param {Pick = Object} oc `Object` by default,\n * \t\t\t\tallows to inject custom object constructor for tests\n * @returns {Readonly}\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze\n */\nfunction freeze(object, oc) {\n\tif (oc === undefined) {\n\t\toc = Object\n\t}\n\treturn oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object\n}\n\n/**\n * Since we can not rely on `Object.assign` we provide a simplified version\n * that is sufficient for our needs.\n *\n * @param {Object} target\n * @param {Object | null | undefined} source\n *\n * @returns {Object} target\n * @throws TypeError if target is not an object\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign\n */\nfunction assign(target, source) {\n\tif (target === null || typeof target !== 'object') {\n\t\tthrow new TypeError('target is not an object')\n\t}\n\tfor (var key in source) {\n\t\tif (Object.prototype.hasOwnProperty.call(source, key)) {\n\t\t\ttarget[key] = source[key]\n\t\t}\n\t}\n\treturn target\n}\n\n/**\n * All mime types that are allowed as input to `DOMParser.parseFromString`\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec\n * @see DOMParser.prototype.parseFromString\n */\nvar MIME_TYPE = freeze({\n\t/**\n\t * `text/html`, the only mime type that triggers treating an XML document as HTML.\n\t *\n\t * @see DOMParser.SupportedType.isHTML\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec\n\t */\n\tHTML: 'text/html',\n\n\t/**\n\t * Helper method to check a mime type if it indicates an HTML document\n\t *\n\t * @param {string} [value]\n\t * @returns {boolean}\n\t *\n\t * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/HTML Wikipedia\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN\n\t * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring \t */\n\tisHTML: function (value) {\n\t\treturn value === MIME_TYPE.HTML\n\t},\n\n\t/**\n\t * `application/xml`, the standard mime type for XML documents.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_APPLICATION: 'application/xml',\n\n\t/**\n\t * `text/html`, an alias for `application/xml`.\n\t *\n\t * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303\n\t * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration\n\t * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia\n\t */\n\tXML_TEXT: 'text/xml',\n\n\t/**\n\t * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,\n\t * but is parsed as an XML document.\n\t *\n\t * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec\n\t * @see https://en.wikipedia.org/wiki/XHTML Wikipedia\n\t */\n\tXML_XHTML_APPLICATION: 'application/xhtml+xml',\n\n\t/**\n\t * `image/svg+xml`,\n\t *\n\t * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration\n\t * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1\n\t * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia\n\t */\n\tXML_SVG_IMAGE: 'image/svg+xml',\n})\n\n/**\n * Namespaces that are used in this code base.\n *\n * @see http://www.w3.org/TR/REC-xml-names\n */\nvar NAMESPACE = freeze({\n\t/**\n\t * The XHTML namespace.\n\t *\n\t * @see http://www.w3.org/1999/xhtml\n\t */\n\tHTML: 'http://www.w3.org/1999/xhtml',\n\n\t/**\n\t * Checks if `uri` equals `NAMESPACE.HTML`.\n\t *\n\t * @param {string} [uri]\n\t *\n\t * @see NAMESPACE.HTML\n\t */\n\tisHTML: function (uri) {\n\t\treturn uri === NAMESPACE.HTML\n\t},\n\n\t/**\n\t * The SVG namespace.\n\t *\n\t * @see http://www.w3.org/2000/svg\n\t */\n\tSVG: 'http://www.w3.org/2000/svg',\n\n\t/**\n\t * The `xml:` namespace.\n\t *\n\t * @see http://www.w3.org/XML/1998/namespace\n\t */\n\tXML: 'http://www.w3.org/XML/1998/namespace',\n\n\t/**\n\t * The `xmlns:` namespace\n\t *\n\t * @see https://www.w3.org/2000/xmlns/\n\t */\n\tXMLNS: 'http://www.w3.org/2000/xmlns/',\n})\n\nexports.assign = assign;\nexports.find = find;\nexports.freeze = freeze;\nexports.MIME_TYPE = MIME_TYPE;\nexports.NAMESPACE = NAMESPACE;\n","var conventions = require(\"./conventions\");\nvar dom = require('./dom')\nvar entities = require('./entities');\nvar sax = require('./sax');\n\nvar DOMImplementation = dom.DOMImplementation;\n\nvar NAMESPACE = conventions.NAMESPACE;\n\nvar ParseError = sax.ParseError;\nvar XMLReader = sax.XMLReader;\n\n/**\n * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:\n *\n * > XML parsed entities are often stored in computer files which,\n * > for editing convenience, are organized into lines.\n * > These lines are typically separated by some combination\n * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).\n * >\n * > To simplify the tasks of applications, the XML processor must behave\n * > as if it normalized all line breaks in external parsed entities (including the document entity)\n * > on input, before parsing, by translating all of the following to a single #xA character:\n * >\n * > 1. the two-character sequence #xD #xA\n * > 2. the two-character sequence #xD #x85\n * > 3. the single character #x85\n * > 4. the single character #x2028\n * > 5. any #xD character that is not immediately followed by #xA or #x85.\n *\n * @param {string} input\n * @returns {string}\n */\nfunction normalizeLineEndings(input) {\n\treturn input\n\t\t.replace(/\\r[\\n\\u0085]/g, '\\n')\n\t\t.replace(/[\\r\\u0085\\u2028]/g, '\\n')\n}\n\n/**\n * @typedef Locator\n * @property {number} [columnNumber]\n * @property {number} [lineNumber]\n */\n\n/**\n * @typedef DOMParserOptions\n * @property {DOMHandler} [domBuilder]\n * @property {Function} [errorHandler]\n * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing\n * \t\t\t\t\t\tdefaults to `normalizeLineEndings`\n * @property {Locator} [locator]\n * @property {Record} [xmlns]\n *\n * @see normalizeLineEndings\n */\n\n/**\n * The DOMParser interface provides the ability to parse XML or HTML source code\n * from a string into a DOM `Document`.\n *\n * _xmldom is different from the spec in that it allows an `options` parameter,\n * to override the default behavior._\n *\n * @param {DOMParserOptions} [options]\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser\n * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization\n */\nfunction DOMParser(options){\n\tthis.options = options ||{locator:{}};\n}\n\nDOMParser.prototype.parseFromString = function(source,mimeType){\n\tvar options = this.options;\n\tvar sax = new XMLReader();\n\tvar domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler\n\tvar errorHandler = options.errorHandler;\n\tvar locator = options.locator;\n\tvar defaultNSMap = options.xmlns||{};\n\tvar isHTML = /\\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;\n \tvar entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;\n\tif(locator){\n\t\tdomBuilder.setDocumentLocator(locator)\n\t}\n\n\tsax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);\n\tsax.domBuilder = options.domBuilder || domBuilder;\n\tif(isHTML){\n\t\tdefaultNSMap[''] = NAMESPACE.HTML;\n\t}\n\tdefaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;\n\tvar normalize = options.normalizeLineEndings || normalizeLineEndings;\n\tif (source && typeof source === 'string') {\n\t\tsax.parse(\n\t\t\tnormalize(source),\n\t\t\tdefaultNSMap,\n\t\t\tentityMap\n\t\t)\n\t} else {\n\t\tsax.errorHandler.error('invalid doc source')\n\t}\n\treturn domBuilder.doc;\n}\nfunction buildErrorHandler(errorImpl,domBuilder,locator){\n\tif(!errorImpl){\n\t\tif(domBuilder instanceof DOMHandler){\n\t\t\treturn domBuilder;\n\t\t}\n\t\terrorImpl = domBuilder ;\n\t}\n\tvar errorHandler = {}\n\tvar isCallback = errorImpl instanceof Function;\n\tlocator = locator||{}\n\tfunction build(key){\n\t\tvar fn = errorImpl[key];\n\t\tif(!fn && isCallback){\n\t\t\tfn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;\n\t\t}\n\t\terrorHandler[key] = fn && function(msg){\n\t\t\tfn('[xmldom '+key+']\\t'+msg+_locator(locator));\n\t\t}||function(){};\n\t}\n\tbuild('warning');\n\tbuild('error');\n\tbuild('fatalError');\n\treturn errorHandler;\n}\n\n//console.log('#\\n\\n\\n\\n\\n\\n\\n####')\n/**\n * +ContentHandler+ErrorHandler\n * +LexicalHandler+EntityResolver2\n * -DeclHandler-DTDHandler\n *\n * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler\n * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2\n * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html\n */\nfunction DOMHandler() {\n this.cdata = false;\n}\nfunction position(locator,node){\n\tnode.lineNumber = locator.lineNumber;\n\tnode.columnNumber = locator.columnNumber;\n}\n/**\n * @see org.xml.sax.ContentHandler#startDocument\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html\n */\nDOMHandler.prototype = {\n\tstartDocument : function() {\n \tthis.doc = new DOMImplementation().createDocument(null, null, null);\n \tif (this.locator) {\n \tthis.doc.documentURI = this.locator.systemId;\n \t}\n\t},\n\tstartElement:function(namespaceURI, localName, qName, attrs) {\n\t\tvar doc = this.doc;\n\t var el = doc.createElementNS(namespaceURI, qName||localName);\n\t var len = attrs.length;\n\t appendElement(this, el);\n\t this.currentElement = el;\n\n\t\tthis.locator && position(this.locator,el)\n\t for (var i = 0 ; i < len; i++) {\n\t var namespaceURI = attrs.getURI(i);\n\t var value = attrs.getValue(i);\n\t var qName = attrs.getQName(i);\n\t\t\tvar attr = doc.createAttributeNS(namespaceURI, qName);\n\t\t\tthis.locator &&position(attrs.getLocator(i),attr);\n\t\t\tattr.value = attr.nodeValue = value;\n\t\t\tel.setAttributeNode(attr)\n\t }\n\t},\n\tendElement:function(namespaceURI, localName, qName) {\n\t\tvar current = this.currentElement\n\t\tvar tagName = current.tagName;\n\t\tthis.currentElement = current.parentNode;\n\t},\n\tstartPrefixMapping:function(prefix, uri) {\n\t},\n\tendPrefixMapping:function(prefix) {\n\t},\n\tprocessingInstruction:function(target, data) {\n\t var ins = this.doc.createProcessingInstruction(target, data);\n\t this.locator && position(this.locator,ins)\n\t appendElement(this, ins);\n\t},\n\tignorableWhitespace:function(ch, start, length) {\n\t},\n\tcharacters:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t\t//console.log(chars)\n\t\tif(chars){\n\t\t\tif (this.cdata) {\n\t\t\t\tvar charNode = this.doc.createCDATASection(chars);\n\t\t\t} else {\n\t\t\t\tvar charNode = this.doc.createTextNode(chars);\n\t\t\t}\n\t\t\tif(this.currentElement){\n\t\t\t\tthis.currentElement.appendChild(charNode);\n\t\t\t}else if(/^\\s*$/.test(chars)){\n\t\t\t\tthis.doc.appendChild(charNode);\n\t\t\t\t//process xml\n\t\t\t}\n\t\t\tthis.locator && position(this.locator,charNode)\n\t\t}\n\t},\n\tskippedEntity:function(name) {\n\t},\n\tendDocument:function() {\n\t\tthis.doc.normalize();\n\t},\n\tsetDocumentLocator:function (locator) {\n\t if(this.locator = locator){// && !('lineNumber' in locator)){\n\t \tlocator.lineNumber = 0;\n\t }\n\t},\n\t//LexicalHandler\n\tcomment:function(chars, start, length) {\n\t\tchars = _toString.apply(this,arguments)\n\t var comm = this.doc.createComment(chars);\n\t this.locator && position(this.locator,comm)\n\t appendElement(this, comm);\n\t},\n\n\tstartCDATA:function() {\n\t //used in characters() methods\n\t this.cdata = true;\n\t},\n\tendCDATA:function() {\n\t this.cdata = false;\n\t},\n\n\tstartDTD:function(name, publicId, systemId) {\n\t\tvar impl = this.doc.implementation;\n\t if (impl && impl.createDocumentType) {\n\t var dt = impl.createDocumentType(name, publicId, systemId);\n\t this.locator && position(this.locator,dt)\n\t appendElement(this, dt);\n\t\t\t\t\tthis.doc.doctype = dt;\n\t }\n\t},\n\t/**\n\t * @see org.xml.sax.ErrorHandler\n\t * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html\n\t */\n\twarning:function(error) {\n\t\tconsole.warn('[xmldom warning]\\t'+error,_locator(this.locator));\n\t},\n\terror:function(error) {\n\t\tconsole.error('[xmldom error]\\t'+error,_locator(this.locator));\n\t},\n\tfatalError:function(error) {\n\t\tthrow new ParseError(error, this.locator);\n\t}\n}\nfunction _locator(l){\n\tif(l){\n\t\treturn '\\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'\n\t}\n}\nfunction _toString(chars,start,length){\n\tif(typeof chars == 'string'){\n\t\treturn chars.substr(start,length)\n\t}else{//java sax connect width xmldom on rhino(what about: \"? && !(chars instanceof String)\")\n\t\tif(chars.length >= start+length || start){\n\t\t\treturn new java.lang.String(chars,start,length)+'';\n\t\t}\n\t\treturn chars;\n\t}\n}\n\n/*\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html\n * used method of org.xml.sax.ext.LexicalHandler:\n * #comment(chars, start, length)\n * #startCDATA()\n * #endCDATA()\n * #startDTD(name, publicId, systemId)\n *\n *\n * IGNORED method of org.xml.sax.ext.LexicalHandler:\n * #endDTD()\n * #startEntity(name)\n * #endEntity(name)\n *\n *\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html\n * IGNORED method of org.xml.sax.ext.DeclHandler\n * \t#attributeDecl(eName, aName, type, mode, value)\n * #elementDecl(name, model)\n * #externalEntityDecl(name, publicId, systemId)\n * #internalEntityDecl(name, value)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html\n * IGNORED method of org.xml.sax.EntityResolver2\n * #resolveEntity(String name,String publicId,String baseURI,String systemId)\n * #resolveEntity(publicId, systemId)\n * #getExternalSubset(name, baseURI)\n * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html\n * IGNORED method of org.xml.sax.DTDHandler\n * #notationDecl(name, publicId, systemId) {};\n * #unparsedEntityDecl(name, publicId, systemId, notationName) {};\n */\n\"endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl\".replace(/\\w+/g,function(key){\n\tDOMHandler.prototype[key] = function(){return null}\n})\n\n/* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */\nfunction appendElement (hander,node) {\n if (!hander.currentElement) {\n hander.doc.appendChild(node);\n } else {\n hander.currentElement.appendChild(node);\n }\n}//appendChild and setAttributeNS are preformance key\n\nexports.__DOMHandler = DOMHandler;\nexports.normalizeLineEndings = normalizeLineEndings;\nexports.DOMParser = DOMParser;\n","var conventions = require(\"./conventions\");\n\nvar find = conventions.find;\nvar NAMESPACE = conventions.NAMESPACE;\n\n/**\n * A prerequisite for `[].filter`, to drop elements that are empty\n * @param {string} input\n * @returns {boolean}\n */\nfunction notEmptyString (input) {\n\treturn input !== ''\n}\n/**\n * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace\n * @see https://infra.spec.whatwg.org/#ascii-whitespace\n *\n * @param {string} input\n * @returns {string[]} (can be empty)\n */\nfunction splitOnASCIIWhitespace(input) {\n\t// U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE\n\treturn input ? input.split(/[\\t\\n\\f\\r ]+/).filter(notEmptyString) : []\n}\n\n/**\n * Adds element as a key to current if it is not already present.\n *\n * @param {Record} current\n * @param {string} element\n * @returns {Record}\n */\nfunction orderedSetReducer (current, element) {\n\tif (!current.hasOwnProperty(element)) {\n\t\tcurrent[element] = true;\n\t}\n\treturn current;\n}\n\n/**\n * @see https://infra.spec.whatwg.org/#ordered-set\n * @param {string} input\n * @returns {string[]}\n */\nfunction toOrderedSet(input) {\n\tif (!input) return [];\n\tvar list = splitOnASCIIWhitespace(input);\n\treturn Object.keys(list.reduce(orderedSetReducer, {}))\n}\n\n/**\n * Uses `list.indexOf` to implement something like `Array.prototype.includes`,\n * which we can not rely on being available.\n *\n * @param {any[]} list\n * @returns {function(any): boolean}\n */\nfunction arrayIncludes (list) {\n\treturn function(element) {\n\t\treturn list && list.indexOf(element) !== -1;\n\t}\n}\n\nfunction copy(src,dest){\n\tfor(var p in src){\n\t\tif (Object.prototype.hasOwnProperty.call(src, p)) {\n\t\t\tdest[p] = src[p];\n\t\t}\n\t}\n}\n\n/**\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*((?:.*\\{\\s*?[\\r\\n][\\s\\S]*?^})|\\S.*?(?=[;\\r\\n]));?\n^\\w+\\.prototype\\.([_\\w]+)\\s*=\\s*(\\S.*?(?=[;\\r\\n]));?\n */\nfunction _extends(Class,Super){\n\tvar pt = Class.prototype;\n\tif(!(pt instanceof Super)){\n\t\tfunction t(){};\n\t\tt.prototype = Super.prototype;\n\t\tt = new t();\n\t\tcopy(pt,t);\n\t\tClass.prototype = pt = t;\n\t}\n\tif(pt.constructor != Class){\n\t\tif(typeof Class != 'function'){\n\t\t\tconsole.error(\"unknown Class:\"+Class)\n\t\t}\n\t\tpt.constructor = Class\n\t}\n}\n\n// Node Types\nvar NodeType = {}\nvar ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;\nvar ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;\nvar TEXT_NODE = NodeType.TEXT_NODE = 3;\nvar CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;\nvar ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;\nvar ENTITY_NODE = NodeType.ENTITY_NODE = 6;\nvar PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;\nvar COMMENT_NODE = NodeType.COMMENT_NODE = 8;\nvar DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;\nvar DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;\nvar DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;\nvar NOTATION_NODE = NodeType.NOTATION_NODE = 12;\n\n// ExceptionCode\nvar ExceptionCode = {}\nvar ExceptionMessage = {};\nvar INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]=\"Index size error\"),1);\nvar DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]=\"DOMString size error\"),2);\nvar HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]=\"Hierarchy request error\"),3);\nvar WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]=\"Wrong document\"),4);\nvar INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]=\"Invalid character\"),5);\nvar NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]=\"No data allowed\"),6);\nvar NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]=\"No modification allowed\"),7);\nvar NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]=\"Not found\"),8);\nvar NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]=\"Not supported\"),9);\nvar INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]=\"Attribute in use\"),10);\n//level2\nvar INVALID_STATE_ERR \t= ExceptionCode.INVALID_STATE_ERR \t= ((ExceptionMessage[11]=\"Invalid state\"),11);\nvar SYNTAX_ERR \t= ExceptionCode.SYNTAX_ERR \t= ((ExceptionMessage[12]=\"Syntax error\"),12);\nvar INVALID_MODIFICATION_ERR \t= ExceptionCode.INVALID_MODIFICATION_ERR \t= ((ExceptionMessage[13]=\"Invalid modification\"),13);\nvar NAMESPACE_ERR \t= ExceptionCode.NAMESPACE_ERR \t= ((ExceptionMessage[14]=\"Invalid namespace\"),14);\nvar INVALID_ACCESS_ERR \t= ExceptionCode.INVALID_ACCESS_ERR \t= ((ExceptionMessage[15]=\"Invalid access\"),15);\n\n/**\n * DOM Level 2\n * Object DOMException\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html\n * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html\n */\nfunction DOMException(code, message) {\n\tif(message instanceof Error){\n\t\tvar error = message;\n\t}else{\n\t\terror = this;\n\t\tError.call(this, ExceptionMessage[code]);\n\t\tthis.message = ExceptionMessage[code];\n\t\tif(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);\n\t}\n\terror.code = code;\n\tif(message) this.message = this.message + \": \" + message;\n\treturn error;\n};\nDOMException.prototype = Error.prototype;\ncopy(ExceptionCode,DOMException)\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177\n * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.\n * The items in the NodeList are accessible via an integral index, starting from 0.\n */\nfunction NodeList() {\n};\nNodeList.prototype = {\n\t/**\n\t * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.\n\t * @standard level1\n\t */\n\tlength:0,\n\t/**\n\t * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.\n\t * @standard level1\n\t * @param index unsigned long\n\t * Index into the collection.\n\t * @return Node\n\t * \tThe node at the indexth position in the NodeList, or null if that is not a valid index.\n\t */\n\titem: function(index) {\n\t\treturn index >= 0 && index < this.length ? this[index] : null;\n\t},\n\ttoString:function(isHTML,nodeFilter){\n\t\tfor(var buf = [], i = 0;i=0){\n\t\tvar lastIndex = list.length-1\n\t\twhile(i0 || key == 'xmlns'){\n//\t\t\treturn null;\n//\t\t}\n\t\t//console.log()\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar attr = this[i];\n\t\t\t//console.log(attr.nodeName,key)\n\t\t\tif(attr.nodeName == key){\n\t\t\t\treturn attr;\n\t\t\t}\n\t\t}\n\t},\n\tsetNamedItem: function(attr) {\n\t\tvar el = attr.ownerElement;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\tvar oldAttr = this.getNamedItem(attr.nodeName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\t/* returns Node */\n\tsetNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR\n\t\tvar el = attr.ownerElement, oldAttr;\n\t\tif(el && el!=this._ownerElement){\n\t\t\tthrow new DOMException(INUSE_ATTRIBUTE_ERR);\n\t\t}\n\t\toldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);\n\t\t_addNamedNode(this._ownerElement,this,attr,oldAttr);\n\t\treturn oldAttr;\n\t},\n\n\t/* returns Node */\n\tremoveNamedItem: function(key) {\n\t\tvar attr = this.getNamedItem(key);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\n\n\t},// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR\n\n\t//for level2\n\tremoveNamedItemNS:function(namespaceURI,localName){\n\t\tvar attr = this.getNamedItemNS(namespaceURI,localName);\n\t\t_removeNamedNode(this._ownerElement,this,attr);\n\t\treturn attr;\n\t},\n\tgetNamedItemNS: function(namespaceURI, localName) {\n\t\tvar i = this.length;\n\t\twhile(i--){\n\t\t\tvar node = this[i];\n\t\t\tif(node.localName == localName && node.namespaceURI == namespaceURI){\n\t\t\t\treturn node;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n};\n\n/**\n * The DOMImplementation interface represents an object providing methods\n * which are not dependent on any particular document.\n * Such an object is returned by the `Document.implementation` property.\n *\n * __The individual methods describe the differences compared to the specs.__\n *\n * @constructor\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN\n * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)\n * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core\n * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core\n * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard\n */\nfunction DOMImplementation() {\n}\n\nDOMImplementation.prototype = {\n\t/**\n\t * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.\n\t * The different implementations fairly diverged in what kind of features were reported.\n\t * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.\n\t *\n\t * @deprecated It is deprecated and modern browsers return true in all cases.\n\t *\n\t * @param {string} feature\n\t * @param {string} [version]\n\t * @returns {boolean} always true\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN\n\t * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard\n\t */\n\thasFeature: function(feature, version) {\n\t\t\treturn true;\n\t},\n\t/**\n\t * Creates an XML Document object of the specified type with its document element.\n\t *\n\t * __It behaves slightly different from the description in the living standard__:\n\t * - There is no interface/class `XMLDocument`, it returns a `Document` instance.\n\t * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string|null} namespaceURI\n\t * @param {string} qualifiedName\n\t * @param {DocumentType=null} doctype\n\t * @returns {Document}\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocument: function(namespaceURI, qualifiedName, doctype){\n\t\tvar doc = new Document();\n\t\tdoc.implementation = this;\n\t\tdoc.childNodes = new NodeList();\n\t\tdoc.doctype = doctype || null;\n\t\tif (doctype){\n\t\t\tdoc.appendChild(doctype);\n\t\t}\n\t\tif (qualifiedName){\n\t\t\tvar root = doc.createElementNS(namespaceURI, qualifiedName);\n\t\t\tdoc.appendChild(root);\n\t\t}\n\t\treturn doc;\n\t},\n\t/**\n\t * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.\n\t *\n\t * __This behavior is slightly different from the in the specs__:\n\t * - this implementation is not validating names or qualified names\n\t * (when parsing XML strings, the SAX parser takes care of that)\n\t *\n\t * @param {string} qualifiedName\n\t * @param {string} [publicId]\n\t * @param {string} [systemId]\n\t * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation\n\t * \t\t\t\t or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN\n\t * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core\n\t * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard\n\t *\n\t * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract\n\t * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names\n\t * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names\n\t */\n\tcreateDocumentType: function(qualifiedName, publicId, systemId){\n\t\tvar node = new DocumentType();\n\t\tnode.name = qualifiedName;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.publicId = publicId || '';\n\t\tnode.systemId = systemId || '';\n\n\t\treturn node;\n\t}\n};\n\n\n/**\n * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247\n */\n\nfunction Node() {\n};\n\nNode.prototype = {\n\tfirstChild : null,\n\tlastChild : null,\n\tpreviousSibling : null,\n\tnextSibling : null,\n\tattributes : null,\n\tparentNode : null,\n\tchildNodes : null,\n\townerDocument : null,\n\tnodeValue : null,\n\tnamespaceURI : null,\n\tprefix : null,\n\tlocalName : null,\n\t// Modified in DOM Level 2:\n\tinsertBefore:function(newChild, refChild){//raises\n\t\treturn _insertBefore(this,newChild,refChild);\n\t},\n\treplaceChild:function(newChild, oldChild){//raises\n\t\t_insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);\n\t\tif(oldChild){\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t},\n\tremoveChild:function(oldChild){\n\t\treturn _removeChild(this,oldChild);\n\t},\n\tappendChild:function(newChild){\n\t\treturn this.insertBefore(newChild,null);\n\t},\n\thasChildNodes:function(){\n\t\treturn this.firstChild != null;\n\t},\n\tcloneNode:function(deep){\n\t\treturn cloneNode(this.ownerDocument||this,this,deep);\n\t},\n\t// Modified in DOM Level 2:\n\tnormalize:function(){\n\t\tvar child = this.firstChild;\n\t\twhile(child){\n\t\t\tvar next = child.nextSibling;\n\t\t\tif(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){\n\t\t\t\tthis.removeChild(next);\n\t\t\t\tchild.appendData(next.data);\n\t\t\t}else{\n\t\t\t\tchild.normalize();\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t}\n\t},\n \t// Introduced in DOM Level 2:\n\tisSupported:function(feature, version){\n\t\treturn this.ownerDocument.implementation.hasFeature(feature,version);\n\t},\n // Introduced in DOM Level 2:\n hasAttributes:function(){\n \treturn this.attributes.length>0;\n },\n\t/**\n\t * Look up the prefix associated to the given namespace URI, starting from this node.\n\t * **The default namespace declarations are ignored by this method.**\n\t * See Namespace Prefix Lookup for details on the algorithm used by this method.\n\t *\n\t * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._\n\t *\n\t * @param {string | null} namespaceURI\n\t * @returns {string | null}\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix\n\t * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo\n\t * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix\n\t * @see https://github.com/xmldom/xmldom/issues/322\n\t */\n lookupPrefix:function(namespaceURI){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tfor(var n in map){\n\t\t\t\t\t\tif (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {\n\t\t\t\t\t\t\treturn n;\n\t\t\t\t\t\t}\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n lookupNamespaceURI:function(prefix){\n \tvar el = this;\n \twhile(el){\n \t\tvar map = el._nsMap;\n \t\t//console.dir(map)\n \t\tif(map){\n \t\t\tif(Object.prototype.hasOwnProperty.call(map, prefix)){\n \t\t\t\treturn map[prefix] ;\n \t\t\t}\n \t\t}\n \t\tel = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;\n \t}\n \treturn null;\n },\n // Introduced in DOM Level 3:\n isDefaultNamespace:function(namespaceURI){\n \tvar prefix = this.lookupPrefix(namespaceURI);\n \treturn prefix == null;\n }\n};\n\n\nfunction _xmlEncoder(c){\n\treturn c == '<' && '<' ||\n c == '>' && '>' ||\n c == '&' && '&' ||\n c == '\"' && '"' ||\n '&#'+c.charCodeAt()+';'\n}\n\n\ncopy(NodeType,Node);\ncopy(NodeType,Node.prototype);\n\n/**\n * @param callback return true for continue,false for break\n * @return boolean true: break visit;\n */\nfunction _visitNode(node,callback){\n\tif(callback(node)){\n\t\treturn true;\n\t}\n\tif(node = node.firstChild){\n\t\tdo{\n\t\t\tif(_visitNode(node,callback)){return true}\n }while(node=node.nextSibling)\n }\n}\n\n\n\nfunction Document(){\n\tthis.ownerDocument = this;\n}\n\nfunction _onAddAttribute(doc,el,newAttr){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tel._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value\n\t}\n}\n\nfunction _onRemoveAttribute(doc,el,newAttr,remove){\n\tdoc && doc._inc++;\n\tvar ns = newAttr.namespaceURI ;\n\tif(ns === NAMESPACE.XMLNS){\n\t\t//update namespace\n\t\tdelete el._nsMap[newAttr.prefix?newAttr.localName:'']\n\t}\n}\n\n/**\n * Updates `el.childNodes`, updating the indexed items and it's `length`.\n * Passing `newChild` means it will be appended.\n * Otherwise it's assumed that an item has been removed,\n * and `el.firstNode` and it's `.nextSibling` are used\n * to walk the current list of child nodes.\n *\n * @param {Document} doc\n * @param {Node} el\n * @param {Node} [newChild]\n * @private\n */\nfunction _onUpdateChild (doc, el, newChild) {\n\tif(doc && doc._inc){\n\t\tdoc._inc++;\n\t\t//update childNodes\n\t\tvar cs = el.childNodes;\n\t\tif (newChild) {\n\t\t\tcs[cs.length++] = newChild;\n\t\t} else {\n\t\t\tvar child = el.firstChild;\n\t\t\tvar i = 0;\n\t\t\twhile (child) {\n\t\t\t\tcs[i++] = child;\n\t\t\t\tchild = child.nextSibling;\n\t\t\t}\n\t\t\tcs.length = i;\n\t\t\tdelete cs[cs.length];\n\t\t}\n\t}\n}\n\n/**\n * Removes the connections between `parentNode` and `child`\n * and any existing `child.previousSibling` or `child.nextSibling`.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n *\n * @param {Node} parentNode\n * @param {Node} child\n * @returns {Node} the child that was removed.\n * @private\n */\nfunction _removeChild (parentNode, child) {\n\tvar previous = child.previousSibling;\n\tvar next = child.nextSibling;\n\tif (previous) {\n\t\tprevious.nextSibling = next;\n\t} else {\n\t\tparentNode.firstChild = next;\n\t}\n\tif (next) {\n\t\tnext.previousSibling = previous;\n\t} else {\n\t\tparentNode.lastChild = previous;\n\t}\n\tchild.parentNode = null;\n\tchild.previousSibling = null;\n\tchild.nextSibling = null;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode);\n\treturn child;\n}\n\n/**\n * Returns `true` if `node` can be a parent for insertion.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasValidParentNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)\n\t);\n}\n\n/**\n * Returns `true` if `node` can be inserted according to it's `nodeType`.\n * @param {Node} node\n * @returns {boolean}\n */\nfunction hasInsertableNodeType(node) {\n\treturn (\n\t\tnode &&\n\t\t(isElementNode(node) ||\n\t\t\tisTextNode(node) ||\n\t\t\tisDocTypeNode(node) ||\n\t\t\tnode.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||\n\t\t\tnode.nodeType === Node.COMMENT_NODE ||\n\t\t\tnode.nodeType === Node.PROCESSING_INSTRUCTION_NODE)\n\t);\n}\n\n/**\n * Returns true if `node` is a DOCTYPE node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isDocTypeNode(node) {\n\treturn node && node.nodeType === Node.DOCUMENT_TYPE_NODE;\n}\n\n/**\n * Returns true if the node is an element\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isElementNode(node) {\n\treturn node && node.nodeType === Node.ELEMENT_NODE;\n}\n/**\n * Returns true if `node` is a text node\n * @param {Node} node\n * @returns {boolean}\n */\nfunction isTextNode(node) {\n\treturn node && node.nodeType === Node.TEXT_NODE;\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Document} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementInsertionPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\tif (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * Check if en element node can be inserted before `child`, or at the end if child is falsy,\n * according to the presence and position of a doctype node on the same level.\n *\n * @param {Node} doc The document node\n * @param {Node} child the node that would become the nextSibling if the element would be inserted\n * @returns {boolean} `true` if an element can be inserted before child\n * @private\n * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction isElementReplacementPossible(doc, child) {\n\tvar parentChildNodes = doc.childNodes || [];\n\n\tfunction hasElementChildThatIsNotChild(node) {\n\t\treturn isElementNode(node) && node !== child;\n\t}\n\n\tif (find(parentChildNodes, hasElementChildThatIsNotChild)) {\n\t\treturn false;\n\t}\n\tvar docTypeNode = find(parentChildNodes, isDocTypeNode);\n\treturn !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));\n}\n\n/**\n * @private\n * Steps 1-5 of the checks before inserting and before replacing a child are the same.\n *\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidity1to5(parent, node, child) {\n\t// 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a \"HierarchyRequestError\" DOMException.\n\tif (!hasValidParentNodeType(parent)) {\n\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);\n\t}\n\t// 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a \"HierarchyRequestError\" DOMException.\n\t// not implemented!\n\t// 3. If `child` is non-null and its parent is not `parent`, then throw a \"NotFoundError\" DOMException.\n\tif (child && child.parentNode !== parent) {\n\t\tthrow new DOMException(NOT_FOUND_ERR, 'child not in parent');\n\t}\n\tif (\n\t\t// 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a \"HierarchyRequestError\" DOMException.\n\t\t!hasInsertableNodeType(node) ||\n\t\t// 5. If either `node` is a Text node and `parent` is a document,\n\t\t// the sax parser currently adds top level text nodes, this will be fixed in 0.9.0\n\t\t// || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)\n\t\t// or `node` is a doctype and `parent` is not a document, then throw a \"HierarchyRequestError\" DOMException.\n\t\t(isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)\n\t) {\n\t\tthrow new DOMException(\n\t\t\tHIERARCHY_REQUEST_ERR,\n\t\t\t'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType\n\t\t);\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreInsertionValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If node has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child,\n\t\t// `child` is a doctype, or `child` is non-null and a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child, `child` is a doctype,\n\t\t// or `child` is non-null and a doctype is following `child`.\n\t\tif (!isElementInsertionPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\t// `parent` has a doctype child,\n\t\tif (find(parentChildNodes, isDocTypeNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// `child` is non-null and an element is preceding `child`,\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t\t// or `child` is null and `parent` has an element child.\n\t\tif (!child && parentElementChild) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * Step 6 of the checks before inserting and before replacing a child are different.\n *\n * @param {Document} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node | undefined} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n * @see https://dom.spec.whatwg.org/#concept-node-replace\n */\nfunction assertPreReplacementValidityInDocument(parent, node, child) {\n\tvar parentChildNodes = parent.childNodes || [];\n\tvar nodeChildNodes = node.childNodes || [];\n\n\t// DocumentFragment\n\tif (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n\t\tvar nodeChildElements = nodeChildNodes.filter(isElementNode);\n\t\t// If `node` has more than one element child or has a Text node child.\n\t\tif (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');\n\t\t}\n\t\t// Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');\n\t\t}\n\t}\n\t// Element\n\tif (isElementNode(node)) {\n\t\t// `parent` has an element child that is not `child` or a doctype is following `child`.\n\t\tif (!isElementReplacementPossible(parent, child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');\n\t\t}\n\t}\n\t// DocumentType\n\tif (isDocTypeNode(node)) {\n\t\tfunction hasDoctypeChildThatIsNotChild(node) {\n\t\t\treturn isDocTypeNode(node) && node !== child;\n\t\t}\n\n\t\t// `parent` has a doctype child that is not `child`,\n\t\tif (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');\n\t\t}\n\t\tvar parentElementChild = find(parentChildNodes, isElementNode);\n\t\t// or an element is preceding `child`.\n\t\tif (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {\n\t\t\tthrow new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');\n\t\t}\n\t}\n}\n\n/**\n * @private\n * @param {Node} parent the parent node to insert `node` into\n * @param {Node} node the node to insert\n * @param {Node=} child the node that should become the `nextSibling` of `node`\n * @returns {Node}\n * @throws DOMException for several node combinations that would create a DOM that is not well-formed.\n * @throws DOMException if `child` is provided but is not a child of `parent`.\n * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity\n */\nfunction _insertBefore(parent, node, child, _inDocumentAssertion) {\n\t// To ensure pre-insertion validity of a node into a parent before a child, run these steps:\n\tassertPreInsertionValidity1to5(parent, node, child);\n\n\t// If parent is a document, and any of the statements below, switched on the interface node implements,\n\t// are true, then throw a \"HierarchyRequestError\" DOMException.\n\tif (parent.nodeType === Node.DOCUMENT_NODE) {\n\t\t(_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);\n\t}\n\n\tvar cp = node.parentNode;\n\tif(cp){\n\t\tcp.removeChild(node);//remove and update\n\t}\n\tif(node.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\tvar newFirst = node.firstChild;\n\t\tif (newFirst == null) {\n\t\t\treturn node;\n\t\t}\n\t\tvar newLast = node.lastChild;\n\t}else{\n\t\tnewFirst = newLast = node;\n\t}\n\tvar pre = child ? child.previousSibling : parent.lastChild;\n\n\tnewFirst.previousSibling = pre;\n\tnewLast.nextSibling = child;\n\n\n\tif(pre){\n\t\tpre.nextSibling = newFirst;\n\t}else{\n\t\tparent.firstChild = newFirst;\n\t}\n\tif(child == null){\n\t\tparent.lastChild = newLast;\n\t}else{\n\t\tchild.previousSibling = newLast;\n\t}\n\tdo{\n\t\tnewFirst.parentNode = parent;\n\t}while(newFirst !== newLast && (newFirst= newFirst.nextSibling))\n\t_onUpdateChild(parent.ownerDocument||parent, parent);\n\t//console.log(parent.lastChild.nextSibling == null)\n\tif (node.nodeType == DOCUMENT_FRAGMENT_NODE) {\n\t\tnode.firstChild = node.lastChild = null;\n\t}\n\treturn node;\n}\n\n/**\n * Appends `newChild` to `parentNode`.\n * If `newChild` is already connected to a `parentNode` it is first removed from it.\n *\n * @see https://github.com/xmldom/xmldom/issues/135\n * @see https://github.com/xmldom/xmldom/issues/145\n * @param {Node} parentNode\n * @param {Node} newChild\n * @returns {Node}\n * @private\n */\nfunction _appendSingleChild (parentNode, newChild) {\n\tif (newChild.parentNode) {\n\t\tnewChild.parentNode.removeChild(newChild);\n\t}\n\tnewChild.parentNode = parentNode;\n\tnewChild.previousSibling = parentNode.lastChild;\n\tnewChild.nextSibling = null;\n\tif (newChild.previousSibling) {\n\t\tnewChild.previousSibling.nextSibling = newChild;\n\t} else {\n\t\tparentNode.firstChild = newChild;\n\t}\n\tparentNode.lastChild = newChild;\n\t_onUpdateChild(parentNode.ownerDocument, parentNode, newChild);\n\treturn newChild;\n}\n\nDocument.prototype = {\n\t//implementation : null,\n\tnodeName : '#document',\n\tnodeType : DOCUMENT_NODE,\n\t/**\n\t * The DocumentType node of the document.\n\t *\n\t * @readonly\n\t * @type DocumentType\n\t */\n\tdoctype : null,\n\tdocumentElement : null,\n\t_inc : 1,\n\n\tinsertBefore : function(newChild, refChild){//raises\n\t\tif(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){\n\t\t\tvar child = newChild.firstChild;\n\t\t\twhile(child){\n\t\t\t\tvar next = child.nextSibling;\n\t\t\t\tthis.insertBefore(child,refChild);\n\t\t\t\tchild = next;\n\t\t\t}\n\t\t\treturn newChild;\n\t\t}\n\t\t_insertBefore(this, newChild, refChild);\n\t\tnewChild.ownerDocument = this;\n\t\tif (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\n\t\treturn newChild;\n\t},\n\tremoveChild : function(oldChild){\n\t\tif(this.documentElement == oldChild){\n\t\t\tthis.documentElement = null;\n\t\t}\n\t\treturn _removeChild(this,oldChild);\n\t},\n\treplaceChild: function (newChild, oldChild) {\n\t\t//raises\n\t\t_insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);\n\t\tnewChild.ownerDocument = this;\n\t\tif (oldChild) {\n\t\t\tthis.removeChild(oldChild);\n\t\t}\n\t\tif (isElementNode(newChild)) {\n\t\t\tthis.documentElement = newChild;\n\t\t}\n\t},\n\t// Introduced in DOM Level 2:\n\timportNode : function(importedNode,deep){\n\t\treturn importNode(this,importedNode,deep);\n\t},\n\t// Introduced in DOM Level 2:\n\tgetElementById :\tfunction(id){\n\t\tvar rtv = null;\n\t\t_visitNode(this.documentElement,function(node){\n\t\t\tif(node.nodeType == ELEMENT_NODE){\n\t\t\t\tif(node.getAttribute('id') == id){\n\t\t\t\t\trtv = node;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\treturn rtv;\n\t},\n\n\t/**\n\t * The `getElementsByClassName` method of `Document` interface returns an array-like object\n\t * of all child elements which have **all** of the given class name(s).\n\t *\n\t * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.\n\t *\n\t *\n\t * Warning: This is a live LiveNodeList.\n\t * Changes in the DOM will reflect in the array as the changes occur.\n\t * If an element selected by this array no longer qualifies for the selector,\n\t * it will automatically be removed. Be aware of this for iteration purposes.\n\t *\n\t * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace\n\t *\n\t * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName\n\t * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname\n\t */\n\tgetElementsByClassName: function(classNames) {\n\t\tvar classNamesSet = toOrderedSet(classNames)\n\t\treturn new LiveNodeList(this, function(base) {\n\t\t\tvar ls = [];\n\t\t\tif (classNamesSet.length > 0) {\n\t\t\t\t_visitNode(base.documentElement, function(node) {\n\t\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE) {\n\t\t\t\t\t\tvar nodeClassNames = node.getAttribute('class')\n\t\t\t\t\t\t// can be null if the attribute does not exist\n\t\t\t\t\t\tif (nodeClassNames) {\n\t\t\t\t\t\t\t// before splitting and iterating just compare them for the most common case\n\t\t\t\t\t\t\tvar matches = classNames === nodeClassNames;\n\t\t\t\t\t\t\tif (!matches) {\n\t\t\t\t\t\t\t\tvar nodeClassNamesSet = toOrderedSet(nodeClassNames)\n\t\t\t\t\t\t\t\tmatches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif(matches) {\n\t\t\t\t\t\t\t\tls.push(node);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn ls;\n\t\t});\n\t},\n\n\t//document factory method:\n\tcreateElement :\tfunction(tagName){\n\t\tvar node = new Element();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = tagName;\n\t\tnode.tagName = tagName;\n\t\tnode.localName = tagName;\n\t\tnode.childNodes = new NodeList();\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\tcreateDocumentFragment :\tfunction(){\n\t\tvar node = new DocumentFragment();\n\t\tnode.ownerDocument = this;\n\t\tnode.childNodes = new NodeList();\n\t\treturn node;\n\t},\n\tcreateTextNode :\tfunction(data){\n\t\tvar node = new Text();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateComment :\tfunction(data){\n\t\tvar node = new Comment();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateCDATASection :\tfunction(data){\n\t\tvar node = new CDATASection();\n\t\tnode.ownerDocument = this;\n\t\tnode.appendData(data)\n\t\treturn node;\n\t},\n\tcreateProcessingInstruction :\tfunction(target,data){\n\t\tvar node = new ProcessingInstruction();\n\t\tnode.ownerDocument = this;\n\t\tnode.tagName = node.nodeName = node.target = target;\n\t\tnode.nodeValue = node.data = data;\n\t\treturn node;\n\t},\n\tcreateAttribute :\tfunction(name){\n\t\tvar node = new Attr();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.name = name;\n\t\tnode.nodeName\t= name;\n\t\tnode.localName = name;\n\t\tnode.specified = true;\n\t\treturn node;\n\t},\n\tcreateEntityReference :\tfunction(name){\n\t\tvar node = new EntityReference();\n\t\tnode.ownerDocument\t= this;\n\t\tnode.nodeName\t= name;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateElementNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Element();\n\t\tvar pl = qualifiedName.split(':');\n\t\tvar attrs\t= node.attributes = new NamedNodeMap();\n\t\tnode.childNodes = new NodeList();\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.tagName = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\tattrs._ownerElement = node;\n\t\treturn node;\n\t},\n\t// Introduced in DOM Level 2:\n\tcreateAttributeNS :\tfunction(namespaceURI,qualifiedName){\n\t\tvar node = new Attr();\n\t\tvar pl = qualifiedName.split(':');\n\t\tnode.ownerDocument = this;\n\t\tnode.nodeName = qualifiedName;\n\t\tnode.name = qualifiedName;\n\t\tnode.namespaceURI = namespaceURI;\n\t\tnode.specified = true;\n\t\tif(pl.length == 2){\n\t\t\tnode.prefix = pl[0];\n\t\t\tnode.localName = pl[1];\n\t\t}else{\n\t\t\t//el.prefix = null;\n\t\t\tnode.localName = qualifiedName;\n\t\t}\n\t\treturn node;\n\t}\n};\n_extends(Document,Node);\n\n\nfunction Element() {\n\tthis._nsMap = {};\n};\nElement.prototype = {\n\tnodeType : ELEMENT_NODE,\n\thasAttribute : function(name){\n\t\treturn this.getAttributeNode(name)!=null;\n\t},\n\tgetAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name);\n\t\treturn attr && attr.value || '';\n\t},\n\tgetAttributeNode : function(name){\n\t\treturn this.attributes.getNamedItem(name);\n\t},\n\tsetAttribute : function(name, value){\n\t\tvar attr = this.ownerDocument.createAttribute(name);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tremoveAttribute : function(name){\n\t\tvar attr = this.getAttributeNode(name)\n\t\tattr && this.removeAttributeNode(attr);\n\t},\n\n\t//four real opeartion method\n\tappendChild:function(newChild){\n\t\tif(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){\n\t\t\treturn this.insertBefore(newChild,null);\n\t\t}else{\n\t\t\treturn _appendSingleChild(this,newChild);\n\t\t}\n\t},\n\tsetAttributeNode : function(newAttr){\n\t\treturn this.attributes.setNamedItem(newAttr);\n\t},\n\tsetAttributeNodeNS : function(newAttr){\n\t\treturn this.attributes.setNamedItemNS(newAttr);\n\t},\n\tremoveAttributeNode : function(oldAttr){\n\t\t//console.log(this == oldAttr.ownerElement)\n\t\treturn this.attributes.removeNamedItem(oldAttr.nodeName);\n\t},\n\t//get real attribute name,and remove it by removeAttributeNode\n\tremoveAttributeNS : function(namespaceURI, localName){\n\t\tvar old = this.getAttributeNodeNS(namespaceURI, localName);\n\t\told && this.removeAttributeNode(old);\n\t},\n\n\thasAttributeNS : function(namespaceURI, localName){\n\t\treturn this.getAttributeNodeNS(namespaceURI, localName)!=null;\n\t},\n\tgetAttributeNS : function(namespaceURI, localName){\n\t\tvar attr = this.getAttributeNodeNS(namespaceURI, localName);\n\t\treturn attr && attr.value || '';\n\t},\n\tsetAttributeNS : function(namespaceURI, qualifiedName, value){\n\t\tvar attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);\n\t\tattr.value = attr.nodeValue = \"\" + value;\n\t\tthis.setAttributeNode(attr)\n\t},\n\tgetAttributeNodeNS : function(namespaceURI, localName){\n\t\treturn this.attributes.getNamedItemNS(namespaceURI, localName);\n\t},\n\n\tgetElementsByTagName : function(tagName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\t\t});\n\t},\n\tgetElementsByTagNameNS : function(namespaceURI, localName){\n\t\treturn new LiveNodeList(this,function(base){\n\t\t\tvar ls = [];\n\t\t\t_visitNode(base,function(node){\n\t\t\t\tif(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){\n\t\t\t\t\tls.push(node);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn ls;\n\n\t\t});\n\t}\n};\nDocument.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;\nDocument.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;\n\n\n_extends(Element,Node);\nfunction Attr() {\n};\nAttr.prototype.nodeType = ATTRIBUTE_NODE;\n_extends(Attr,Node);\n\n\nfunction CharacterData() {\n};\nCharacterData.prototype = {\n\tdata : '',\n\tsubstringData : function(offset, count) {\n\t\treturn this.data.substring(offset, offset+count);\n\t},\n\tappendData: function(text) {\n\t\ttext = this.data+text;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t},\n\tinsertData: function(offset,text) {\n\t\tthis.replaceData(offset,0,text);\n\n\t},\n\tappendChild:function(newChild){\n\t\tthrow new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])\n\t},\n\tdeleteData: function(offset, count) {\n\t\tthis.replaceData(offset,count,\"\");\n\t},\n\treplaceData: function(offset, count, text) {\n\t\tvar start = this.data.substring(0,offset);\n\t\tvar end = this.data.substring(offset+count);\n\t\ttext = start + text + end;\n\t\tthis.nodeValue = this.data = text;\n\t\tthis.length = text.length;\n\t}\n}\n_extends(CharacterData,Node);\nfunction Text() {\n};\nText.prototype = {\n\tnodeName : \"#text\",\n\tnodeType : TEXT_NODE,\n\tsplitText : function(offset) {\n\t\tvar text = this.data;\n\t\tvar newText = text.substring(offset);\n\t\ttext = text.substring(0, offset);\n\t\tthis.data = this.nodeValue = text;\n\t\tthis.length = text.length;\n\t\tvar newNode = this.ownerDocument.createTextNode(newText);\n\t\tif(this.parentNode){\n\t\t\tthis.parentNode.insertBefore(newNode, this.nextSibling);\n\t\t}\n\t\treturn newNode;\n\t}\n}\n_extends(Text,CharacterData);\nfunction Comment() {\n};\nComment.prototype = {\n\tnodeName : \"#comment\",\n\tnodeType : COMMENT_NODE\n}\n_extends(Comment,CharacterData);\n\nfunction CDATASection() {\n};\nCDATASection.prototype = {\n\tnodeName : \"#cdata-section\",\n\tnodeType : CDATA_SECTION_NODE\n}\n_extends(CDATASection,CharacterData);\n\n\nfunction DocumentType() {\n};\nDocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;\n_extends(DocumentType,Node);\n\nfunction Notation() {\n};\nNotation.prototype.nodeType = NOTATION_NODE;\n_extends(Notation,Node);\n\nfunction Entity() {\n};\nEntity.prototype.nodeType = ENTITY_NODE;\n_extends(Entity,Node);\n\nfunction EntityReference() {\n};\nEntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;\n_extends(EntityReference,Node);\n\nfunction DocumentFragment() {\n};\nDocumentFragment.prototype.nodeName =\t\"#document-fragment\";\nDocumentFragment.prototype.nodeType =\tDOCUMENT_FRAGMENT_NODE;\n_extends(DocumentFragment,Node);\n\n\nfunction ProcessingInstruction() {\n}\nProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;\n_extends(ProcessingInstruction,Node);\nfunction XMLSerializer(){}\nXMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){\n\treturn nodeSerializeToString.call(node,isHtml,nodeFilter);\n}\nNode.prototype.toString = nodeSerializeToString;\nfunction nodeSerializeToString(isHtml,nodeFilter){\n\tvar buf = [];\n\tvar refNode = this.nodeType == 9 && this.documentElement || this;\n\tvar prefix = refNode.prefix;\n\tvar uri = refNode.namespaceURI;\n\n\tif(uri && prefix == null){\n\t\t//console.log(prefix)\n\t\tvar prefix = refNode.lookupPrefix(uri);\n\t\tif(prefix == null){\n\t\t\t//isHTML = true;\n\t\t\tvar visibleNamespaces=[\n\t\t\t{namespace:uri,prefix:null}\n\t\t\t//{namespace:uri,prefix:''}\n\t\t\t]\n\t\t}\n\t}\n\tserializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);\n\t//console.log('###',this.nodeType,uri,prefix,buf.join(''))\n\treturn buf.join('');\n}\n\nfunction needNamespaceDefine(node, isHTML, visibleNamespaces) {\n\tvar prefix = node.prefix || '';\n\tvar uri = node.namespaceURI;\n\t// According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,\n\t// and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :\n\t// > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.\n\t// in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)\n\t// and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :\n\t// > [...] Furthermore, the attribute value [...] must not be an empty string.\n\t// so serializing empty namespace value like xmlns:ds=\"\" would produce an invalid XML document.\n\tif (!uri) {\n\t\treturn false;\n\t}\n\tif (prefix === \"xml\" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {\n\t\treturn false;\n\t}\n\n\tvar i = visibleNamespaces.length\n\twhile (i--) {\n\t\tvar ns = visibleNamespaces[i];\n\t\t// get namespace prefix\n\t\tif (ns.prefix === prefix) {\n\t\t\treturn ns.namespace !== uri;\n\t\t}\n\t}\n\treturn true;\n}\n/**\n * Well-formed constraint: No < in Attribute Values\n * > The replacement text of any entity referred to directly or indirectly\n * > in an attribute value must not contain a <.\n * @see https://www.w3.org/TR/xml11/#CleanAttrVals\n * @see https://www.w3.org/TR/xml11/#NT-AttValue\n *\n * Literal whitespace other than space that appear in attribute values\n * are serialized as their entity references, so they will be preserved.\n * (In contrast to whitespace literals in the input which are normalized to spaces)\n * @see https://www.w3.org/TR/xml11/#AVNormalize\n * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes\n */\nfunction addSerializedAttribute(buf, qualifiedName, value) {\n\tbuf.push(' ', qualifiedName, '=\"', value.replace(/[<>&\"\\t\\n\\r]/g, _xmlEncoder), '\"')\n}\n\nfunction serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){\n\tif (!visibleNamespaces) {\n\t\tvisibleNamespaces = [];\n\t}\n\n\tif(nodeFilter){\n\t\tnode = nodeFilter(node);\n\t\tif(node){\n\t\t\tif(typeof node == 'string'){\n\t\t\t\tbuf.push(node);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}else{\n\t\t\treturn;\n\t\t}\n\t\t//buf.sort.apply(attrs, attributeSorter);\n\t}\n\n\tswitch(node.nodeType){\n\tcase ELEMENT_NODE:\n\t\tvar attrs = node.attributes;\n\t\tvar len = attrs.length;\n\t\tvar child = node.firstChild;\n\t\tvar nodeName = node.tagName;\n\n\t\tisHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML\n\n\t\tvar prefixedNodeName = nodeName\n\t\tif (!isHTML && !node.prefix && node.namespaceURI) {\n\t\t\tvar defaultNS\n\t\t\t// lookup current default ns from `xmlns` attribute\n\t\t\tfor (var ai = 0; ai < attrs.length; ai++) {\n\t\t\t\tif (attrs.item(ai).name === 'xmlns') {\n\t\t\t\t\tdefaultNS = attrs.item(ai).value\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!defaultNS) {\n\t\t\t\t// lookup current default ns in visibleNamespaces\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tdefaultNS = namespace.namespace\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (defaultNS !== node.namespaceURI) {\n\t\t\t\tfor (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {\n\t\t\t\t\tvar namespace = visibleNamespaces[nsi]\n\t\t\t\t\tif (namespace.namespace === node.namespaceURI) {\n\t\t\t\t\t\tif (namespace.prefix) {\n\t\t\t\t\t\t\tprefixedNodeName = namespace.prefix + ':' + nodeName\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tbuf.push('<', prefixedNodeName);\n\n\t\tfor(var i=0;i');\n\t\t\t//if is cdata child node\n\t\t\tif(isHTML && /^script$/i.test(nodeName)){\n\t\t\t\twhile(child){\n\t\t\t\t\tif(child.data){\n\t\t\t\t\t\tbuf.push(child.data);\n\t\t\t\t\t}else{\n\t\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\t}\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}else\n\t\t\t{\n\t\t\t\twhile(child){\n\t\t\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\t\t\tchild = child.nextSibling;\n\t\t\t\t}\n\t\t\t}\n\t\t\tbuf.push('');\n\t\t}else{\n\t\t\tbuf.push('/>');\n\t\t}\n\t\t// remove added visible namespaces\n\t\t//visibleNamespaces.length = startVisibleNamespaces;\n\t\treturn;\n\tcase DOCUMENT_NODE:\n\tcase DOCUMENT_FRAGMENT_NODE:\n\t\tvar child = node.firstChild;\n\t\twhile(child){\n\t\t\tserializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());\n\t\t\tchild = child.nextSibling;\n\t\t}\n\t\treturn;\n\tcase ATTRIBUTE_NODE:\n\t\treturn addSerializedAttribute(buf, node.name, node.value);\n\tcase TEXT_NODE:\n\t\t/**\n\t\t * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,\n\t\t * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.\n\t\t * If they are needed elsewhere, they must be escaped using either numeric character references or the strings\n\t\t * `&` and `<` respectively.\n\t\t * The right angle bracket (>) may be represented using the string \" > \", and must, for compatibility,\n\t\t * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,\n\t\t * when that string is not marking the end of a CDATA section.\n\t\t *\n\t\t * In the content of elements, character data is any string of characters\n\t\t * which does not contain the start-delimiter of any markup\n\t\t * and does not include the CDATA-section-close delimiter, `]]>`.\n\t\t *\n\t\t * @see https://www.w3.org/TR/xml/#NT-CharData\n\t\t * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node\n\t\t */\n\t\treturn buf.push(node.data\n\t\t\t.replace(/[<&>]/g,_xmlEncoder)\n\t\t);\n\tcase CDATA_SECTION_NODE:\n\t\treturn buf.push( '');\n\tcase COMMENT_NODE:\n\t\treturn buf.push( \"\");\n\tcase DOCUMENT_TYPE_NODE:\n\t\tvar pubid = node.publicId;\n\t\tvar sysid = node.systemId;\n\t\tbuf.push('');\n\t\t}else if(sysid && sysid!='.'){\n\t\t\tbuf.push(' SYSTEM ', sysid, '>');\n\t\t}else{\n\t\t\tvar sub = node.internalSubset;\n\t\t\tif(sub){\n\t\t\t\tbuf.push(\" [\",sub,\"]\");\n\t\t\t}\n\t\t\tbuf.push(\">\");\n\t\t}\n\t\treturn;\n\tcase PROCESSING_INSTRUCTION_NODE:\n\t\treturn buf.push( \"\");\n\tcase ENTITY_REFERENCE_NODE:\n\t\treturn buf.push( '&',node.nodeName,';');\n\t//case ENTITY_NODE:\n\t//case NOTATION_NODE:\n\tdefault:\n\t\tbuf.push('??',node.nodeName);\n\t}\n}\nfunction importNode(doc,node,deep){\n\tvar node2;\n\tswitch (node.nodeType) {\n\tcase ELEMENT_NODE:\n\t\tnode2 = node.cloneNode(false);\n\t\tnode2.ownerDocument = doc;\n\t\t//var attrs = node2.attributes;\n\t\t//var len = attrs.length;\n\t\t//for(var i=0;i',\n\tlt: '<',\n\tquot: '\"',\n});\n\n/**\n * A map of all entities that are detected in an HTML document.\n * They contain all entries from `XML_ENTITIES`.\n *\n * @see XML_ENTITIES\n * @see DOMParser.parseFromString\n * @see DOMImplementation.prototype.createHTMLDocument\n * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec\n * @see https://html.spec.whatwg.org/entities.json JSON\n * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names\n * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)\n * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)\n */\nexports.HTML_ENTITIES = freeze({\n\tAacute: '\\u00C1',\n\taacute: '\\u00E1',\n\tAbreve: '\\u0102',\n\tabreve: '\\u0103',\n\tac: '\\u223E',\n\tacd: '\\u223F',\n\tacE: '\\u223E\\u0333',\n\tAcirc: '\\u00C2',\n\tacirc: '\\u00E2',\n\tacute: '\\u00B4',\n\tAcy: '\\u0410',\n\tacy: '\\u0430',\n\tAElig: '\\u00C6',\n\taelig: '\\u00E6',\n\taf: '\\u2061',\n\tAfr: '\\uD835\\uDD04',\n\tafr: '\\uD835\\uDD1E',\n\tAgrave: '\\u00C0',\n\tagrave: '\\u00E0',\n\talefsym: '\\u2135',\n\taleph: '\\u2135',\n\tAlpha: '\\u0391',\n\talpha: '\\u03B1',\n\tAmacr: '\\u0100',\n\tamacr: '\\u0101',\n\tamalg: '\\u2A3F',\n\tAMP: '\\u0026',\n\tamp: '\\u0026',\n\tAnd: '\\u2A53',\n\tand: '\\u2227',\n\tandand: '\\u2A55',\n\tandd: '\\u2A5C',\n\tandslope: '\\u2A58',\n\tandv: '\\u2A5A',\n\tang: '\\u2220',\n\tange: '\\u29A4',\n\tangle: '\\u2220',\n\tangmsd: '\\u2221',\n\tangmsdaa: '\\u29A8',\n\tangmsdab: '\\u29A9',\n\tangmsdac: '\\u29AA',\n\tangmsdad: '\\u29AB',\n\tangmsdae: '\\u29AC',\n\tangmsdaf: '\\u29AD',\n\tangmsdag: '\\u29AE',\n\tangmsdah: '\\u29AF',\n\tangrt: '\\u221F',\n\tangrtvb: '\\u22BE',\n\tangrtvbd: '\\u299D',\n\tangsph: '\\u2222',\n\tangst: '\\u00C5',\n\tangzarr: '\\u237C',\n\tAogon: '\\u0104',\n\taogon: '\\u0105',\n\tAopf: '\\uD835\\uDD38',\n\taopf: '\\uD835\\uDD52',\n\tap: '\\u2248',\n\tapacir: '\\u2A6F',\n\tapE: '\\u2A70',\n\tape: '\\u224A',\n\tapid: '\\u224B',\n\tapos: '\\u0027',\n\tApplyFunction: '\\u2061',\n\tapprox: '\\u2248',\n\tapproxeq: '\\u224A',\n\tAring: '\\u00C5',\n\taring: '\\u00E5',\n\tAscr: '\\uD835\\uDC9C',\n\tascr: '\\uD835\\uDCB6',\n\tAssign: '\\u2254',\n\tast: '\\u002A',\n\tasymp: '\\u2248',\n\tasympeq: '\\u224D',\n\tAtilde: '\\u00C3',\n\tatilde: '\\u00E3',\n\tAuml: '\\u00C4',\n\tauml: '\\u00E4',\n\tawconint: '\\u2233',\n\tawint: '\\u2A11',\n\tbackcong: '\\u224C',\n\tbackepsilon: '\\u03F6',\n\tbackprime: '\\u2035',\n\tbacksim: '\\u223D',\n\tbacksimeq: '\\u22CD',\n\tBackslash: '\\u2216',\n\tBarv: '\\u2AE7',\n\tbarvee: '\\u22BD',\n\tBarwed: '\\u2306',\n\tbarwed: '\\u2305',\n\tbarwedge: '\\u2305',\n\tbbrk: '\\u23B5',\n\tbbrktbrk: '\\u23B6',\n\tbcong: '\\u224C',\n\tBcy: '\\u0411',\n\tbcy: '\\u0431',\n\tbdquo: '\\u201E',\n\tbecaus: '\\u2235',\n\tBecause: '\\u2235',\n\tbecause: '\\u2235',\n\tbemptyv: '\\u29B0',\n\tbepsi: '\\u03F6',\n\tbernou: '\\u212C',\n\tBernoullis: '\\u212C',\n\tBeta: '\\u0392',\n\tbeta: '\\u03B2',\n\tbeth: '\\u2136',\n\tbetween: '\\u226C',\n\tBfr: '\\uD835\\uDD05',\n\tbfr: '\\uD835\\uDD1F',\n\tbigcap: '\\u22C2',\n\tbigcirc: '\\u25EF',\n\tbigcup: '\\u22C3',\n\tbigodot: '\\u2A00',\n\tbigoplus: '\\u2A01',\n\tbigotimes: '\\u2A02',\n\tbigsqcup: '\\u2A06',\n\tbigstar: '\\u2605',\n\tbigtriangledown: '\\u25BD',\n\tbigtriangleup: '\\u25B3',\n\tbiguplus: '\\u2A04',\n\tbigvee: '\\u22C1',\n\tbigwedge: '\\u22C0',\n\tbkarow: '\\u290D',\n\tblacklozenge: '\\u29EB',\n\tblacksquare: '\\u25AA',\n\tblacktriangle: '\\u25B4',\n\tblacktriangledown: '\\u25BE',\n\tblacktriangleleft: '\\u25C2',\n\tblacktriangleright: '\\u25B8',\n\tblank: '\\u2423',\n\tblk12: '\\u2592',\n\tblk14: '\\u2591',\n\tblk34: '\\u2593',\n\tblock: '\\u2588',\n\tbne: '\\u003D\\u20E5',\n\tbnequiv: '\\u2261\\u20E5',\n\tbNot: '\\u2AED',\n\tbnot: '\\u2310',\n\tBopf: '\\uD835\\uDD39',\n\tbopf: '\\uD835\\uDD53',\n\tbot: '\\u22A5',\n\tbottom: '\\u22A5',\n\tbowtie: '\\u22C8',\n\tboxbox: '\\u29C9',\n\tboxDL: '\\u2557',\n\tboxDl: '\\u2556',\n\tboxdL: '\\u2555',\n\tboxdl: '\\u2510',\n\tboxDR: '\\u2554',\n\tboxDr: '\\u2553',\n\tboxdR: '\\u2552',\n\tboxdr: '\\u250C',\n\tboxH: '\\u2550',\n\tboxh: '\\u2500',\n\tboxHD: '\\u2566',\n\tboxHd: '\\u2564',\n\tboxhD: '\\u2565',\n\tboxhd: '\\u252C',\n\tboxHU: '\\u2569',\n\tboxHu: '\\u2567',\n\tboxhU: '\\u2568',\n\tboxhu: '\\u2534',\n\tboxminus: '\\u229F',\n\tboxplus: '\\u229E',\n\tboxtimes: '\\u22A0',\n\tboxUL: '\\u255D',\n\tboxUl: '\\u255C',\n\tboxuL: '\\u255B',\n\tboxul: '\\u2518',\n\tboxUR: '\\u255A',\n\tboxUr: '\\u2559',\n\tboxuR: '\\u2558',\n\tboxur: '\\u2514',\n\tboxV: '\\u2551',\n\tboxv: '\\u2502',\n\tboxVH: '\\u256C',\n\tboxVh: '\\u256B',\n\tboxvH: '\\u256A',\n\tboxvh: '\\u253C',\n\tboxVL: '\\u2563',\n\tboxVl: '\\u2562',\n\tboxvL: '\\u2561',\n\tboxvl: '\\u2524',\n\tboxVR: '\\u2560',\n\tboxVr: '\\u255F',\n\tboxvR: '\\u255E',\n\tboxvr: '\\u251C',\n\tbprime: '\\u2035',\n\tBreve: '\\u02D8',\n\tbreve: '\\u02D8',\n\tbrvbar: '\\u00A6',\n\tBscr: '\\u212C',\n\tbscr: '\\uD835\\uDCB7',\n\tbsemi: '\\u204F',\n\tbsim: '\\u223D',\n\tbsime: '\\u22CD',\n\tbsol: '\\u005C',\n\tbsolb: '\\u29C5',\n\tbsolhsub: '\\u27C8',\n\tbull: '\\u2022',\n\tbullet: '\\u2022',\n\tbump: '\\u224E',\n\tbumpE: '\\u2AAE',\n\tbumpe: '\\u224F',\n\tBumpeq: '\\u224E',\n\tbumpeq: '\\u224F',\n\tCacute: '\\u0106',\n\tcacute: '\\u0107',\n\tCap: '\\u22D2',\n\tcap: '\\u2229',\n\tcapand: '\\u2A44',\n\tcapbrcup: '\\u2A49',\n\tcapcap: '\\u2A4B',\n\tcapcup: '\\u2A47',\n\tcapdot: '\\u2A40',\n\tCapitalDifferentialD: '\\u2145',\n\tcaps: '\\u2229\\uFE00',\n\tcaret: '\\u2041',\n\tcaron: '\\u02C7',\n\tCayleys: '\\u212D',\n\tccaps: '\\u2A4D',\n\tCcaron: '\\u010C',\n\tccaron: '\\u010D',\n\tCcedil: '\\u00C7',\n\tccedil: '\\u00E7',\n\tCcirc: '\\u0108',\n\tccirc: '\\u0109',\n\tCconint: '\\u2230',\n\tccups: '\\u2A4C',\n\tccupssm: '\\u2A50',\n\tCdot: '\\u010A',\n\tcdot: '\\u010B',\n\tcedil: '\\u00B8',\n\tCedilla: '\\u00B8',\n\tcemptyv: '\\u29B2',\n\tcent: '\\u00A2',\n\tCenterDot: '\\u00B7',\n\tcenterdot: '\\u00B7',\n\tCfr: '\\u212D',\n\tcfr: '\\uD835\\uDD20',\n\tCHcy: '\\u0427',\n\tchcy: '\\u0447',\n\tcheck: '\\u2713',\n\tcheckmark: '\\u2713',\n\tChi: '\\u03A7',\n\tchi: '\\u03C7',\n\tcir: '\\u25CB',\n\tcirc: '\\u02C6',\n\tcirceq: '\\u2257',\n\tcirclearrowleft: '\\u21BA',\n\tcirclearrowright: '\\u21BB',\n\tcircledast: '\\u229B',\n\tcircledcirc: '\\u229A',\n\tcircleddash: '\\u229D',\n\tCircleDot: '\\u2299',\n\tcircledR: '\\u00AE',\n\tcircledS: '\\u24C8',\n\tCircleMinus: '\\u2296',\n\tCirclePlus: '\\u2295',\n\tCircleTimes: '\\u2297',\n\tcirE: '\\u29C3',\n\tcire: '\\u2257',\n\tcirfnint: '\\u2A10',\n\tcirmid: '\\u2AEF',\n\tcirscir: '\\u29C2',\n\tClockwiseContourIntegral: '\\u2232',\n\tCloseCurlyDoubleQuote: '\\u201D',\n\tCloseCurlyQuote: '\\u2019',\n\tclubs: '\\u2663',\n\tclubsuit: '\\u2663',\n\tColon: '\\u2237',\n\tcolon: '\\u003A',\n\tColone: '\\u2A74',\n\tcolone: '\\u2254',\n\tcoloneq: '\\u2254',\n\tcomma: '\\u002C',\n\tcommat: '\\u0040',\n\tcomp: '\\u2201',\n\tcompfn: '\\u2218',\n\tcomplement: '\\u2201',\n\tcomplexes: '\\u2102',\n\tcong: '\\u2245',\n\tcongdot: '\\u2A6D',\n\tCongruent: '\\u2261',\n\tConint: '\\u222F',\n\tconint: '\\u222E',\n\tContourIntegral: '\\u222E',\n\tCopf: '\\u2102',\n\tcopf: '\\uD835\\uDD54',\n\tcoprod: '\\u2210',\n\tCoproduct: '\\u2210',\n\tCOPY: '\\u00A9',\n\tcopy: '\\u00A9',\n\tcopysr: '\\u2117',\n\tCounterClockwiseContourIntegral: '\\u2233',\n\tcrarr: '\\u21B5',\n\tCross: '\\u2A2F',\n\tcross: '\\u2717',\n\tCscr: '\\uD835\\uDC9E',\n\tcscr: '\\uD835\\uDCB8',\n\tcsub: '\\u2ACF',\n\tcsube: '\\u2AD1',\n\tcsup: '\\u2AD0',\n\tcsupe: '\\u2AD2',\n\tctdot: '\\u22EF',\n\tcudarrl: '\\u2938',\n\tcudarrr: '\\u2935',\n\tcuepr: '\\u22DE',\n\tcuesc: '\\u22DF',\n\tcularr: '\\u21B6',\n\tcularrp: '\\u293D',\n\tCup: '\\u22D3',\n\tcup: '\\u222A',\n\tcupbrcap: '\\u2A48',\n\tCupCap: '\\u224D',\n\tcupcap: '\\u2A46',\n\tcupcup: '\\u2A4A',\n\tcupdot: '\\u228D',\n\tcupor: '\\u2A45',\n\tcups: '\\u222A\\uFE00',\n\tcurarr: '\\u21B7',\n\tcurarrm: '\\u293C',\n\tcurlyeqprec: '\\u22DE',\n\tcurlyeqsucc: '\\u22DF',\n\tcurlyvee: '\\u22CE',\n\tcurlywedge: '\\u22CF',\n\tcurren: '\\u00A4',\n\tcurvearrowleft: '\\u21B6',\n\tcurvearrowright: '\\u21B7',\n\tcuvee: '\\u22CE',\n\tcuwed: '\\u22CF',\n\tcwconint: '\\u2232',\n\tcwint: '\\u2231',\n\tcylcty: '\\u232D',\n\tDagger: '\\u2021',\n\tdagger: '\\u2020',\n\tdaleth: '\\u2138',\n\tDarr: '\\u21A1',\n\tdArr: '\\u21D3',\n\tdarr: '\\u2193',\n\tdash: '\\u2010',\n\tDashv: '\\u2AE4',\n\tdashv: '\\u22A3',\n\tdbkarow: '\\u290F',\n\tdblac: '\\u02DD',\n\tDcaron: '\\u010E',\n\tdcaron: '\\u010F',\n\tDcy: '\\u0414',\n\tdcy: '\\u0434',\n\tDD: '\\u2145',\n\tdd: '\\u2146',\n\tddagger: '\\u2021',\n\tddarr: '\\u21CA',\n\tDDotrahd: '\\u2911',\n\tddotseq: '\\u2A77',\n\tdeg: '\\u00B0',\n\tDel: '\\u2207',\n\tDelta: '\\u0394',\n\tdelta: '\\u03B4',\n\tdemptyv: '\\u29B1',\n\tdfisht: '\\u297F',\n\tDfr: '\\uD835\\uDD07',\n\tdfr: '\\uD835\\uDD21',\n\tdHar: '\\u2965',\n\tdharl: '\\u21C3',\n\tdharr: '\\u21C2',\n\tDiacriticalAcute: '\\u00B4',\n\tDiacriticalDot: '\\u02D9',\n\tDiacriticalDoubleAcute: '\\u02DD',\n\tDiacriticalGrave: '\\u0060',\n\tDiacriticalTilde: '\\u02DC',\n\tdiam: '\\u22C4',\n\tDiamond: '\\u22C4',\n\tdiamond: '\\u22C4',\n\tdiamondsuit: '\\u2666',\n\tdiams: '\\u2666',\n\tdie: '\\u00A8',\n\tDifferentialD: '\\u2146',\n\tdigamma: '\\u03DD',\n\tdisin: '\\u22F2',\n\tdiv: '\\u00F7',\n\tdivide: '\\u00F7',\n\tdivideontimes: '\\u22C7',\n\tdivonx: '\\u22C7',\n\tDJcy: '\\u0402',\n\tdjcy: '\\u0452',\n\tdlcorn: '\\u231E',\n\tdlcrop: '\\u230D',\n\tdollar: '\\u0024',\n\tDopf: '\\uD835\\uDD3B',\n\tdopf: '\\uD835\\uDD55',\n\tDot: '\\u00A8',\n\tdot: '\\u02D9',\n\tDotDot: '\\u20DC',\n\tdoteq: '\\u2250',\n\tdoteqdot: '\\u2251',\n\tDotEqual: '\\u2250',\n\tdotminus: '\\u2238',\n\tdotplus: '\\u2214',\n\tdotsquare: '\\u22A1',\n\tdoublebarwedge: '\\u2306',\n\tDoubleContourIntegral: '\\u222F',\n\tDoubleDot: '\\u00A8',\n\tDoubleDownArrow: '\\u21D3',\n\tDoubleLeftArrow: '\\u21D0',\n\tDoubleLeftRightArrow: '\\u21D4',\n\tDoubleLeftTee: '\\u2AE4',\n\tDoubleLongLeftArrow: '\\u27F8',\n\tDoubleLongLeftRightArrow: '\\u27FA',\n\tDoubleLongRightArrow: '\\u27F9',\n\tDoubleRightArrow: '\\u21D2',\n\tDoubleRightTee: '\\u22A8',\n\tDoubleUpArrow: '\\u21D1',\n\tDoubleUpDownArrow: '\\u21D5',\n\tDoubleVerticalBar: '\\u2225',\n\tDownArrow: '\\u2193',\n\tDownarrow: '\\u21D3',\n\tdownarrow: '\\u2193',\n\tDownArrowBar: '\\u2913',\n\tDownArrowUpArrow: '\\u21F5',\n\tDownBreve: '\\u0311',\n\tdowndownarrows: '\\u21CA',\n\tdownharpoonleft: '\\u21C3',\n\tdownharpoonright: '\\u21C2',\n\tDownLeftRightVector: '\\u2950',\n\tDownLeftTeeVector: '\\u295E',\n\tDownLeftVector: '\\u21BD',\n\tDownLeftVectorBar: '\\u2956',\n\tDownRightTeeVector: '\\u295F',\n\tDownRightVector: '\\u21C1',\n\tDownRightVectorBar: '\\u2957',\n\tDownTee: '\\u22A4',\n\tDownTeeArrow: '\\u21A7',\n\tdrbkarow: '\\u2910',\n\tdrcorn: '\\u231F',\n\tdrcrop: '\\u230C',\n\tDscr: '\\uD835\\uDC9F',\n\tdscr: '\\uD835\\uDCB9',\n\tDScy: '\\u0405',\n\tdscy: '\\u0455',\n\tdsol: '\\u29F6',\n\tDstrok: '\\u0110',\n\tdstrok: '\\u0111',\n\tdtdot: '\\u22F1',\n\tdtri: '\\u25BF',\n\tdtrif: '\\u25BE',\n\tduarr: '\\u21F5',\n\tduhar: '\\u296F',\n\tdwangle: '\\u29A6',\n\tDZcy: '\\u040F',\n\tdzcy: '\\u045F',\n\tdzigrarr: '\\u27FF',\n\tEacute: '\\u00C9',\n\teacute: '\\u00E9',\n\teaster: '\\u2A6E',\n\tEcaron: '\\u011A',\n\tecaron: '\\u011B',\n\tecir: '\\u2256',\n\tEcirc: '\\u00CA',\n\tecirc: '\\u00EA',\n\tecolon: '\\u2255',\n\tEcy: '\\u042D',\n\tecy: '\\u044D',\n\teDDot: '\\u2A77',\n\tEdot: '\\u0116',\n\teDot: '\\u2251',\n\tedot: '\\u0117',\n\tee: '\\u2147',\n\tefDot: '\\u2252',\n\tEfr: '\\uD835\\uDD08',\n\tefr: '\\uD835\\uDD22',\n\teg: '\\u2A9A',\n\tEgrave: '\\u00C8',\n\tegrave: '\\u00E8',\n\tegs: '\\u2A96',\n\tegsdot: '\\u2A98',\n\tel: '\\u2A99',\n\tElement: '\\u2208',\n\telinters: '\\u23E7',\n\tell: '\\u2113',\n\tels: '\\u2A95',\n\telsdot: '\\u2A97',\n\tEmacr: '\\u0112',\n\temacr: '\\u0113',\n\tempty: '\\u2205',\n\temptyset: '\\u2205',\n\tEmptySmallSquare: '\\u25FB',\n\temptyv: '\\u2205',\n\tEmptyVerySmallSquare: '\\u25AB',\n\temsp: '\\u2003',\n\temsp13: '\\u2004',\n\temsp14: '\\u2005',\n\tENG: '\\u014A',\n\teng: '\\u014B',\n\tensp: '\\u2002',\n\tEogon: '\\u0118',\n\teogon: '\\u0119',\n\tEopf: '\\uD835\\uDD3C',\n\teopf: '\\uD835\\uDD56',\n\tepar: '\\u22D5',\n\teparsl: '\\u29E3',\n\teplus: '\\u2A71',\n\tepsi: '\\u03B5',\n\tEpsilon: '\\u0395',\n\tepsilon: '\\u03B5',\n\tepsiv: '\\u03F5',\n\teqcirc: '\\u2256',\n\teqcolon: '\\u2255',\n\teqsim: '\\u2242',\n\teqslantgtr: '\\u2A96',\n\teqslantless: '\\u2A95',\n\tEqual: '\\u2A75',\n\tequals: '\\u003D',\n\tEqualTilde: '\\u2242',\n\tequest: '\\u225F',\n\tEquilibrium: '\\u21CC',\n\tequiv: '\\u2261',\n\tequivDD: '\\u2A78',\n\teqvparsl: '\\u29E5',\n\terarr: '\\u2971',\n\terDot: '\\u2253',\n\tEscr: '\\u2130',\n\tescr: '\\u212F',\n\tesdot: '\\u2250',\n\tEsim: '\\u2A73',\n\tesim: '\\u2242',\n\tEta: '\\u0397',\n\teta: '\\u03B7',\n\tETH: '\\u00D0',\n\teth: '\\u00F0',\n\tEuml: '\\u00CB',\n\teuml: '\\u00EB',\n\teuro: '\\u20AC',\n\texcl: '\\u0021',\n\texist: '\\u2203',\n\tExists: '\\u2203',\n\texpectation: '\\u2130',\n\tExponentialE: '\\u2147',\n\texponentiale: '\\u2147',\n\tfallingdotseq: '\\u2252',\n\tFcy: '\\u0424',\n\tfcy: '\\u0444',\n\tfemale: '\\u2640',\n\tffilig: '\\uFB03',\n\tfflig: '\\uFB00',\n\tffllig: '\\uFB04',\n\tFfr: '\\uD835\\uDD09',\n\tffr: '\\uD835\\uDD23',\n\tfilig: '\\uFB01',\n\tFilledSmallSquare: '\\u25FC',\n\tFilledVerySmallSquare: '\\u25AA',\n\tfjlig: '\\u0066\\u006A',\n\tflat: '\\u266D',\n\tfllig: '\\uFB02',\n\tfltns: '\\u25B1',\n\tfnof: '\\u0192',\n\tFopf: '\\uD835\\uDD3D',\n\tfopf: '\\uD835\\uDD57',\n\tForAll: '\\u2200',\n\tforall: '\\u2200',\n\tfork: '\\u22D4',\n\tforkv: '\\u2AD9',\n\tFouriertrf: '\\u2131',\n\tfpartint: '\\u2A0D',\n\tfrac12: '\\u00BD',\n\tfrac13: '\\u2153',\n\tfrac14: '\\u00BC',\n\tfrac15: '\\u2155',\n\tfrac16: '\\u2159',\n\tfrac18: '\\u215B',\n\tfrac23: '\\u2154',\n\tfrac25: '\\u2156',\n\tfrac34: '\\u00BE',\n\tfrac35: '\\u2157',\n\tfrac38: '\\u215C',\n\tfrac45: '\\u2158',\n\tfrac56: '\\u215A',\n\tfrac58: '\\u215D',\n\tfrac78: '\\u215E',\n\tfrasl: '\\u2044',\n\tfrown: '\\u2322',\n\tFscr: '\\u2131',\n\tfscr: '\\uD835\\uDCBB',\n\tgacute: '\\u01F5',\n\tGamma: '\\u0393',\n\tgamma: '\\u03B3',\n\tGammad: '\\u03DC',\n\tgammad: '\\u03DD',\n\tgap: '\\u2A86',\n\tGbreve: '\\u011E',\n\tgbreve: '\\u011F',\n\tGcedil: '\\u0122',\n\tGcirc: '\\u011C',\n\tgcirc: '\\u011D',\n\tGcy: '\\u0413',\n\tgcy: '\\u0433',\n\tGdot: '\\u0120',\n\tgdot: '\\u0121',\n\tgE: '\\u2267',\n\tge: '\\u2265',\n\tgEl: '\\u2A8C',\n\tgel: '\\u22DB',\n\tgeq: '\\u2265',\n\tgeqq: '\\u2267',\n\tgeqslant: '\\u2A7E',\n\tges: '\\u2A7E',\n\tgescc: '\\u2AA9',\n\tgesdot: '\\u2A80',\n\tgesdoto: '\\u2A82',\n\tgesdotol: '\\u2A84',\n\tgesl: '\\u22DB\\uFE00',\n\tgesles: '\\u2A94',\n\tGfr: '\\uD835\\uDD0A',\n\tgfr: '\\uD835\\uDD24',\n\tGg: '\\u22D9',\n\tgg: '\\u226B',\n\tggg: '\\u22D9',\n\tgimel: '\\u2137',\n\tGJcy: '\\u0403',\n\tgjcy: '\\u0453',\n\tgl: '\\u2277',\n\tgla: '\\u2AA5',\n\tglE: '\\u2A92',\n\tglj: '\\u2AA4',\n\tgnap: '\\u2A8A',\n\tgnapprox: '\\u2A8A',\n\tgnE: '\\u2269',\n\tgne: '\\u2A88',\n\tgneq: '\\u2A88',\n\tgneqq: '\\u2269',\n\tgnsim: '\\u22E7',\n\tGopf: '\\uD835\\uDD3E',\n\tgopf: '\\uD835\\uDD58',\n\tgrave: '\\u0060',\n\tGreaterEqual: '\\u2265',\n\tGreaterEqualLess: '\\u22DB',\n\tGreaterFullEqual: '\\u2267',\n\tGreaterGreater: '\\u2AA2',\n\tGreaterLess: '\\u2277',\n\tGreaterSlantEqual: '\\u2A7E',\n\tGreaterTilde: '\\u2273',\n\tGscr: '\\uD835\\uDCA2',\n\tgscr: '\\u210A',\n\tgsim: '\\u2273',\n\tgsime: '\\u2A8E',\n\tgsiml: '\\u2A90',\n\tGt: '\\u226B',\n\tGT: '\\u003E',\n\tgt: '\\u003E',\n\tgtcc: '\\u2AA7',\n\tgtcir: '\\u2A7A',\n\tgtdot: '\\u22D7',\n\tgtlPar: '\\u2995',\n\tgtquest: '\\u2A7C',\n\tgtrapprox: '\\u2A86',\n\tgtrarr: '\\u2978',\n\tgtrdot: '\\u22D7',\n\tgtreqless: '\\u22DB',\n\tgtreqqless: '\\u2A8C',\n\tgtrless: '\\u2277',\n\tgtrsim: '\\u2273',\n\tgvertneqq: '\\u2269\\uFE00',\n\tgvnE: '\\u2269\\uFE00',\n\tHacek: '\\u02C7',\n\thairsp: '\\u200A',\n\thalf: '\\u00BD',\n\thamilt: '\\u210B',\n\tHARDcy: '\\u042A',\n\thardcy: '\\u044A',\n\thArr: '\\u21D4',\n\tharr: '\\u2194',\n\tharrcir: '\\u2948',\n\tharrw: '\\u21AD',\n\tHat: '\\u005E',\n\thbar: '\\u210F',\n\tHcirc: '\\u0124',\n\thcirc: '\\u0125',\n\thearts: '\\u2665',\n\theartsuit: '\\u2665',\n\thellip: '\\u2026',\n\thercon: '\\u22B9',\n\tHfr: '\\u210C',\n\thfr: '\\uD835\\uDD25',\n\tHilbertSpace: '\\u210B',\n\thksearow: '\\u2925',\n\thkswarow: '\\u2926',\n\thoarr: '\\u21FF',\n\thomtht: '\\u223B',\n\thookleftarrow: '\\u21A9',\n\thookrightarrow: '\\u21AA',\n\tHopf: '\\u210D',\n\thopf: '\\uD835\\uDD59',\n\thorbar: '\\u2015',\n\tHorizontalLine: '\\u2500',\n\tHscr: '\\u210B',\n\thscr: '\\uD835\\uDCBD',\n\thslash: '\\u210F',\n\tHstrok: '\\u0126',\n\thstrok: '\\u0127',\n\tHumpDownHump: '\\u224E',\n\tHumpEqual: '\\u224F',\n\thybull: '\\u2043',\n\thyphen: '\\u2010',\n\tIacute: '\\u00CD',\n\tiacute: '\\u00ED',\n\tic: '\\u2063',\n\tIcirc: '\\u00CE',\n\ticirc: '\\u00EE',\n\tIcy: '\\u0418',\n\ticy: '\\u0438',\n\tIdot: '\\u0130',\n\tIEcy: '\\u0415',\n\tiecy: '\\u0435',\n\tiexcl: '\\u00A1',\n\tiff: '\\u21D4',\n\tIfr: '\\u2111',\n\tifr: '\\uD835\\uDD26',\n\tIgrave: '\\u00CC',\n\tigrave: '\\u00EC',\n\tii: '\\u2148',\n\tiiiint: '\\u2A0C',\n\tiiint: '\\u222D',\n\tiinfin: '\\u29DC',\n\tiiota: '\\u2129',\n\tIJlig: '\\u0132',\n\tijlig: '\\u0133',\n\tIm: '\\u2111',\n\tImacr: '\\u012A',\n\timacr: '\\u012B',\n\timage: '\\u2111',\n\tImaginaryI: '\\u2148',\n\timagline: '\\u2110',\n\timagpart: '\\u2111',\n\timath: '\\u0131',\n\timof: '\\u22B7',\n\timped: '\\u01B5',\n\tImplies: '\\u21D2',\n\tin: '\\u2208',\n\tincare: '\\u2105',\n\tinfin: '\\u221E',\n\tinfintie: '\\u29DD',\n\tinodot: '\\u0131',\n\tInt: '\\u222C',\n\tint: '\\u222B',\n\tintcal: '\\u22BA',\n\tintegers: '\\u2124',\n\tIntegral: '\\u222B',\n\tintercal: '\\u22BA',\n\tIntersection: '\\u22C2',\n\tintlarhk: '\\u2A17',\n\tintprod: '\\u2A3C',\n\tInvisibleComma: '\\u2063',\n\tInvisibleTimes: '\\u2062',\n\tIOcy: '\\u0401',\n\tiocy: '\\u0451',\n\tIogon: '\\u012E',\n\tiogon: '\\u012F',\n\tIopf: '\\uD835\\uDD40',\n\tiopf: '\\uD835\\uDD5A',\n\tIota: '\\u0399',\n\tiota: '\\u03B9',\n\tiprod: '\\u2A3C',\n\tiquest: '\\u00BF',\n\tIscr: '\\u2110',\n\tiscr: '\\uD835\\uDCBE',\n\tisin: '\\u2208',\n\tisindot: '\\u22F5',\n\tisinE: '\\u22F9',\n\tisins: '\\u22F4',\n\tisinsv: '\\u22F3',\n\tisinv: '\\u2208',\n\tit: '\\u2062',\n\tItilde: '\\u0128',\n\titilde: '\\u0129',\n\tIukcy: '\\u0406',\n\tiukcy: '\\u0456',\n\tIuml: '\\u00CF',\n\tiuml: '\\u00EF',\n\tJcirc: '\\u0134',\n\tjcirc: '\\u0135',\n\tJcy: '\\u0419',\n\tjcy: '\\u0439',\n\tJfr: '\\uD835\\uDD0D',\n\tjfr: '\\uD835\\uDD27',\n\tjmath: '\\u0237',\n\tJopf: '\\uD835\\uDD41',\n\tjopf: '\\uD835\\uDD5B',\n\tJscr: '\\uD835\\uDCA5',\n\tjscr: '\\uD835\\uDCBF',\n\tJsercy: '\\u0408',\n\tjsercy: '\\u0458',\n\tJukcy: '\\u0404',\n\tjukcy: '\\u0454',\n\tKappa: '\\u039A',\n\tkappa: '\\u03BA',\n\tkappav: '\\u03F0',\n\tKcedil: '\\u0136',\n\tkcedil: '\\u0137',\n\tKcy: '\\u041A',\n\tkcy: '\\u043A',\n\tKfr: '\\uD835\\uDD0E',\n\tkfr: '\\uD835\\uDD28',\n\tkgreen: '\\u0138',\n\tKHcy: '\\u0425',\n\tkhcy: '\\u0445',\n\tKJcy: '\\u040C',\n\tkjcy: '\\u045C',\n\tKopf: '\\uD835\\uDD42',\n\tkopf: '\\uD835\\uDD5C',\n\tKscr: '\\uD835\\uDCA6',\n\tkscr: '\\uD835\\uDCC0',\n\tlAarr: '\\u21DA',\n\tLacute: '\\u0139',\n\tlacute: '\\u013A',\n\tlaemptyv: '\\u29B4',\n\tlagran: '\\u2112',\n\tLambda: '\\u039B',\n\tlambda: '\\u03BB',\n\tLang: '\\u27EA',\n\tlang: '\\u27E8',\n\tlangd: '\\u2991',\n\tlangle: '\\u27E8',\n\tlap: '\\u2A85',\n\tLaplacetrf: '\\u2112',\n\tlaquo: '\\u00AB',\n\tLarr: '\\u219E',\n\tlArr: '\\u21D0',\n\tlarr: '\\u2190',\n\tlarrb: '\\u21E4',\n\tlarrbfs: '\\u291F',\n\tlarrfs: '\\u291D',\n\tlarrhk: '\\u21A9',\n\tlarrlp: '\\u21AB',\n\tlarrpl: '\\u2939',\n\tlarrsim: '\\u2973',\n\tlarrtl: '\\u21A2',\n\tlat: '\\u2AAB',\n\tlAtail: '\\u291B',\n\tlatail: '\\u2919',\n\tlate: '\\u2AAD',\n\tlates: '\\u2AAD\\uFE00',\n\tlBarr: '\\u290E',\n\tlbarr: '\\u290C',\n\tlbbrk: '\\u2772',\n\tlbrace: '\\u007B',\n\tlbrack: '\\u005B',\n\tlbrke: '\\u298B',\n\tlbrksld: '\\u298F',\n\tlbrkslu: '\\u298D',\n\tLcaron: '\\u013D',\n\tlcaron: '\\u013E',\n\tLcedil: '\\u013B',\n\tlcedil: '\\u013C',\n\tlceil: '\\u2308',\n\tlcub: '\\u007B',\n\tLcy: '\\u041B',\n\tlcy: '\\u043B',\n\tldca: '\\u2936',\n\tldquo: '\\u201C',\n\tldquor: '\\u201E',\n\tldrdhar: '\\u2967',\n\tldrushar: '\\u294B',\n\tldsh: '\\u21B2',\n\tlE: '\\u2266',\n\tle: '\\u2264',\n\tLeftAngleBracket: '\\u27E8',\n\tLeftArrow: '\\u2190',\n\tLeftarrow: '\\u21D0',\n\tleftarrow: '\\u2190',\n\tLeftArrowBar: '\\u21E4',\n\tLeftArrowRightArrow: '\\u21C6',\n\tleftarrowtail: '\\u21A2',\n\tLeftCeiling: '\\u2308',\n\tLeftDoubleBracket: '\\u27E6',\n\tLeftDownTeeVector: '\\u2961',\n\tLeftDownVector: '\\u21C3',\n\tLeftDownVectorBar: '\\u2959',\n\tLeftFloor: '\\u230A',\n\tleftharpoondown: '\\u21BD',\n\tleftharpoonup: '\\u21BC',\n\tleftleftarrows: '\\u21C7',\n\tLeftRightArrow: '\\u2194',\n\tLeftrightarrow: '\\u21D4',\n\tleftrightarrow: '\\u2194',\n\tleftrightarrows: '\\u21C6',\n\tleftrightharpoons: '\\u21CB',\n\tleftrightsquigarrow: '\\u21AD',\n\tLeftRightVector: '\\u294E',\n\tLeftTee: '\\u22A3',\n\tLeftTeeArrow: '\\u21A4',\n\tLeftTeeVector: '\\u295A',\n\tleftthreetimes: '\\u22CB',\n\tLeftTriangle: '\\u22B2',\n\tLeftTriangleBar: '\\u29CF',\n\tLeftTriangleEqual: '\\u22B4',\n\tLeftUpDownVector: '\\u2951',\n\tLeftUpTeeVector: '\\u2960',\n\tLeftUpVector: '\\u21BF',\n\tLeftUpVectorBar: '\\u2958',\n\tLeftVector: '\\u21BC',\n\tLeftVectorBar: '\\u2952',\n\tlEg: '\\u2A8B',\n\tleg: '\\u22DA',\n\tleq: '\\u2264',\n\tleqq: '\\u2266',\n\tleqslant: '\\u2A7D',\n\tles: '\\u2A7D',\n\tlescc: '\\u2AA8',\n\tlesdot: '\\u2A7F',\n\tlesdoto: '\\u2A81',\n\tlesdotor: '\\u2A83',\n\tlesg: '\\u22DA\\uFE00',\n\tlesges: '\\u2A93',\n\tlessapprox: '\\u2A85',\n\tlessdot: '\\u22D6',\n\tlesseqgtr: '\\u22DA',\n\tlesseqqgtr: '\\u2A8B',\n\tLessEqualGreater: '\\u22DA',\n\tLessFullEqual: '\\u2266',\n\tLessGreater: '\\u2276',\n\tlessgtr: '\\u2276',\n\tLessLess: '\\u2AA1',\n\tlesssim: '\\u2272',\n\tLessSlantEqual: '\\u2A7D',\n\tLessTilde: '\\u2272',\n\tlfisht: '\\u297C',\n\tlfloor: '\\u230A',\n\tLfr: '\\uD835\\uDD0F',\n\tlfr: '\\uD835\\uDD29',\n\tlg: '\\u2276',\n\tlgE: '\\u2A91',\n\tlHar: '\\u2962',\n\tlhard: '\\u21BD',\n\tlharu: '\\u21BC',\n\tlharul: '\\u296A',\n\tlhblk: '\\u2584',\n\tLJcy: '\\u0409',\n\tljcy: '\\u0459',\n\tLl: '\\u22D8',\n\tll: '\\u226A',\n\tllarr: '\\u21C7',\n\tllcorner: '\\u231E',\n\tLleftarrow: '\\u21DA',\n\tllhard: '\\u296B',\n\tlltri: '\\u25FA',\n\tLmidot: '\\u013F',\n\tlmidot: '\\u0140',\n\tlmoust: '\\u23B0',\n\tlmoustache: '\\u23B0',\n\tlnap: '\\u2A89',\n\tlnapprox: '\\u2A89',\n\tlnE: '\\u2268',\n\tlne: '\\u2A87',\n\tlneq: '\\u2A87',\n\tlneqq: '\\u2268',\n\tlnsim: '\\u22E6',\n\tloang: '\\u27EC',\n\tloarr: '\\u21FD',\n\tlobrk: '\\u27E6',\n\tLongLeftArrow: '\\u27F5',\n\tLongleftarrow: '\\u27F8',\n\tlongleftarrow: '\\u27F5',\n\tLongLeftRightArrow: '\\u27F7',\n\tLongleftrightarrow: '\\u27FA',\n\tlongleftrightarrow: '\\u27F7',\n\tlongmapsto: '\\u27FC',\n\tLongRightArrow: '\\u27F6',\n\tLongrightarrow: '\\u27F9',\n\tlongrightarrow: '\\u27F6',\n\tlooparrowleft: '\\u21AB',\n\tlooparrowright: '\\u21AC',\n\tlopar: '\\u2985',\n\tLopf: '\\uD835\\uDD43',\n\tlopf: '\\uD835\\uDD5D',\n\tloplus: '\\u2A2D',\n\tlotimes: '\\u2A34',\n\tlowast: '\\u2217',\n\tlowbar: '\\u005F',\n\tLowerLeftArrow: '\\u2199',\n\tLowerRightArrow: '\\u2198',\n\tloz: '\\u25CA',\n\tlozenge: '\\u25CA',\n\tlozf: '\\u29EB',\n\tlpar: '\\u0028',\n\tlparlt: '\\u2993',\n\tlrarr: '\\u21C6',\n\tlrcorner: '\\u231F',\n\tlrhar: '\\u21CB',\n\tlrhard: '\\u296D',\n\tlrm: '\\u200E',\n\tlrtri: '\\u22BF',\n\tlsaquo: '\\u2039',\n\tLscr: '\\u2112',\n\tlscr: '\\uD835\\uDCC1',\n\tLsh: '\\u21B0',\n\tlsh: '\\u21B0',\n\tlsim: '\\u2272',\n\tlsime: '\\u2A8D',\n\tlsimg: '\\u2A8F',\n\tlsqb: '\\u005B',\n\tlsquo: '\\u2018',\n\tlsquor: '\\u201A',\n\tLstrok: '\\u0141',\n\tlstrok: '\\u0142',\n\tLt: '\\u226A',\n\tLT: '\\u003C',\n\tlt: '\\u003C',\n\tltcc: '\\u2AA6',\n\tltcir: '\\u2A79',\n\tltdot: '\\u22D6',\n\tlthree: '\\u22CB',\n\tltimes: '\\u22C9',\n\tltlarr: '\\u2976',\n\tltquest: '\\u2A7B',\n\tltri: '\\u25C3',\n\tltrie: '\\u22B4',\n\tltrif: '\\u25C2',\n\tltrPar: '\\u2996',\n\tlurdshar: '\\u294A',\n\tluruhar: '\\u2966',\n\tlvertneqq: '\\u2268\\uFE00',\n\tlvnE: '\\u2268\\uFE00',\n\tmacr: '\\u00AF',\n\tmale: '\\u2642',\n\tmalt: '\\u2720',\n\tmaltese: '\\u2720',\n\tMap: '\\u2905',\n\tmap: '\\u21A6',\n\tmapsto: '\\u21A6',\n\tmapstodown: '\\u21A7',\n\tmapstoleft: '\\u21A4',\n\tmapstoup: '\\u21A5',\n\tmarker: '\\u25AE',\n\tmcomma: '\\u2A29',\n\tMcy: '\\u041C',\n\tmcy: '\\u043C',\n\tmdash: '\\u2014',\n\tmDDot: '\\u223A',\n\tmeasuredangle: '\\u2221',\n\tMediumSpace: '\\u205F',\n\tMellintrf: '\\u2133',\n\tMfr: '\\uD835\\uDD10',\n\tmfr: '\\uD835\\uDD2A',\n\tmho: '\\u2127',\n\tmicro: '\\u00B5',\n\tmid: '\\u2223',\n\tmidast: '\\u002A',\n\tmidcir: '\\u2AF0',\n\tmiddot: '\\u00B7',\n\tminus: '\\u2212',\n\tminusb: '\\u229F',\n\tminusd: '\\u2238',\n\tminusdu: '\\u2A2A',\n\tMinusPlus: '\\u2213',\n\tmlcp: '\\u2ADB',\n\tmldr: '\\u2026',\n\tmnplus: '\\u2213',\n\tmodels: '\\u22A7',\n\tMopf: '\\uD835\\uDD44',\n\tmopf: '\\uD835\\uDD5E',\n\tmp: '\\u2213',\n\tMscr: '\\u2133',\n\tmscr: '\\uD835\\uDCC2',\n\tmstpos: '\\u223E',\n\tMu: '\\u039C',\n\tmu: '\\u03BC',\n\tmultimap: '\\u22B8',\n\tmumap: '\\u22B8',\n\tnabla: '\\u2207',\n\tNacute: '\\u0143',\n\tnacute: '\\u0144',\n\tnang: '\\u2220\\u20D2',\n\tnap: '\\u2249',\n\tnapE: '\\u2A70\\u0338',\n\tnapid: '\\u224B\\u0338',\n\tnapos: '\\u0149',\n\tnapprox: '\\u2249',\n\tnatur: '\\u266E',\n\tnatural: '\\u266E',\n\tnaturals: '\\u2115',\n\tnbsp: '\\u00A0',\n\tnbump: '\\u224E\\u0338',\n\tnbumpe: '\\u224F\\u0338',\n\tncap: '\\u2A43',\n\tNcaron: '\\u0147',\n\tncaron: '\\u0148',\n\tNcedil: '\\u0145',\n\tncedil: '\\u0146',\n\tncong: '\\u2247',\n\tncongdot: '\\u2A6D\\u0338',\n\tncup: '\\u2A42',\n\tNcy: '\\u041D',\n\tncy: '\\u043D',\n\tndash: '\\u2013',\n\tne: '\\u2260',\n\tnearhk: '\\u2924',\n\tneArr: '\\u21D7',\n\tnearr: '\\u2197',\n\tnearrow: '\\u2197',\n\tnedot: '\\u2250\\u0338',\n\tNegativeMediumSpace: '\\u200B',\n\tNegativeThickSpace: '\\u200B',\n\tNegativeThinSpace: '\\u200B',\n\tNegativeVeryThinSpace: '\\u200B',\n\tnequiv: '\\u2262',\n\tnesear: '\\u2928',\n\tnesim: '\\u2242\\u0338',\n\tNestedGreaterGreater: '\\u226B',\n\tNestedLessLess: '\\u226A',\n\tNewLine: '\\u000A',\n\tnexist: '\\u2204',\n\tnexists: '\\u2204',\n\tNfr: '\\uD835\\uDD11',\n\tnfr: '\\uD835\\uDD2B',\n\tngE: '\\u2267\\u0338',\n\tnge: '\\u2271',\n\tngeq: '\\u2271',\n\tngeqq: '\\u2267\\u0338',\n\tngeqslant: '\\u2A7E\\u0338',\n\tnges: '\\u2A7E\\u0338',\n\tnGg: '\\u22D9\\u0338',\n\tngsim: '\\u2275',\n\tnGt: '\\u226B\\u20D2',\n\tngt: '\\u226F',\n\tngtr: '\\u226F',\n\tnGtv: '\\u226B\\u0338',\n\tnhArr: '\\u21CE',\n\tnharr: '\\u21AE',\n\tnhpar: '\\u2AF2',\n\tni: '\\u220B',\n\tnis: '\\u22FC',\n\tnisd: '\\u22FA',\n\tniv: '\\u220B',\n\tNJcy: '\\u040A',\n\tnjcy: '\\u045A',\n\tnlArr: '\\u21CD',\n\tnlarr: '\\u219A',\n\tnldr: '\\u2025',\n\tnlE: '\\u2266\\u0338',\n\tnle: '\\u2270',\n\tnLeftarrow: '\\u21CD',\n\tnleftarrow: '\\u219A',\n\tnLeftrightarrow: '\\u21CE',\n\tnleftrightarrow: '\\u21AE',\n\tnleq: '\\u2270',\n\tnleqq: '\\u2266\\u0338',\n\tnleqslant: '\\u2A7D\\u0338',\n\tnles: '\\u2A7D\\u0338',\n\tnless: '\\u226E',\n\tnLl: '\\u22D8\\u0338',\n\tnlsim: '\\u2274',\n\tnLt: '\\u226A\\u20D2',\n\tnlt: '\\u226E',\n\tnltri: '\\u22EA',\n\tnltrie: '\\u22EC',\n\tnLtv: '\\u226A\\u0338',\n\tnmid: '\\u2224',\n\tNoBreak: '\\u2060',\n\tNonBreakingSpace: '\\u00A0',\n\tNopf: '\\u2115',\n\tnopf: '\\uD835\\uDD5F',\n\tNot: '\\u2AEC',\n\tnot: '\\u00AC',\n\tNotCongruent: '\\u2262',\n\tNotCupCap: '\\u226D',\n\tNotDoubleVerticalBar: '\\u2226',\n\tNotElement: '\\u2209',\n\tNotEqual: '\\u2260',\n\tNotEqualTilde: '\\u2242\\u0338',\n\tNotExists: '\\u2204',\n\tNotGreater: '\\u226F',\n\tNotGreaterEqual: '\\u2271',\n\tNotGreaterFullEqual: '\\u2267\\u0338',\n\tNotGreaterGreater: '\\u226B\\u0338',\n\tNotGreaterLess: '\\u2279',\n\tNotGreaterSlantEqual: '\\u2A7E\\u0338',\n\tNotGreaterTilde: '\\u2275',\n\tNotHumpDownHump: '\\u224E\\u0338',\n\tNotHumpEqual: '\\u224F\\u0338',\n\tnotin: '\\u2209',\n\tnotindot: '\\u22F5\\u0338',\n\tnotinE: '\\u22F9\\u0338',\n\tnotinva: '\\u2209',\n\tnotinvb: '\\u22F7',\n\tnotinvc: '\\u22F6',\n\tNotLeftTriangle: '\\u22EA',\n\tNotLeftTriangleBar: '\\u29CF\\u0338',\n\tNotLeftTriangleEqual: '\\u22EC',\n\tNotLess: '\\u226E',\n\tNotLessEqual: '\\u2270',\n\tNotLessGreater: '\\u2278',\n\tNotLessLess: '\\u226A\\u0338',\n\tNotLessSlantEqual: '\\u2A7D\\u0338',\n\tNotLessTilde: '\\u2274',\n\tNotNestedGreaterGreater: '\\u2AA2\\u0338',\n\tNotNestedLessLess: '\\u2AA1\\u0338',\n\tnotni: '\\u220C',\n\tnotniva: '\\u220C',\n\tnotnivb: '\\u22FE',\n\tnotnivc: '\\u22FD',\n\tNotPrecedes: '\\u2280',\n\tNotPrecedesEqual: '\\u2AAF\\u0338',\n\tNotPrecedesSlantEqual: '\\u22E0',\n\tNotReverseElement: '\\u220C',\n\tNotRightTriangle: '\\u22EB',\n\tNotRightTriangleBar: '\\u29D0\\u0338',\n\tNotRightTriangleEqual: '\\u22ED',\n\tNotSquareSubset: '\\u228F\\u0338',\n\tNotSquareSubsetEqual: '\\u22E2',\n\tNotSquareSuperset: '\\u2290\\u0338',\n\tNotSquareSupersetEqual: '\\u22E3',\n\tNotSubset: '\\u2282\\u20D2',\n\tNotSubsetEqual: '\\u2288',\n\tNotSucceeds: '\\u2281',\n\tNotSucceedsEqual: '\\u2AB0\\u0338',\n\tNotSucceedsSlantEqual: '\\u22E1',\n\tNotSucceedsTilde: '\\u227F\\u0338',\n\tNotSuperset: '\\u2283\\u20D2',\n\tNotSupersetEqual: '\\u2289',\n\tNotTilde: '\\u2241',\n\tNotTildeEqual: '\\u2244',\n\tNotTildeFullEqual: '\\u2247',\n\tNotTildeTilde: '\\u2249',\n\tNotVerticalBar: '\\u2224',\n\tnpar: '\\u2226',\n\tnparallel: '\\u2226',\n\tnparsl: '\\u2AFD\\u20E5',\n\tnpart: '\\u2202\\u0338',\n\tnpolint: '\\u2A14',\n\tnpr: '\\u2280',\n\tnprcue: '\\u22E0',\n\tnpre: '\\u2AAF\\u0338',\n\tnprec: '\\u2280',\n\tnpreceq: '\\u2AAF\\u0338',\n\tnrArr: '\\u21CF',\n\tnrarr: '\\u219B',\n\tnrarrc: '\\u2933\\u0338',\n\tnrarrw: '\\u219D\\u0338',\n\tnRightarrow: '\\u21CF',\n\tnrightarrow: '\\u219B',\n\tnrtri: '\\u22EB',\n\tnrtrie: '\\u22ED',\n\tnsc: '\\u2281',\n\tnsccue: '\\u22E1',\n\tnsce: '\\u2AB0\\u0338',\n\tNscr: '\\uD835\\uDCA9',\n\tnscr: '\\uD835\\uDCC3',\n\tnshortmid: '\\u2224',\n\tnshortparallel: '\\u2226',\n\tnsim: '\\u2241',\n\tnsime: '\\u2244',\n\tnsimeq: '\\u2244',\n\tnsmid: '\\u2224',\n\tnspar: '\\u2226',\n\tnsqsube: '\\u22E2',\n\tnsqsupe: '\\u22E3',\n\tnsub: '\\u2284',\n\tnsubE: '\\u2AC5\\u0338',\n\tnsube: '\\u2288',\n\tnsubset: '\\u2282\\u20D2',\n\tnsubseteq: '\\u2288',\n\tnsubseteqq: '\\u2AC5\\u0338',\n\tnsucc: '\\u2281',\n\tnsucceq: '\\u2AB0\\u0338',\n\tnsup: '\\u2285',\n\tnsupE: '\\u2AC6\\u0338',\n\tnsupe: '\\u2289',\n\tnsupset: '\\u2283\\u20D2',\n\tnsupseteq: '\\u2289',\n\tnsupseteqq: '\\u2AC6\\u0338',\n\tntgl: '\\u2279',\n\tNtilde: '\\u00D1',\n\tntilde: '\\u00F1',\n\tntlg: '\\u2278',\n\tntriangleleft: '\\u22EA',\n\tntrianglelefteq: '\\u22EC',\n\tntriangleright: '\\u22EB',\n\tntrianglerighteq: '\\u22ED',\n\tNu: '\\u039D',\n\tnu: '\\u03BD',\n\tnum: '\\u0023',\n\tnumero: '\\u2116',\n\tnumsp: '\\u2007',\n\tnvap: '\\u224D\\u20D2',\n\tnVDash: '\\u22AF',\n\tnVdash: '\\u22AE',\n\tnvDash: '\\u22AD',\n\tnvdash: '\\u22AC',\n\tnvge: '\\u2265\\u20D2',\n\tnvgt: '\\u003E\\u20D2',\n\tnvHarr: '\\u2904',\n\tnvinfin: '\\u29DE',\n\tnvlArr: '\\u2902',\n\tnvle: '\\u2264\\u20D2',\n\tnvlt: '\\u003C\\u20D2',\n\tnvltrie: '\\u22B4\\u20D2',\n\tnvrArr: '\\u2903',\n\tnvrtrie: '\\u22B5\\u20D2',\n\tnvsim: '\\u223C\\u20D2',\n\tnwarhk: '\\u2923',\n\tnwArr: '\\u21D6',\n\tnwarr: '\\u2196',\n\tnwarrow: '\\u2196',\n\tnwnear: '\\u2927',\n\tOacute: '\\u00D3',\n\toacute: '\\u00F3',\n\toast: '\\u229B',\n\tocir: '\\u229A',\n\tOcirc: '\\u00D4',\n\tocirc: '\\u00F4',\n\tOcy: '\\u041E',\n\tocy: '\\u043E',\n\todash: '\\u229D',\n\tOdblac: '\\u0150',\n\todblac: '\\u0151',\n\todiv: '\\u2A38',\n\todot: '\\u2299',\n\todsold: '\\u29BC',\n\tOElig: '\\u0152',\n\toelig: '\\u0153',\n\tofcir: '\\u29BF',\n\tOfr: '\\uD835\\uDD12',\n\tofr: '\\uD835\\uDD2C',\n\togon: '\\u02DB',\n\tOgrave: '\\u00D2',\n\tograve: '\\u00F2',\n\togt: '\\u29C1',\n\tohbar: '\\u29B5',\n\tohm: '\\u03A9',\n\toint: '\\u222E',\n\tolarr: '\\u21BA',\n\tolcir: '\\u29BE',\n\tolcross: '\\u29BB',\n\toline: '\\u203E',\n\tolt: '\\u29C0',\n\tOmacr: '\\u014C',\n\tomacr: '\\u014D',\n\tOmega: '\\u03A9',\n\tomega: '\\u03C9',\n\tOmicron: '\\u039F',\n\tomicron: '\\u03BF',\n\tomid: '\\u29B6',\n\tominus: '\\u2296',\n\tOopf: '\\uD835\\uDD46',\n\toopf: '\\uD835\\uDD60',\n\topar: '\\u29B7',\n\tOpenCurlyDoubleQuote: '\\u201C',\n\tOpenCurlyQuote: '\\u2018',\n\toperp: '\\u29B9',\n\toplus: '\\u2295',\n\tOr: '\\u2A54',\n\tor: '\\u2228',\n\torarr: '\\u21BB',\n\tord: '\\u2A5D',\n\torder: '\\u2134',\n\torderof: '\\u2134',\n\tordf: '\\u00AA',\n\tordm: '\\u00BA',\n\torigof: '\\u22B6',\n\toror: '\\u2A56',\n\torslope: '\\u2A57',\n\torv: '\\u2A5B',\n\toS: '\\u24C8',\n\tOscr: '\\uD835\\uDCAA',\n\toscr: '\\u2134',\n\tOslash: '\\u00D8',\n\toslash: '\\u00F8',\n\tosol: '\\u2298',\n\tOtilde: '\\u00D5',\n\totilde: '\\u00F5',\n\tOtimes: '\\u2A37',\n\totimes: '\\u2297',\n\totimesas: '\\u2A36',\n\tOuml: '\\u00D6',\n\touml: '\\u00F6',\n\tovbar: '\\u233D',\n\tOverBar: '\\u203E',\n\tOverBrace: '\\u23DE',\n\tOverBracket: '\\u23B4',\n\tOverParenthesis: '\\u23DC',\n\tpar: '\\u2225',\n\tpara: '\\u00B6',\n\tparallel: '\\u2225',\n\tparsim: '\\u2AF3',\n\tparsl: '\\u2AFD',\n\tpart: '\\u2202',\n\tPartialD: '\\u2202',\n\tPcy: '\\u041F',\n\tpcy: '\\u043F',\n\tpercnt: '\\u0025',\n\tperiod: '\\u002E',\n\tpermil: '\\u2030',\n\tperp: '\\u22A5',\n\tpertenk: '\\u2031',\n\tPfr: '\\uD835\\uDD13',\n\tpfr: '\\uD835\\uDD2D',\n\tPhi: '\\u03A6',\n\tphi: '\\u03C6',\n\tphiv: '\\u03D5',\n\tphmmat: '\\u2133',\n\tphone: '\\u260E',\n\tPi: '\\u03A0',\n\tpi: '\\u03C0',\n\tpitchfork: '\\u22D4',\n\tpiv: '\\u03D6',\n\tplanck: '\\u210F',\n\tplanckh: '\\u210E',\n\tplankv: '\\u210F',\n\tplus: '\\u002B',\n\tplusacir: '\\u2A23',\n\tplusb: '\\u229E',\n\tpluscir: '\\u2A22',\n\tplusdo: '\\u2214',\n\tplusdu: '\\u2A25',\n\tpluse: '\\u2A72',\n\tPlusMinus: '\\u00B1',\n\tplusmn: '\\u00B1',\n\tplussim: '\\u2A26',\n\tplustwo: '\\u2A27',\n\tpm: '\\u00B1',\n\tPoincareplane: '\\u210C',\n\tpointint: '\\u2A15',\n\tPopf: '\\u2119',\n\tpopf: '\\uD835\\uDD61',\n\tpound: '\\u00A3',\n\tPr: '\\u2ABB',\n\tpr: '\\u227A',\n\tprap: '\\u2AB7',\n\tprcue: '\\u227C',\n\tprE: '\\u2AB3',\n\tpre: '\\u2AAF',\n\tprec: '\\u227A',\n\tprecapprox: '\\u2AB7',\n\tpreccurlyeq: '\\u227C',\n\tPrecedes: '\\u227A',\n\tPrecedesEqual: '\\u2AAF',\n\tPrecedesSlantEqual: '\\u227C',\n\tPrecedesTilde: '\\u227E',\n\tpreceq: '\\u2AAF',\n\tprecnapprox: '\\u2AB9',\n\tprecneqq: '\\u2AB5',\n\tprecnsim: '\\u22E8',\n\tprecsim: '\\u227E',\n\tPrime: '\\u2033',\n\tprime: '\\u2032',\n\tprimes: '\\u2119',\n\tprnap: '\\u2AB9',\n\tprnE: '\\u2AB5',\n\tprnsim: '\\u22E8',\n\tprod: '\\u220F',\n\tProduct: '\\u220F',\n\tprofalar: '\\u232E',\n\tprofline: '\\u2312',\n\tprofsurf: '\\u2313',\n\tprop: '\\u221D',\n\tProportion: '\\u2237',\n\tProportional: '\\u221D',\n\tpropto: '\\u221D',\n\tprsim: '\\u227E',\n\tprurel: '\\u22B0',\n\tPscr: '\\uD835\\uDCAB',\n\tpscr: '\\uD835\\uDCC5',\n\tPsi: '\\u03A8',\n\tpsi: '\\u03C8',\n\tpuncsp: '\\u2008',\n\tQfr: '\\uD835\\uDD14',\n\tqfr: '\\uD835\\uDD2E',\n\tqint: '\\u2A0C',\n\tQopf: '\\u211A',\n\tqopf: '\\uD835\\uDD62',\n\tqprime: '\\u2057',\n\tQscr: '\\uD835\\uDCAC',\n\tqscr: '\\uD835\\uDCC6',\n\tquaternions: '\\u210D',\n\tquatint: '\\u2A16',\n\tquest: '\\u003F',\n\tquesteq: '\\u225F',\n\tQUOT: '\\u0022',\n\tquot: '\\u0022',\n\trAarr: '\\u21DB',\n\trace: '\\u223D\\u0331',\n\tRacute: '\\u0154',\n\tracute: '\\u0155',\n\tradic: '\\u221A',\n\traemptyv: '\\u29B3',\n\tRang: '\\u27EB',\n\trang: '\\u27E9',\n\trangd: '\\u2992',\n\trange: '\\u29A5',\n\trangle: '\\u27E9',\n\traquo: '\\u00BB',\n\tRarr: '\\u21A0',\n\trArr: '\\u21D2',\n\trarr: '\\u2192',\n\trarrap: '\\u2975',\n\trarrb: '\\u21E5',\n\trarrbfs: '\\u2920',\n\trarrc: '\\u2933',\n\trarrfs: '\\u291E',\n\trarrhk: '\\u21AA',\n\trarrlp: '\\u21AC',\n\trarrpl: '\\u2945',\n\trarrsim: '\\u2974',\n\tRarrtl: '\\u2916',\n\trarrtl: '\\u21A3',\n\trarrw: '\\u219D',\n\trAtail: '\\u291C',\n\tratail: '\\u291A',\n\tratio: '\\u2236',\n\trationals: '\\u211A',\n\tRBarr: '\\u2910',\n\trBarr: '\\u290F',\n\trbarr: '\\u290D',\n\trbbrk: '\\u2773',\n\trbrace: '\\u007D',\n\trbrack: '\\u005D',\n\trbrke: '\\u298C',\n\trbrksld: '\\u298E',\n\trbrkslu: '\\u2990',\n\tRcaron: '\\u0158',\n\trcaron: '\\u0159',\n\tRcedil: '\\u0156',\n\trcedil: '\\u0157',\n\trceil: '\\u2309',\n\trcub: '\\u007D',\n\tRcy: '\\u0420',\n\trcy: '\\u0440',\n\trdca: '\\u2937',\n\trdldhar: '\\u2969',\n\trdquo: '\\u201D',\n\trdquor: '\\u201D',\n\trdsh: '\\u21B3',\n\tRe: '\\u211C',\n\treal: '\\u211C',\n\trealine: '\\u211B',\n\trealpart: '\\u211C',\n\treals: '\\u211D',\n\trect: '\\u25AD',\n\tREG: '\\u00AE',\n\treg: '\\u00AE',\n\tReverseElement: '\\u220B',\n\tReverseEquilibrium: '\\u21CB',\n\tReverseUpEquilibrium: '\\u296F',\n\trfisht: '\\u297D',\n\trfloor: '\\u230B',\n\tRfr: '\\u211C',\n\trfr: '\\uD835\\uDD2F',\n\trHar: '\\u2964',\n\trhard: '\\u21C1',\n\trharu: '\\u21C0',\n\trharul: '\\u296C',\n\tRho: '\\u03A1',\n\trho: '\\u03C1',\n\trhov: '\\u03F1',\n\tRightAngleBracket: '\\u27E9',\n\tRightArrow: '\\u2192',\n\tRightarrow: '\\u21D2',\n\trightarrow: '\\u2192',\n\tRightArrowBar: '\\u21E5',\n\tRightArrowLeftArrow: '\\u21C4',\n\trightarrowtail: '\\u21A3',\n\tRightCeiling: '\\u2309',\n\tRightDoubleBracket: '\\u27E7',\n\tRightDownTeeVector: '\\u295D',\n\tRightDownVector: '\\u21C2',\n\tRightDownVectorBar: '\\u2955',\n\tRightFloor: '\\u230B',\n\trightharpoondown: '\\u21C1',\n\trightharpoonup: '\\u21C0',\n\trightleftarrows: '\\u21C4',\n\trightleftharpoons: '\\u21CC',\n\trightrightarrows: '\\u21C9',\n\trightsquigarrow: '\\u219D',\n\tRightTee: '\\u22A2',\n\tRightTeeArrow: '\\u21A6',\n\tRightTeeVector: '\\u295B',\n\trightthreetimes: '\\u22CC',\n\tRightTriangle: '\\u22B3',\n\tRightTriangleBar: '\\u29D0',\n\tRightTriangleEqual: '\\u22B5',\n\tRightUpDownVector: '\\u294F',\n\tRightUpTeeVector: '\\u295C',\n\tRightUpVector: '\\u21BE',\n\tRightUpVectorBar: '\\u2954',\n\tRightVector: '\\u21C0',\n\tRightVectorBar: '\\u2953',\n\tring: '\\u02DA',\n\trisingdotseq: '\\u2253',\n\trlarr: '\\u21C4',\n\trlhar: '\\u21CC',\n\trlm: '\\u200F',\n\trmoust: '\\u23B1',\n\trmoustache: '\\u23B1',\n\trnmid: '\\u2AEE',\n\troang: '\\u27ED',\n\troarr: '\\u21FE',\n\trobrk: '\\u27E7',\n\tropar: '\\u2986',\n\tRopf: '\\u211D',\n\tropf: '\\uD835\\uDD63',\n\troplus: '\\u2A2E',\n\trotimes: '\\u2A35',\n\tRoundImplies: '\\u2970',\n\trpar: '\\u0029',\n\trpargt: '\\u2994',\n\trppolint: '\\u2A12',\n\trrarr: '\\u21C9',\n\tRrightarrow: '\\u21DB',\n\trsaquo: '\\u203A',\n\tRscr: '\\u211B',\n\trscr: '\\uD835\\uDCC7',\n\tRsh: '\\u21B1',\n\trsh: '\\u21B1',\n\trsqb: '\\u005D',\n\trsquo: '\\u2019',\n\trsquor: '\\u2019',\n\trthree: '\\u22CC',\n\trtimes: '\\u22CA',\n\trtri: '\\u25B9',\n\trtrie: '\\u22B5',\n\trtrif: '\\u25B8',\n\trtriltri: '\\u29CE',\n\tRuleDelayed: '\\u29F4',\n\truluhar: '\\u2968',\n\trx: '\\u211E',\n\tSacute: '\\u015A',\n\tsacute: '\\u015B',\n\tsbquo: '\\u201A',\n\tSc: '\\u2ABC',\n\tsc: '\\u227B',\n\tscap: '\\u2AB8',\n\tScaron: '\\u0160',\n\tscaron: '\\u0161',\n\tsccue: '\\u227D',\n\tscE: '\\u2AB4',\n\tsce: '\\u2AB0',\n\tScedil: '\\u015E',\n\tscedil: '\\u015F',\n\tScirc: '\\u015C',\n\tscirc: '\\u015D',\n\tscnap: '\\u2ABA',\n\tscnE: '\\u2AB6',\n\tscnsim: '\\u22E9',\n\tscpolint: '\\u2A13',\n\tscsim: '\\u227F',\n\tScy: '\\u0421',\n\tscy: '\\u0441',\n\tsdot: '\\u22C5',\n\tsdotb: '\\u22A1',\n\tsdote: '\\u2A66',\n\tsearhk: '\\u2925',\n\tseArr: '\\u21D8',\n\tsearr: '\\u2198',\n\tsearrow: '\\u2198',\n\tsect: '\\u00A7',\n\tsemi: '\\u003B',\n\tseswar: '\\u2929',\n\tsetminus: '\\u2216',\n\tsetmn: '\\u2216',\n\tsext: '\\u2736',\n\tSfr: '\\uD835\\uDD16',\n\tsfr: '\\uD835\\uDD30',\n\tsfrown: '\\u2322',\n\tsharp: '\\u266F',\n\tSHCHcy: '\\u0429',\n\tshchcy: '\\u0449',\n\tSHcy: '\\u0428',\n\tshcy: '\\u0448',\n\tShortDownArrow: '\\u2193',\n\tShortLeftArrow: '\\u2190',\n\tshortmid: '\\u2223',\n\tshortparallel: '\\u2225',\n\tShortRightArrow: '\\u2192',\n\tShortUpArrow: '\\u2191',\n\tshy: '\\u00AD',\n\tSigma: '\\u03A3',\n\tsigma: '\\u03C3',\n\tsigmaf: '\\u03C2',\n\tsigmav: '\\u03C2',\n\tsim: '\\u223C',\n\tsimdot: '\\u2A6A',\n\tsime: '\\u2243',\n\tsimeq: '\\u2243',\n\tsimg: '\\u2A9E',\n\tsimgE: '\\u2AA0',\n\tsiml: '\\u2A9D',\n\tsimlE: '\\u2A9F',\n\tsimne: '\\u2246',\n\tsimplus: '\\u2A24',\n\tsimrarr: '\\u2972',\n\tslarr: '\\u2190',\n\tSmallCircle: '\\u2218',\n\tsmallsetminus: '\\u2216',\n\tsmashp: '\\u2A33',\n\tsmeparsl: '\\u29E4',\n\tsmid: '\\u2223',\n\tsmile: '\\u2323',\n\tsmt: '\\u2AAA',\n\tsmte: '\\u2AAC',\n\tsmtes: '\\u2AAC\\uFE00',\n\tSOFTcy: '\\u042C',\n\tsoftcy: '\\u044C',\n\tsol: '\\u002F',\n\tsolb: '\\u29C4',\n\tsolbar: '\\u233F',\n\tSopf: '\\uD835\\uDD4A',\n\tsopf: '\\uD835\\uDD64',\n\tspades: '\\u2660',\n\tspadesuit: '\\u2660',\n\tspar: '\\u2225',\n\tsqcap: '\\u2293',\n\tsqcaps: '\\u2293\\uFE00',\n\tsqcup: '\\u2294',\n\tsqcups: '\\u2294\\uFE00',\n\tSqrt: '\\u221A',\n\tsqsub: '\\u228F',\n\tsqsube: '\\u2291',\n\tsqsubset: '\\u228F',\n\tsqsubseteq: '\\u2291',\n\tsqsup: '\\u2290',\n\tsqsupe: '\\u2292',\n\tsqsupset: '\\u2290',\n\tsqsupseteq: '\\u2292',\n\tsqu: '\\u25A1',\n\tSquare: '\\u25A1',\n\tsquare: '\\u25A1',\n\tSquareIntersection: '\\u2293',\n\tSquareSubset: '\\u228F',\n\tSquareSubsetEqual: '\\u2291',\n\tSquareSuperset: '\\u2290',\n\tSquareSupersetEqual: '\\u2292',\n\tSquareUnion: '\\u2294',\n\tsquarf: '\\u25AA',\n\tsquf: '\\u25AA',\n\tsrarr: '\\u2192',\n\tSscr: '\\uD835\\uDCAE',\n\tsscr: '\\uD835\\uDCC8',\n\tssetmn: '\\u2216',\n\tssmile: '\\u2323',\n\tsstarf: '\\u22C6',\n\tStar: '\\u22C6',\n\tstar: '\\u2606',\n\tstarf: '\\u2605',\n\tstraightepsilon: '\\u03F5',\n\tstraightphi: '\\u03D5',\n\tstrns: '\\u00AF',\n\tSub: '\\u22D0',\n\tsub: '\\u2282',\n\tsubdot: '\\u2ABD',\n\tsubE: '\\u2AC5',\n\tsube: '\\u2286',\n\tsubedot: '\\u2AC3',\n\tsubmult: '\\u2AC1',\n\tsubnE: '\\u2ACB',\n\tsubne: '\\u228A',\n\tsubplus: '\\u2ABF',\n\tsubrarr: '\\u2979',\n\tSubset: '\\u22D0',\n\tsubset: '\\u2282',\n\tsubseteq: '\\u2286',\n\tsubseteqq: '\\u2AC5',\n\tSubsetEqual: '\\u2286',\n\tsubsetneq: '\\u228A',\n\tsubsetneqq: '\\u2ACB',\n\tsubsim: '\\u2AC7',\n\tsubsub: '\\u2AD5',\n\tsubsup: '\\u2AD3',\n\tsucc: '\\u227B',\n\tsuccapprox: '\\u2AB8',\n\tsucccurlyeq: '\\u227D',\n\tSucceeds: '\\u227B',\n\tSucceedsEqual: '\\u2AB0',\n\tSucceedsSlantEqual: '\\u227D',\n\tSucceedsTilde: '\\u227F',\n\tsucceq: '\\u2AB0',\n\tsuccnapprox: '\\u2ABA',\n\tsuccneqq: '\\u2AB6',\n\tsuccnsim: '\\u22E9',\n\tsuccsim: '\\u227F',\n\tSuchThat: '\\u220B',\n\tSum: '\\u2211',\n\tsum: '\\u2211',\n\tsung: '\\u266A',\n\tSup: '\\u22D1',\n\tsup: '\\u2283',\n\tsup1: '\\u00B9',\n\tsup2: '\\u00B2',\n\tsup3: '\\u00B3',\n\tsupdot: '\\u2ABE',\n\tsupdsub: '\\u2AD8',\n\tsupE: '\\u2AC6',\n\tsupe: '\\u2287',\n\tsupedot: '\\u2AC4',\n\tSuperset: '\\u2283',\n\tSupersetEqual: '\\u2287',\n\tsuphsol: '\\u27C9',\n\tsuphsub: '\\u2AD7',\n\tsuplarr: '\\u297B',\n\tsupmult: '\\u2AC2',\n\tsupnE: '\\u2ACC',\n\tsupne: '\\u228B',\n\tsupplus: '\\u2AC0',\n\tSupset: '\\u22D1',\n\tsupset: '\\u2283',\n\tsupseteq: '\\u2287',\n\tsupseteqq: '\\u2AC6',\n\tsupsetneq: '\\u228B',\n\tsupsetneqq: '\\u2ACC',\n\tsupsim: '\\u2AC8',\n\tsupsub: '\\u2AD4',\n\tsupsup: '\\u2AD6',\n\tswarhk: '\\u2926',\n\tswArr: '\\u21D9',\n\tswarr: '\\u2199',\n\tswarrow: '\\u2199',\n\tswnwar: '\\u292A',\n\tszlig: '\\u00DF',\n\tTab: '\\u0009',\n\ttarget: '\\u2316',\n\tTau: '\\u03A4',\n\ttau: '\\u03C4',\n\ttbrk: '\\u23B4',\n\tTcaron: '\\u0164',\n\ttcaron: '\\u0165',\n\tTcedil: '\\u0162',\n\ttcedil: '\\u0163',\n\tTcy: '\\u0422',\n\ttcy: '\\u0442',\n\ttdot: '\\u20DB',\n\ttelrec: '\\u2315',\n\tTfr: '\\uD835\\uDD17',\n\ttfr: '\\uD835\\uDD31',\n\tthere4: '\\u2234',\n\tTherefore: '\\u2234',\n\ttherefore: '\\u2234',\n\tTheta: '\\u0398',\n\ttheta: '\\u03B8',\n\tthetasym: '\\u03D1',\n\tthetav: '\\u03D1',\n\tthickapprox: '\\u2248',\n\tthicksim: '\\u223C',\n\tThickSpace: '\\u205F\\u200A',\n\tthinsp: '\\u2009',\n\tThinSpace: '\\u2009',\n\tthkap: '\\u2248',\n\tthksim: '\\u223C',\n\tTHORN: '\\u00DE',\n\tthorn: '\\u00FE',\n\tTilde: '\\u223C',\n\ttilde: '\\u02DC',\n\tTildeEqual: '\\u2243',\n\tTildeFullEqual: '\\u2245',\n\tTildeTilde: '\\u2248',\n\ttimes: '\\u00D7',\n\ttimesb: '\\u22A0',\n\ttimesbar: '\\u2A31',\n\ttimesd: '\\u2A30',\n\ttint: '\\u222D',\n\ttoea: '\\u2928',\n\ttop: '\\u22A4',\n\ttopbot: '\\u2336',\n\ttopcir: '\\u2AF1',\n\tTopf: '\\uD835\\uDD4B',\n\ttopf: '\\uD835\\uDD65',\n\ttopfork: '\\u2ADA',\n\ttosa: '\\u2929',\n\ttprime: '\\u2034',\n\tTRADE: '\\u2122',\n\ttrade: '\\u2122',\n\ttriangle: '\\u25B5',\n\ttriangledown: '\\u25BF',\n\ttriangleleft: '\\u25C3',\n\ttrianglelefteq: '\\u22B4',\n\ttriangleq: '\\u225C',\n\ttriangleright: '\\u25B9',\n\ttrianglerighteq: '\\u22B5',\n\ttridot: '\\u25EC',\n\ttrie: '\\u225C',\n\ttriminus: '\\u2A3A',\n\tTripleDot: '\\u20DB',\n\ttriplus: '\\u2A39',\n\ttrisb: '\\u29CD',\n\ttritime: '\\u2A3B',\n\ttrpezium: '\\u23E2',\n\tTscr: '\\uD835\\uDCAF',\n\ttscr: '\\uD835\\uDCC9',\n\tTScy: '\\u0426',\n\ttscy: '\\u0446',\n\tTSHcy: '\\u040B',\n\ttshcy: '\\u045B',\n\tTstrok: '\\u0166',\n\ttstrok: '\\u0167',\n\ttwixt: '\\u226C',\n\ttwoheadleftarrow: '\\u219E',\n\ttwoheadrightarrow: '\\u21A0',\n\tUacute: '\\u00DA',\n\tuacute: '\\u00FA',\n\tUarr: '\\u219F',\n\tuArr: '\\u21D1',\n\tuarr: '\\u2191',\n\tUarrocir: '\\u2949',\n\tUbrcy: '\\u040E',\n\tubrcy: '\\u045E',\n\tUbreve: '\\u016C',\n\tubreve: '\\u016D',\n\tUcirc: '\\u00DB',\n\tucirc: '\\u00FB',\n\tUcy: '\\u0423',\n\tucy: '\\u0443',\n\tudarr: '\\u21C5',\n\tUdblac: '\\u0170',\n\tudblac: '\\u0171',\n\tudhar: '\\u296E',\n\tufisht: '\\u297E',\n\tUfr: '\\uD835\\uDD18',\n\tufr: '\\uD835\\uDD32',\n\tUgrave: '\\u00D9',\n\tugrave: '\\u00F9',\n\tuHar: '\\u2963',\n\tuharl: '\\u21BF',\n\tuharr: '\\u21BE',\n\tuhblk: '\\u2580',\n\tulcorn: '\\u231C',\n\tulcorner: '\\u231C',\n\tulcrop: '\\u230F',\n\tultri: '\\u25F8',\n\tUmacr: '\\u016A',\n\tumacr: '\\u016B',\n\tuml: '\\u00A8',\n\tUnderBar: '\\u005F',\n\tUnderBrace: '\\u23DF',\n\tUnderBracket: '\\u23B5',\n\tUnderParenthesis: '\\u23DD',\n\tUnion: '\\u22C3',\n\tUnionPlus: '\\u228E',\n\tUogon: '\\u0172',\n\tuogon: '\\u0173',\n\tUopf: '\\uD835\\uDD4C',\n\tuopf: '\\uD835\\uDD66',\n\tUpArrow: '\\u2191',\n\tUparrow: '\\u21D1',\n\tuparrow: '\\u2191',\n\tUpArrowBar: '\\u2912',\n\tUpArrowDownArrow: '\\u21C5',\n\tUpDownArrow: '\\u2195',\n\tUpdownarrow: '\\u21D5',\n\tupdownarrow: '\\u2195',\n\tUpEquilibrium: '\\u296E',\n\tupharpoonleft: '\\u21BF',\n\tupharpoonright: '\\u21BE',\n\tuplus: '\\u228E',\n\tUpperLeftArrow: '\\u2196',\n\tUpperRightArrow: '\\u2197',\n\tUpsi: '\\u03D2',\n\tupsi: '\\u03C5',\n\tupsih: '\\u03D2',\n\tUpsilon: '\\u03A5',\n\tupsilon: '\\u03C5',\n\tUpTee: '\\u22A5',\n\tUpTeeArrow: '\\u21A5',\n\tupuparrows: '\\u21C8',\n\turcorn: '\\u231D',\n\turcorner: '\\u231D',\n\turcrop: '\\u230E',\n\tUring: '\\u016E',\n\turing: '\\u016F',\n\turtri: '\\u25F9',\n\tUscr: '\\uD835\\uDCB0',\n\tuscr: '\\uD835\\uDCCA',\n\tutdot: '\\u22F0',\n\tUtilde: '\\u0168',\n\tutilde: '\\u0169',\n\tutri: '\\u25B5',\n\tutrif: '\\u25B4',\n\tuuarr: '\\u21C8',\n\tUuml: '\\u00DC',\n\tuuml: '\\u00FC',\n\tuwangle: '\\u29A7',\n\tvangrt: '\\u299C',\n\tvarepsilon: '\\u03F5',\n\tvarkappa: '\\u03F0',\n\tvarnothing: '\\u2205',\n\tvarphi: '\\u03D5',\n\tvarpi: '\\u03D6',\n\tvarpropto: '\\u221D',\n\tvArr: '\\u21D5',\n\tvarr: '\\u2195',\n\tvarrho: '\\u03F1',\n\tvarsigma: '\\u03C2',\n\tvarsubsetneq: '\\u228A\\uFE00',\n\tvarsubsetneqq: '\\u2ACB\\uFE00',\n\tvarsupsetneq: '\\u228B\\uFE00',\n\tvarsupsetneqq: '\\u2ACC\\uFE00',\n\tvartheta: '\\u03D1',\n\tvartriangleleft: '\\u22B2',\n\tvartriangleright: '\\u22B3',\n\tVbar: '\\u2AEB',\n\tvBar: '\\u2AE8',\n\tvBarv: '\\u2AE9',\n\tVcy: '\\u0412',\n\tvcy: '\\u0432',\n\tVDash: '\\u22AB',\n\tVdash: '\\u22A9',\n\tvDash: '\\u22A8',\n\tvdash: '\\u22A2',\n\tVdashl: '\\u2AE6',\n\tVee: '\\u22C1',\n\tvee: '\\u2228',\n\tveebar: '\\u22BB',\n\tveeeq: '\\u225A',\n\tvellip: '\\u22EE',\n\tVerbar: '\\u2016',\n\tverbar: '\\u007C',\n\tVert: '\\u2016',\n\tvert: '\\u007C',\n\tVerticalBar: '\\u2223',\n\tVerticalLine: '\\u007C',\n\tVerticalSeparator: '\\u2758',\n\tVerticalTilde: '\\u2240',\n\tVeryThinSpace: '\\u200A',\n\tVfr: '\\uD835\\uDD19',\n\tvfr: '\\uD835\\uDD33',\n\tvltri: '\\u22B2',\n\tvnsub: '\\u2282\\u20D2',\n\tvnsup: '\\u2283\\u20D2',\n\tVopf: '\\uD835\\uDD4D',\n\tvopf: '\\uD835\\uDD67',\n\tvprop: '\\u221D',\n\tvrtri: '\\u22B3',\n\tVscr: '\\uD835\\uDCB1',\n\tvscr: '\\uD835\\uDCCB',\n\tvsubnE: '\\u2ACB\\uFE00',\n\tvsubne: '\\u228A\\uFE00',\n\tvsupnE: '\\u2ACC\\uFE00',\n\tvsupne: '\\u228B\\uFE00',\n\tVvdash: '\\u22AA',\n\tvzigzag: '\\u299A',\n\tWcirc: '\\u0174',\n\twcirc: '\\u0175',\n\twedbar: '\\u2A5F',\n\tWedge: '\\u22C0',\n\twedge: '\\u2227',\n\twedgeq: '\\u2259',\n\tweierp: '\\u2118',\n\tWfr: '\\uD835\\uDD1A',\n\twfr: '\\uD835\\uDD34',\n\tWopf: '\\uD835\\uDD4E',\n\twopf: '\\uD835\\uDD68',\n\twp: '\\u2118',\n\twr: '\\u2240',\n\twreath: '\\u2240',\n\tWscr: '\\uD835\\uDCB2',\n\twscr: '\\uD835\\uDCCC',\n\txcap: '\\u22C2',\n\txcirc: '\\u25EF',\n\txcup: '\\u22C3',\n\txdtri: '\\u25BD',\n\tXfr: '\\uD835\\uDD1B',\n\txfr: '\\uD835\\uDD35',\n\txhArr: '\\u27FA',\n\txharr: '\\u27F7',\n\tXi: '\\u039E',\n\txi: '\\u03BE',\n\txlArr: '\\u27F8',\n\txlarr: '\\u27F5',\n\txmap: '\\u27FC',\n\txnis: '\\u22FB',\n\txodot: '\\u2A00',\n\tXopf: '\\uD835\\uDD4F',\n\txopf: '\\uD835\\uDD69',\n\txoplus: '\\u2A01',\n\txotime: '\\u2A02',\n\txrArr: '\\u27F9',\n\txrarr: '\\u27F6',\n\tXscr: '\\uD835\\uDCB3',\n\txscr: '\\uD835\\uDCCD',\n\txsqcup: '\\u2A06',\n\txuplus: '\\u2A04',\n\txutri: '\\u25B3',\n\txvee: '\\u22C1',\n\txwedge: '\\u22C0',\n\tYacute: '\\u00DD',\n\tyacute: '\\u00FD',\n\tYAcy: '\\u042F',\n\tyacy: '\\u044F',\n\tYcirc: '\\u0176',\n\tycirc: '\\u0177',\n\tYcy: '\\u042B',\n\tycy: '\\u044B',\n\tyen: '\\u00A5',\n\tYfr: '\\uD835\\uDD1C',\n\tyfr: '\\uD835\\uDD36',\n\tYIcy: '\\u0407',\n\tyicy: '\\u0457',\n\tYopf: '\\uD835\\uDD50',\n\tyopf: '\\uD835\\uDD6A',\n\tYscr: '\\uD835\\uDCB4',\n\tyscr: '\\uD835\\uDCCE',\n\tYUcy: '\\u042E',\n\tyucy: '\\u044E',\n\tYuml: '\\u0178',\n\tyuml: '\\u00FF',\n\tZacute: '\\u0179',\n\tzacute: '\\u017A',\n\tZcaron: '\\u017D',\n\tzcaron: '\\u017E',\n\tZcy: '\\u0417',\n\tzcy: '\\u0437',\n\tZdot: '\\u017B',\n\tzdot: '\\u017C',\n\tzeetrf: '\\u2128',\n\tZeroWidthSpace: '\\u200B',\n\tZeta: '\\u0396',\n\tzeta: '\\u03B6',\n\tZfr: '\\u2128',\n\tzfr: '\\uD835\\uDD37',\n\tZHcy: '\\u0416',\n\tzhcy: '\\u0436',\n\tzigrarr: '\\u21DD',\n\tZopf: '\\u2124',\n\tzopf: '\\uD835\\uDD6B',\n\tZscr: '\\uD835\\uDCB5',\n\tzscr: '\\uD835\\uDCCF',\n\tzwj: '\\u200D',\n\tzwnj: '\\u200C',\n});\n\n/**\n * @deprecated use `HTML_ENTITIES` instead\n * @see HTML_ENTITIES\n */\nexports.entityMap = exports.HTML_ENTITIES;\n","var dom = require('./dom')\nexports.DOMImplementation = dom.DOMImplementation\nexports.XMLSerializer = dom.XMLSerializer\nexports.DOMParser = require('./dom-parser').DOMParser\n","var NAMESPACE = require(\"./conventions\").NAMESPACE;\n\n//[4] \tNameStartChar\t ::= \t\":\" | [A-Z] | \"_\" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]\n//[4a] \tNameChar\t ::= \tNameStartChar | \"-\" | \".\" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n//[5] \tName\t ::= \tNameStartChar (NameChar)*\nvar nameStartChar = /[A-Z_a-z\\xC0-\\xD6\\xD8-\\xF6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]///\\u10000-\\uEFFFF\nvar nameChar = new RegExp(\"[\\\\-\\\\.0-9\"+nameStartChar.source.slice(1,-1)+\"\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]\");\nvar tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\\:'+nameStartChar.source+nameChar.source+'*)?$');\n//var tagNamePattern = /^[a-zA-Z_][\\w\\-\\.]*(?:\\:[a-zA-Z_][\\w\\-\\.]*)?$/\n//var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')\n\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\nvar S_TAG = 0;//tag name offerring\nvar S_ATTR = 1;//attr name offerring\nvar S_ATTR_SPACE=2;//attr name end and space offer\nvar S_EQ = 3;//=space?\nvar S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)\nvar S_ATTR_END = 5;//attr value end and no space(quot end)\nvar S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)\nvar S_TAG_CLOSE = 7;//closed el\n\n/**\n * Creates an error that will not be caught by XMLReader aka the SAX parser.\n *\n * @param {string} message\n * @param {any?} locator Optional, can provide details about the location in the source\n * @constructor\n */\nfunction ParseError(message, locator) {\n\tthis.message = message\n\tthis.locator = locator\n\tif(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);\n}\nParseError.prototype = new Error();\nParseError.prototype.name = ParseError.name\n\nfunction XMLReader(){\n\n}\n\nXMLReader.prototype = {\n\tparse:function(source,defaultNSMap,entityMap){\n\t\tvar domBuilder = this.domBuilder;\n\t\tdomBuilder.startDocument();\n\t\t_copy(defaultNSMap ,defaultNSMap = {})\n\t\tparse(source,defaultNSMap,entityMap,\n\t\t\t\tdomBuilder,this.errorHandler);\n\t\tdomBuilder.endDocument();\n\t}\n}\nfunction parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){\n\tfunction fixedFromCharCode(code) {\n\t\t// String.prototype.fromCharCode does not supports\n\t\t// > 2 bytes unicode chars directly\n\t\tif (code > 0xffff) {\n\t\t\tcode -= 0x10000;\n\t\t\tvar surrogate1 = 0xd800 + (code >> 10)\n\t\t\t\t, surrogate2 = 0xdc00 + (code & 0x3ff);\n\n\t\t\treturn String.fromCharCode(surrogate1, surrogate2);\n\t\t} else {\n\t\t\treturn String.fromCharCode(code);\n\t\t}\n\t}\n\tfunction entityReplacer(a){\n\t\tvar k = a.slice(1,-1);\n\t\tif (Object.hasOwnProperty.call(entityMap, k)) {\n\t\t\treturn entityMap[k];\n\t\t}else if(k.charAt(0) === '#'){\n\t\t\treturn fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))\n\t\t}else{\n\t\t\terrorHandler.error('entity not found:'+a);\n\t\t\treturn a;\n\t\t}\n\t}\n\tfunction appendText(end){//has some bugs\n\t\tif(end>start){\n\t\t\tvar xt = source.substring(start,end).replace(/&#?\\w+;/g,entityReplacer);\n\t\t\tlocator&&position(start);\n\t\t\tdomBuilder.characters(xt,0,end-start);\n\t\t\tstart = end\n\t\t}\n\t}\n\tfunction position(p,m){\n\t\twhile(p>=lineEnd && (m = linePattern.exec(source))){\n\t\t\tlineStart = m.index;\n\t\t\tlineEnd = lineStart + m[0].length;\n\t\t\tlocator.lineNumber++;\n\t\t\t//console.log('line++:',locator,startPos,endPos)\n\t\t}\n\t\tlocator.columnNumber = p-lineStart+1;\n\t}\n\tvar lineStart = 0;\n\tvar lineEnd = 0;\n\tvar linePattern = /.*(?:\\r\\n?|\\n)|.*$/g\n\tvar locator = domBuilder.locator;\n\n\tvar parseStack = [{currentNSMap:defaultNSMapCopy}]\n\tvar closeMap = {};\n\tvar start = 0;\n\twhile(true){\n\t\ttry{\n\t\t\tvar tagStart = source.indexOf('<',start);\n\t\t\tif(tagStart<0){\n\t\t\t\tif(!source.substr(start).match(/^\\s*$/)){\n\t\t\t\t\tvar doc = domBuilder.doc;\n\t \t\t\tvar text = doc.createTextNode(source.substr(start));\n\t \t\t\tdoc.appendChild(text);\n\t \t\t\tdomBuilder.currentElement = text;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif(tagStart>start){\n\t\t\t\tappendText(tagStart);\n\t\t\t}\n\t\t\tswitch(source.charAt(tagStart+1)){\n\t\t\tcase '/':\n\t\t\t\tvar end = source.indexOf('>',tagStart+3);\n\t\t\t\tvar tagName = source.substring(tagStart + 2, end).replace(/[ \\t\\n\\r]+$/g, '');\n\t\t\t\tvar config = parseStack.pop();\n\t\t\t\tif(end<0){\n\n\t \t\ttagName = source.substring(tagStart+2).replace(/[\\s<].*/,'');\n\t \t\terrorHandler.error(\"end tag name: \"+tagName+' is not complete:'+config.tagName);\n\t \t\tend = tagStart+1+tagName.length;\n\t \t}else if(tagName.match(/\\s\n\t\t\t\tlocator&&position(tagStart);\n\t\t\t\tend = parseInstruction(source,tagStart,domBuilder);\n\t\t\t\tbreak;\n\t\t\tcase '!':// start){\n\t\t\tstart = end;\n\t\t}else{\n\t\t\t//TODO: 这里有可能sax回退,有位置错误风险\n\t\t\tappendText(Math.max(tagStart,start)+1);\n\t\t}\n\t}\n}\nfunction copyLocator(f,t){\n\tt.lineNumber = f.lineNumber;\n\tt.columnNumber = f.columnNumber;\n\treturn t;\n}\n\n/**\n * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);\n * @return end of the elementStartPart(end of elementEndPart for selfClosed el)\n */\nfunction parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){\n\n\t/**\n\t * @param {string} qname\n\t * @param {string} value\n\t * @param {number} startIndex\n\t */\n\tfunction addAttribute(qname, value, startIndex) {\n\t\tif (el.attributeNames.hasOwnProperty(qname)) {\n\t\t\terrorHandler.fatalError('Attribute ' + qname + ' redefined')\n\t\t}\n\t\tel.addValue(\n\t\t\tqname,\n\t\t\t// @see https://www.w3.org/TR/xml/#AVNormalize\n\t\t\t// since the xmldom sax parser does not \"interpret\" DTD the following is not implemented:\n\t\t\t// - recursive replacement of (DTD) entity references\n\t\t\t// - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA\n\t\t\tvalue.replace(/[\\t\\n\\r]/g, ' ').replace(/&#?\\w+;/g, entityReplacer),\n\t\t\tstartIndex\n\t\t)\n\t}\n\tvar attrName;\n\tvar value;\n\tvar p = ++start;\n\tvar s = S_TAG;//status\n\twhile(true){\n\t\tvar c = source.charAt(p);\n\t\tswitch(c){\n\t\tcase '=':\n\t\t\tif(s === S_ATTR){//attrName\n\t\t\t\tattrName = source.slice(start,p);\n\t\t\t\ts = S_EQ;\n\t\t\t}else if(s === S_ATTR_SPACE){\n\t\t\t\ts = S_EQ;\n\t\t\t}else{\n\t\t\t\t//fatalError: equal must after attrName or space after attrName\n\t\t\t\tthrow new Error('attribute equal must after attrName'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '\\'':\n\t\tcase '\"':\n\t\t\tif(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE\n\t\t\t\t){//equal\n\t\t\t\tif(s === S_ATTR){\n\t\t\t\t\terrorHandler.warning('attribute value must after \"=\"')\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t}\n\t\t\t\tstart = p+1;\n\t\t\t\tp = source.indexOf(c,start)\n\t\t\t\tif(p>0){\n\t\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\t\taddAttribute(attrName, value, start-1);\n\t\t\t\t\ts = S_ATTR_END;\n\t\t\t\t}else{\n\t\t\t\t\t//fatalError: no end quot match\n\t\t\t\t\tthrow new Error('attribute value no end \\''+c+'\\' match');\n\t\t\t\t}\n\t\t\t}else if(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\tvalue = source.slice(start, p);\n\t\t\t\taddAttribute(attrName, value, start);\n\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed start quot('+c+')!!');\n\t\t\t\tstart = p+1;\n\t\t\t\ts = S_ATTR_END\n\t\t\t}else{\n\t\t\t\t//fatalError: no equal before\n\t\t\t\tthrow new Error('attribute value must after \"=\"'); // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase '/':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\ts =S_TAG_CLOSE;\n\t\t\t\tel.closed = true;\n\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\tcase S_ATTR:\n\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tel.closed = true;\n\t\t\t\tbreak;\n\t\t\t//case S_EQ:\n\t\t\tdefault:\n\t\t\t\tthrow new Error(\"attribute invalid close char('/')\") // No known test case\n\t\t\t}\n\t\t\tbreak;\n\t\tcase ''://end document\n\t\t\terrorHandler.error('unexpected end of input');\n\t\t\tif(s == S_TAG){\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\t}\n\t\t\treturn p;\n\t\tcase '>':\n\t\t\tswitch(s){\n\t\t\tcase S_TAG:\n\t\t\t\tel.setTagName(source.slice(start,p));\n\t\t\tcase S_ATTR_END:\n\t\t\tcase S_TAG_SPACE:\n\t\t\tcase S_TAG_CLOSE:\n\t\t\t\tbreak;//normal\n\t\t\tcase S_ATTR_NOQUOT_VALUE://Compatible state\n\t\t\tcase S_ATTR:\n\t\t\t\tvalue = source.slice(start,p);\n\t\t\t\tif(value.slice(-1) === '/'){\n\t\t\t\t\tel.closed = true;\n\t\t\t\t\tvalue = value.slice(0,-1)\n\t\t\t\t}\n\t\t\tcase S_ATTR_SPACE:\n\t\t\t\tif(s === S_ATTR_SPACE){\n\t\t\t\t\tvalue = attrName;\n\t\t\t\t}\n\t\t\t\tif(s == S_ATTR_NOQUOT_VALUE){\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\t}else{\n\t\t\t\t\tif(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed value!! \"'+value+'\" instead!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(value, value, start)\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase S_EQ:\n\t\t\t\tthrow new Error('attribute value missed!!');\n\t\t\t}\n//\t\t\tconsole.log(tagName,tagNamePattern,tagNamePattern.test(tagName))\n\t\t\treturn p;\n\t\t/*xml space '\\x20' | #x9 | #xD | #xA; */\n\t\tcase '\\u0080':\n\t\t\tc = ' ';\n\t\tdefault:\n\t\t\tif(c<= ' '){//space\n\t\t\t\tswitch(s){\n\t\t\t\tcase S_TAG:\n\t\t\t\t\tel.setTagName(source.slice(start,p));//tagName\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR:\n\t\t\t\t\tattrName = source.slice(start,p)\n\t\t\t\t\ts = S_ATTR_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_NOQUOT_VALUE:\n\t\t\t\t\tvar value = source.slice(start, p);\n\t\t\t\t\terrorHandler.warning('attribute \"'+value+'\" missed quot(\")!!');\n\t\t\t\t\taddAttribute(attrName, value, start)\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\ts = S_TAG_SPACE;\n\t\t\t\t\tbreak;\n\t\t\t\t//case S_TAG_SPACE:\n\t\t\t\t//case S_EQ:\n\t\t\t\t//case S_ATTR_SPACE:\n\t\t\t\t//\tvoid();break;\n\t\t\t\t//case S_TAG_CLOSE:\n\t\t\t\t\t//ignore warning\n\t\t\t\t}\n\t\t\t}else{//not space\n//S_TAG,\tS_ATTR,\tS_EQ,\tS_ATTR_NOQUOT_VALUE\n//S_ATTR_SPACE,\tS_ATTR_END,\tS_TAG_SPACE, S_TAG_CLOSE\n\t\t\t\tswitch(s){\n\t\t\t\t//case S_TAG:void();break;\n\t\t\t\t//case S_ATTR:void();break;\n\t\t\t\t//case S_ATTR_NOQUOT_VALUE:void();break;\n\t\t\t\tcase S_ATTR_SPACE:\n\t\t\t\t\tvar tagName = el.tagName;\n\t\t\t\t\tif (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {\n\t\t\t\t\t\terrorHandler.warning('attribute \"'+attrName+'\" missed value!! \"'+attrName+'\" instead2!!')\n\t\t\t\t\t}\n\t\t\t\t\taddAttribute(attrName, attrName, start);\n\t\t\t\t\tstart = p;\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_ATTR_END:\n\t\t\t\t\terrorHandler.warning('attribute space is required\"'+attrName+'\"!!')\n\t\t\t\tcase S_TAG_SPACE:\n\t\t\t\t\ts = S_ATTR;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_EQ:\n\t\t\t\t\ts = S_ATTR_NOQUOT_VALUE;\n\t\t\t\t\tstart = p;\n\t\t\t\t\tbreak;\n\t\t\t\tcase S_TAG_CLOSE:\n\t\t\t\t\tthrow new Error(\"elements closed character '/' and '>' must be connected to\");\n\t\t\t\t}\n\t\t\t}\n\t\t}//end outer switch\n\t\t//console.log('p++',p)\n\t\tp++;\n\t}\n}\n/**\n * @return true if has new namespace define\n */\nfunction appendElement(el,domBuilder,currentNSMap){\n\tvar tagName = el.tagName;\n\tvar localNSMap = null;\n\t//var currentNSMap = parseStack[parseStack.length-1].currentNSMap;\n\tvar i = el.length;\n\twhile(i--){\n\t\tvar a = el[i];\n\t\tvar qName = a.qName;\n\t\tvar value = a.value;\n\t\tvar nsp = qName.indexOf(':');\n\t\tif(nsp>0){\n\t\t\tvar prefix = a.prefix = qName.slice(0,nsp);\n\t\t\tvar localName = qName.slice(nsp+1);\n\t\t\tvar nsPrefix = prefix === 'xmlns' && localName\n\t\t}else{\n\t\t\tlocalName = qName;\n\t\t\tprefix = null\n\t\t\tnsPrefix = qName === 'xmlns' && ''\n\t\t}\n\t\t//can not set prefix,because prefix !== ''\n\t\ta.localName = localName ;\n\t\t//prefix == null for no ns prefix attribute\n\t\tif(nsPrefix !== false){//hack!!\n\t\t\tif(localNSMap == null){\n\t\t\t\tlocalNSMap = {}\n\t\t\t\t//console.log(currentNSMap,0)\n\t\t\t\t_copy(currentNSMap,currentNSMap={})\n\t\t\t\t//console.log(currentNSMap,1)\n\t\t\t}\n\t\t\tcurrentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;\n\t\t\ta.uri = NAMESPACE.XMLNS\n\t\t\tdomBuilder.startPrefixMapping(nsPrefix, value)\n\t\t}\n\t}\n\tvar i = el.length;\n\twhile(i--){\n\t\ta = el[i];\n\t\tvar prefix = a.prefix;\n\t\tif(prefix){//no prefix attribute has no namespace\n\t\t\tif(prefix === 'xml'){\n\t\t\t\ta.uri = NAMESPACE.XML;\n\t\t\t}if(prefix !== 'xmlns'){\n\t\t\t\ta.uri = currentNSMap[prefix || '']\n\n\t\t\t\t//{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}\n\t\t\t}\n\t\t}\n\t}\n\tvar nsp = tagName.indexOf(':');\n\tif(nsp>0){\n\t\tprefix = el.prefix = tagName.slice(0,nsp);\n\t\tlocalName = el.localName = tagName.slice(nsp+1);\n\t}else{\n\t\tprefix = null;//important!!\n\t\tlocalName = el.localName = tagName;\n\t}\n\t//no prefix element has default namespace\n\tvar ns = el.uri = currentNSMap[prefix || ''];\n\tdomBuilder.startElement(ns,localName,tagName,el);\n\t//endPrefixMapping and startPrefixMapping have not any help for dom builder\n\t//localNSMap = null\n\tif(el.closed){\n\t\tdomBuilder.endElement(ns,localName,tagName);\n\t\tif(localNSMap){\n\t\t\tfor (prefix in localNSMap) {\n\t\t\t\tif (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {\n\t\t\t\t\tdomBuilder.endPrefixMapping(prefix);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}else{\n\t\tel.currentNSMap = currentNSMap;\n\t\tel.localNSMap = localNSMap;\n\t\t//parseStack.push(el);\n\t\treturn true;\n\t}\n}\nfunction parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){\n\tif(/^(?:script|textarea)$/i.test(tagName)){\n\t\tvar elEndStart = source.indexOf('',elStartEnd);\n\t\tvar text = source.substring(elStartEnd+1,elEndStart);\n\t\tif(/[&<]/.test(text)){\n\t\t\tif(/^script$/i.test(tagName)){\n\t\t\t\t//if(!/\\]\\]>/.test(text)){\n\t\t\t\t\t//lexHandler.startCDATA();\n\t\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\t\t//lexHandler.endCDATA();\n\t\t\t\t\treturn elEndStart;\n\t\t\t\t//}\n\t\t\t}//}else{//text area\n\t\t\t\ttext = text.replace(/&#?\\w+;/g,entityReplacer);\n\t\t\t\tdomBuilder.characters(text,0,text.length);\n\t\t\t\treturn elEndStart;\n\t\t\t//}\n\n\t\t}\n\t}\n\treturn elStartEnd+1;\n}\nfunction fixSelfClosed(source,elStartEnd,tagName,closeMap){\n\t//if(tagName in closeMap){\n\tvar pos = closeMap[tagName];\n\tif(pos == null){\n\t\t//console.log(tagName)\n\t\tpos = source.lastIndexOf('')\n\t\tif(pos',start+4);\n\t\t\t//append comment source.substring(4,end)//';\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n } // parsing fields [ID3v2.4.0 section 4.14.]\n\n mimeTypeEndIndex = typedArrayIndexOf(frame.data, 0, i);\n if (mimeTypeEndIndex < 0) {\n // malformed frame\n return;\n } // parsing Mime type field (terminated with \\0)\n\n frame.mimeType = parseIso88591$1(frame.data, i, mimeTypeEndIndex);\n i = mimeTypeEndIndex + 1; // parsing 1-byte Picture Type field\n\n frame.pictureType = frame.data[i];\n i++;\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, i);\n if (descriptionEndIndex < 0) {\n // malformed frame\n return;\n } // parsing Description field (terminated with \\0)\n\n frame.description = parseUtf8(frame.data, i, descriptionEndIndex);\n i = descriptionEndIndex + 1;\n if (frame.mimeType === LINK_MIME_TYPE) {\n // parsing Picture Data field as URL (always represented as ISO-8859-1 [ID3v2.4.0 section 4.])\n frame.url = parseIso88591$1(frame.data, i, frame.data.length);\n } else {\n // parsing Picture Data field as binary data\n frame.pictureData = frame.data.subarray(i, frame.data.length);\n }\n },\n 'T*': function (frame) {\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n } // parse text field, do not include null terminator in the frame value\n // frames that allow different types of encoding contain terminated text [ID3v2.4.0 section 4.]\n\n frame.value = parseUtf8(frame.data, 1, frame.data.length).replace(/\\0*$/, ''); // text information frames supports multiple strings, stored as a terminator separated list [ID3v2.4.0 section 4.2.]\n\n frame.values = frame.value.split('\\0');\n },\n 'TXXX': function (frame) {\n var descriptionEndIndex;\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n }\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1);\n if (descriptionEndIndex === -1) {\n return;\n } // parse the text fields\n\n frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); // do not include the null terminator in the tag value\n // frames that allow different types of encoding contain terminated text\n // [ID3v2.4.0 section 4.]\n\n frame.value = parseUtf8(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\\0*$/, '');\n frame.data = frame.value;\n },\n 'W*': function (frame) {\n // parse URL field; URL fields are always represented as ISO-8859-1 [ID3v2.4.0 section 4.]\n // if the value is followed by a string termination all the following information should be ignored [ID3v2.4.0 section 4.3]\n frame.url = parseIso88591$1(frame.data, 0, frame.data.length).replace(/\\0.*$/, '');\n },\n 'WXXX': function (frame) {\n var descriptionEndIndex;\n if (frame.data[0] !== textEncodingDescriptionByte.Utf8) {\n // ignore frames with unrecognized character encodings\n return;\n }\n descriptionEndIndex = typedArrayIndexOf(frame.data, 0, 1);\n if (descriptionEndIndex === -1) {\n return;\n } // parse the description and URL fields\n\n frame.description = parseUtf8(frame.data, 1, descriptionEndIndex); // URL fields are always represented as ISO-8859-1 [ID3v2.4.0 section 4.]\n // if the value is followed by a string termination all the following information\n // should be ignored [ID3v2.4.0 section 4.3]\n\n frame.url = parseIso88591$1(frame.data, descriptionEndIndex + 1, frame.data.length).replace(/\\0.*$/, '');\n },\n 'PRIV': function (frame) {\n var i;\n for (i = 0; i < frame.data.length; i++) {\n if (frame.data[i] === 0) {\n // parse the description and URL fields\n frame.owner = parseIso88591$1(frame.data, 0, i);\n break;\n }\n }\n frame.privateData = frame.data.subarray(i + 1);\n frame.data = frame.privateData;\n }\n };\n var parseId3Frames$1 = function (data) {\n var frameSize,\n frameHeader,\n frameStart = 10,\n tagSize = 0,\n frames = []; // If we don't have enough data for a header, 10 bytes, \n // or 'ID3' in the first 3 bytes this is not a valid ID3 tag.\n\n if (data.length < 10 || data[0] !== 'I'.charCodeAt(0) || data[1] !== 'D'.charCodeAt(0) || data[2] !== '3'.charCodeAt(0)) {\n return;\n } // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n\n tagSize = parseSyncSafeInteger$1(data.subarray(6, 10)); // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n\n tagSize += 10; // check bit 6 of byte 5 for the extended header flag.\n\n var hasExtendedHeader = data[5] & 0x40;\n if (hasExtendedHeader) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger$1(data.subarray(10, 14));\n tagSize -= parseSyncSafeInteger$1(data.subarray(16, 20)); // clip any padding off the end\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger$1(data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n break;\n }\n frameHeader = String.fromCharCode(data[frameStart], data[frameStart + 1], data[frameStart + 2], data[frameStart + 3]);\n var frame = {\n id: frameHeader,\n data: data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id; // parse frame values\n\n if (frameParsers[frame.id]) {\n // use frame specific parser\n frameParsers[frame.id](frame);\n } else if (frame.id[0] === 'T') {\n // use text frame generic parser\n frameParsers['T*'](frame);\n } else if (frame.id[0] === 'W') {\n // use URL link frame generic parser\n frameParsers['W*'](frame);\n }\n frames.push(frame);\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n return frames;\n };\n var parseId3 = {\n parseId3Frames: parseId3Frames$1,\n parseSyncSafeInteger: parseSyncSafeInteger$1,\n frameParsers: frameParsers\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Accepts program elementary stream (PES) data events and parses out\n * ID3 metadata from them, if present.\n * @see http://id3.org/id3v2.3.0\n */\n\n var Stream$5 = stream,\n StreamTypes$3 = streamTypes,\n id3 = parseId3,\n MetadataStream;\n MetadataStream = function (options) {\n var settings = {\n // the bytes of the program-level descriptor field in MP2T\n // see ISO/IEC 13818-1:2013 (E), section 2.6 \"Program and\n // program element descriptors\"\n descriptor: options && options.descriptor\n },\n // the total size in bytes of the ID3 tag being parsed\n tagSize = 0,\n // tag data that is not complete enough to be parsed\n buffer = [],\n // the total number of bytes currently in the buffer\n bufferSize = 0,\n i;\n MetadataStream.prototype.init.call(this); // calculate the text track in-band metadata track dispatch type\n // https://html.spec.whatwg.org/multipage/embedded-content.html#steps-to-expose-a-media-resource-specific-text-track\n\n this.dispatchType = StreamTypes$3.METADATA_STREAM_TYPE.toString(16);\n if (settings.descriptor) {\n for (i = 0; i < settings.descriptor.length; i++) {\n this.dispatchType += ('00' + settings.descriptor[i].toString(16)).slice(-2);\n }\n }\n this.push = function (chunk) {\n var tag, frameStart, frameSize, frame, i, frameHeader;\n if (chunk.type !== 'timed-metadata') {\n return;\n } // if data_alignment_indicator is set in the PES header,\n // we must have the start of a new ID3 tag. Assume anything\n // remaining in the buffer was malformed and throw it out\n\n if (chunk.dataAlignmentIndicator) {\n bufferSize = 0;\n buffer.length = 0;\n } // ignore events that don't look like ID3 data\n\n if (buffer.length === 0 && (chunk.data.length < 10 || chunk.data[0] !== 'I'.charCodeAt(0) || chunk.data[1] !== 'D'.charCodeAt(0) || chunk.data[2] !== '3'.charCodeAt(0))) {\n this.trigger('log', {\n level: 'warn',\n message: 'Skipping unrecognized metadata packet'\n });\n return;\n } // add this chunk to the data we've collected so far\n\n buffer.push(chunk);\n bufferSize += chunk.data.byteLength; // grab the size of the entire frame from the ID3 header\n\n if (buffer.length === 1) {\n // the frame size is transmitted as a 28-bit integer in the\n // last four bytes of the ID3 header.\n // The most significant bit of each byte is dropped and the\n // results concatenated to recover the actual value.\n tagSize = id3.parseSyncSafeInteger(chunk.data.subarray(6, 10)); // ID3 reports the tag size excluding the header but it's more\n // convenient for our comparisons to include it\n\n tagSize += 10;\n } // if the entire frame has not arrived, wait for more data\n\n if (bufferSize < tagSize) {\n return;\n } // collect the entire frame so it can be parsed\n\n tag = {\n data: new Uint8Array(tagSize),\n frames: [],\n pts: buffer[0].pts,\n dts: buffer[0].dts\n };\n for (i = 0; i < tagSize;) {\n tag.data.set(buffer[0].data.subarray(0, tagSize - i), i);\n i += buffer[0].data.byteLength;\n bufferSize -= buffer[0].data.byteLength;\n buffer.shift();\n } // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n if (tag.data[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += id3.parseSyncSafeInteger(tag.data.subarray(10, 14)); // clip any padding off the end\n\n tagSize -= id3.parseSyncSafeInteger(tag.data.subarray(16, 20));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = id3.parseSyncSafeInteger(tag.data.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n this.trigger('log', {\n level: 'warn',\n message: 'Malformed ID3 frame encountered. Skipping remaining metadata parsing.'\n }); // If the frame is malformed, don't parse any further frames but allow previous valid parsed frames\n // to be sent along.\n\n break;\n }\n frameHeader = String.fromCharCode(tag.data[frameStart], tag.data[frameStart + 1], tag.data[frameStart + 2], tag.data[frameStart + 3]);\n frame = {\n id: frameHeader,\n data: tag.data.subarray(frameStart + 10, frameStart + frameSize + 10)\n };\n frame.key = frame.id; // parse frame values\n\n if (id3.frameParsers[frame.id]) {\n // use frame specific parser\n id3.frameParsers[frame.id](frame);\n } else if (frame.id[0] === 'T') {\n // use text frame generic parser\n id3.frameParsers['T*'](frame);\n } else if (frame.id[0] === 'W') {\n // use URL link frame generic parser\n id3.frameParsers['W*'](frame);\n } // handle the special PRIV frame used to indicate the start\n // time for raw AAC data\n\n if (frame.owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.data,\n size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n frame.timeStamp = size; // in raw AAC, all subsequent data will be timestamped based\n // on the value of this frame\n // we couldn't have known the appropriate pts and dts before\n // parsing this ID3 tag so set those values now\n\n if (tag.pts === undefined && tag.dts === undefined) {\n tag.pts = frame.timeStamp;\n tag.dts = frame.timeStamp;\n }\n this.trigger('timestamp', frame);\n }\n tag.frames.push(frame);\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < tagSize);\n this.trigger('data', tag);\n };\n };\n MetadataStream.prototype = new Stream$5();\n var metadataStream = MetadataStream;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream$4 = stream,\n CaptionStream$1 = captionStream,\n StreamTypes$2 = streamTypes,\n TimestampRolloverStream = timestampRolloverStream.TimestampRolloverStream; // object types\n\n var TransportPacketStream, TransportParseStream, ElementaryStream; // constants\n\n var MP2T_PACKET_LENGTH$1 = 188,\n // bytes\n SYNC_BYTE$1 = 0x47;\n /**\n * Splits an incoming stream of binary data into MPEG-2 Transport\n * Stream packets.\n */\n\n TransportPacketStream = function () {\n var buffer = new Uint8Array(MP2T_PACKET_LENGTH$1),\n bytesInBuffer = 0;\n TransportPacketStream.prototype.init.call(this); // Deliver new bytes to the stream.\n\n /**\n * Split a stream of data into M2TS packets\n **/\n\n this.push = function (bytes) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH$1,\n everything; // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n\n if (bytesInBuffer) {\n everything = new Uint8Array(bytes.byteLength + bytesInBuffer);\n everything.set(buffer.subarray(0, bytesInBuffer));\n everything.set(bytes, bytesInBuffer);\n bytesInBuffer = 0;\n } else {\n everything = bytes;\n } // While we have enough data for a packet\n\n while (endIndex < everything.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (everything[startIndex] === SYNC_BYTE$1 && everything[endIndex] === SYNC_BYTE$1) {\n // We found a packet so emit it and jump one whole packet forward in\n // the stream\n this.trigger('data', everything.subarray(startIndex, endIndex));\n startIndex += MP2T_PACKET_LENGTH$1;\n endIndex += MP2T_PACKET_LENGTH$1;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // If there was some data left over at the end of the segment that couldn't\n // possibly be a whole packet, keep it because it might be the start of a packet\n // that continues in the next segment\n\n if (startIndex < everything.byteLength) {\n buffer.set(everything.subarray(startIndex), 0);\n bytesInBuffer = everything.byteLength - startIndex;\n }\n };\n /**\n * Passes identified M2TS packets to the TransportParseStream to be parsed\n **/\n\n this.flush = function () {\n // If the buffer contains a whole packet when we are being flushed, emit it\n // and empty the buffer. Otherwise hold onto the data because it may be\n // important for decoding the next segment\n if (bytesInBuffer === MP2T_PACKET_LENGTH$1 && buffer[0] === SYNC_BYTE$1) {\n this.trigger('data', buffer);\n bytesInBuffer = 0;\n }\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n this.reset = function () {\n bytesInBuffer = 0;\n this.trigger('reset');\n };\n };\n TransportPacketStream.prototype = new Stream$4();\n /**\n * Accepts an MP2T TransportPacketStream and emits data events with parsed\n * forms of the individual transport stream packets.\n */\n\n TransportParseStream = function () {\n var parsePsi, parsePat, parsePmt, self;\n TransportParseStream.prototype.init.call(this);\n self = this;\n this.packetsWaitingForPmt = [];\n this.programMapTable = undefined;\n parsePsi = function (payload, psi) {\n var offset = 0; // PSI packets may be split into multiple sections and those\n // sections may be split into multiple packets. If a PSI\n // section starts in this packet, the payload_unit_start_indicator\n // will be true and the first byte of the payload will indicate\n // the offset from the current position to the start of the\n // section.\n\n if (psi.payloadUnitStartIndicator) {\n offset += payload[offset] + 1;\n }\n if (psi.type === 'pat') {\n parsePat(payload.subarray(offset), psi);\n } else {\n parsePmt(payload.subarray(offset), psi);\n }\n };\n parsePat = function (payload, pat) {\n pat.section_number = payload[7]; // eslint-disable-line camelcase\n\n pat.last_section_number = payload[8]; // eslint-disable-line camelcase\n // skip the PSI header and parse the first PMT entry\n\n self.pmtPid = (payload[10] & 0x1F) << 8 | payload[11];\n pat.pmtPid = self.pmtPid;\n };\n /**\n * Parse out the relevant fields of a Program Map Table (PMT).\n * @param payload {Uint8Array} the PMT-specific portion of an MP2T\n * packet. The first byte in this array should be the table_id\n * field.\n * @param pmt {object} the object that should be decorated with\n * fields parsed from the PMT.\n */\n\n parsePmt = function (payload, pmt) {\n var sectionLength, tableEnd, programInfoLength, offset; // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n if (!(payload[5] & 0x01)) {\n return;\n } // overwrite any existing program map table\n\n self.programMapTable = {\n video: null,\n audio: null,\n 'timed-metadata': {}\n }; // the mapping table ends at the end of the current section\n\n sectionLength = (payload[1] & 0x0f) << 8 | payload[2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (payload[10] & 0x0f) << 8 | payload[11]; // advance the offset to the first entry in the mapping table\n\n offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var streamType = payload[offset];\n var pid = (payload[offset + 1] & 0x1F) << 8 | payload[offset + 2]; // only map a single elementary_pid for audio and video stream types\n // TODO: should this be done for metadata too? for now maintain behavior of\n // multiple metadata streams\n\n if (streamType === StreamTypes$2.H264_STREAM_TYPE && self.programMapTable.video === null) {\n self.programMapTable.video = pid;\n } else if (streamType === StreamTypes$2.ADTS_STREAM_TYPE && self.programMapTable.audio === null) {\n self.programMapTable.audio = pid;\n } else if (streamType === StreamTypes$2.METADATA_STREAM_TYPE) {\n // map pid to stream type for metadata streams\n self.programMapTable['timed-metadata'][pid] = streamType;\n } // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((payload[offset + 3] & 0x0F) << 8 | payload[offset + 4]) + 5;\n } // record the map on the packet as well\n\n pmt.programMapTable = self.programMapTable;\n };\n /**\n * Deliver a new MP2T packet to the next stream in the pipeline.\n */\n\n this.push = function (packet) {\n var result = {},\n offset = 4;\n result.payloadUnitStartIndicator = !!(packet[1] & 0x40); // pid is a 13-bit field starting at the last bit of packet[1]\n\n result.pid = packet[1] & 0x1f;\n result.pid <<= 8;\n result.pid |= packet[2]; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[offset] + 1;\n } // parse the rest of the packet based on the type\n\n if (result.pid === 0) {\n result.type = 'pat';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result);\n } else if (result.pid === this.pmtPid) {\n result.type = 'pmt';\n parsePsi(packet.subarray(offset), result);\n this.trigger('data', result); // if there are any packets waiting for a PMT to be found, process them now\n\n while (this.packetsWaitingForPmt.length) {\n this.processPes_.apply(this, this.packetsWaitingForPmt.shift());\n }\n } else if (this.programMapTable === undefined) {\n // When we have not seen a PMT yet, defer further processing of\n // PES packets until one has been parsed\n this.packetsWaitingForPmt.push([packet, offset, result]);\n } else {\n this.processPes_(packet, offset, result);\n }\n };\n this.processPes_ = function (packet, offset, result) {\n // set the appropriate stream type\n if (result.pid === this.programMapTable.video) {\n result.streamType = StreamTypes$2.H264_STREAM_TYPE;\n } else if (result.pid === this.programMapTable.audio) {\n result.streamType = StreamTypes$2.ADTS_STREAM_TYPE;\n } else {\n // if not video or audio, it is timed-metadata or unknown\n // if unknown, streamType will be undefined\n result.streamType = this.programMapTable['timed-metadata'][result.pid];\n }\n result.type = 'pes';\n result.data = packet.subarray(offset);\n this.trigger('data', result);\n };\n };\n TransportParseStream.prototype = new Stream$4();\n TransportParseStream.STREAM_TYPES = {\n h264: 0x1b,\n adts: 0x0f\n };\n /**\n * Reconsistutes program elementary stream (PES) packets from parsed\n * transport stream packets. That is, if you pipe an\n * mp2t.TransportParseStream into a mp2t.ElementaryStream, the output\n * events will be events which capture the bytes for individual PES\n * packets plus relevant metadata that has been extracted from the\n * container.\n */\n\n ElementaryStream = function () {\n var self = this,\n segmentHadPmt = false,\n // PES packet fragments\n video = {\n data: [],\n size: 0\n },\n audio = {\n data: [],\n size: 0\n },\n timedMetadata = {\n data: [],\n size: 0\n },\n programMapTable,\n parsePes = function (payload, pes) {\n var ptsDtsFlags;\n const startPrefix = payload[0] << 16 | payload[1] << 8 | payload[2]; // default to an empty array\n\n pes.data = new Uint8Array(); // In certain live streams, the start of a TS fragment has ts packets\n // that are frame data that is continuing from the previous fragment. This\n // is to check that the pes data is the start of a new pes payload\n\n if (startPrefix !== 1) {\n return;\n } // get the packet length, this will be 0 for video\n\n pes.packetLength = 6 + (payload[4] << 8 | payload[5]); // find out if this packets starts a new keyframe\n\n pes.dataAlignmentIndicator = (payload[6] & 0x04) !== 0; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = payload[7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n pes.pts = (payload[9] & 0x0E) << 27 | (payload[10] & 0xFF) << 20 | (payload[11] & 0xFE) << 12 | (payload[12] & 0xFF) << 5 | (payload[13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (payload[13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (payload[14] & 0x0E) << 27 | (payload[15] & 0xFF) << 20 | (payload[16] & 0xFE) << 12 | (payload[17] & 0xFF) << 5 | (payload[18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (payload[18] & 0x06) >>> 1; // OR by the two LSBs\n }\n } // the data section starts immediately after the PES header.\n // pes_header_data_length specifies the number of header bytes\n // that follow the last byte of the field.\n\n pes.data = payload.subarray(9 + payload[8]);\n },\n /**\n * Pass completely parsed PES packets to the next stream in the pipeline\n **/\n flushStream = function (stream, type, forceFlush) {\n var packetData = new Uint8Array(stream.size),\n event = {\n type: type\n },\n i = 0,\n offset = 0,\n packetFlushable = false,\n fragment; // do nothing if there is not enough buffered data for a complete\n // PES header\n\n if (!stream.data.length || stream.size < 9) {\n return;\n }\n event.trackId = stream.data[0].pid; // reassemble the packet\n\n for (i = 0; i < stream.data.length; i++) {\n fragment = stream.data[i];\n packetData.set(fragment.data, offset);\n offset += fragment.data.byteLength;\n } // parse assembled packet's PES header\n\n parsePes(packetData, event); // non-video PES packets MUST have a non-zero PES_packet_length\n // check that there is enough stream data to fill the packet\n\n packetFlushable = type === 'video' || event.packetLength <= stream.size; // flush pending packets if the conditions are right\n\n if (forceFlush || packetFlushable) {\n stream.size = 0;\n stream.data.length = 0;\n } // only emit packets that are complete. this is to avoid assembling\n // incomplete PES packets due to poor segmentation\n\n if (packetFlushable) {\n self.trigger('data', event);\n }\n };\n ElementaryStream.prototype.init.call(this);\n /**\n * Identifies M2TS packet types and parses PES packets using metadata\n * parsed from the PMT\n **/\n\n this.push = function (data) {\n ({\n pat: function () {// we have to wait for the PMT to arrive as well before we\n // have any meaningful metadata\n },\n pes: function () {\n var stream, streamType;\n switch (data.streamType) {\n case StreamTypes$2.H264_STREAM_TYPE:\n stream = video;\n streamType = 'video';\n break;\n case StreamTypes$2.ADTS_STREAM_TYPE:\n stream = audio;\n streamType = 'audio';\n break;\n case StreamTypes$2.METADATA_STREAM_TYPE:\n stream = timedMetadata;\n streamType = 'timed-metadata';\n break;\n default:\n // ignore unknown stream types\n return;\n } // if a new packet is starting, we can flush the completed\n // packet\n\n if (data.payloadUnitStartIndicator) {\n flushStream(stream, streamType, true);\n } // buffer this fragment until we are sure we've received the\n // complete payload\n\n stream.data.push(data);\n stream.size += data.data.byteLength;\n },\n pmt: function () {\n var event = {\n type: 'metadata',\n tracks: []\n };\n programMapTable = data.programMapTable; // translate audio and video streams to tracks\n\n if (programMapTable.video !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n event.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n segmentHadPmt = true;\n self.trigger('data', event);\n }\n })[data.type]();\n };\n this.reset = function () {\n video.size = 0;\n video.data.length = 0;\n audio.size = 0;\n audio.data.length = 0;\n this.trigger('reset');\n };\n /**\n * Flush any remaining input. Video PES packets may be of variable\n * length. Normally, the start of a new video packet can trigger the\n * finalization of the previous packet. That is not possible if no\n * more video is forthcoming, however. In that case, some other\n * mechanism (like the end of the file) has to be employed. When it is\n * clear that no additional data is forthcoming, calling this method\n * will flush the buffered packets.\n */\n\n this.flushStreams_ = function () {\n // !!THIS ORDER IS IMPORTANT!!\n // video first then audio\n flushStream(video, 'video');\n flushStream(audio, 'audio');\n flushStream(timedMetadata, 'timed-metadata');\n };\n this.flush = function () {\n // if on flush we haven't had a pmt emitted\n // and we have a pmt to emit. emit the pmt\n // so that we trigger a trackinfo downstream.\n if (!segmentHadPmt && programMapTable) {\n var pmt = {\n type: 'metadata',\n tracks: []\n }; // translate audio and video streams to tracks\n\n if (programMapTable.video !== null) {\n pmt.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.video,\n codec: 'avc',\n type: 'video'\n });\n }\n if (programMapTable.audio !== null) {\n pmt.tracks.push({\n timelineStartInfo: {\n baseMediaDecodeTime: 0\n },\n id: +programMapTable.audio,\n codec: 'adts',\n type: 'audio'\n });\n }\n self.trigger('data', pmt);\n }\n segmentHadPmt = false;\n this.flushStreams_();\n this.trigger('done');\n };\n };\n ElementaryStream.prototype = new Stream$4();\n var m2ts$1 = {\n PAT_PID: 0x0000,\n MP2T_PACKET_LENGTH: MP2T_PACKET_LENGTH$1,\n TransportPacketStream: TransportPacketStream,\n TransportParseStream: TransportParseStream,\n ElementaryStream: ElementaryStream,\n TimestampRolloverStream: TimestampRolloverStream,\n CaptionStream: CaptionStream$1.CaptionStream,\n Cea608Stream: CaptionStream$1.Cea608Stream,\n Cea708Stream: CaptionStream$1.Cea708Stream,\n MetadataStream: metadataStream\n };\n for (var type in StreamTypes$2) {\n if (StreamTypes$2.hasOwnProperty(type)) {\n m2ts$1[type] = StreamTypes$2[type];\n }\n }\n var m2ts_1 = m2ts$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var Stream$3 = stream;\n var ONE_SECOND_IN_TS$2 = clock$2.ONE_SECOND_IN_TS;\n var AdtsStream$1;\n var ADTS_SAMPLING_FREQUENCIES$1 = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n /*\n * Accepts a ElementaryStream and emits data events with parsed\n * AAC Audio Frames of the individual packets. Input audio in ADTS\n * format is unpacked and re-emitted as AAC frames.\n *\n * @see http://wiki.multimedia.cx/index.php?title=ADTS\n * @see http://wiki.multimedia.cx/?title=Understanding_AAC\n */\n\n AdtsStream$1 = function (handlePartialSegments) {\n var buffer,\n frameNum = 0;\n AdtsStream$1.prototype.init.call(this);\n this.skipWarn_ = function (start, end) {\n this.trigger('log', {\n level: 'warn',\n message: `adts skiping bytes ${start} to ${end} in frame ${frameNum} outside syncword`\n });\n };\n this.push = function (packet) {\n var i = 0,\n frameLength,\n protectionSkipBytes,\n oldBuffer,\n sampleCount,\n adtsFrameDuration;\n if (!handlePartialSegments) {\n frameNum = 0;\n }\n if (packet.type !== 'audio') {\n // ignore non-audio data\n return;\n } // Prepend any data in the buffer to the input data so that we can parse\n // aac frames the cross a PES packet boundary\n\n if (buffer && buffer.length) {\n oldBuffer = buffer;\n buffer = new Uint8Array(oldBuffer.byteLength + packet.data.byteLength);\n buffer.set(oldBuffer);\n buffer.set(packet.data, oldBuffer.byteLength);\n } else {\n buffer = packet.data;\n } // unpack any ADTS frames which have been fully received\n // for details on the ADTS header, see http://wiki.multimedia.cx/index.php?title=ADTS\n\n var skip; // We use i + 7 here because we want to be able to parse the entire header.\n // If we don't have enough bytes to do that, then we definitely won't have a full frame.\n\n while (i + 7 < buffer.length) {\n // Look for the start of an ADTS header..\n if (buffer[i] !== 0xFF || (buffer[i + 1] & 0xF6) !== 0xF0) {\n if (typeof skip !== 'number') {\n skip = i;\n } // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n\n i++;\n continue;\n }\n if (typeof skip === 'number') {\n this.skipWarn_(skip, i);\n skip = null;\n } // The protection skip bit tells us if we have 2 bytes of CRC data at the\n // end of the ADTS header\n\n protectionSkipBytes = (~buffer[i + 1] & 0x01) * 2; // Frame length is a 13 bit integer starting 16 bits from the\n // end of the sync sequence\n // NOTE: frame length includes the size of the header\n\n frameLength = (buffer[i + 3] & 0x03) << 11 | buffer[i + 4] << 3 | (buffer[i + 5] & 0xe0) >> 5;\n sampleCount = ((buffer[i + 6] & 0x03) + 1) * 1024;\n adtsFrameDuration = sampleCount * ONE_SECOND_IN_TS$2 / ADTS_SAMPLING_FREQUENCIES$1[(buffer[i + 2] & 0x3c) >>> 2]; // If we don't have enough data to actually finish this ADTS frame,\n // then we have to wait for more data\n\n if (buffer.byteLength - i < frameLength) {\n break;\n } // Otherwise, deliver the complete AAC frame\n\n this.trigger('data', {\n pts: packet.pts + frameNum * adtsFrameDuration,\n dts: packet.dts + frameNum * adtsFrameDuration,\n sampleCount: sampleCount,\n audioobjecttype: (buffer[i + 2] >>> 6 & 0x03) + 1,\n channelcount: (buffer[i + 2] & 1) << 2 | (buffer[i + 3] & 0xc0) >>> 6,\n samplerate: ADTS_SAMPLING_FREQUENCIES$1[(buffer[i + 2] & 0x3c) >>> 2],\n samplingfrequencyindex: (buffer[i + 2] & 0x3c) >>> 2,\n // assume ISO/IEC 14496-12 AudioSampleEntry default of 16\n samplesize: 16,\n // data is the frame without it's header\n data: buffer.subarray(i + 7 + protectionSkipBytes, i + frameLength)\n });\n frameNum++;\n i += frameLength;\n }\n if (typeof skip === 'number') {\n this.skipWarn_(skip, i);\n skip = null;\n } // remove processed bytes from the buffer.\n\n buffer = buffer.subarray(i);\n };\n this.flush = function () {\n frameNum = 0;\n this.trigger('done');\n };\n this.reset = function () {\n buffer = void 0;\n this.trigger('reset');\n };\n this.endTimeline = function () {\n buffer = void 0;\n this.trigger('endedtimeline');\n };\n };\n AdtsStream$1.prototype = new Stream$3();\n var adts = AdtsStream$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var ExpGolomb$1;\n /**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding\n * scheme used by h264.\n */\n\n ExpGolomb$1 = function (workingData) {\n var\n // the number of bytes left to examine in workingData\n workingBytesAvailable = workingData.byteLength,\n // the current word being examined\n workingWord = 0,\n // :uint\n // the number of bits left to examine in the current word\n workingBitsAvailable = 0; // :uint;\n // ():uint\n\n this.length = function () {\n return 8 * workingBytesAvailable;\n }; // ():uint\n\n this.bitsAvailable = function () {\n return 8 * workingBytesAvailable + workingBitsAvailable;\n }; // ():void\n\n this.loadWord = function () {\n var position = workingData.byteLength - workingBytesAvailable,\n workingBytes = new Uint8Array(4),\n availableBytes = Math.min(4, workingBytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(workingData.subarray(position, position + availableBytes));\n workingWord = new DataView(workingBytes.buffer).getUint32(0); // track the amount of workingData that has been processed\n\n workingBitsAvailable = availableBytes * 8;\n workingBytesAvailable -= availableBytes;\n }; // (count:int):void\n\n this.skipBits = function (count) {\n var skipBytes; // :int\n\n if (workingBitsAvailable > count) {\n workingWord <<= count;\n workingBitsAvailable -= count;\n } else {\n count -= workingBitsAvailable;\n skipBytes = Math.floor(count / 8);\n count -= skipBytes * 8;\n workingBytesAvailable -= skipBytes;\n this.loadWord();\n workingWord <<= count;\n workingBitsAvailable -= count;\n }\n }; // (size:int):uint\n\n this.readBits = function (size) {\n var bits = Math.min(workingBitsAvailable, size),\n // :uint\n valu = workingWord >>> 32 - bits; // :uint\n // if size > 31, handle error\n\n workingBitsAvailable -= bits;\n if (workingBitsAvailable > 0) {\n workingWord <<= bits;\n } else if (workingBytesAvailable > 0) {\n this.loadWord();\n }\n bits = size - bits;\n if (bits > 0) {\n return valu << bits | this.readBits(bits);\n }\n return valu;\n }; // ():uint\n\n this.skipLeadingZeros = function () {\n var leadingZeroCount; // :uint\n\n for (leadingZeroCount = 0; leadingZeroCount < workingBitsAvailable; ++leadingZeroCount) {\n if ((workingWord & 0x80000000 >>> leadingZeroCount) !== 0) {\n // the first bit of working word is 1\n workingWord <<= leadingZeroCount;\n workingBitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n } // we exhausted workingWord and still have not found a 1\n\n this.loadWord();\n return leadingZeroCount + this.skipLeadingZeros();\n }; // ():void\n\n this.skipUnsignedExpGolomb = function () {\n this.skipBits(1 + this.skipLeadingZeros());\n }; // ():void\n\n this.skipExpGolomb = function () {\n this.skipBits(1 + this.skipLeadingZeros());\n }; // ():uint\n\n this.readUnsignedExpGolomb = function () {\n var clz = this.skipLeadingZeros(); // :uint\n\n return this.readBits(clz + 1) - 1;\n }; // ():int\n\n this.readExpGolomb = function () {\n var valu = this.readUnsignedExpGolomb(); // :int\n\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n }\n\n return -1 * (valu >>> 1); // divide by two then make it negative\n }; // Some convenience functions\n // :Boolean\n\n this.readBoolean = function () {\n return this.readBits(1) === 1;\n }; // ():int\n\n this.readUnsignedByte = function () {\n return this.readBits(8);\n };\n this.loadWord();\n };\n var expGolomb = ExpGolomb$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var Stream$2 = stream;\n var ExpGolomb = expGolomb;\n var H264Stream$1, NalByteStream;\n var PROFILES_WITH_OPTIONAL_SPS_DATA;\n /**\n * Accepts a NAL unit byte stream and unpacks the embedded NAL units.\n */\n\n NalByteStream = function () {\n var syncPoint = 0,\n i,\n buffer;\n NalByteStream.prototype.init.call(this);\n /*\n * Scans a byte stream and triggers a data event with the NAL units found.\n * @param {Object} data Event received from H264Stream\n * @param {Uint8Array} data.data The h264 byte stream to be scanned\n *\n * @see H264Stream.push\n */\n\n this.push = function (data) {\n var swapBuffer;\n if (!buffer) {\n buffer = data.data;\n } else {\n swapBuffer = new Uint8Array(buffer.byteLength + data.data.byteLength);\n swapBuffer.set(buffer);\n swapBuffer.set(data.data, buffer.byteLength);\n buffer = swapBuffer;\n }\n var len = buffer.byteLength; // Rec. ITU-T H.264, Annex B\n // scan for NAL unit boundaries\n // a match looks like this:\n // 0 0 1 .. NAL .. 0 0 1\n // ^ sync point ^ i\n // or this:\n // 0 0 1 .. NAL .. 0 0 0\n // ^ sync point ^ i\n // advance the sync point to a NAL start, if necessary\n\n for (; syncPoint < len - 3; syncPoint++) {\n if (buffer[syncPoint + 2] === 1) {\n // the sync point is properly aligned\n i = syncPoint + 5;\n break;\n }\n }\n while (i < len) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (buffer[i]) {\n case 0:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0) {\n i += 2;\n break;\n } else if (buffer[i - 2] !== 0) {\n i++;\n break;\n } // deliver the NAL unit if it isn't empty\n\n if (syncPoint + 3 !== i - 2) {\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n } // drop trailing zeroes\n\n do {\n i++;\n } while (buffer[i] !== 1 && i < len);\n syncPoint = i - 2;\n i += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (buffer[i - 1] !== 0 || buffer[i - 2] !== 0) {\n i += 3;\n break;\n } // deliver the NAL unit\n\n this.trigger('data', buffer.subarray(syncPoint + 3, i - 2));\n syncPoint = i - 2;\n i += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n i += 3;\n break;\n }\n } // filter out the NAL units that were delivered\n\n buffer = buffer.subarray(syncPoint);\n i -= syncPoint;\n syncPoint = 0;\n };\n this.reset = function () {\n buffer = null;\n syncPoint = 0;\n this.trigger('reset');\n };\n this.flush = function () {\n // deliver the last buffered NAL unit\n if (buffer && buffer.byteLength > 3) {\n this.trigger('data', buffer.subarray(syncPoint + 3));\n } // reset the stream state\n\n buffer = null;\n syncPoint = 0;\n this.trigger('done');\n };\n this.endTimeline = function () {\n this.flush();\n this.trigger('endedtimeline');\n };\n };\n NalByteStream.prototype = new Stream$2(); // values of profile_idc that indicate additional fields are included in the SPS\n // see Recommendation ITU-T H.264 (4/2013),\n // 7.3.2.1.1 Sequence parameter set data syntax\n\n PROFILES_WITH_OPTIONAL_SPS_DATA = {\n 100: true,\n 110: true,\n 122: true,\n 244: true,\n 44: true,\n 83: true,\n 86: true,\n 118: true,\n 128: true,\n // TODO: the three profiles below don't\n // appear to have sps data in the specificiation anymore?\n 138: true,\n 139: true,\n 134: true\n };\n /**\n * Accepts input from a ElementaryStream and produces H.264 NAL unit data\n * events.\n */\n\n H264Stream$1 = function () {\n var nalByteStream = new NalByteStream(),\n self,\n trackId,\n currentPts,\n currentDts,\n discardEmulationPreventionBytes,\n readSequenceParameterSet,\n skipScalingList;\n H264Stream$1.prototype.init.call(this);\n self = this;\n /*\n * Pushes a packet from a stream onto the NalByteStream\n *\n * @param {Object} packet - A packet received from a stream\n * @param {Uint8Array} packet.data - The raw bytes of the packet\n * @param {Number} packet.dts - Decode timestamp of the packet\n * @param {Number} packet.pts - Presentation timestamp of the packet\n * @param {Number} packet.trackId - The id of the h264 track this packet came from\n * @param {('video'|'audio')} packet.type - The type of packet\n *\n */\n\n this.push = function (packet) {\n if (packet.type !== 'video') {\n return;\n }\n trackId = packet.trackId;\n currentPts = packet.pts;\n currentDts = packet.dts;\n nalByteStream.push(packet);\n };\n /*\n * Identify NAL unit types and pass on the NALU, trackId, presentation and decode timestamps\n * for the NALUs to the next stream component.\n * Also, preprocess caption and sequence parameter NALUs.\n *\n * @param {Uint8Array} data - A NAL unit identified by `NalByteStream.push`\n * @see NalByteStream.push\n */\n\n nalByteStream.on('data', function (data) {\n var event = {\n trackId: trackId,\n pts: currentPts,\n dts: currentDts,\n data: data,\n nalUnitTypeCode: data[0] & 0x1f\n };\n switch (event.nalUnitTypeCode) {\n case 0x05:\n event.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr';\n break;\n case 0x06:\n event.nalUnitType = 'sei_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n break;\n case 0x07:\n event.nalUnitType = 'seq_parameter_set_rbsp';\n event.escapedRBSP = discardEmulationPreventionBytes(data.subarray(1));\n event.config = readSequenceParameterSet(event.escapedRBSP);\n break;\n case 0x08:\n event.nalUnitType = 'pic_parameter_set_rbsp';\n break;\n case 0x09:\n event.nalUnitType = 'access_unit_delimiter_rbsp';\n break;\n } // This triggers data on the H264Stream\n\n self.trigger('data', event);\n });\n nalByteStream.on('done', function () {\n self.trigger('done');\n });\n nalByteStream.on('partialdone', function () {\n self.trigger('partialdone');\n });\n nalByteStream.on('reset', function () {\n self.trigger('reset');\n });\n nalByteStream.on('endedtimeline', function () {\n self.trigger('endedtimeline');\n });\n this.flush = function () {\n nalByteStream.flush();\n };\n this.partialFlush = function () {\n nalByteStream.partialFlush();\n };\n this.reset = function () {\n nalByteStream.reset();\n };\n this.endTimeline = function () {\n nalByteStream.endTimeline();\n };\n /**\n * Advance the ExpGolomb decoder past a scaling list. The scaling\n * list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count {number} the number of entries in this scaling list\n * @param expGolombDecoder {object} an ExpGolomb pointed to the\n * start of a scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n\n skipScalingList = function (count, expGolombDecoder) {\n var lastScale = 8,\n nextScale = 8,\n j,\n deltaScale;\n for (j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = expGolombDecoder.readExpGolomb();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n };\n /**\n * Expunge any \"Emulation Prevention\" bytes from a \"Raw Byte\n * Sequence Payload\"\n * @param data {Uint8Array} the bytes of a RBSP from a NAL\n * unit\n * @return {Uint8Array} the RBSP without any Emulation\n * Prevention Bytes\n */\n\n discardEmulationPreventionBytes = function (data) {\n var length = data.byteLength,\n emulationPreventionBytesPositions = [],\n i = 1,\n newLength,\n newData; // Find all `Emulation Prevention Bytes`\n\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n emulationPreventionBytesPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n } // If no Emulation Prevention Bytes were found just return the original\n // array\n\n if (emulationPreventionBytesPositions.length === 0) {\n return data;\n } // Create a new array to hold the NAL unit data\n\n newLength = length - emulationPreventionBytesPositions.length;\n newData = new Uint8Array(newLength);\n var sourceIndex = 0;\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === emulationPreventionBytesPositions[0]) {\n // Skip this byte\n sourceIndex++; // Remove this position index\n\n emulationPreventionBytesPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n };\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @param data {Uint8Array} the bytes of a sequence parameter set\n * @return {object} an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n\n readSequenceParameterSet = function (data) {\n var frameCropLeftOffset = 0,\n frameCropRightOffset = 0,\n frameCropTopOffset = 0,\n frameCropBottomOffset = 0,\n expGolombDecoder,\n profileIdc,\n levelIdc,\n profileCompatibility,\n chromaFormatIdc,\n picOrderCntType,\n numRefFramesInPicOrderCntCycle,\n picWidthInMbsMinus1,\n picHeightInMapUnitsMinus1,\n frameMbsOnlyFlag,\n scalingListCount,\n sarRatio = [1, 1],\n aspectRatioIdc,\n i;\n expGolombDecoder = new ExpGolomb(data);\n profileIdc = expGolombDecoder.readUnsignedByte(); // profile_idc\n\n profileCompatibility = expGolombDecoder.readUnsignedByte(); // constraint_set[0-5]_flag\n\n levelIdc = expGolombDecoder.readUnsignedByte(); // level_idc u(8)\n\n expGolombDecoder.skipUnsignedExpGolomb(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n\n if (PROFILES_WITH_OPTIONAL_SPS_DATA[profileIdc]) {\n chromaFormatIdc = expGolombDecoder.readUnsignedExpGolomb();\n if (chromaFormatIdc === 3) {\n expGolombDecoder.skipBits(1); // separate_colour_plane_flag\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_luma_minus8\n\n expGolombDecoder.skipUnsignedExpGolomb(); // bit_depth_chroma_minus8\n\n expGolombDecoder.skipBits(1); // qpprime_y_zero_transform_bypass_flag\n\n if (expGolombDecoder.readBoolean()) {\n // seq_scaling_matrix_present_flag\n scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (expGolombDecoder.readBoolean()) {\n // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, expGolombDecoder);\n } else {\n skipScalingList(64, expGolombDecoder);\n }\n }\n }\n }\n }\n expGolombDecoder.skipUnsignedExpGolomb(); // log2_max_frame_num_minus4\n\n picOrderCntType = expGolombDecoder.readUnsignedExpGolomb();\n if (picOrderCntType === 0) {\n expGolombDecoder.readUnsignedExpGolomb(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n expGolombDecoder.skipBits(1); // delta_pic_order_always_zero_flag\n\n expGolombDecoder.skipExpGolomb(); // offset_for_non_ref_pic\n\n expGolombDecoder.skipExpGolomb(); // offset_for_top_to_bottom_field\n\n numRefFramesInPicOrderCntCycle = expGolombDecoder.readUnsignedExpGolomb();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n expGolombDecoder.skipExpGolomb(); // offset_for_ref_frame[ i ]\n }\n }\n\n expGolombDecoder.skipUnsignedExpGolomb(); // max_num_ref_frames\n\n expGolombDecoder.skipBits(1); // gaps_in_frame_num_value_allowed_flag\n\n picWidthInMbsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n picHeightInMapUnitsMinus1 = expGolombDecoder.readUnsignedExpGolomb();\n frameMbsOnlyFlag = expGolombDecoder.readBits(1);\n if (frameMbsOnlyFlag === 0) {\n expGolombDecoder.skipBits(1); // mb_adaptive_frame_field_flag\n }\n\n expGolombDecoder.skipBits(1); // direct_8x8_inference_flag\n\n if (expGolombDecoder.readBoolean()) {\n // frame_cropping_flag\n frameCropLeftOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropRightOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropTopOffset = expGolombDecoder.readUnsignedExpGolomb();\n frameCropBottomOffset = expGolombDecoder.readUnsignedExpGolomb();\n }\n if (expGolombDecoder.readBoolean()) {\n // vui_parameters_present_flag\n if (expGolombDecoder.readBoolean()) {\n // aspect_ratio_info_present_flag\n aspectRatioIdc = expGolombDecoder.readUnsignedByte();\n switch (aspectRatioIdc) {\n case 1:\n sarRatio = [1, 1];\n break;\n case 2:\n sarRatio = [12, 11];\n break;\n case 3:\n sarRatio = [10, 11];\n break;\n case 4:\n sarRatio = [16, 11];\n break;\n case 5:\n sarRatio = [40, 33];\n break;\n case 6:\n sarRatio = [24, 11];\n break;\n case 7:\n sarRatio = [20, 11];\n break;\n case 8:\n sarRatio = [32, 11];\n break;\n case 9:\n sarRatio = [80, 33];\n break;\n case 10:\n sarRatio = [18, 11];\n break;\n case 11:\n sarRatio = [15, 11];\n break;\n case 12:\n sarRatio = [64, 33];\n break;\n case 13:\n sarRatio = [160, 99];\n break;\n case 14:\n sarRatio = [4, 3];\n break;\n case 15:\n sarRatio = [3, 2];\n break;\n case 16:\n sarRatio = [2, 1];\n break;\n case 255:\n {\n sarRatio = [expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte(), expGolombDecoder.readUnsignedByte() << 8 | expGolombDecoder.readUnsignedByte()];\n break;\n }\n }\n if (sarRatio) {\n sarRatio[0] / sarRatio[1];\n }\n }\n }\n return {\n profileIdc: profileIdc,\n levelIdc: levelIdc,\n profileCompatibility: profileCompatibility,\n width: (picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2,\n height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - frameCropTopOffset * 2 - frameCropBottomOffset * 2,\n // sar is sample aspect ratio\n sarRatio: sarRatio\n };\n };\n };\n H264Stream$1.prototype = new Stream$2();\n var h264 = {\n H264Stream: H264Stream$1,\n NalByteStream: NalByteStream\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about Aac data.\n */\n\n var ADTS_SAMPLING_FREQUENCIES = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n var parseId3TagSize = function (header, byteIndex) {\n var returnSize = header[byteIndex + 6] << 21 | header[byteIndex + 7] << 14 | header[byteIndex + 8] << 7 | header[byteIndex + 9],\n flags = header[byteIndex + 5],\n footerPresent = (flags & 16) >> 4; // if we get a negative returnSize clamp it to 0\n\n returnSize = returnSize >= 0 ? returnSize : 0;\n if (footerPresent) {\n return returnSize + 20;\n }\n return returnSize + 10;\n };\n var getId3Offset = function (data, offset) {\n if (data.length - offset < 10 || data[offset] !== 'I'.charCodeAt(0) || data[offset + 1] !== 'D'.charCodeAt(0) || data[offset + 2] !== '3'.charCodeAt(0)) {\n return offset;\n }\n offset += parseId3TagSize(data, offset);\n return getId3Offset(data, offset);\n }; // TODO: use vhs-utils\n\n var isLikelyAacData$1 = function (data) {\n var offset = getId3Offset(data, 0);\n return data.length >= offset + 2 && (data[offset] & 0xFF) === 0xFF && (data[offset + 1] & 0xF0) === 0xF0 &&\n // verify that the 2 layer bits are 0, aka this\n // is not mp3 data but aac data.\n (data[offset + 1] & 0x16) === 0x10;\n };\n var parseSyncSafeInteger = function (data) {\n return data[0] << 21 | data[1] << 14 | data[2] << 7 | data[3];\n }; // return a percent-encoded representation of the specified byte range\n // @see http://en.wikipedia.org/wiki/Percent-encoding\n\n var percentEncode = function (bytes, start, end) {\n var i,\n result = '';\n for (i = start; i < end; i++) {\n result += '%' + ('00' + bytes[i].toString(16)).slice(-2);\n }\n return result;\n }; // return the string representation of the specified byte range,\n // interpreted as ISO-8859-1.\n\n var parseIso88591 = function (bytes, start, end) {\n return unescape(percentEncode(bytes, start, end)); // jshint ignore:line\n };\n\n var parseAdtsSize = function (header, byteIndex) {\n var lowThree = (header[byteIndex + 5] & 0xE0) >> 5,\n middle = header[byteIndex + 4] << 3,\n highTwo = header[byteIndex + 3] & 0x3 << 11;\n return highTwo | middle | lowThree;\n };\n var parseType$4 = function (header, byteIndex) {\n if (header[byteIndex] === 'I'.charCodeAt(0) && header[byteIndex + 1] === 'D'.charCodeAt(0) && header[byteIndex + 2] === '3'.charCodeAt(0)) {\n return 'timed-metadata';\n } else if (header[byteIndex] & 0xff === 0xff && (header[byteIndex + 1] & 0xf0) === 0xf0) {\n return 'audio';\n }\n return null;\n };\n var parseSampleRate = function (packet) {\n var i = 0;\n while (i + 5 < packet.length) {\n if (packet[i] !== 0xFF || (packet[i + 1] & 0xF6) !== 0xF0) {\n // If a valid header was not found, jump one forward and attempt to\n // find a valid ADTS header starting at the next byte\n i++;\n continue;\n }\n return ADTS_SAMPLING_FREQUENCIES[(packet[i + 2] & 0x3c) >>> 2];\n }\n return null;\n };\n var parseAacTimestamp = function (packet) {\n var frameStart, frameSize, frame, frameHeader; // find the start of the first frame and the end of the tag\n\n frameStart = 10;\n if (packet[5] & 0x40) {\n // advance the frame start past the extended header\n frameStart += 4; // header size field\n\n frameStart += parseSyncSafeInteger(packet.subarray(10, 14));\n } // parse one or more ID3 frames\n // http://id3.org/id3v2.3.0#ID3v2_frame_overview\n\n do {\n // determine the number of bytes in this frame\n frameSize = parseSyncSafeInteger(packet.subarray(frameStart + 4, frameStart + 8));\n if (frameSize < 1) {\n return null;\n }\n frameHeader = String.fromCharCode(packet[frameStart], packet[frameStart + 1], packet[frameStart + 2], packet[frameStart + 3]);\n if (frameHeader === 'PRIV') {\n frame = packet.subarray(frameStart + 10, frameStart + frameSize + 10);\n for (var i = 0; i < frame.byteLength; i++) {\n if (frame[i] === 0) {\n var owner = parseIso88591(frame, 0, i);\n if (owner === 'com.apple.streaming.transportStreamTimestamp') {\n var d = frame.subarray(i + 1);\n var size = (d[3] & 0x01) << 30 | d[4] << 22 | d[5] << 14 | d[6] << 6 | d[7] >>> 2;\n size *= 4;\n size += d[7] & 0x03;\n return size;\n }\n break;\n }\n }\n }\n frameStart += 10; // advance past the frame header\n\n frameStart += frameSize; // advance past the frame body\n } while (frameStart < packet.byteLength);\n return null;\n };\n var utils = {\n isLikelyAacData: isLikelyAacData$1,\n parseId3TagSize: parseId3TagSize,\n parseAdtsSize: parseAdtsSize,\n parseType: parseType$4,\n parseSampleRate: parseSampleRate,\n parseAacTimestamp: parseAacTimestamp\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based aac to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream$1 = stream;\n var aacUtils = utils; // Constants\n\n var AacStream$1;\n /**\n * Splits an incoming stream of binary data into ADTS and ID3 Frames.\n */\n\n AacStream$1 = function () {\n var everything = new Uint8Array(),\n timeStamp = 0;\n AacStream$1.prototype.init.call(this);\n this.setTimestamp = function (timestamp) {\n timeStamp = timestamp;\n };\n this.push = function (bytes) {\n var frameSize = 0,\n byteIndex = 0,\n bytesLeft,\n chunk,\n packet,\n tempLength; // If there are bytes remaining from the last segment, prepend them to the\n // bytes that were pushed in\n\n if (everything.length) {\n tempLength = everything.length;\n everything = new Uint8Array(bytes.byteLength + tempLength);\n everything.set(everything.subarray(0, tempLength));\n everything.set(bytes, tempLength);\n } else {\n everything = bytes;\n }\n while (everything.length - byteIndex >= 3) {\n if (everything[byteIndex] === 'I'.charCodeAt(0) && everything[byteIndex + 1] === 'D'.charCodeAt(0) && everything[byteIndex + 2] === '3'.charCodeAt(0)) {\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (everything.length - byteIndex < 10) {\n break;\n } // check framesize\n\n frameSize = aacUtils.parseId3TagSize(everything, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n // Add to byteIndex to support multiple ID3 tags in sequence\n\n if (byteIndex + frameSize > everything.length) {\n break;\n }\n chunk = {\n type: 'timed-metadata',\n data: everything.subarray(byteIndex, byteIndex + frameSize)\n };\n this.trigger('data', chunk);\n byteIndex += frameSize;\n continue;\n } else if ((everything[byteIndex] & 0xff) === 0xff && (everything[byteIndex + 1] & 0xf0) === 0xf0) {\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (everything.length - byteIndex < 7) {\n break;\n }\n frameSize = aacUtils.parseAdtsSize(everything, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (byteIndex + frameSize > everything.length) {\n break;\n }\n packet = {\n type: 'audio',\n data: everything.subarray(byteIndex, byteIndex + frameSize),\n pts: timeStamp,\n dts: timeStamp\n };\n this.trigger('data', packet);\n byteIndex += frameSize;\n continue;\n }\n byteIndex++;\n }\n bytesLeft = everything.length - byteIndex;\n if (bytesLeft > 0) {\n everything = everything.subarray(byteIndex);\n } else {\n everything = new Uint8Array();\n }\n };\n this.reset = function () {\n everything = new Uint8Array();\n this.trigger('reset');\n };\n this.endTimeline = function () {\n everything = new Uint8Array();\n this.trigger('endedtimeline');\n };\n };\n AacStream$1.prototype = new Stream$1();\n var aac = AacStream$1;\n var AUDIO_PROPERTIES$1 = ['audioobjecttype', 'channelcount', 'samplerate', 'samplingfrequencyindex', 'samplesize'];\n var audioProperties = AUDIO_PROPERTIES$1;\n var VIDEO_PROPERTIES$1 = ['width', 'height', 'profileIdc', 'levelIdc', 'profileCompatibility', 'sarRatio'];\n var videoProperties = VIDEO_PROPERTIES$1;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * A stream-based mp2t to mp4 converter. This utility can be used to\n * deliver mp4s to a SourceBuffer on platforms that support native\n * Media Source Extensions.\n */\n\n var Stream = stream;\n var mp4 = mp4Generator;\n var frameUtils = frameUtils$1;\n var audioFrameUtils = audioFrameUtils$1;\n var trackDecodeInfo = trackDecodeInfo$1;\n var m2ts = m2ts_1;\n var clock = clock$2;\n var AdtsStream = adts;\n var H264Stream = h264.H264Stream;\n var AacStream = aac;\n var isLikelyAacData = utils.isLikelyAacData;\n var ONE_SECOND_IN_TS$1 = clock$2.ONE_SECOND_IN_TS;\n var AUDIO_PROPERTIES = audioProperties;\n var VIDEO_PROPERTIES = videoProperties; // object types\n\n var VideoSegmentStream, AudioSegmentStream, Transmuxer, CoalesceStream;\n var retriggerForStream = function (key, event) {\n event.stream = key;\n this.trigger('log', event);\n };\n var addPipelineLogRetriggers = function (transmuxer, pipeline) {\n var keys = Object.keys(pipeline);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i]; // skip non-stream keys and headOfPipeline\n // which is just a duplicate\n\n if (key === 'headOfPipeline' || !pipeline[key].on) {\n continue;\n }\n pipeline[key].on('log', retriggerForStream.bind(transmuxer, key));\n }\n };\n /**\n * Compare two arrays (even typed) for same-ness\n */\n\n var arrayEquals = function (a, b) {\n var i;\n if (a.length !== b.length) {\n return false;\n } // compare the value of each element in the array\n\n for (i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) {\n return false;\n }\n }\n return true;\n };\n var generateSegmentTimingInfo = function (baseMediaDecodeTime, startDts, startPts, endDts, endPts, prependedContentDuration) {\n var ptsOffsetFromDts = startPts - startDts,\n decodeDuration = endDts - startDts,\n presentationDuration = endPts - startPts; // The PTS and DTS values are based on the actual stream times from the segment,\n // however, the player time values will reflect a start from the baseMediaDecodeTime.\n // In order to provide relevant values for the player times, base timing info on the\n // baseMediaDecodeTime and the DTS and PTS durations of the segment.\n\n return {\n start: {\n dts: baseMediaDecodeTime,\n pts: baseMediaDecodeTime + ptsOffsetFromDts\n },\n end: {\n dts: baseMediaDecodeTime + decodeDuration,\n pts: baseMediaDecodeTime + presentationDuration\n },\n prependedContentDuration: prependedContentDuration,\n baseMediaDecodeTime: baseMediaDecodeTime\n };\n };\n /**\n * Constructs a single-track, ISO BMFF media segment from AAC data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n AudioSegmentStream = function (track, options) {\n var adtsFrames = [],\n sequenceNumber,\n earliestAllowedDts = 0,\n audioAppendStartTs = 0,\n videoBaseMediaDecodeTime = Infinity;\n options = options || {};\n sequenceNumber = options.firstSequenceNumber || 0;\n AudioSegmentStream.prototype.init.call(this);\n this.push = function (data) {\n trackDecodeInfo.collectDtsInfo(track, data);\n if (track) {\n AUDIO_PROPERTIES.forEach(function (prop) {\n track[prop] = data[prop];\n });\n } // buffer audio data until end() is called\n\n adtsFrames.push(data);\n };\n this.setEarliestDts = function (earliestDts) {\n earliestAllowedDts = earliestDts;\n };\n this.setVideoBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n videoBaseMediaDecodeTime = baseMediaDecodeTime;\n };\n this.setAudioAppendStart = function (timestamp) {\n audioAppendStartTs = timestamp;\n };\n this.flush = function () {\n var frames, moof, mdat, boxes, frameDuration, segmentDuration, videoClockCyclesOfSilencePrefixed; // return early if no audio data has been observed\n\n if (adtsFrames.length === 0) {\n this.trigger('done', 'AudioSegmentStream');\n return;\n }\n frames = audioFrameUtils.trimAdtsFramesByEarliestDts(adtsFrames, track, earliestAllowedDts);\n track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps); // amount of audio filled but the value is in video clock rather than audio clock\n\n videoClockCyclesOfSilencePrefixed = audioFrameUtils.prefixWithSilence(track, frames, audioAppendStartTs, videoBaseMediaDecodeTime); // we have to build the index from byte locations to\n // samples (that is, adts frames) in the audio data\n\n track.samples = audioFrameUtils.generateSampleTable(frames); // concatenate the audio data to constuct the mdat\n\n mdat = mp4.mdat(audioFrameUtils.concatenateFrameData(frames));\n adtsFrames = [];\n moof = mp4.moof(sequenceNumber, [track]);\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength); // bump the sequence number for next time\n\n sequenceNumber++;\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n trackDecodeInfo.clearDtsInfo(track);\n frameDuration = Math.ceil(ONE_SECOND_IN_TS$1 * 1024 / track.samplerate); // TODO this check was added to maintain backwards compatibility (particularly with\n // tests) on adding the timingInfo event. However, it seems unlikely that there's a\n // valid use-case where an init segment/data should be triggered without associated\n // frames. Leaving for now, but should be looked into.\n\n if (frames.length) {\n segmentDuration = frames.length * frameDuration;\n this.trigger('segmentTimingInfo', generateSegmentTimingInfo(\n // The audio track's baseMediaDecodeTime is in audio clock cycles, but the\n // frame info is in video clock cycles. Convert to match expectation of\n // listeners (that all timestamps will be based on video clock cycles).\n clock.audioTsToVideoTs(track.baseMediaDecodeTime, track.samplerate),\n // frame times are already in video clock, as is segment duration\n frames[0].dts, frames[0].pts, frames[0].dts + segmentDuration, frames[0].pts + segmentDuration, videoClockCyclesOfSilencePrefixed || 0));\n this.trigger('timingInfo', {\n start: frames[0].pts,\n end: frames[0].pts + segmentDuration\n });\n }\n this.trigger('data', {\n track: track,\n boxes: boxes\n });\n this.trigger('done', 'AudioSegmentStream');\n };\n this.reset = function () {\n trackDecodeInfo.clearDtsInfo(track);\n adtsFrames = [];\n this.trigger('reset');\n };\n };\n AudioSegmentStream.prototype = new Stream();\n /**\n * Constructs a single-track, ISO BMFF media segment from H264 data\n * events. The output of this stream can be fed to a SourceBuffer\n * configured with a suitable initialization segment.\n * @param track {object} track metadata configuration\n * @param options {object} transmuxer options object\n * @param options.alignGopsAtEnd {boolean} If true, start from the end of the\n * gopsToAlignWith list when attempting to align gop pts\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at 0.\n */\n\n VideoSegmentStream = function (track, options) {\n var sequenceNumber,\n nalUnits = [],\n gopsToAlignWith = [],\n config,\n pps;\n options = options || {};\n sequenceNumber = options.firstSequenceNumber || 0;\n VideoSegmentStream.prototype.init.call(this);\n delete track.minPTS;\n this.gopCache_ = [];\n /**\n * Constructs a ISO BMFF segment given H264 nalUnits\n * @param {Object} nalUnit A data event representing a nalUnit\n * @param {String} nalUnit.nalUnitType\n * @param {Object} nalUnit.config Properties for a mp4 track\n * @param {Uint8Array} nalUnit.data The nalUnit bytes\n * @see lib/codecs/h264.js\n **/\n\n this.push = function (nalUnit) {\n trackDecodeInfo.collectDtsInfo(track, nalUnit); // record the track config\n\n if (nalUnit.nalUnitType === 'seq_parameter_set_rbsp' && !config) {\n config = nalUnit.config;\n track.sps = [nalUnit.data];\n VIDEO_PROPERTIES.forEach(function (prop) {\n track[prop] = config[prop];\n }, this);\n }\n if (nalUnit.nalUnitType === 'pic_parameter_set_rbsp' && !pps) {\n pps = nalUnit.data;\n track.pps = [nalUnit.data];\n } // buffer video until flush() is called\n\n nalUnits.push(nalUnit);\n };\n /**\n * Pass constructed ISO BMFF track and boxes on to the\n * next stream in the pipeline\n **/\n\n this.flush = function () {\n var frames,\n gopForFusion,\n gops,\n moof,\n mdat,\n boxes,\n prependedContentDuration = 0,\n firstGop,\n lastGop; // Throw away nalUnits at the start of the byte stream until\n // we find the first AUD\n\n while (nalUnits.length) {\n if (nalUnits[0].nalUnitType === 'access_unit_delimiter_rbsp') {\n break;\n }\n nalUnits.shift();\n } // Return early if no video data has been observed\n\n if (nalUnits.length === 0) {\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n } // Organize the raw nal-units into arrays that represent\n // higher-level constructs such as frames and gops\n // (group-of-pictures)\n\n frames = frameUtils.groupNalsIntoFrames(nalUnits);\n gops = frameUtils.groupFramesIntoGops(frames); // If the first frame of this fragment is not a keyframe we have\n // a problem since MSE (on Chrome) requires a leading keyframe.\n //\n // We have two approaches to repairing this situation:\n // 1) GOP-FUSION:\n // This is where we keep track of the GOPS (group-of-pictures)\n // from previous fragments and attempt to find one that we can\n // prepend to the current fragment in order to create a valid\n // fragment.\n // 2) KEYFRAME-PULLING:\n // Here we search for the first keyframe in the fragment and\n // throw away all the frames between the start of the fragment\n // and that keyframe. We then extend the duration and pull the\n // PTS of the keyframe forward so that it covers the time range\n // of the frames that were disposed of.\n //\n // #1 is far prefereable over #2 which can cause \"stuttering\" but\n // requires more things to be just right.\n\n if (!gops[0][0].keyFrame) {\n // Search for a gop for fusion from our gopCache\n gopForFusion = this.getGopForFusion_(nalUnits[0], track);\n if (gopForFusion) {\n // in order to provide more accurate timing information about the segment, save\n // the number of seconds prepended to the original segment due to GOP fusion\n prependedContentDuration = gopForFusion.duration;\n gops.unshift(gopForFusion); // Adjust Gops' metadata to account for the inclusion of the\n // new gop at the beginning\n\n gops.byteLength += gopForFusion.byteLength;\n gops.nalCount += gopForFusion.nalCount;\n gops.pts = gopForFusion.pts;\n gops.dts = gopForFusion.dts;\n gops.duration += gopForFusion.duration;\n } else {\n // If we didn't find a candidate gop fall back to keyframe-pulling\n gops = frameUtils.extendFirstKeyFrame(gops);\n }\n } // Trim gops to align with gopsToAlignWith\n\n if (gopsToAlignWith.length) {\n var alignedGops;\n if (options.alignGopsAtEnd) {\n alignedGops = this.alignGopsAtEnd_(gops);\n } else {\n alignedGops = this.alignGopsAtStart_(gops);\n }\n if (!alignedGops) {\n // save all the nals in the last GOP into the gop cache\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n }); // Keep a maximum of 6 GOPs in the cache\n\n this.gopCache_.length = Math.min(6, this.gopCache_.length); // Clear nalUnits\n\n nalUnits = []; // return early no gops can be aligned with desired gopsToAlignWith\n\n this.resetStream_();\n this.trigger('done', 'VideoSegmentStream');\n return;\n } // Some gops were trimmed. clear dts info so minSegmentDts and pts are correct\n // when recalculated before sending off to CoalesceStream\n\n trackDecodeInfo.clearDtsInfo(track);\n gops = alignedGops;\n }\n trackDecodeInfo.collectDtsInfo(track, gops); // First, we have to build the index from byte locations to\n // samples (that is, frames) in the video data\n\n track.samples = frameUtils.generateSampleTable(gops); // Concatenate the video data and construct the mdat\n\n mdat = mp4.mdat(frameUtils.concatenateNalData(gops));\n track.baseMediaDecodeTime = trackDecodeInfo.calculateTrackBaseMediaDecodeTime(track, options.keepOriginalTimestamps);\n this.trigger('processedGopsInfo', gops.map(function (gop) {\n return {\n pts: gop.pts,\n dts: gop.dts,\n byteLength: gop.byteLength\n };\n }));\n firstGop = gops[0];\n lastGop = gops[gops.length - 1];\n this.trigger('segmentTimingInfo', generateSegmentTimingInfo(track.baseMediaDecodeTime, firstGop.dts, firstGop.pts, lastGop.dts + lastGop.duration, lastGop.pts + lastGop.duration, prependedContentDuration));\n this.trigger('timingInfo', {\n start: gops[0].pts,\n end: gops[gops.length - 1].pts + gops[gops.length - 1].duration\n }); // save all the nals in the last GOP into the gop cache\n\n this.gopCache_.unshift({\n gop: gops.pop(),\n pps: track.pps,\n sps: track.sps\n }); // Keep a maximum of 6 GOPs in the cache\n\n this.gopCache_.length = Math.min(6, this.gopCache_.length); // Clear nalUnits\n\n nalUnits = [];\n this.trigger('baseMediaDecodeTime', track.baseMediaDecodeTime);\n this.trigger('timelineStartInfo', track.timelineStartInfo);\n moof = mp4.moof(sequenceNumber, [track]); // it would be great to allocate this array up front instead of\n // throwing away hundreds of media segment fragments\n\n boxes = new Uint8Array(moof.byteLength + mdat.byteLength); // Bump the sequence number for next time\n\n sequenceNumber++;\n boxes.set(moof);\n boxes.set(mdat, moof.byteLength);\n this.trigger('data', {\n track: track,\n boxes: boxes\n });\n this.resetStream_(); // Continue with the flush process now\n\n this.trigger('done', 'VideoSegmentStream');\n };\n this.reset = function () {\n this.resetStream_();\n nalUnits = [];\n this.gopCache_.length = 0;\n gopsToAlignWith.length = 0;\n this.trigger('reset');\n };\n this.resetStream_ = function () {\n trackDecodeInfo.clearDtsInfo(track); // reset config and pps because they may differ across segments\n // for instance, when we are rendition switching\n\n config = undefined;\n pps = undefined;\n }; // Search for a candidate Gop for gop-fusion from the gop cache and\n // return it or return null if no good candidate was found\n\n this.getGopForFusion_ = function (nalUnit) {\n var halfSecond = 45000,\n // Half-a-second in a 90khz clock\n allowableOverlap = 10000,\n // About 3 frames @ 30fps\n nearestDistance = Infinity,\n dtsDistance,\n nearestGopObj,\n currentGop,\n currentGopObj,\n i; // Search for the GOP nearest to the beginning of this nal unit\n\n for (i = 0; i < this.gopCache_.length; i++) {\n currentGopObj = this.gopCache_[i];\n currentGop = currentGopObj.gop; // Reject Gops with different SPS or PPS\n\n if (!(track.pps && arrayEquals(track.pps[0], currentGopObj.pps[0])) || !(track.sps && arrayEquals(track.sps[0], currentGopObj.sps[0]))) {\n continue;\n } // Reject Gops that would require a negative baseMediaDecodeTime\n\n if (currentGop.dts < track.timelineStartInfo.dts) {\n continue;\n } // The distance between the end of the gop and the start of the nalUnit\n\n dtsDistance = nalUnit.dts - currentGop.dts - currentGop.duration; // Only consider GOPS that start before the nal unit and end within\n // a half-second of the nal unit\n\n if (dtsDistance >= -allowableOverlap && dtsDistance <= halfSecond) {\n // Always use the closest GOP we found if there is more than\n // one candidate\n if (!nearestGopObj || nearestDistance > dtsDistance) {\n nearestGopObj = currentGopObj;\n nearestDistance = dtsDistance;\n }\n }\n }\n if (nearestGopObj) {\n return nearestGopObj.gop;\n }\n return null;\n }; // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the START of the list\n\n this.alignGopsAtStart_ = function (gops) {\n var alignIndex, gopIndex, align, gop, byteLength, nalCount, duration, alignedGops;\n byteLength = gops.byteLength;\n nalCount = gops.nalCount;\n duration = gops.duration;\n alignIndex = gopIndex = 0;\n while (alignIndex < gopsToAlignWith.length && gopIndex < gops.length) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n if (align.pts === gop.pts) {\n break;\n }\n if (gop.pts > align.pts) {\n // this current gop starts after the current gop we want to align on, so increment\n // align index\n alignIndex++;\n continue;\n } // current gop starts before the current gop we want to align on. so increment gop\n // index\n\n gopIndex++;\n byteLength -= gop.byteLength;\n nalCount -= gop.nalCount;\n duration -= gop.duration;\n }\n if (gopIndex === 0) {\n // no gops to trim\n return gops;\n }\n if (gopIndex === gops.length) {\n // all gops trimmed, skip appending all gops\n return null;\n }\n alignedGops = gops.slice(gopIndex);\n alignedGops.byteLength = byteLength;\n alignedGops.duration = duration;\n alignedGops.nalCount = nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n return alignedGops;\n }; // trim gop list to the first gop found that has a matching pts with a gop in the list\n // of gopsToAlignWith starting from the END of the list\n\n this.alignGopsAtEnd_ = function (gops) {\n var alignIndex, gopIndex, align, gop, alignEndIndex, matchFound;\n alignIndex = gopsToAlignWith.length - 1;\n gopIndex = gops.length - 1;\n alignEndIndex = null;\n matchFound = false;\n while (alignIndex >= 0 && gopIndex >= 0) {\n align = gopsToAlignWith[alignIndex];\n gop = gops[gopIndex];\n if (align.pts === gop.pts) {\n matchFound = true;\n break;\n }\n if (align.pts > gop.pts) {\n alignIndex--;\n continue;\n }\n if (alignIndex === gopsToAlignWith.length - 1) {\n // gop.pts is greater than the last alignment candidate. If no match is found\n // by the end of this loop, we still want to append gops that come after this\n // point\n alignEndIndex = gopIndex;\n }\n gopIndex--;\n }\n if (!matchFound && alignEndIndex === null) {\n return null;\n }\n var trimIndex;\n if (matchFound) {\n trimIndex = gopIndex;\n } else {\n trimIndex = alignEndIndex;\n }\n if (trimIndex === 0) {\n return gops;\n }\n var alignedGops = gops.slice(trimIndex);\n var metadata = alignedGops.reduce(function (total, gop) {\n total.byteLength += gop.byteLength;\n total.duration += gop.duration;\n total.nalCount += gop.nalCount;\n return total;\n }, {\n byteLength: 0,\n duration: 0,\n nalCount: 0\n });\n alignedGops.byteLength = metadata.byteLength;\n alignedGops.duration = metadata.duration;\n alignedGops.nalCount = metadata.nalCount;\n alignedGops.pts = alignedGops[0].pts;\n alignedGops.dts = alignedGops[0].dts;\n return alignedGops;\n };\n this.alignGopsWith = function (newGopsToAlignWith) {\n gopsToAlignWith = newGopsToAlignWith;\n };\n };\n VideoSegmentStream.prototype = new Stream();\n /**\n * A Stream that can combine multiple streams (ie. audio & video)\n * into a single output segment for MSE. Also supports audio-only\n * and video-only streams.\n * @param options {object} transmuxer options object\n * @param options.keepOriginalTimestamps {boolean} If true, keep the timestamps\n * in the source; false to adjust the first segment to start at media timeline start.\n */\n\n CoalesceStream = function (options, metadataStream) {\n // Number of Tracks per output segment\n // If greater than 1, we combine multiple\n // tracks into a single segment\n this.numberOfTracks = 0;\n this.metadataStream = metadataStream;\n options = options || {};\n if (typeof options.remux !== 'undefined') {\n this.remuxTracks = !!options.remux;\n } else {\n this.remuxTracks = true;\n }\n if (typeof options.keepOriginalTimestamps === 'boolean') {\n this.keepOriginalTimestamps = options.keepOriginalTimestamps;\n } else {\n this.keepOriginalTimestamps = false;\n }\n this.pendingTracks = [];\n this.videoTrack = null;\n this.pendingBoxes = [];\n this.pendingCaptions = [];\n this.pendingMetadata = [];\n this.pendingBytes = 0;\n this.emittedTracks = 0;\n CoalesceStream.prototype.init.call(this); // Take output from multiple\n\n this.push = function (output) {\n // buffer incoming captions until the associated video segment\n // finishes\n if (output.content || output.text) {\n return this.pendingCaptions.push(output);\n } // buffer incoming id3 tags until the final flush\n\n if (output.frames) {\n return this.pendingMetadata.push(output);\n } // Add this track to the list of pending tracks and store\n // important information required for the construction of\n // the final segment\n\n this.pendingTracks.push(output.track);\n this.pendingBytes += output.boxes.byteLength; // TODO: is there an issue for this against chrome?\n // We unshift audio and push video because\n // as of Chrome 75 when switching from\n // one init segment to another if the video\n // mdat does not appear after the audio mdat\n // only audio will play for the duration of our transmux.\n\n if (output.track.type === 'video') {\n this.videoTrack = output.track;\n this.pendingBoxes.push(output.boxes);\n }\n if (output.track.type === 'audio') {\n this.audioTrack = output.track;\n this.pendingBoxes.unshift(output.boxes);\n }\n };\n };\n CoalesceStream.prototype = new Stream();\n CoalesceStream.prototype.flush = function (flushSource) {\n var offset = 0,\n event = {\n captions: [],\n captionStreams: {},\n metadata: [],\n info: {}\n },\n caption,\n id3,\n initSegment,\n timelineStartPts = 0,\n i;\n if (this.pendingTracks.length < this.numberOfTracks) {\n if (flushSource !== 'VideoSegmentStream' && flushSource !== 'AudioSegmentStream') {\n // Return because we haven't received a flush from a data-generating\n // portion of the segment (meaning that we have only recieved meta-data\n // or captions.)\n return;\n } else if (this.remuxTracks) {\n // Return until we have enough tracks from the pipeline to remux (if we\n // are remuxing audio and video into a single MP4)\n return;\n } else if (this.pendingTracks.length === 0) {\n // In the case where we receive a flush without any data having been\n // received we consider it an emitted track for the purposes of coalescing\n // `done` events.\n // We do this for the case where there is an audio and video track in the\n // segment but no audio data. (seen in several playlists with alternate\n // audio tracks and no audio present in the main TS segments.)\n this.emittedTracks++;\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n return;\n }\n }\n if (this.videoTrack) {\n timelineStartPts = this.videoTrack.timelineStartInfo.pts;\n VIDEO_PROPERTIES.forEach(function (prop) {\n event.info[prop] = this.videoTrack[prop];\n }, this);\n } else if (this.audioTrack) {\n timelineStartPts = this.audioTrack.timelineStartInfo.pts;\n AUDIO_PROPERTIES.forEach(function (prop) {\n event.info[prop] = this.audioTrack[prop];\n }, this);\n }\n if (this.videoTrack || this.audioTrack) {\n if (this.pendingTracks.length === 1) {\n event.type = this.pendingTracks[0].type;\n } else {\n event.type = 'combined';\n }\n this.emittedTracks += this.pendingTracks.length;\n initSegment = mp4.initSegment(this.pendingTracks); // Create a new typed array to hold the init segment\n\n event.initSegment = new Uint8Array(initSegment.byteLength); // Create an init segment containing a moov\n // and track definitions\n\n event.initSegment.set(initSegment); // Create a new typed array to hold the moof+mdats\n\n event.data = new Uint8Array(this.pendingBytes); // Append each moof+mdat (one per track) together\n\n for (i = 0; i < this.pendingBoxes.length; i++) {\n event.data.set(this.pendingBoxes[i], offset);\n offset += this.pendingBoxes[i].byteLength;\n } // Translate caption PTS times into second offsets to match the\n // video timeline for the segment, and add track info\n\n for (i = 0; i < this.pendingCaptions.length; i++) {\n caption = this.pendingCaptions[i];\n caption.startTime = clock.metadataTsToSeconds(caption.startPts, timelineStartPts, this.keepOriginalTimestamps);\n caption.endTime = clock.metadataTsToSeconds(caption.endPts, timelineStartPts, this.keepOriginalTimestamps);\n event.captionStreams[caption.stream] = true;\n event.captions.push(caption);\n } // Translate ID3 frame PTS times into second offsets to match the\n // video timeline for the segment\n\n for (i = 0; i < this.pendingMetadata.length; i++) {\n id3 = this.pendingMetadata[i];\n id3.cueTime = clock.metadataTsToSeconds(id3.pts, timelineStartPts, this.keepOriginalTimestamps);\n event.metadata.push(id3);\n } // We add this to every single emitted segment even though we only need\n // it for the first\n\n event.metadata.dispatchType = this.metadataStream.dispatchType; // Reset stream state\n\n this.pendingTracks.length = 0;\n this.videoTrack = null;\n this.pendingBoxes.length = 0;\n this.pendingCaptions.length = 0;\n this.pendingBytes = 0;\n this.pendingMetadata.length = 0; // Emit the built segment\n // We include captions and ID3 tags for backwards compatibility,\n // ideally we should send only video and audio in the data event\n\n this.trigger('data', event); // Emit each caption to the outside world\n // Ideally, this would happen immediately on parsing captions,\n // but we need to ensure that video data is sent back first\n // so that caption timing can be adjusted to match video timing\n\n for (i = 0; i < event.captions.length; i++) {\n caption = event.captions[i];\n this.trigger('caption', caption);\n } // Emit each id3 tag to the outside world\n // Ideally, this would happen immediately on parsing the tag,\n // but we need to ensure that video data is sent back first\n // so that ID3 frame timing can be adjusted to match video timing\n\n for (i = 0; i < event.metadata.length; i++) {\n id3 = event.metadata[i];\n this.trigger('id3Frame', id3);\n }\n } // Only emit `done` if all tracks have been flushed and emitted\n\n if (this.emittedTracks >= this.numberOfTracks) {\n this.trigger('done');\n this.emittedTracks = 0;\n }\n };\n CoalesceStream.prototype.setRemux = function (val) {\n this.remuxTracks = val;\n };\n /**\n * A Stream that expects MP2T binary data as input and produces\n * corresponding media segments, suitable for use with Media Source\n * Extension (MSE) implementations that support the ISO BMFF byte\n * stream format, like Chrome.\n */\n\n Transmuxer = function (options) {\n var self = this,\n hasFlushed = true,\n videoTrack,\n audioTrack;\n Transmuxer.prototype.init.call(this);\n options = options || {};\n this.baseMediaDecodeTime = options.baseMediaDecodeTime || 0;\n this.transmuxPipeline_ = {};\n this.setupAacPipeline = function () {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n pipeline.type = 'aac';\n pipeline.metadataStream = new m2ts.MetadataStream(); // set up the parsing pipeline\n\n pipeline.aacStream = new AacStream();\n pipeline.audioTimestampRolloverStream = new m2ts.TimestampRolloverStream('audio');\n pipeline.timedMetadataTimestampRolloverStream = new m2ts.TimestampRolloverStream('timed-metadata');\n pipeline.adtsStream = new AdtsStream();\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.aacStream;\n pipeline.aacStream.pipe(pipeline.audioTimestampRolloverStream).pipe(pipeline.adtsStream);\n pipeline.aacStream.pipe(pipeline.timedMetadataTimestampRolloverStream).pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream);\n pipeline.metadataStream.on('timestamp', function (frame) {\n pipeline.aacStream.setTimestamp(frame.timeStamp);\n });\n pipeline.aacStream.on('data', function (data) {\n if (data.type !== 'timed-metadata' && data.type !== 'audio' || pipeline.audioSegmentStream) {\n return;\n }\n audioTrack = audioTrack || {\n timelineStartInfo: {\n baseMediaDecodeTime: self.baseMediaDecodeTime\n },\n codec: 'adts',\n type: 'audio'\n }; // hook up the audio segment stream to the first track with aac data\n\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options);\n pipeline.audioSegmentStream.on('log', self.getLogTrigger_('audioSegmentStream'));\n pipeline.audioSegmentStream.on('timingInfo', self.trigger.bind(self, 'audioTimingInfo')); // Set up the final part of the audio pipeline\n\n pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream); // emit pmt info\n\n self.trigger('trackinfo', {\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack\n });\n }); // Re-emit any data coming from the coalesce stream to the outside world\n\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data')); // Let the consumer know we have finished flushing the entire pipeline\n\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n addPipelineLogRetriggers(this, pipeline);\n };\n this.setupTsPipeline = function () {\n var pipeline = {};\n this.transmuxPipeline_ = pipeline;\n pipeline.type = 'ts';\n pipeline.metadataStream = new m2ts.MetadataStream(); // set up the parsing pipeline\n\n pipeline.packetStream = new m2ts.TransportPacketStream();\n pipeline.parseStream = new m2ts.TransportParseStream();\n pipeline.elementaryStream = new m2ts.ElementaryStream();\n pipeline.timestampRolloverStream = new m2ts.TimestampRolloverStream();\n pipeline.adtsStream = new AdtsStream();\n pipeline.h264Stream = new H264Stream();\n pipeline.captionStream = new m2ts.CaptionStream(options);\n pipeline.coalesceStream = new CoalesceStream(options, pipeline.metadataStream);\n pipeline.headOfPipeline = pipeline.packetStream; // disassemble MPEG2-TS packets into elementary streams\n\n pipeline.packetStream.pipe(pipeline.parseStream).pipe(pipeline.elementaryStream).pipe(pipeline.timestampRolloverStream); // !!THIS ORDER IS IMPORTANT!!\n // demux the streams\n\n pipeline.timestampRolloverStream.pipe(pipeline.h264Stream);\n pipeline.timestampRolloverStream.pipe(pipeline.adtsStream);\n pipeline.timestampRolloverStream.pipe(pipeline.metadataStream).pipe(pipeline.coalesceStream); // Hook up CEA-608/708 caption stream\n\n pipeline.h264Stream.pipe(pipeline.captionStream).pipe(pipeline.coalesceStream);\n pipeline.elementaryStream.on('data', function (data) {\n var i;\n if (data.type === 'metadata') {\n i = data.tracks.length; // scan the tracks listed in the metadata\n\n while (i--) {\n if (!videoTrack && data.tracks[i].type === 'video') {\n videoTrack = data.tracks[i];\n videoTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n } else if (!audioTrack && data.tracks[i].type === 'audio') {\n audioTrack = data.tracks[i];\n audioTrack.timelineStartInfo.baseMediaDecodeTime = self.baseMediaDecodeTime;\n }\n } // hook up the video segment stream to the first track with h264 data\n\n if (videoTrack && !pipeline.videoSegmentStream) {\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.videoSegmentStream = new VideoSegmentStream(videoTrack, options);\n pipeline.videoSegmentStream.on('log', self.getLogTrigger_('videoSegmentStream'));\n pipeline.videoSegmentStream.on('timelineStartInfo', function (timelineStartInfo) {\n // When video emits timelineStartInfo data after a flush, we forward that\n // info to the AudioSegmentStream, if it exists, because video timeline\n // data takes precedence. Do not do this if keepOriginalTimestamps is set,\n // because this is a particularly subtle form of timestamp alteration.\n if (audioTrack && !options.keepOriginalTimestamps) {\n audioTrack.timelineStartInfo = timelineStartInfo; // On the first segment we trim AAC frames that exist before the\n // very earliest DTS we have seen in video because Chrome will\n // interpret any video track with a baseMediaDecodeTime that is\n // non-zero as a gap.\n\n pipeline.audioSegmentStream.setEarliestDts(timelineStartInfo.dts - self.baseMediaDecodeTime);\n }\n });\n pipeline.videoSegmentStream.on('processedGopsInfo', self.trigger.bind(self, 'gopInfo'));\n pipeline.videoSegmentStream.on('segmentTimingInfo', self.trigger.bind(self, 'videoSegmentTimingInfo'));\n pipeline.videoSegmentStream.on('baseMediaDecodeTime', function (baseMediaDecodeTime) {\n if (audioTrack) {\n pipeline.audioSegmentStream.setVideoBaseMediaDecodeTime(baseMediaDecodeTime);\n }\n });\n pipeline.videoSegmentStream.on('timingInfo', self.trigger.bind(self, 'videoTimingInfo')); // Set up the final part of the video pipeline\n\n pipeline.h264Stream.pipe(pipeline.videoSegmentStream).pipe(pipeline.coalesceStream);\n }\n if (audioTrack && !pipeline.audioSegmentStream) {\n // hook up the audio segment stream to the first track with aac data\n pipeline.coalesceStream.numberOfTracks++;\n pipeline.audioSegmentStream = new AudioSegmentStream(audioTrack, options);\n pipeline.audioSegmentStream.on('log', self.getLogTrigger_('audioSegmentStream'));\n pipeline.audioSegmentStream.on('timingInfo', self.trigger.bind(self, 'audioTimingInfo'));\n pipeline.audioSegmentStream.on('segmentTimingInfo', self.trigger.bind(self, 'audioSegmentTimingInfo')); // Set up the final part of the audio pipeline\n\n pipeline.adtsStream.pipe(pipeline.audioSegmentStream).pipe(pipeline.coalesceStream);\n } // emit pmt info\n\n self.trigger('trackinfo', {\n hasAudio: !!audioTrack,\n hasVideo: !!videoTrack\n });\n }\n }); // Re-emit any data coming from the coalesce stream to the outside world\n\n pipeline.coalesceStream.on('data', this.trigger.bind(this, 'data'));\n pipeline.coalesceStream.on('id3Frame', function (id3Frame) {\n id3Frame.dispatchType = pipeline.metadataStream.dispatchType;\n self.trigger('id3Frame', id3Frame);\n });\n pipeline.coalesceStream.on('caption', this.trigger.bind(this, 'caption')); // Let the consumer know we have finished flushing the entire pipeline\n\n pipeline.coalesceStream.on('done', this.trigger.bind(this, 'done'));\n addPipelineLogRetriggers(this, pipeline);\n }; // hook up the segment streams once track metadata is delivered\n\n this.setBaseMediaDecodeTime = function (baseMediaDecodeTime) {\n var pipeline = this.transmuxPipeline_;\n if (!options.keepOriginalTimestamps) {\n this.baseMediaDecodeTime = baseMediaDecodeTime;\n }\n if (audioTrack) {\n audioTrack.timelineStartInfo.dts = undefined;\n audioTrack.timelineStartInfo.pts = undefined;\n trackDecodeInfo.clearDtsInfo(audioTrack);\n if (pipeline.audioTimestampRolloverStream) {\n pipeline.audioTimestampRolloverStream.discontinuity();\n }\n }\n if (videoTrack) {\n if (pipeline.videoSegmentStream) {\n pipeline.videoSegmentStream.gopCache_ = [];\n }\n videoTrack.timelineStartInfo.dts = undefined;\n videoTrack.timelineStartInfo.pts = undefined;\n trackDecodeInfo.clearDtsInfo(videoTrack);\n pipeline.captionStream.reset();\n }\n if (pipeline.timestampRolloverStream) {\n pipeline.timestampRolloverStream.discontinuity();\n }\n };\n this.setAudioAppendStart = function (timestamp) {\n if (audioTrack) {\n this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(timestamp);\n }\n };\n this.setRemux = function (val) {\n var pipeline = this.transmuxPipeline_;\n options.remux = val;\n if (pipeline && pipeline.coalesceStream) {\n pipeline.coalesceStream.setRemux(val);\n }\n };\n this.alignGopsWith = function (gopsToAlignWith) {\n if (videoTrack && this.transmuxPipeline_.videoSegmentStream) {\n this.transmuxPipeline_.videoSegmentStream.alignGopsWith(gopsToAlignWith);\n }\n };\n this.getLogTrigger_ = function (key) {\n var self = this;\n return function (event) {\n event.stream = key;\n self.trigger('log', event);\n };\n }; // feed incoming data to the front of the parsing pipeline\n\n this.push = function (data) {\n if (hasFlushed) {\n var isAac = isLikelyAacData(data);\n if (isAac && this.transmuxPipeline_.type !== 'aac') {\n this.setupAacPipeline();\n } else if (!isAac && this.transmuxPipeline_.type !== 'ts') {\n this.setupTsPipeline();\n }\n hasFlushed = false;\n }\n this.transmuxPipeline_.headOfPipeline.push(data);\n }; // flush any buffered data\n\n this.flush = function () {\n hasFlushed = true; // Start at the top of the pipeline and flush all pending work\n\n this.transmuxPipeline_.headOfPipeline.flush();\n };\n this.endTimeline = function () {\n this.transmuxPipeline_.headOfPipeline.endTimeline();\n };\n this.reset = function () {\n if (this.transmuxPipeline_.headOfPipeline) {\n this.transmuxPipeline_.headOfPipeline.reset();\n }\n }; // Caption data has to be reset when seeking outside buffered range\n\n this.resetCaptions = function () {\n if (this.transmuxPipeline_.captionStream) {\n this.transmuxPipeline_.captionStream.reset();\n }\n };\n };\n Transmuxer.prototype = new Stream();\n var transmuxer = {\n Transmuxer: Transmuxer,\n VideoSegmentStream: VideoSegmentStream,\n AudioSegmentStream: AudioSegmentStream,\n AUDIO_PROPERTIES: AUDIO_PROPERTIES,\n VIDEO_PROPERTIES: VIDEO_PROPERTIES,\n // exported for testing\n generateSegmentTimingInfo: generateSegmentTimingInfo\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n */\n\n var toUnsigned$3 = function (value) {\n return value >>> 0;\n };\n var toHexString$1 = function (value) {\n return ('00' + value.toString(16)).slice(-2);\n };\n var bin = {\n toUnsigned: toUnsigned$3,\n toHexString: toHexString$1\n };\n var parseType$3 = function (buffer) {\n var result = '';\n result += String.fromCharCode(buffer[0]);\n result += String.fromCharCode(buffer[1]);\n result += String.fromCharCode(buffer[2]);\n result += String.fromCharCode(buffer[3]);\n return result;\n };\n var parseType_1 = parseType$3;\n var toUnsigned$2 = bin.toUnsigned;\n var parseType$2 = parseType_1;\n var findBox$2 = function (data, path) {\n var results = [],\n i,\n size,\n type,\n end,\n subresults;\n if (!path.length) {\n // short-circuit the search for empty paths\n return null;\n }\n for (i = 0; i < data.byteLength;) {\n size = toUnsigned$2(data[i] << 24 | data[i + 1] << 16 | data[i + 2] << 8 | data[i + 3]);\n type = parseType$2(data.subarray(i + 4, i + 8));\n end = size > 1 ? i + size : data.byteLength;\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, end));\n } else {\n // recursively search for the next box along the path\n subresults = findBox$2(data.subarray(i + 8, end), path.slice(1));\n if (subresults.length) {\n results = results.concat(subresults);\n }\n }\n }\n i = end;\n } // we've finished searching all of data\n\n return results;\n };\n var findBox_1 = findBox$2;\n var toUnsigned$1 = bin.toUnsigned;\n var getUint64$2 = numbers.getUint64;\n var tfdt = function (data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4))\n };\n if (result.version === 1) {\n result.baseMediaDecodeTime = getUint64$2(data.subarray(4));\n } else {\n result.baseMediaDecodeTime = toUnsigned$1(data[4] << 24 | data[5] << 16 | data[6] << 8 | data[7]);\n }\n return result;\n };\n var parseTfdt$2 = tfdt;\n var parseSampleFlags$1 = function (flags) {\n return {\n isLeading: (flags[0] & 0x0c) >>> 2,\n dependsOn: flags[0] & 0x03,\n isDependedOn: (flags[1] & 0xc0) >>> 6,\n hasRedundancy: (flags[1] & 0x30) >>> 4,\n paddingValue: (flags[1] & 0x0e) >>> 1,\n isNonSyncSample: flags[1] & 0x01,\n degradationPriority: flags[2] << 8 | flags[3]\n };\n };\n var parseSampleFlags_1 = parseSampleFlags$1;\n var parseSampleFlags = parseSampleFlags_1;\n var trun = function (data) {\n var result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n samples: []\n },\n view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n // Flag interpretation\n dataOffsetPresent = result.flags[2] & 0x01,\n // compare with 2nd byte of 0x1\n firstSampleFlagsPresent = result.flags[2] & 0x04,\n // compare with 2nd byte of 0x4\n sampleDurationPresent = result.flags[1] & 0x01,\n // compare with 2nd byte of 0x100\n sampleSizePresent = result.flags[1] & 0x02,\n // compare with 2nd byte of 0x200\n sampleFlagsPresent = result.flags[1] & 0x04,\n // compare with 2nd byte of 0x400\n sampleCompositionTimeOffsetPresent = result.flags[1] & 0x08,\n // compare with 2nd byte of 0x800\n sampleCount = view.getUint32(4),\n offset = 8,\n sample;\n if (dataOffsetPresent) {\n // 32 bit signed integer\n result.dataOffset = view.getInt32(offset);\n offset += 4;\n } // Overrides the flags for the first sample only. The order of\n // optional values will be: duration, size, compositionTimeOffset\n\n if (firstSampleFlagsPresent && sampleCount) {\n sample = {\n flags: parseSampleFlags(data.subarray(offset, offset + 4))\n };\n offset += 4;\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n if (result.version === 1) {\n sample.compositionTimeOffset = view.getInt32(offset);\n } else {\n sample.compositionTimeOffset = view.getUint32(offset);\n }\n offset += 4;\n }\n result.samples.push(sample);\n sampleCount--;\n }\n while (sampleCount--) {\n sample = {};\n if (sampleDurationPresent) {\n sample.duration = view.getUint32(offset);\n offset += 4;\n }\n if (sampleSizePresent) {\n sample.size = view.getUint32(offset);\n offset += 4;\n }\n if (sampleFlagsPresent) {\n sample.flags = parseSampleFlags(data.subarray(offset, offset + 4));\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n if (result.version === 1) {\n sample.compositionTimeOffset = view.getInt32(offset);\n } else {\n sample.compositionTimeOffset = view.getUint32(offset);\n }\n offset += 4;\n }\n result.samples.push(sample);\n }\n return result;\n };\n var parseTrun$2 = trun;\n var tfhd = function (data) {\n var view = new DataView(data.buffer, data.byteOffset, data.byteLength),\n result = {\n version: data[0],\n flags: new Uint8Array(data.subarray(1, 4)),\n trackId: view.getUint32(4)\n },\n baseDataOffsetPresent = result.flags[2] & 0x01,\n sampleDescriptionIndexPresent = result.flags[2] & 0x02,\n defaultSampleDurationPresent = result.flags[2] & 0x08,\n defaultSampleSizePresent = result.flags[2] & 0x10,\n defaultSampleFlagsPresent = result.flags[2] & 0x20,\n durationIsEmpty = result.flags[0] & 0x010000,\n defaultBaseIsMoof = result.flags[0] & 0x020000,\n i;\n i = 8;\n if (baseDataOffsetPresent) {\n i += 4; // truncate top 4 bytes\n // FIXME: should we read the full 64 bits?\n\n result.baseDataOffset = view.getUint32(12);\n i += 4;\n }\n if (sampleDescriptionIndexPresent) {\n result.sampleDescriptionIndex = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleDurationPresent) {\n result.defaultSampleDuration = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleSizePresent) {\n result.defaultSampleSize = view.getUint32(i);\n i += 4;\n }\n if (defaultSampleFlagsPresent) {\n result.defaultSampleFlags = view.getUint32(i);\n }\n if (durationIsEmpty) {\n result.durationIsEmpty = true;\n }\n if (!baseDataOffsetPresent && defaultBaseIsMoof) {\n result.baseDataOffsetIsMoof = true;\n }\n return result;\n };\n var parseTfhd$2 = tfhd;\n var win;\n if (typeof window !== \"undefined\") {\n win = window;\n } else if (typeof commonjsGlobal !== \"undefined\") {\n win = commonjsGlobal;\n } else if (typeof self !== \"undefined\") {\n win = self;\n } else {\n win = {};\n }\n var window_1 = win;\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Reads in-band CEA-708 captions out of FMP4 segments.\n * @see https://en.wikipedia.org/wiki/CEA-708\n */\n\n var discardEmulationPreventionBytes = captionPacketParser.discardEmulationPreventionBytes;\n var CaptionStream = captionStream.CaptionStream;\n var findBox$1 = findBox_1;\n var parseTfdt$1 = parseTfdt$2;\n var parseTrun$1 = parseTrun$2;\n var parseTfhd$1 = parseTfhd$2;\n var window$2 = window_1;\n /**\n * Maps an offset in the mdat to a sample based on the the size of the samples.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Number} offset - The offset into the mdat\n * @param {Object[]} samples - An array of samples, parsed using `parseSamples`\n * @return {?Object} The matching sample, or null if no match was found.\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n var mapToSample = function (offset, samples) {\n var approximateOffset = offset;\n for (var i = 0; i < samples.length; i++) {\n var sample = samples[i];\n if (approximateOffset < sample.size) {\n return sample;\n }\n approximateOffset -= sample.size;\n }\n return null;\n };\n /**\n * Finds SEI nal units contained in a Media Data Box.\n * Assumes that `parseSamples` has been called first.\n *\n * @param {Uint8Array} avcStream - The bytes of the mdat\n * @param {Object[]} samples - The samples parsed out by `parseSamples`\n * @param {Number} trackId - The trackId of this video track\n * @return {Object[]} seiNals - the parsed SEI NALUs found.\n * The contents of the seiNal should match what is expected by\n * CaptionStream.push (nalUnitType, size, data, escapedRBSP, pts, dts)\n *\n * @see ISO-BMFF-12/2015, Section 8.1.1\n * @see Rec. ITU-T H.264, 7.3.2.3.1\n **/\n\n var findSeiNals = function (avcStream, samples, trackId) {\n var avcView = new DataView(avcStream.buffer, avcStream.byteOffset, avcStream.byteLength),\n result = {\n logs: [],\n seiNals: []\n },\n seiNal,\n i,\n length,\n lastMatchedSample;\n for (i = 0; i + 4 < avcStream.length; i += length) {\n length = avcView.getUint32(i);\n i += 4; // Bail if this doesn't appear to be an H264 stream\n\n if (length <= 0) {\n continue;\n }\n switch (avcStream[i] & 0x1F) {\n case 0x06:\n var data = avcStream.subarray(i + 1, i + 1 + length);\n var matchingSample = mapToSample(i, samples);\n seiNal = {\n nalUnitType: 'sei_rbsp',\n size: length,\n data: data,\n escapedRBSP: discardEmulationPreventionBytes(data),\n trackId: trackId\n };\n if (matchingSample) {\n seiNal.pts = matchingSample.pts;\n seiNal.dts = matchingSample.dts;\n lastMatchedSample = matchingSample;\n } else if (lastMatchedSample) {\n // If a matching sample cannot be found, use the last\n // sample's values as they should be as close as possible\n seiNal.pts = lastMatchedSample.pts;\n seiNal.dts = lastMatchedSample.dts;\n } else {\n result.logs.push({\n level: 'warn',\n message: 'We\\'ve encountered a nal unit without data at ' + i + ' for trackId ' + trackId + '. See mux.js#223.'\n });\n break;\n }\n result.seiNals.push(seiNal);\n break;\n }\n }\n return result;\n };\n /**\n * Parses sample information out of Track Run Boxes and calculates\n * the absolute presentation and decode timestamps of each sample.\n *\n * @param {Array} truns - The Trun Run boxes to be parsed\n * @param {Number|BigInt} baseMediaDecodeTime - base media decode time from tfdt\n @see ISO-BMFF-12/2015, Section 8.8.12\n * @param {Object} tfhd - The parsed Track Fragment Header\n * @see inspect.parseTfhd\n * @return {Object[]} the parsed samples\n *\n * @see ISO-BMFF-12/2015, Section 8.8.8\n **/\n\n var parseSamples = function (truns, baseMediaDecodeTime, tfhd) {\n var currentDts = baseMediaDecodeTime;\n var defaultSampleDuration = tfhd.defaultSampleDuration || 0;\n var defaultSampleSize = tfhd.defaultSampleSize || 0;\n var trackId = tfhd.trackId;\n var allSamples = [];\n truns.forEach(function (trun) {\n // Note: We currently do not parse the sample table as well\n // as the trun. It's possible some sources will require this.\n // moov > trak > mdia > minf > stbl\n var trackRun = parseTrun$1(trun);\n var samples = trackRun.samples;\n samples.forEach(function (sample) {\n if (sample.duration === undefined) {\n sample.duration = defaultSampleDuration;\n }\n if (sample.size === undefined) {\n sample.size = defaultSampleSize;\n }\n sample.trackId = trackId;\n sample.dts = currentDts;\n if (sample.compositionTimeOffset === undefined) {\n sample.compositionTimeOffset = 0;\n }\n if (typeof currentDts === 'bigint') {\n sample.pts = currentDts + window$2.BigInt(sample.compositionTimeOffset);\n currentDts += window$2.BigInt(sample.duration);\n } else {\n sample.pts = currentDts + sample.compositionTimeOffset;\n currentDts += sample.duration;\n }\n });\n allSamples = allSamples.concat(samples);\n });\n return allSamples;\n };\n /**\n * Parses out caption nals from an FMP4 segment's video tracks.\n *\n * @param {Uint8Array} segment - The bytes of a single segment\n * @param {Number} videoTrackId - The trackId of a video track in the segment\n * @return {Object.} A mapping of video trackId to\n * a list of seiNals found in that track\n **/\n\n var parseCaptionNals = function (segment, videoTrackId) {\n // To get the samples\n var trafs = findBox$1(segment, ['moof', 'traf']); // To get SEI NAL units\n\n var mdats = findBox$1(segment, ['mdat']);\n var captionNals = {};\n var mdatTrafPairs = []; // Pair up each traf with a mdat as moofs and mdats are in pairs\n\n mdats.forEach(function (mdat, index) {\n var matchingTraf = trafs[index];\n mdatTrafPairs.push({\n mdat: mdat,\n traf: matchingTraf\n });\n });\n mdatTrafPairs.forEach(function (pair) {\n var mdat = pair.mdat;\n var traf = pair.traf;\n var tfhd = findBox$1(traf, ['tfhd']); // Exactly 1 tfhd per traf\n\n var headerInfo = parseTfhd$1(tfhd[0]);\n var trackId = headerInfo.trackId;\n var tfdt = findBox$1(traf, ['tfdt']); // Either 0 or 1 tfdt per traf\n\n var baseMediaDecodeTime = tfdt.length > 0 ? parseTfdt$1(tfdt[0]).baseMediaDecodeTime : 0;\n var truns = findBox$1(traf, ['trun']);\n var samples;\n var result; // Only parse video data for the chosen video track\n\n if (videoTrackId === trackId && truns.length > 0) {\n samples = parseSamples(truns, baseMediaDecodeTime, headerInfo);\n result = findSeiNals(mdat, samples, trackId);\n if (!captionNals[trackId]) {\n captionNals[trackId] = {\n seiNals: [],\n logs: []\n };\n }\n captionNals[trackId].seiNals = captionNals[trackId].seiNals.concat(result.seiNals);\n captionNals[trackId].logs = captionNals[trackId].logs.concat(result.logs);\n }\n });\n return captionNals;\n };\n /**\n * Parses out inband captions from an MP4 container and returns\n * caption objects that can be used by WebVTT and the TextTrack API.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/VTTCue\n * @see https://developer.mozilla.org/en-US/docs/Web/API/TextTrack\n * Assumes that `probe.getVideoTrackIds` and `probe.timescale` have been called first\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number} trackId - The id of the video track to parse\n * @param {Number} timescale - The timescale for the video track from the init segment\n *\n * @return {?Object[]} parsedCaptions - A list of captions or null if no video tracks\n * @return {Number} parsedCaptions[].startTime - The time to show the caption in seconds\n * @return {Number} parsedCaptions[].endTime - The time to stop showing the caption in seconds\n * @return {Object[]} parsedCaptions[].content - A list of individual caption segments\n * @return {String} parsedCaptions[].content.text - The visible content of the caption segment\n * @return {Number} parsedCaptions[].content.line - The line height from 1-15 for positioning of the caption segment\n * @return {Number} parsedCaptions[].content.position - The column indent percentage for cue positioning from 10-80\n **/\n\n var parseEmbeddedCaptions = function (segment, trackId, timescale) {\n var captionNals; // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n\n if (trackId === null) {\n return null;\n }\n captionNals = parseCaptionNals(segment, trackId);\n var trackNals = captionNals[trackId] || {};\n return {\n seiNals: trackNals.seiNals,\n logs: trackNals.logs,\n timescale: timescale\n };\n };\n /**\n * Converts SEI NALUs into captions that can be used by video.js\n **/\n\n var CaptionParser = function () {\n var isInitialized = false;\n var captionStream; // Stores segments seen before trackId and timescale are set\n\n var segmentCache; // Stores video track ID of the track being parsed\n\n var trackId; // Stores the timescale of the track being parsed\n\n var timescale; // Stores captions parsed so far\n\n var parsedCaptions; // Stores whether we are receiving partial data or not\n\n var parsingPartial;\n /**\n * A method to indicate whether a CaptionParser has been initalized\n * @returns {Boolean}\n **/\n\n this.isInitialized = function () {\n return isInitialized;\n };\n /**\n * Initializes the underlying CaptionStream, SEI NAL parsing\n * and management, and caption collection\n **/\n\n this.init = function (options) {\n captionStream = new CaptionStream();\n isInitialized = true;\n parsingPartial = options ? options.isPartial : false; // Collect dispatched captions\n\n captionStream.on('data', function (event) {\n // Convert to seconds in the source's timescale\n event.startTime = event.startPts / timescale;\n event.endTime = event.endPts / timescale;\n parsedCaptions.captions.push(event);\n parsedCaptions.captionStreams[event.stream] = true;\n });\n captionStream.on('log', function (log) {\n parsedCaptions.logs.push(log);\n });\n };\n /**\n * Determines if a new video track will be selected\n * or if the timescale changed\n * @return {Boolean}\n **/\n\n this.isNewInit = function (videoTrackIds, timescales) {\n if (videoTrackIds && videoTrackIds.length === 0 || timescales && typeof timescales === 'object' && Object.keys(timescales).length === 0) {\n return false;\n }\n return trackId !== videoTrackIds[0] || timescale !== timescales[trackId];\n };\n /**\n * Parses out SEI captions and interacts with underlying\n * CaptionStream to return dispatched captions\n *\n * @param {Uint8Array} segment - The fmp4 segment containing embedded captions\n * @param {Number[]} videoTrackIds - A list of video tracks found in the init segment\n * @param {Object.} timescales - The timescales found in the init segment\n * @see parseEmbeddedCaptions\n * @see m2ts/caption-stream.js\n **/\n\n this.parse = function (segment, videoTrackIds, timescales) {\n var parsedData;\n if (!this.isInitialized()) {\n return null; // This is not likely to be a video segment\n } else if (!videoTrackIds || !timescales) {\n return null;\n } else if (this.isNewInit(videoTrackIds, timescales)) {\n // Use the first video track only as there is no\n // mechanism to switch to other video tracks\n trackId = videoTrackIds[0];\n timescale = timescales[trackId]; // If an init segment has not been seen yet, hold onto segment\n // data until we have one.\n // the ISO-BMFF spec says that trackId can't be zero, but there's some broken content out there\n } else if (trackId === null || !timescale) {\n segmentCache.push(segment);\n return null;\n } // Now that a timescale and trackId is set, parse cached segments\n\n while (segmentCache.length > 0) {\n var cachedSegment = segmentCache.shift();\n this.parse(cachedSegment, videoTrackIds, timescales);\n }\n parsedData = parseEmbeddedCaptions(segment, trackId, timescale);\n if (parsedData && parsedData.logs) {\n parsedCaptions.logs = parsedCaptions.logs.concat(parsedData.logs);\n }\n if (parsedData === null || !parsedData.seiNals) {\n if (parsedCaptions.logs.length) {\n return {\n logs: parsedCaptions.logs,\n captions: [],\n captionStreams: []\n };\n }\n return null;\n }\n this.pushNals(parsedData.seiNals); // Force the parsed captions to be dispatched\n\n this.flushStream();\n return parsedCaptions;\n };\n /**\n * Pushes SEI NALUs onto CaptionStream\n * @param {Object[]} nals - A list of SEI nals parsed using `parseCaptionNals`\n * Assumes that `parseCaptionNals` has been called first\n * @see m2ts/caption-stream.js\n **/\n\n this.pushNals = function (nals) {\n if (!this.isInitialized() || !nals || nals.length === 0) {\n return null;\n }\n nals.forEach(function (nal) {\n captionStream.push(nal);\n });\n };\n /**\n * Flushes underlying CaptionStream to dispatch processed, displayable captions\n * @see m2ts/caption-stream.js\n **/\n\n this.flushStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n if (!parsingPartial) {\n captionStream.flush();\n } else {\n captionStream.partialFlush();\n }\n };\n /**\n * Reset caption buckets for new data\n **/\n\n this.clearParsedCaptions = function () {\n parsedCaptions.captions = [];\n parsedCaptions.captionStreams = {};\n parsedCaptions.logs = [];\n };\n /**\n * Resets underlying CaptionStream\n * @see m2ts/caption-stream.js\n **/\n\n this.resetCaptionStream = function () {\n if (!this.isInitialized()) {\n return null;\n }\n captionStream.reset();\n };\n /**\n * Convenience method to clear all captions flushed from the\n * CaptionStream and still being parsed\n * @see m2ts/caption-stream.js\n **/\n\n this.clearAllCaptions = function () {\n this.clearParsedCaptions();\n this.resetCaptionStream();\n };\n /**\n * Reset caption parser\n **/\n\n this.reset = function () {\n segmentCache = [];\n trackId = null;\n timescale = null;\n if (!parsedCaptions) {\n parsedCaptions = {\n captions: [],\n // CC1, CC2, CC3, CC4\n captionStreams: {},\n logs: []\n };\n } else {\n this.clearParsedCaptions();\n }\n this.resetCaptionStream();\n };\n this.reset();\n };\n var captionParser = CaptionParser;\n /**\n * Returns the first string in the data array ending with a null char '\\0'\n * @param {UInt8} data \n * @returns the string with the null char\n */\n\n var uint8ToCString$1 = function (data) {\n var index = 0;\n var curChar = String.fromCharCode(data[index]);\n var retString = '';\n while (curChar !== '\\0') {\n retString += curChar;\n index++;\n curChar = String.fromCharCode(data[index]);\n } // Add nullChar\n\n retString += curChar;\n return retString;\n };\n var string = {\n uint8ToCString: uint8ToCString$1\n };\n var uint8ToCString = string.uint8ToCString;\n var getUint64$1 = numbers.getUint64;\n /**\n * Based on: ISO/IEC 23009 Section: 5.10.3.3\n * References:\n * https://dashif-documents.azurewebsites.net/Events/master/event.html#emsg-format\n * https://aomediacodec.github.io/id3-emsg/\n * \n * Takes emsg box data as a uint8 array and returns a emsg box object\n * @param {UInt8Array} boxData data from emsg box\n * @returns A parsed emsg box object\n */\n\n var parseEmsgBox = function (boxData) {\n // version + flags\n var offset = 4;\n var version = boxData[0];\n var scheme_id_uri, value, timescale, presentation_time, presentation_time_delta, event_duration, id, message_data;\n if (version === 0) {\n scheme_id_uri = uint8ToCString(boxData.subarray(offset));\n offset += scheme_id_uri.length;\n value = uint8ToCString(boxData.subarray(offset));\n offset += value.length;\n var dv = new DataView(boxData.buffer);\n timescale = dv.getUint32(offset);\n offset += 4;\n presentation_time_delta = dv.getUint32(offset);\n offset += 4;\n event_duration = dv.getUint32(offset);\n offset += 4;\n id = dv.getUint32(offset);\n offset += 4;\n } else if (version === 1) {\n var dv = new DataView(boxData.buffer);\n timescale = dv.getUint32(offset);\n offset += 4;\n presentation_time = getUint64$1(boxData.subarray(offset));\n offset += 8;\n event_duration = dv.getUint32(offset);\n offset += 4;\n id = dv.getUint32(offset);\n offset += 4;\n scheme_id_uri = uint8ToCString(boxData.subarray(offset));\n offset += scheme_id_uri.length;\n value = uint8ToCString(boxData.subarray(offset));\n offset += value.length;\n }\n message_data = new Uint8Array(boxData.subarray(offset, boxData.byteLength));\n var emsgBox = {\n scheme_id_uri,\n value,\n // if timescale is undefined or 0 set to 1 \n timescale: timescale ? timescale : 1,\n presentation_time,\n presentation_time_delta,\n event_duration,\n id,\n message_data\n };\n return isValidEmsgBox(version, emsgBox) ? emsgBox : undefined;\n };\n /**\n * Scales a presentation time or time delta with an offset with a provided timescale\n * @param {number} presentationTime \n * @param {number} timescale \n * @param {number} timeDelta \n * @param {number} offset \n * @returns the scaled time as a number\n */\n\n var scaleTime = function (presentationTime, timescale, timeDelta, offset) {\n return presentationTime || presentationTime === 0 ? presentationTime / timescale : offset + timeDelta / timescale;\n };\n /**\n * Checks the emsg box data for validity based on the version\n * @param {number} version of the emsg box to validate\n * @param {Object} emsg the emsg data to validate\n * @returns if the box is valid as a boolean\n */\n\n var isValidEmsgBox = function (version, emsg) {\n var hasScheme = emsg.scheme_id_uri !== '\\0';\n var isValidV0Box = version === 0 && isDefined(emsg.presentation_time_delta) && hasScheme;\n var isValidV1Box = version === 1 && isDefined(emsg.presentation_time) && hasScheme; // Only valid versions of emsg are 0 and 1\n\n return !(version > 1) && isValidV0Box || isValidV1Box;\n }; // Utility function to check if an object is defined\n\n var isDefined = function (data) {\n return data !== undefined || data !== null;\n };\n var emsg$1 = {\n parseEmsgBox: parseEmsgBox,\n scaleTime: scaleTime\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about MP4s.\n */\n\n var toUnsigned = bin.toUnsigned;\n var toHexString = bin.toHexString;\n var findBox = findBox_1;\n var parseType$1 = parseType_1;\n var emsg = emsg$1;\n var parseTfhd = parseTfhd$2;\n var parseTrun = parseTrun$2;\n var parseTfdt = parseTfdt$2;\n var getUint64 = numbers.getUint64;\n var timescale, startTime, compositionStartTime, getVideoTrackIds, getTracks, getTimescaleFromMediaHeader, getEmsgID3;\n var window$1 = window_1;\n var parseId3Frames = parseId3.parseId3Frames;\n /**\n * Parses an MP4 initialization segment and extracts the timescale\n * values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * ```\n * @param init {Uint8Array} the bytes of the init segment\n * @return {object} a hash of track ids to timescale values or null if\n * the init segment is malformed.\n */\n\n timescale = function (init) {\n var result = {},\n traks = findBox(init, ['moov', 'trak']); // mdhd timescale\n\n return traks.reduce(function (result, trak) {\n var tkhd, version, index, id, mdhd;\n tkhd = findBox(trak, ['tkhd'])[0];\n if (!tkhd) {\n return null;\n }\n version = tkhd[0];\n index = version === 0 ? 12 : 20;\n id = toUnsigned(tkhd[index] << 24 | tkhd[index + 1] << 16 | tkhd[index + 2] << 8 | tkhd[index + 3]);\n mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (!mdhd) {\n return null;\n }\n version = mdhd[0];\n index = version === 0 ? 12 : 20;\n result[id] = toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n return result;\n }, result);\n };\n /**\n * Determine the base media decode start time, in seconds, for an MP4\n * fragment. If multiple fragments are specified, the earliest time is\n * returned.\n *\n * The base media decode time can be parsed from track fragment\n * metadata:\n * ```\n * moof > traf > tfdt.baseMediaDecodeTime\n * ```\n * It requires the timescale value from the mdhd to interpret.\n *\n * @param timescale {object} a hash of track ids to timescale values.\n * @return {number} the earliest base media decode start time for the\n * fragment, in seconds\n */\n\n startTime = function (timescale, fragment) {\n var trafs; // we need info from two childrend of each track fragment box\n\n trafs = findBox(fragment, ['moof', 'traf']); // determine the start times for each track\n\n var lowestTime = trafs.reduce(function (acc, traf) {\n var tfhd = findBox(traf, ['tfhd'])[0]; // get the track id from the tfhd\n\n var id = toUnsigned(tfhd[4] << 24 | tfhd[5] << 16 | tfhd[6] << 8 | tfhd[7]); // assume a 90kHz clock if no timescale was specified\n\n var scale = timescale[id] || 90e3; // get the base media decode time from the tfdt\n\n var tfdt = findBox(traf, ['tfdt'])[0];\n var dv = new DataView(tfdt.buffer, tfdt.byteOffset, tfdt.byteLength);\n var baseTime; // version 1 is 64 bit\n\n if (tfdt[0] === 1) {\n baseTime = getUint64(tfdt.subarray(4, 12));\n } else {\n baseTime = dv.getUint32(4);\n } // convert base time to seconds if it is a valid number.\n\n let seconds;\n if (typeof baseTime === 'bigint') {\n seconds = baseTime / window$1.BigInt(scale);\n } else if (typeof baseTime === 'number' && !isNaN(baseTime)) {\n seconds = baseTime / scale;\n }\n if (seconds < Number.MAX_SAFE_INTEGER) {\n seconds = Number(seconds);\n }\n if (seconds < acc) {\n acc = seconds;\n }\n return acc;\n }, Infinity);\n return typeof lowestTime === 'bigint' || isFinite(lowestTime) ? lowestTime : 0;\n };\n /**\n * Determine the composition start, in seconds, for an MP4\n * fragment.\n *\n * The composition start time of a fragment can be calculated using the base\n * media decode time, composition time offset, and timescale, as follows:\n *\n * compositionStartTime = (baseMediaDecodeTime + compositionTimeOffset) / timescale\n *\n * All of the aforementioned information is contained within a media fragment's\n * `traf` box, except for timescale info, which comes from the initialization\n * segment, so a track id (also contained within a `traf`) is also necessary to\n * associate it with a timescale\n *\n *\n * @param timescales {object} - a hash of track ids to timescale values.\n * @param fragment {Unit8Array} - the bytes of a media segment\n * @return {number} the composition start time for the fragment, in seconds\n **/\n\n compositionStartTime = function (timescales, fragment) {\n var trafBoxes = findBox(fragment, ['moof', 'traf']);\n var baseMediaDecodeTime = 0;\n var compositionTimeOffset = 0;\n var trackId;\n if (trafBoxes && trafBoxes.length) {\n // The spec states that track run samples contained within a `traf` box are contiguous, but\n // it does not explicitly state whether the `traf` boxes themselves are contiguous.\n // We will assume that they are, so we only need the first to calculate start time.\n var tfhd = findBox(trafBoxes[0], ['tfhd'])[0];\n var trun = findBox(trafBoxes[0], ['trun'])[0];\n var tfdt = findBox(trafBoxes[0], ['tfdt'])[0];\n if (tfhd) {\n var parsedTfhd = parseTfhd(tfhd);\n trackId = parsedTfhd.trackId;\n }\n if (tfdt) {\n var parsedTfdt = parseTfdt(tfdt);\n baseMediaDecodeTime = parsedTfdt.baseMediaDecodeTime;\n }\n if (trun) {\n var parsedTrun = parseTrun(trun);\n if (parsedTrun.samples && parsedTrun.samples.length) {\n compositionTimeOffset = parsedTrun.samples[0].compositionTimeOffset || 0;\n }\n }\n } // Get timescale for this specific track. Assume a 90kHz clock if no timescale was\n // specified.\n\n var timescale = timescales[trackId] || 90e3; // return the composition start time, in seconds\n\n if (typeof baseMediaDecodeTime === 'bigint') {\n compositionTimeOffset = window$1.BigInt(compositionTimeOffset);\n timescale = window$1.BigInt(timescale);\n }\n var result = (baseMediaDecodeTime + compositionTimeOffset) / timescale;\n if (typeof result === 'bigint' && result < Number.MAX_SAFE_INTEGER) {\n result = Number(result);\n }\n return result;\n };\n /**\n * Find the trackIds of the video tracks in this source.\n * Found by parsing the Handler Reference and Track Header Boxes:\n * moov > trak > mdia > hdlr\n * moov > trak > tkhd\n *\n * @param {Uint8Array} init - The bytes of the init segment for this source\n * @return {Number[]} A list of trackIds\n *\n * @see ISO-BMFF-12/2015, Section 8.4.3\n **/\n\n getVideoTrackIds = function (init) {\n var traks = findBox(init, ['moov', 'trak']);\n var videoTrackIds = [];\n traks.forEach(function (trak) {\n var hdlrs = findBox(trak, ['mdia', 'hdlr']);\n var tkhds = findBox(trak, ['tkhd']);\n hdlrs.forEach(function (hdlr, index) {\n var handlerType = parseType$1(hdlr.subarray(8, 12));\n var tkhd = tkhds[index];\n var view;\n var version;\n var trackId;\n if (handlerType === 'vide') {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n version = view.getUint8(0);\n trackId = version === 0 ? view.getUint32(12) : view.getUint32(20);\n videoTrackIds.push(trackId);\n }\n });\n });\n return videoTrackIds;\n };\n getTimescaleFromMediaHeader = function (mdhd) {\n // mdhd is a FullBox, meaning it will have its own version as the first byte\n var version = mdhd[0];\n var index = version === 0 ? 12 : 20;\n return toUnsigned(mdhd[index] << 24 | mdhd[index + 1] << 16 | mdhd[index + 2] << 8 | mdhd[index + 3]);\n };\n /**\n * Get all the video, audio, and hint tracks from a non fragmented\n * mp4 segment\n */\n\n getTracks = function (init) {\n var traks = findBox(init, ['moov', 'trak']);\n var tracks = [];\n traks.forEach(function (trak) {\n var track = {};\n var tkhd = findBox(trak, ['tkhd'])[0];\n var view, tkhdVersion; // id\n\n if (tkhd) {\n view = new DataView(tkhd.buffer, tkhd.byteOffset, tkhd.byteLength);\n tkhdVersion = view.getUint8(0);\n track.id = tkhdVersion === 0 ? view.getUint32(12) : view.getUint32(20);\n }\n var hdlr = findBox(trak, ['mdia', 'hdlr'])[0]; // type\n\n if (hdlr) {\n var type = parseType$1(hdlr.subarray(8, 12));\n if (type === 'vide') {\n track.type = 'video';\n } else if (type === 'soun') {\n track.type = 'audio';\n } else {\n track.type = type;\n }\n } // codec\n\n var stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n if (stsd) {\n var sampleDescriptions = stsd.subarray(8); // gives the codec type string\n\n track.codec = parseType$1(sampleDescriptions.subarray(4, 8));\n var codecBox = findBox(sampleDescriptions, [track.codec])[0];\n var codecConfig, codecConfigType;\n if (codecBox) {\n // https://tools.ietf.org/html/rfc6381#section-3.3\n if (/^[asm]vc[1-9]$/i.test(track.codec)) {\n // we don't need anything but the \"config\" parameter of the\n // avc1 codecBox\n codecConfig = codecBox.subarray(78);\n codecConfigType = parseType$1(codecConfig.subarray(4, 8));\n if (codecConfigType === 'avcC' && codecConfig.length > 11) {\n track.codec += '.'; // left padded with zeroes for single digit hex\n // profile idc\n\n track.codec += toHexString(codecConfig[9]); // the byte containing the constraint_set flags\n\n track.codec += toHexString(codecConfig[10]); // level idc\n\n track.codec += toHexString(codecConfig[11]);\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'avc1.4d400d';\n }\n } else if (/^mp4[a,v]$/i.test(track.codec)) {\n // we do not need anything but the streamDescriptor of the mp4a codecBox\n codecConfig = codecBox.subarray(28);\n codecConfigType = parseType$1(codecConfig.subarray(4, 8));\n if (codecConfigType === 'esds' && codecConfig.length > 20 && codecConfig[19] !== 0) {\n track.codec += '.' + toHexString(codecConfig[19]); // this value is only a single digit\n\n track.codec += '.' + toHexString(codecConfig[20] >>> 2 & 0x3f).replace(/^0/, '');\n } else {\n // TODO: show a warning that we couldn't parse the codec\n // and are using the default\n track.codec = 'mp4a.40.2';\n }\n } else {\n // flac, opus, etc\n track.codec = track.codec.toLowerCase();\n }\n }\n }\n var mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (mdhd) {\n track.timescale = getTimescaleFromMediaHeader(mdhd);\n }\n tracks.push(track);\n });\n return tracks;\n };\n /**\n * Returns an array of emsg ID3 data from the provided segmentData.\n * An offset can also be provided as the Latest Arrival Time to calculate \n * the Event Start Time of v0 EMSG boxes. \n * See: https://dashif-documents.azurewebsites.net/Events/master/event.html#Inband-event-timing\n * \n * @param {Uint8Array} segmentData the segment byte array.\n * @param {number} offset the segment start time or Latest Arrival Time, \n * @return {Object[]} an array of ID3 parsed from EMSG boxes\n */\n\n getEmsgID3 = function (segmentData, offset = 0) {\n var emsgBoxes = findBox(segmentData, ['emsg']);\n return emsgBoxes.map(data => {\n var parsedBox = emsg.parseEmsgBox(new Uint8Array(data));\n var parsedId3Frames = parseId3Frames(parsedBox.message_data);\n return {\n cueTime: emsg.scaleTime(parsedBox.presentation_time, parsedBox.timescale, parsedBox.presentation_time_delta, offset),\n duration: emsg.scaleTime(parsedBox.event_duration, parsedBox.timescale),\n frames: parsedId3Frames\n };\n });\n };\n var probe$2 = {\n // export mp4 inspector's findBox and parseType for backwards compatibility\n findBox: findBox,\n parseType: parseType$1,\n timescale: timescale,\n startTime: startTime,\n compositionStartTime: compositionStartTime,\n videoTrackIds: getVideoTrackIds,\n tracks: getTracks,\n getTimescaleFromMediaHeader: getTimescaleFromMediaHeader,\n getEmsgID3: getEmsgID3\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Utilities to detect basic properties and metadata about TS Segments.\n */\n\n var StreamTypes$1 = streamTypes;\n var parsePid = function (packet) {\n var pid = packet[1] & 0x1f;\n pid <<= 8;\n pid |= packet[2];\n return pid;\n };\n var parsePayloadUnitStartIndicator = function (packet) {\n return !!(packet[1] & 0x40);\n };\n var parseAdaptionField = function (packet) {\n var offset = 0; // if an adaption field is present, its length is specified by the\n // fifth byte of the TS packet header. The adaptation field is\n // used to add stuffing to PES packets that don't fill a complete\n // TS packet, and to specify some forms of timing and control data\n // that we do not currently use.\n\n if ((packet[3] & 0x30) >>> 4 > 0x01) {\n offset += packet[4] + 1;\n }\n return offset;\n };\n var parseType = function (packet, pmtPid) {\n var pid = parsePid(packet);\n if (pid === 0) {\n return 'pat';\n } else if (pid === pmtPid) {\n return 'pmt';\n } else if (pmtPid) {\n return 'pes';\n }\n return null;\n };\n var parsePat = function (packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n var offset = 4 + parseAdaptionField(packet);\n if (pusi) {\n offset += packet[offset] + 1;\n }\n return (packet[offset + 10] & 0x1f) << 8 | packet[offset + 11];\n };\n var parsePmt = function (packet) {\n var programMapTable = {};\n var pusi = parsePayloadUnitStartIndicator(packet);\n var payloadOffset = 4 + parseAdaptionField(packet);\n if (pusi) {\n payloadOffset += packet[payloadOffset] + 1;\n } // PMTs can be sent ahead of the time when they should actually\n // take effect. We don't believe this should ever be the case\n // for HLS but we'll ignore \"forward\" PMT declarations if we see\n // them. Future PMT declarations have the current_next_indicator\n // set to zero.\n\n if (!(packet[payloadOffset + 5] & 0x01)) {\n return;\n }\n var sectionLength, tableEnd, programInfoLength; // the mapping table ends at the end of the current section\n\n sectionLength = (packet[payloadOffset + 1] & 0x0f) << 8 | packet[payloadOffset + 2];\n tableEnd = 3 + sectionLength - 4; // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n\n programInfoLength = (packet[payloadOffset + 10] & 0x0f) << 8 | packet[payloadOffset + 11]; // advance the offset to the first entry in the mapping table\n\n var offset = 12 + programInfoLength;\n while (offset < tableEnd) {\n var i = payloadOffset + offset; // add an entry that maps the elementary_pid to the stream_type\n\n programMapTable[(packet[i + 1] & 0x1F) << 8 | packet[i + 2]] = packet[i]; // move to the next table entry\n // skip past the elementary stream descriptors, if present\n\n offset += ((packet[i + 3] & 0x0F) << 8 | packet[i + 4]) + 5;\n }\n return programMapTable;\n };\n var parsePesType = function (packet, programMapTable) {\n var pid = parsePid(packet);\n var type = programMapTable[pid];\n switch (type) {\n case StreamTypes$1.H264_STREAM_TYPE:\n return 'video';\n case StreamTypes$1.ADTS_STREAM_TYPE:\n return 'audio';\n case StreamTypes$1.METADATA_STREAM_TYPE:\n return 'timed-metadata';\n default:\n return null;\n }\n };\n var parsePesTime = function (packet) {\n var pusi = parsePayloadUnitStartIndicator(packet);\n if (!pusi) {\n return null;\n }\n var offset = 4 + parseAdaptionField(packet);\n if (offset >= packet.byteLength) {\n // From the H 222.0 MPEG-TS spec\n // \"For transport stream packets carrying PES packets, stuffing is needed when there\n // is insufficient PES packet data to completely fill the transport stream packet\n // payload bytes. Stuffing is accomplished by defining an adaptation field longer than\n // the sum of the lengths of the data elements in it, so that the payload bytes\n // remaining after the adaptation field exactly accommodates the available PES packet\n // data.\"\n //\n // If the offset is >= the length of the packet, then the packet contains no data\n // and instead is just adaption field stuffing bytes\n return null;\n }\n var pes = null;\n var ptsDtsFlags; // PES packets may be annotated with a PTS value, or a PTS value\n // and a DTS value. Determine what combination of values is\n // available to work with.\n\n ptsDtsFlags = packet[offset + 7]; // PTS and DTS are normally stored as a 33-bit number. Javascript\n // performs all bitwise operations on 32-bit integers but javascript\n // supports a much greater range (52-bits) of integer using standard\n // mathematical operations.\n // We construct a 31-bit value using bitwise operators over the 31\n // most significant bits and then multiply by 4 (equal to a left-shift\n // of 2) before we add the final 2 least significant bits of the\n // timestamp (equal to an OR.)\n\n if (ptsDtsFlags & 0xC0) {\n pes = {}; // the PTS and DTS are not written out directly. For information\n // on how they are encoded, see\n // http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n\n pes.pts = (packet[offset + 9] & 0x0E) << 27 | (packet[offset + 10] & 0xFF) << 20 | (packet[offset + 11] & 0xFE) << 12 | (packet[offset + 12] & 0xFF) << 5 | (packet[offset + 13] & 0xFE) >>> 3;\n pes.pts *= 4; // Left shift by 2\n\n pes.pts += (packet[offset + 13] & 0x06) >>> 1; // OR by the two LSBs\n\n pes.dts = pes.pts;\n if (ptsDtsFlags & 0x40) {\n pes.dts = (packet[offset + 14] & 0x0E) << 27 | (packet[offset + 15] & 0xFF) << 20 | (packet[offset + 16] & 0xFE) << 12 | (packet[offset + 17] & 0xFF) << 5 | (packet[offset + 18] & 0xFE) >>> 3;\n pes.dts *= 4; // Left shift by 2\n\n pes.dts += (packet[offset + 18] & 0x06) >>> 1; // OR by the two LSBs\n }\n }\n\n return pes;\n };\n var parseNalUnitType = function (type) {\n switch (type) {\n case 0x05:\n return 'slice_layer_without_partitioning_rbsp_idr';\n case 0x06:\n return 'sei_rbsp';\n case 0x07:\n return 'seq_parameter_set_rbsp';\n case 0x08:\n return 'pic_parameter_set_rbsp';\n case 0x09:\n return 'access_unit_delimiter_rbsp';\n default:\n return null;\n }\n };\n var videoPacketContainsKeyFrame = function (packet) {\n var offset = 4 + parseAdaptionField(packet);\n var frameBuffer = packet.subarray(offset);\n var frameI = 0;\n var frameSyncPoint = 0;\n var foundKeyFrame = false;\n var nalType; // advance the sync point to a NAL start, if necessary\n\n for (; frameSyncPoint < frameBuffer.byteLength - 3; frameSyncPoint++) {\n if (frameBuffer[frameSyncPoint + 2] === 1) {\n // the sync point is properly aligned\n frameI = frameSyncPoint + 5;\n break;\n }\n }\n while (frameI < frameBuffer.byteLength) {\n // look at the current byte to determine if we've hit the end of\n // a NAL unit boundary\n switch (frameBuffer[frameI]) {\n case 0:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0) {\n frameI += 2;\n break;\n } else if (frameBuffer[frameI - 2] !== 0) {\n frameI++;\n break;\n }\n if (frameSyncPoint + 3 !== frameI - 2) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n } // drop trailing zeroes\n\n do {\n frameI++;\n } while (frameBuffer[frameI] !== 1 && frameI < frameBuffer.length);\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n case 1:\n // skip past non-sync sequences\n if (frameBuffer[frameI - 1] !== 0 || frameBuffer[frameI - 2] !== 0) {\n frameI += 3;\n break;\n }\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n frameSyncPoint = frameI - 2;\n frameI += 3;\n break;\n default:\n // the current byte isn't a one or zero, so it cannot be part\n // of a sync sequence\n frameI += 3;\n break;\n }\n }\n frameBuffer = frameBuffer.subarray(frameSyncPoint);\n frameI -= frameSyncPoint;\n frameSyncPoint = 0; // parse the final nal\n\n if (frameBuffer && frameBuffer.byteLength > 3) {\n nalType = parseNalUnitType(frameBuffer[frameSyncPoint + 3] & 0x1f);\n if (nalType === 'slice_layer_without_partitioning_rbsp_idr') {\n foundKeyFrame = true;\n }\n }\n return foundKeyFrame;\n };\n var probe$1 = {\n parseType: parseType,\n parsePat: parsePat,\n parsePmt: parsePmt,\n parsePayloadUnitStartIndicator: parsePayloadUnitStartIndicator,\n parsePesType: parsePesType,\n parsePesTime: parsePesTime,\n videoPacketContainsKeyFrame: videoPacketContainsKeyFrame\n };\n /**\n * mux.js\n *\n * Copyright (c) Brightcove\n * Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE\n *\n * Parse mpeg2 transport stream packets to extract basic timing information\n */\n\n var StreamTypes = streamTypes;\n var handleRollover = timestampRolloverStream.handleRollover;\n var probe = {};\n probe.ts = probe$1;\n probe.aac = utils;\n var ONE_SECOND_IN_TS = clock$2.ONE_SECOND_IN_TS;\n var MP2T_PACKET_LENGTH = 188,\n // bytes\n SYNC_BYTE = 0x47;\n /**\n * walks through segment data looking for pat and pmt packets to parse out\n * program map table information\n */\n\n var parsePsi_ = function (bytes, pmt) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type;\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pat':\n pmt.pid = probe.ts.parsePat(packet);\n break;\n case 'pmt':\n var table = probe.ts.parsePmt(packet);\n pmt.table = pmt.table || {};\n Object.keys(table).forEach(function (key) {\n pmt.table[key] = table[key];\n });\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n }\n };\n /**\n * walks through the segment data from the start and end to get timing information\n * for the first and last audio pes packets\n */\n\n var parseAudioPes_ = function (bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed;\n var endLoop = false; // Start walking from start of segment to get first audio packet\n\n while (endIndex <= bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last audio packet\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && (bytes[endIndex] === SYNC_BYTE || endIndex === bytes.byteLength)) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'audio' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'audio';\n result.audio.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex--;\n endIndex--;\n }\n };\n /**\n * walks through the segment data from the start and end to get timing information\n * for the first and last video pes packets as well as timing information for the first\n * key frame.\n */\n\n var parseVideoPes_ = function (bytes, pmt, result) {\n var startIndex = 0,\n endIndex = MP2T_PACKET_LENGTH,\n packet,\n type,\n pesType,\n pusi,\n parsed,\n frame,\n i,\n pes;\n var endLoop = false;\n var currentFrame = {\n data: [],\n size: 0\n }; // Start walking from start of segment to get first video packet\n\n while (endIndex < bytes.byteLength) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video') {\n if (pusi && !endLoop) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n if (!result.firstKeyFrame) {\n if (pusi) {\n if (currentFrame.size !== 0) {\n frame = new Uint8Array(currentFrame.size);\n i = 0;\n while (currentFrame.data.length) {\n pes = currentFrame.data.shift();\n frame.set(pes, i);\n i += pes.byteLength;\n }\n if (probe.ts.videoPacketContainsKeyFrame(frame)) {\n var firstKeyFrame = probe.ts.parsePesTime(frame); // PTS/DTS may not be available. Simply *not* setting\n // the keyframe seems to work fine with HLS playback\n // and definitely preferable to a crash with TypeError...\n\n if (firstKeyFrame) {\n result.firstKeyFrame = firstKeyFrame;\n result.firstKeyFrame.type = 'video';\n } else {\n // eslint-disable-next-line\n console.warn('Failed to extract PTS/DTS from PES at first keyframe. ' + 'This could be an unusual TS segment, or else mux.js did not ' + 'parse your TS segment correctly. If you know your TS ' + 'segments do contain PTS/DTS on keyframes please file a bug ' + 'report! You can try ffprobe to double check for yourself.');\n }\n }\n currentFrame.size = 0;\n }\n }\n currentFrame.data.push(packet);\n currentFrame.size += packet.byteLength;\n }\n }\n break;\n }\n if (endLoop && result.firstKeyFrame) {\n break;\n }\n startIndex += MP2T_PACKET_LENGTH;\n endIndex += MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex++;\n endIndex++;\n } // Start walking from end of segment to get last video packet\n\n endIndex = bytes.byteLength;\n startIndex = endIndex - MP2T_PACKET_LENGTH;\n endLoop = false;\n while (startIndex >= 0) {\n // Look for a pair of start and end sync bytes in the data..\n if (bytes[startIndex] === SYNC_BYTE && bytes[endIndex] === SYNC_BYTE) {\n // We found a packet\n packet = bytes.subarray(startIndex, endIndex);\n type = probe.ts.parseType(packet, pmt.pid);\n switch (type) {\n case 'pes':\n pesType = probe.ts.parsePesType(packet, pmt.table);\n pusi = probe.ts.parsePayloadUnitStartIndicator(packet);\n if (pesType === 'video' && pusi) {\n parsed = probe.ts.parsePesTime(packet);\n if (parsed) {\n parsed.type = 'video';\n result.video.push(parsed);\n endLoop = true;\n }\n }\n break;\n }\n if (endLoop) {\n break;\n }\n startIndex -= MP2T_PACKET_LENGTH;\n endIndex -= MP2T_PACKET_LENGTH;\n continue;\n } // If we get here, we have somehow become de-synchronized and we need to step\n // forward one byte at a time until we find a pair of sync bytes that denote\n // a packet\n\n startIndex--;\n endIndex--;\n }\n };\n /**\n * Adjusts the timestamp information for the segment to account for\n * rollover and convert to seconds based on pes packet timescale (90khz clock)\n */\n\n var adjustTimestamp_ = function (segmentInfo, baseTimestamp) {\n if (segmentInfo.audio && segmentInfo.audio.length) {\n var audioBaseTimestamp = baseTimestamp;\n if (typeof audioBaseTimestamp === 'undefined' || isNaN(audioBaseTimestamp)) {\n audioBaseTimestamp = segmentInfo.audio[0].dts;\n }\n segmentInfo.audio.forEach(function (info) {\n info.dts = handleRollover(info.dts, audioBaseTimestamp);\n info.pts = handleRollover(info.pts, audioBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n }\n if (segmentInfo.video && segmentInfo.video.length) {\n var videoBaseTimestamp = baseTimestamp;\n if (typeof videoBaseTimestamp === 'undefined' || isNaN(videoBaseTimestamp)) {\n videoBaseTimestamp = segmentInfo.video[0].dts;\n }\n segmentInfo.video.forEach(function (info) {\n info.dts = handleRollover(info.dts, videoBaseTimestamp);\n info.pts = handleRollover(info.pts, videoBaseTimestamp); // time in seconds\n\n info.dtsTime = info.dts / ONE_SECOND_IN_TS;\n info.ptsTime = info.pts / ONE_SECOND_IN_TS;\n });\n if (segmentInfo.firstKeyFrame) {\n var frame = segmentInfo.firstKeyFrame;\n frame.dts = handleRollover(frame.dts, videoBaseTimestamp);\n frame.pts = handleRollover(frame.pts, videoBaseTimestamp); // time in seconds\n\n frame.dtsTime = frame.dts / ONE_SECOND_IN_TS;\n frame.ptsTime = frame.pts / ONE_SECOND_IN_TS;\n }\n }\n };\n /**\n * inspects the aac data stream for start and end time information\n */\n\n var inspectAac_ = function (bytes) {\n var endLoop = false,\n audioCount = 0,\n sampleRate = null,\n timestamp = null,\n frameSize = 0,\n byteIndex = 0,\n packet;\n while (bytes.length - byteIndex >= 3) {\n var type = probe.aac.parseType(bytes, byteIndex);\n switch (type) {\n case 'timed-metadata':\n // Exit early because we don't have enough to parse\n // the ID3 tag header\n if (bytes.length - byteIndex < 10) {\n endLoop = true;\n break;\n }\n frameSize = probe.aac.parseId3TagSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (timestamp === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n timestamp = probe.aac.parseAacTimestamp(packet);\n }\n byteIndex += frameSize;\n break;\n case 'audio':\n // Exit early because we don't have enough to parse\n // the ADTS frame header\n if (bytes.length - byteIndex < 7) {\n endLoop = true;\n break;\n }\n frameSize = probe.aac.parseAdtsSize(bytes, byteIndex); // Exit early if we don't have enough in the buffer\n // to emit a full packet\n\n if (frameSize > bytes.length) {\n endLoop = true;\n break;\n }\n if (sampleRate === null) {\n packet = bytes.subarray(byteIndex, byteIndex + frameSize);\n sampleRate = probe.aac.parseSampleRate(packet);\n }\n audioCount++;\n byteIndex += frameSize;\n break;\n default:\n byteIndex++;\n break;\n }\n if (endLoop) {\n return null;\n }\n }\n if (sampleRate === null || timestamp === null) {\n return null;\n }\n var audioTimescale = ONE_SECOND_IN_TS / sampleRate;\n var result = {\n audio: [{\n type: 'audio',\n dts: timestamp,\n pts: timestamp\n }, {\n type: 'audio',\n dts: timestamp + audioCount * 1024 * audioTimescale,\n pts: timestamp + audioCount * 1024 * audioTimescale\n }]\n };\n return result;\n };\n /**\n * inspects the transport stream segment data for start and end time information\n * of the audio and video tracks (when present) as well as the first key frame's\n * start time.\n */\n\n var inspectTs_ = function (bytes) {\n var pmt = {\n pid: null,\n table: null\n };\n var result = {};\n parsePsi_(bytes, pmt);\n for (var pid in pmt.table) {\n if (pmt.table.hasOwnProperty(pid)) {\n var type = pmt.table[pid];\n switch (type) {\n case StreamTypes.H264_STREAM_TYPE:\n result.video = [];\n parseVideoPes_(bytes, pmt, result);\n if (result.video.length === 0) {\n delete result.video;\n }\n break;\n case StreamTypes.ADTS_STREAM_TYPE:\n result.audio = [];\n parseAudioPes_(bytes, pmt, result);\n if (result.audio.length === 0) {\n delete result.audio;\n }\n break;\n }\n }\n }\n return result;\n };\n /**\n * Inspects segment byte data and returns an object with start and end timing information\n *\n * @param {Uint8Array} bytes The segment byte data\n * @param {Number} baseTimestamp Relative reference timestamp used when adjusting frame\n * timestamps for rollover. This value must be in 90khz clock.\n * @return {Object} Object containing start and end frame timing info of segment.\n */\n\n var inspect = function (bytes, baseTimestamp) {\n var isAacData = probe.aac.isLikelyAacData(bytes);\n var result;\n if (isAacData) {\n result = inspectAac_(bytes);\n } else {\n result = inspectTs_(bytes);\n }\n if (!result || !result.audio && !result.video) {\n return null;\n }\n adjustTimestamp_(result, baseTimestamp);\n return result;\n };\n var tsInspector = {\n inspect: inspect,\n parseAudioPes_: parseAudioPes_\n };\n /* global self */\n\n /**\n * Re-emits transmuxer events by converting them into messages to the\n * world outside the worker.\n *\n * @param {Object} transmuxer the transmuxer to wire events on\n * @private\n */\n\n const wireTransmuxerEvents = function (self, transmuxer) {\n transmuxer.on('data', function (segment) {\n // transfer ownership of the underlying ArrayBuffer\n // instead of doing a copy to save memory\n // ArrayBuffers are transferable but generic TypedArrays are not\n // @link https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers#Passing_data_by_transferring_ownership_(transferable_objects)\n const initArray = segment.initSegment;\n segment.initSegment = {\n data: initArray.buffer,\n byteOffset: initArray.byteOffset,\n byteLength: initArray.byteLength\n };\n const typedArray = segment.data;\n segment.data = typedArray.buffer;\n self.postMessage({\n action: 'data',\n segment,\n byteOffset: typedArray.byteOffset,\n byteLength: typedArray.byteLength\n }, [segment.data]);\n });\n transmuxer.on('done', function (data) {\n self.postMessage({\n action: 'done'\n });\n });\n transmuxer.on('gopInfo', function (gopInfo) {\n self.postMessage({\n action: 'gopInfo',\n gopInfo\n });\n });\n transmuxer.on('videoSegmentTimingInfo', function (timingInfo) {\n const videoSegmentTimingInfo = {\n start: {\n decode: clock$2.videoTsToSeconds(timingInfo.start.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.start.pts)\n },\n end: {\n decode: clock$2.videoTsToSeconds(timingInfo.end.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.end.pts)\n },\n baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime)\n };\n if (timingInfo.prependedContentDuration) {\n videoSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration);\n }\n self.postMessage({\n action: 'videoSegmentTimingInfo',\n videoSegmentTimingInfo\n });\n });\n transmuxer.on('audioSegmentTimingInfo', function (timingInfo) {\n // Note that all times for [audio/video]SegmentTimingInfo events are in video clock\n const audioSegmentTimingInfo = {\n start: {\n decode: clock$2.videoTsToSeconds(timingInfo.start.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.start.pts)\n },\n end: {\n decode: clock$2.videoTsToSeconds(timingInfo.end.dts),\n presentation: clock$2.videoTsToSeconds(timingInfo.end.pts)\n },\n baseMediaDecodeTime: clock$2.videoTsToSeconds(timingInfo.baseMediaDecodeTime)\n };\n if (timingInfo.prependedContentDuration) {\n audioSegmentTimingInfo.prependedContentDuration = clock$2.videoTsToSeconds(timingInfo.prependedContentDuration);\n }\n self.postMessage({\n action: 'audioSegmentTimingInfo',\n audioSegmentTimingInfo\n });\n });\n transmuxer.on('id3Frame', function (id3Frame) {\n self.postMessage({\n action: 'id3Frame',\n id3Frame\n });\n });\n transmuxer.on('caption', function (caption) {\n self.postMessage({\n action: 'caption',\n caption\n });\n });\n transmuxer.on('trackinfo', function (trackInfo) {\n self.postMessage({\n action: 'trackinfo',\n trackInfo\n });\n });\n transmuxer.on('audioTimingInfo', function (audioTimingInfo) {\n // convert to video TS since we prioritize video time over audio\n self.postMessage({\n action: 'audioTimingInfo',\n audioTimingInfo: {\n start: clock$2.videoTsToSeconds(audioTimingInfo.start),\n end: clock$2.videoTsToSeconds(audioTimingInfo.end)\n }\n });\n });\n transmuxer.on('videoTimingInfo', function (videoTimingInfo) {\n self.postMessage({\n action: 'videoTimingInfo',\n videoTimingInfo: {\n start: clock$2.videoTsToSeconds(videoTimingInfo.start),\n end: clock$2.videoTsToSeconds(videoTimingInfo.end)\n }\n });\n });\n transmuxer.on('log', function (log) {\n self.postMessage({\n action: 'log',\n log\n });\n });\n };\n /**\n * All incoming messages route through this hash. If no function exists\n * to handle an incoming message, then we ignore the message.\n *\n * @class MessageHandlers\n * @param {Object} options the options to initialize with\n */\n\n class MessageHandlers {\n constructor(self, options) {\n this.options = options || {};\n this.self = self;\n this.init();\n }\n /**\n * initialize our web worker and wire all the events.\n */\n\n init() {\n if (this.transmuxer) {\n this.transmuxer.dispose();\n }\n this.transmuxer = new transmuxer.Transmuxer(this.options);\n wireTransmuxerEvents(this.self, this.transmuxer);\n }\n pushMp4Captions(data) {\n if (!this.captionParser) {\n this.captionParser = new captionParser();\n this.captionParser.init();\n }\n const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n const parsed = this.captionParser.parse(segment, data.trackIds, data.timescales);\n this.self.postMessage({\n action: 'mp4Captions',\n captions: parsed && parsed.captions || [],\n logs: parsed && parsed.logs || [],\n data: segment.buffer\n }, [segment.buffer]);\n }\n probeMp4StartTime({\n timescales,\n data\n }) {\n const startTime = probe$2.startTime(timescales, data);\n this.self.postMessage({\n action: 'probeMp4StartTime',\n startTime,\n data\n }, [data.buffer]);\n }\n probeMp4Tracks({\n data\n }) {\n const tracks = probe$2.tracks(data);\n this.self.postMessage({\n action: 'probeMp4Tracks',\n tracks,\n data\n }, [data.buffer]);\n }\n /**\n * Probes an mp4 segment for EMSG boxes containing ID3 data.\n * https://aomediacodec.github.io/id3-emsg/\n *\n * @param {Uint8Array} data segment data\n * @param {number} offset segment start time\n * @return {Object[]} an array of ID3 frames\n */\n\n probeEmsgID3({\n data,\n offset\n }) {\n const id3Frames = probe$2.getEmsgID3(data, offset);\n this.self.postMessage({\n action: 'probeEmsgID3',\n id3Frames,\n emsgData: data\n }, [data.buffer]);\n }\n /**\n * Probe an mpeg2-ts segment to determine the start time of the segment in it's\n * internal \"media time,\" as well as whether it contains video and/or audio.\n *\n * @private\n * @param {Uint8Array} bytes - segment bytes\n * @param {number} baseStartTime\n * Relative reference timestamp used when adjusting frame timestamps for rollover.\n * This value should be in seconds, as it's converted to a 90khz clock within the\n * function body.\n * @return {Object} The start time of the current segment in \"media time\" as well as\n * whether it contains video and/or audio\n */\n\n probeTs({\n data,\n baseStartTime\n }) {\n const tsStartTime = typeof baseStartTime === 'number' && !isNaN(baseStartTime) ? baseStartTime * clock$2.ONE_SECOND_IN_TS : void 0;\n const timeInfo = tsInspector.inspect(data, tsStartTime);\n let result = null;\n if (timeInfo) {\n result = {\n // each type's time info comes back as an array of 2 times, start and end\n hasVideo: timeInfo.video && timeInfo.video.length === 2 || false,\n hasAudio: timeInfo.audio && timeInfo.audio.length === 2 || false\n };\n if (result.hasVideo) {\n result.videoStart = timeInfo.video[0].ptsTime;\n }\n if (result.hasAudio) {\n result.audioStart = timeInfo.audio[0].ptsTime;\n }\n }\n this.self.postMessage({\n action: 'probeTs',\n result,\n data\n }, [data.buffer]);\n }\n clearAllMp4Captions() {\n if (this.captionParser) {\n this.captionParser.clearAllCaptions();\n }\n }\n clearParsedMp4Captions() {\n if (this.captionParser) {\n this.captionParser.clearParsedCaptions();\n }\n }\n /**\n * Adds data (a ts segment) to the start of the transmuxer pipeline for\n * processing.\n *\n * @param {ArrayBuffer} data data to push into the muxer\n */\n\n push(data) {\n // Cast array buffer to correct type for transmuxer\n const segment = new Uint8Array(data.data, data.byteOffset, data.byteLength);\n this.transmuxer.push(segment);\n }\n /**\n * Recreate the transmuxer so that the next segment added via `push`\n * start with a fresh transmuxer.\n */\n\n reset() {\n this.transmuxer.reset();\n }\n /**\n * Set the value that will be used as the `baseMediaDecodeTime` time for the\n * next segment pushed in. Subsequent segments will have their `baseMediaDecodeTime`\n * set relative to the first based on the PTS values.\n *\n * @param {Object} data used to set the timestamp offset in the muxer\n */\n\n setTimestampOffset(data) {\n const timestampOffset = data.timestampOffset || 0;\n this.transmuxer.setBaseMediaDecodeTime(Math.round(clock$2.secondsToVideoTs(timestampOffset)));\n }\n setAudioAppendStart(data) {\n this.transmuxer.setAudioAppendStart(Math.ceil(clock$2.secondsToVideoTs(data.appendStart)));\n }\n setRemux(data) {\n this.transmuxer.setRemux(data.remux);\n }\n /**\n * Forces the pipeline to finish processing the last segment and emit it's\n * results.\n *\n * @param {Object} data event data, not really used\n */\n\n flush(data) {\n this.transmuxer.flush(); // transmuxed done action is fired after both audio/video pipelines are flushed\n\n self.postMessage({\n action: 'done',\n type: 'transmuxed'\n });\n }\n endTimeline() {\n this.transmuxer.endTimeline(); // transmuxed endedtimeline action is fired after both audio/video pipelines end their\n // timelines\n\n self.postMessage({\n action: 'endedtimeline',\n type: 'transmuxed'\n });\n }\n alignGopsWith(data) {\n this.transmuxer.alignGopsWith(data.gopsToAlignWith.slice());\n }\n }\n /**\n * Our web worker interface so that things can talk to mux.js\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n *\n * @param {Object} self the scope for the web worker\n */\n\n self.onmessage = function (event) {\n if (event.data.action === 'init' && event.data.options) {\n this.messageHandlers = new MessageHandlers(self, event.data.options);\n return;\n }\n if (!this.messageHandlers) {\n this.messageHandlers = new MessageHandlers(self);\n }\n if (event.data && event.data.action && event.data.action !== 'init') {\n if (this.messageHandlers[event.data.action]) {\n this.messageHandlers[event.data.action](event.data);\n }\n }\n };\n}));\nvar TransmuxWorker = factory(workerCode$1);\n/* rollup-plugin-worker-factory end for worker!/home/runner/work/http-streaming/http-streaming/src/transmuxer-worker.js */\n\nconst handleData_ = (event, transmuxedData, callback) => {\n const {\n type,\n initSegment,\n captions,\n captionStreams,\n metadata,\n videoFrameDtsTime,\n videoFramePtsTime\n } = event.data.segment;\n transmuxedData.buffer.push({\n captions,\n captionStreams,\n metadata\n });\n const boxes = event.data.segment.boxes || {\n data: event.data.segment.data\n };\n const result = {\n type,\n // cast ArrayBuffer to TypedArray\n data: new Uint8Array(boxes.data, boxes.data.byteOffset, boxes.data.byteLength),\n initSegment: new Uint8Array(initSegment.data, initSegment.byteOffset, initSegment.byteLength)\n };\n if (typeof videoFrameDtsTime !== 'undefined') {\n result.videoFrameDtsTime = videoFrameDtsTime;\n }\n if (typeof videoFramePtsTime !== 'undefined') {\n result.videoFramePtsTime = videoFramePtsTime;\n }\n callback(result);\n};\nconst handleDone_ = ({\n transmuxedData,\n callback\n}) => {\n // Previously we only returned data on data events,\n // not on done events. Clear out the buffer to keep that consistent.\n transmuxedData.buffer = []; // all buffers should have been flushed from the muxer, so start processing anything we\n // have received\n\n callback(transmuxedData);\n};\nconst handleGopInfo_ = (event, transmuxedData) => {\n transmuxedData.gopInfo = event.data.gopInfo;\n};\nconst processTransmux = options => {\n const {\n transmuxer,\n bytes,\n audioAppendStart,\n gopsToAlignWith,\n remux,\n onData,\n onTrackInfo,\n onAudioTimingInfo,\n onVideoTimingInfo,\n onVideoSegmentTimingInfo,\n onAudioSegmentTimingInfo,\n onId3,\n onCaptions,\n onDone,\n onEndedTimeline,\n onTransmuxerLog,\n isEndOfTimeline\n } = options;\n const transmuxedData = {\n buffer: []\n };\n let waitForEndedTimelineEvent = isEndOfTimeline;\n const handleMessage = event => {\n if (transmuxer.currentTransmux !== options) {\n // disposed\n return;\n }\n if (event.data.action === 'data') {\n handleData_(event, transmuxedData, onData);\n }\n if (event.data.action === 'trackinfo') {\n onTrackInfo(event.data.trackInfo);\n }\n if (event.data.action === 'gopInfo') {\n handleGopInfo_(event, transmuxedData);\n }\n if (event.data.action === 'audioTimingInfo') {\n onAudioTimingInfo(event.data.audioTimingInfo);\n }\n if (event.data.action === 'videoTimingInfo') {\n onVideoTimingInfo(event.data.videoTimingInfo);\n }\n if (event.data.action === 'videoSegmentTimingInfo') {\n onVideoSegmentTimingInfo(event.data.videoSegmentTimingInfo);\n }\n if (event.data.action === 'audioSegmentTimingInfo') {\n onAudioSegmentTimingInfo(event.data.audioSegmentTimingInfo);\n }\n if (event.data.action === 'id3Frame') {\n onId3([event.data.id3Frame], event.data.id3Frame.dispatchType);\n }\n if (event.data.action === 'caption') {\n onCaptions(event.data.caption);\n }\n if (event.data.action === 'endedtimeline') {\n waitForEndedTimelineEvent = false;\n onEndedTimeline();\n }\n if (event.data.action === 'log') {\n onTransmuxerLog(event.data.log);\n } // wait for the transmuxed event since we may have audio and video\n\n if (event.data.type !== 'transmuxed') {\n return;\n } // If the \"endedtimeline\" event has not yet fired, and this segment represents the end\n // of a timeline, that means there may still be data events before the segment\n // processing can be considerred complete. In that case, the final event should be\n // an \"endedtimeline\" event with the type \"transmuxed.\"\n\n if (waitForEndedTimelineEvent) {\n return;\n }\n transmuxer.onmessage = null;\n handleDone_({\n transmuxedData,\n callback: onDone\n });\n /* eslint-disable no-use-before-define */\n\n dequeue(transmuxer);\n /* eslint-enable */\n };\n\n transmuxer.onmessage = handleMessage;\n if (audioAppendStart) {\n transmuxer.postMessage({\n action: 'setAudioAppendStart',\n appendStart: audioAppendStart\n });\n } // allow empty arrays to be passed to clear out GOPs\n\n if (Array.isArray(gopsToAlignWith)) {\n transmuxer.postMessage({\n action: 'alignGopsWith',\n gopsToAlignWith\n });\n }\n if (typeof remux !== 'undefined') {\n transmuxer.postMessage({\n action: 'setRemux',\n remux\n });\n }\n if (bytes.byteLength) {\n const buffer = bytes instanceof ArrayBuffer ? bytes : bytes.buffer;\n const byteOffset = bytes instanceof ArrayBuffer ? 0 : bytes.byteOffset;\n transmuxer.postMessage({\n action: 'push',\n // Send the typed-array of data as an ArrayBuffer so that\n // it can be sent as a \"Transferable\" and avoid the costly\n // memory copy\n data: buffer,\n // To recreate the original typed-array, we need information\n // about what portion of the ArrayBuffer it was a view into\n byteOffset,\n byteLength: bytes.byteLength\n }, [buffer]);\n }\n if (isEndOfTimeline) {\n transmuxer.postMessage({\n action: 'endTimeline'\n });\n } // even if we didn't push any bytes, we have to make sure we flush in case we reached\n // the end of the segment\n\n transmuxer.postMessage({\n action: 'flush'\n });\n};\nconst dequeue = transmuxer => {\n transmuxer.currentTransmux = null;\n if (transmuxer.transmuxQueue.length) {\n transmuxer.currentTransmux = transmuxer.transmuxQueue.shift();\n if (typeof transmuxer.currentTransmux === 'function') {\n transmuxer.currentTransmux();\n } else {\n processTransmux(transmuxer.currentTransmux);\n }\n }\n};\nconst processAction = (transmuxer, action) => {\n transmuxer.postMessage({\n action\n });\n dequeue(transmuxer);\n};\nconst enqueueAction = (action, transmuxer) => {\n if (!transmuxer.currentTransmux) {\n transmuxer.currentTransmux = action;\n processAction(transmuxer, action);\n return;\n }\n transmuxer.transmuxQueue.push(processAction.bind(null, transmuxer, action));\n};\nconst reset = transmuxer => {\n enqueueAction('reset', transmuxer);\n};\nconst endTimeline = transmuxer => {\n enqueueAction('endTimeline', transmuxer);\n};\nconst transmux = options => {\n if (!options.transmuxer.currentTransmux) {\n options.transmuxer.currentTransmux = options;\n processTransmux(options);\n return;\n }\n options.transmuxer.transmuxQueue.push(options);\n};\nconst createTransmuxer = options => {\n const transmuxer = new TransmuxWorker();\n transmuxer.currentTransmux = null;\n transmuxer.transmuxQueue = [];\n const term = transmuxer.terminate;\n transmuxer.terminate = () => {\n transmuxer.currentTransmux = null;\n transmuxer.transmuxQueue.length = 0;\n return term.call(transmuxer);\n };\n transmuxer.postMessage({\n action: 'init',\n options\n });\n return transmuxer;\n};\nvar segmentTransmuxer = {\n reset,\n endTimeline,\n transmux,\n createTransmuxer\n};\nconst workerCallback = function (options) {\n const transmuxer = options.transmuxer;\n const endAction = options.endAction || options.action;\n const callback = options.callback;\n const message = _extends({}, options, {\n endAction: null,\n transmuxer: null,\n callback: null\n });\n const listenForEndEvent = event => {\n if (event.data.action !== endAction) {\n return;\n }\n transmuxer.removeEventListener('message', listenForEndEvent); // transfer ownership of bytes back to us.\n\n if (event.data.data) {\n event.data.data = new Uint8Array(event.data.data, options.byteOffset || 0, options.byteLength || event.data.data.byteLength);\n if (options.data) {\n options.data = event.data.data;\n }\n }\n callback(event.data);\n };\n transmuxer.addEventListener('message', listenForEndEvent);\n if (options.data) {\n const isArrayBuffer = options.data instanceof ArrayBuffer;\n message.byteOffset = isArrayBuffer ? 0 : options.data.byteOffset;\n message.byteLength = options.data.byteLength;\n const transfers = [isArrayBuffer ? options.data : options.data.buffer];\n transmuxer.postMessage(message, transfers);\n } else {\n transmuxer.postMessage(message);\n }\n};\nconst REQUEST_ERRORS = {\n FAILURE: 2,\n TIMEOUT: -101,\n ABORTED: -102\n};\n/**\n * Abort all requests\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n */\n\nconst abortAll = activeXhrs => {\n activeXhrs.forEach(xhr => {\n xhr.abort();\n });\n};\n/**\n * Gather important bandwidth stats once a request has completed\n *\n * @param {Object} request - the XHR request from which to gather stats\n */\n\nconst getRequestStats = request => {\n return {\n bandwidth: request.bandwidth,\n bytesReceived: request.bytesReceived || 0,\n roundTripTime: request.roundTripTime || 0\n };\n};\n/**\n * If possible gather bandwidth stats as a request is in\n * progress\n *\n * @param {Event} progressEvent - an event object from an XHR's progress event\n */\n\nconst getProgressStats = progressEvent => {\n const request = progressEvent.target;\n const roundTripTime = Date.now() - request.requestTime;\n const stats = {\n bandwidth: Infinity,\n bytesReceived: 0,\n roundTripTime: roundTripTime || 0\n };\n stats.bytesReceived = progressEvent.loaded; // This can result in Infinity if stats.roundTripTime is 0 but that is ok\n // because we should only use bandwidth stats on progress to determine when\n // abort a request early due to insufficient bandwidth\n\n stats.bandwidth = Math.floor(stats.bytesReceived / stats.roundTripTime * 8 * 1000);\n return stats;\n};\n/**\n * Handle all error conditions in one place and return an object\n * with all the information\n *\n * @param {Error|null} error - if non-null signals an error occured with the XHR\n * @param {Object} request - the XHR request that possibly generated the error\n */\n\nconst handleErrors = (error, request) => {\n if (request.timedout) {\n return {\n status: request.status,\n message: 'HLS request timed-out at URL: ' + request.uri,\n code: REQUEST_ERRORS.TIMEOUT,\n xhr: request\n };\n }\n if (request.aborted) {\n return {\n status: request.status,\n message: 'HLS request aborted at URL: ' + request.uri,\n code: REQUEST_ERRORS.ABORTED,\n xhr: request\n };\n }\n if (error) {\n return {\n status: request.status,\n message: 'HLS request errored at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n };\n }\n if (request.responseType === 'arraybuffer' && request.response.byteLength === 0) {\n return {\n status: request.status,\n message: 'Empty HLS response at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n };\n }\n return null;\n};\n/**\n * Handle responses for key data and convert the key data to the correct format\n * for the decryption step later\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Array} objects - objects to add the key bytes to.\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleKeyResponse = (segment, objects, finishProcessingFn) => (error, request) => {\n const response = request.response;\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n if (response.byteLength !== 16) {\n return finishProcessingFn({\n status: request.status,\n message: 'Invalid HLS key at URL: ' + request.uri,\n code: REQUEST_ERRORS.FAILURE,\n xhr: request\n }, segment);\n }\n const view = new DataView(response);\n const bytes = new Uint32Array([view.getUint32(0), view.getUint32(4), view.getUint32(8), view.getUint32(12)]);\n for (let i = 0; i < objects.length; i++) {\n objects[i].bytes = bytes;\n }\n return finishProcessingFn(null, segment);\n};\nconst parseInitSegment = (segment, callback) => {\n const type = detectContainerForBytes(segment.map.bytes); // TODO: We should also handle ts init segments here, but we\n // only know how to parse mp4 init segments at the moment\n\n if (type !== 'mp4') {\n const uri = segment.map.resolvedUri || segment.map.uri;\n return callback({\n internal: true,\n message: `Found unsupported ${type || 'unknown'} container for initialization segment at URL: ${uri}`,\n code: REQUEST_ERRORS.FAILURE\n });\n }\n workerCallback({\n action: 'probeMp4Tracks',\n data: segment.map.bytes,\n transmuxer: segment.transmuxer,\n callback: ({\n tracks,\n data\n }) => {\n // transfer bytes back to us\n segment.map.bytes = data;\n tracks.forEach(function (track) {\n segment.map.tracks = segment.map.tracks || {}; // only support one track of each type for now\n\n if (segment.map.tracks[track.type]) {\n return;\n }\n segment.map.tracks[track.type] = track;\n if (typeof track.id === 'number' && track.timescale) {\n segment.map.timescales = segment.map.timescales || {};\n segment.map.timescales[track.id] = track.timescale;\n }\n });\n return callback(null);\n }\n });\n};\n/**\n * Handle init-segment responses\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleInitSegmentResponse = ({\n segment,\n finishProcessingFn\n}) => (error, request) => {\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n const bytes = new Uint8Array(request.response); // init segment is encypted, we will have to wait\n // until the key request is done to decrypt.\n\n if (segment.map.key) {\n segment.map.encryptedBytes = bytes;\n return finishProcessingFn(null, segment);\n }\n segment.map.bytes = bytes;\n parseInitSegment(segment, function (parseError) {\n if (parseError) {\n parseError.xhr = request;\n parseError.status = request.status;\n return finishProcessingFn(parseError, segment);\n }\n finishProcessingFn(null, segment);\n });\n};\n/**\n * Response handler for segment-requests being sure to set the correct\n * property depending on whether the segment is encryped or not\n * Also records and keeps track of stats that are used for ABR purposes\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} finishProcessingFn - a callback to execute to continue processing\n * this request\n */\n\nconst handleSegmentResponse = ({\n segment,\n finishProcessingFn,\n responseType\n}) => (error, request) => {\n const errorObj = handleErrors(error, request);\n if (errorObj) {\n return finishProcessingFn(errorObj, segment);\n }\n const newBytes =\n // although responseText \"should\" exist, this guard serves to prevent an error being\n // thrown for two primary cases:\n // 1. the mime type override stops working, or is not implemented for a specific\n // browser\n // 2. when using mock XHR libraries like sinon that do not allow the override behavior\n responseType === 'arraybuffer' || !request.responseText ? request.response : stringToArrayBuffer(request.responseText.substring(segment.lastReachedChar || 0));\n segment.stats = getRequestStats(request);\n if (segment.key) {\n segment.encryptedBytes = new Uint8Array(newBytes);\n } else {\n segment.bytes = new Uint8Array(newBytes);\n }\n return finishProcessingFn(null, segment);\n};\nconst transmuxAndNotify = ({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n const fmp4Tracks = segment.map && segment.map.tracks || {};\n const isMuxed = Boolean(fmp4Tracks.audio && fmp4Tracks.video); // Keep references to each function so we can null them out after we're done with them.\n // One reason for this is that in the case of full segments, we want to trust start\n // times from the probe, rather than the transmuxer.\n\n let audioStartFn = timingInfoFn.bind(null, segment, 'audio', 'start');\n const audioEndFn = timingInfoFn.bind(null, segment, 'audio', 'end');\n let videoStartFn = timingInfoFn.bind(null, segment, 'video', 'start');\n const videoEndFn = timingInfoFn.bind(null, segment, 'video', 'end');\n const finish = () => transmux({\n bytes,\n transmuxer: segment.transmuxer,\n audioAppendStart: segment.audioAppendStart,\n gopsToAlignWith: segment.gopsToAlignWith,\n remux: isMuxed,\n onData: result => {\n result.type = result.type === 'combined' ? 'video' : result.type;\n dataFn(segment, result);\n },\n onTrackInfo: trackInfo => {\n if (trackInfoFn) {\n if (isMuxed) {\n trackInfo.isMuxed = true;\n }\n trackInfoFn(segment, trackInfo);\n }\n },\n onAudioTimingInfo: audioTimingInfo => {\n // we only want the first start value we encounter\n if (audioStartFn && typeof audioTimingInfo.start !== 'undefined') {\n audioStartFn(audioTimingInfo.start);\n audioStartFn = null;\n } // we want to continually update the end time\n\n if (audioEndFn && typeof audioTimingInfo.end !== 'undefined') {\n audioEndFn(audioTimingInfo.end);\n }\n },\n onVideoTimingInfo: videoTimingInfo => {\n // we only want the first start value we encounter\n if (videoStartFn && typeof videoTimingInfo.start !== 'undefined') {\n videoStartFn(videoTimingInfo.start);\n videoStartFn = null;\n } // we want to continually update the end time\n\n if (videoEndFn && typeof videoTimingInfo.end !== 'undefined') {\n videoEndFn(videoTimingInfo.end);\n }\n },\n onVideoSegmentTimingInfo: videoSegmentTimingInfo => {\n videoSegmentTimingInfoFn(videoSegmentTimingInfo);\n },\n onAudioSegmentTimingInfo: audioSegmentTimingInfo => {\n audioSegmentTimingInfoFn(audioSegmentTimingInfo);\n },\n onId3: (id3Frames, dispatchType) => {\n id3Fn(segment, id3Frames, dispatchType);\n },\n onCaptions: captions => {\n captionsFn(segment, [captions]);\n },\n isEndOfTimeline,\n onEndedTimeline: () => {\n endedTimelineFn();\n },\n onTransmuxerLog,\n onDone: result => {\n if (!doneFn) {\n return;\n }\n result.type = result.type === 'combined' ? 'video' : result.type;\n doneFn(null, segment, result);\n }\n }); // In the transmuxer, we don't yet have the ability to extract a \"proper\" start time.\n // Meaning cached frame data may corrupt our notion of where this segment\n // really starts. To get around this, probe for the info needed.\n\n workerCallback({\n action: 'probeTs',\n transmuxer: segment.transmuxer,\n data: bytes,\n baseStartTime: segment.baseStartTime,\n callback: data => {\n segment.bytes = bytes = data.data;\n const probeResult = data.result;\n if (probeResult) {\n trackInfoFn(segment, {\n hasAudio: probeResult.hasAudio,\n hasVideo: probeResult.hasVideo,\n isMuxed\n });\n trackInfoFn = null;\n }\n finish();\n }\n });\n};\nconst handleSegmentBytes = ({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n let bytesAsUint8Array = new Uint8Array(bytes); // TODO:\n // We should have a handler that fetches the number of bytes required\n // to check if something is fmp4. This will allow us to save bandwidth\n // because we can only exclude a playlist and abort requests\n // by codec after trackinfo triggers.\n\n if (isLikelyFmp4MediaSegment(bytesAsUint8Array)) {\n segment.isFmp4 = true;\n const {\n tracks\n } = segment.map;\n const trackInfo = {\n isFmp4: true,\n hasVideo: !!tracks.video,\n hasAudio: !!tracks.audio\n }; // if we have a audio track, with a codec that is not set to\n // encrypted audio\n\n if (tracks.audio && tracks.audio.codec && tracks.audio.codec !== 'enca') {\n trackInfo.audioCodec = tracks.audio.codec;\n } // if we have a video track, with a codec that is not set to\n // encrypted video\n\n if (tracks.video && tracks.video.codec && tracks.video.codec !== 'encv') {\n trackInfo.videoCodec = tracks.video.codec;\n }\n if (tracks.video && tracks.audio) {\n trackInfo.isMuxed = true;\n } // since we don't support appending fmp4 data on progress, we know we have the full\n // segment here\n\n trackInfoFn(segment, trackInfo); // The probe doesn't provide the segment end time, so only callback with the start\n // time. The end time can be roughly calculated by the receiver using the duration.\n //\n // Note that the start time returned by the probe reflects the baseMediaDecodeTime, as\n // that is the true start of the segment (where the playback engine should begin\n // decoding).\n\n const finishLoading = (captions, id3Frames) => {\n // if the track still has audio at this point it is only possible\n // for it to be audio only. See `tracks.video && tracks.audio` if statement\n // above.\n // we make sure to use segment.bytes here as that\n dataFn(segment, {\n data: bytesAsUint8Array,\n type: trackInfo.hasAudio && !trackInfo.isMuxed ? 'audio' : 'video'\n });\n if (id3Frames && id3Frames.length) {\n id3Fn(segment, id3Frames);\n }\n if (captions && captions.length) {\n captionsFn(segment, captions);\n }\n doneFn(null, segment, {});\n };\n workerCallback({\n action: 'probeMp4StartTime',\n timescales: segment.map.timescales,\n data: bytesAsUint8Array,\n transmuxer: segment.transmuxer,\n callback: ({\n data,\n startTime\n }) => {\n // transfer bytes back to us\n bytes = data.buffer;\n segment.bytes = bytesAsUint8Array = data;\n if (trackInfo.hasAudio && !trackInfo.isMuxed) {\n timingInfoFn(segment, 'audio', 'start', startTime);\n }\n if (trackInfo.hasVideo) {\n timingInfoFn(segment, 'video', 'start', startTime);\n }\n workerCallback({\n action: 'probeEmsgID3',\n data: bytesAsUint8Array,\n transmuxer: segment.transmuxer,\n offset: startTime,\n callback: ({\n emsgData,\n id3Frames\n }) => {\n // transfer bytes back to us\n bytes = emsgData.buffer;\n segment.bytes = bytesAsUint8Array = emsgData; // Run through the CaptionParser in case there are captions.\n // Initialize CaptionParser if it hasn't been yet\n\n if (!tracks.video || !emsgData.byteLength || !segment.transmuxer) {\n finishLoading(undefined, id3Frames);\n return;\n }\n workerCallback({\n action: 'pushMp4Captions',\n endAction: 'mp4Captions',\n transmuxer: segment.transmuxer,\n data: bytesAsUint8Array,\n timescales: segment.map.timescales,\n trackIds: [tracks.video.id],\n callback: message => {\n // transfer bytes back to us\n bytes = message.data.buffer;\n segment.bytes = bytesAsUint8Array = message.data;\n message.logs.forEach(function (log) {\n onTransmuxerLog(merge(log, {\n stream: 'mp4CaptionParser'\n }));\n });\n finishLoading(message.captions, id3Frames);\n }\n });\n }\n });\n }\n });\n return;\n } // VTT or other segments that don't need processing\n\n if (!segment.transmuxer) {\n doneFn(null, segment, {});\n return;\n }\n if (typeof segment.container === 'undefined') {\n segment.container = detectContainerForBytes(bytesAsUint8Array);\n }\n if (segment.container !== 'ts' && segment.container !== 'aac') {\n trackInfoFn(segment, {\n hasAudio: false,\n hasVideo: false\n });\n doneFn(null, segment, {});\n return;\n } // ts or aac\n\n transmuxAndNotify({\n segment,\n bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n};\nconst decrypt = function ({\n id,\n key,\n encryptedBytes,\n decryptionWorker\n}, callback) {\n const decryptionHandler = event => {\n if (event.data.source === id) {\n decryptionWorker.removeEventListener('message', decryptionHandler);\n const decrypted = event.data.decrypted;\n callback(new Uint8Array(decrypted.bytes, decrypted.byteOffset, decrypted.byteLength));\n }\n };\n decryptionWorker.addEventListener('message', decryptionHandler);\n let keyBytes;\n if (key.bytes.slice) {\n keyBytes = key.bytes.slice();\n } else {\n keyBytes = new Uint32Array(Array.prototype.slice.call(key.bytes));\n } // incrementally decrypt the bytes\n\n decryptionWorker.postMessage(createTransferableMessage({\n source: id,\n encrypted: encryptedBytes,\n key: keyBytes,\n iv: key.iv\n }), [encryptedBytes.buffer, keyBytes.buffer]);\n};\n/**\n * Decrypt the segment via the decryption web worker\n *\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 decryption\n * routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Function} doneFn - a callback that is executed after decryption has completed\n */\n\nconst decryptSegment = ({\n decryptionWorker,\n segment,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n decrypt({\n id: segment.requestId,\n key: segment.key,\n encryptedBytes: segment.encryptedBytes,\n decryptionWorker\n }, decryptedBytes => {\n segment.bytes = decryptedBytes;\n handleSegmentBytes({\n segment,\n bytes: segment.bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n });\n};\n/**\n * This function waits for all XHRs to finish (with either success or failure)\n * before continueing processing via it's callback. The function gathers errors\n * from each request into a single errors array so that the error status for\n * each request can be examined later.\n *\n * @param {Object} activeXhrs - an object that tracks all XHR requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128 decryption\n * routines\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} id3Fn - a callback that receives ID3 metadata\n * @param {Function} captionsFn - a callback that receives captions\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Function} doneFn - a callback that is executed after all resources have been\n * downloaded and any decryption completed\n */\n\nconst waitForCompletion = ({\n activeXhrs,\n decryptionWorker,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n let count = 0;\n let didError = false;\n return (error, segment) => {\n if (didError) {\n return;\n }\n if (error) {\n didError = true; // If there are errors, we have to abort any outstanding requests\n\n abortAll(activeXhrs); // Even though the requests above are aborted, and in theory we could wait until we\n // handle the aborted events from those requests, there are some cases where we may\n // never get an aborted event. For instance, if the network connection is lost and\n // there were two requests, the first may have triggered an error immediately, while\n // the second request remains unsent. In that case, the aborted algorithm will not\n // trigger an abort: see https://xhr.spec.whatwg.org/#the-abort()-method\n //\n // We also can't rely on the ready state of the XHR, since the request that\n // triggered the connection error may also show as a ready state of 0 (unsent).\n // Therefore, we have to finish this group of requests immediately after the first\n // seen error.\n\n return doneFn(error, segment);\n }\n count += 1;\n if (count === activeXhrs.length) {\n const segmentFinish = function () {\n if (segment.encryptedBytes) {\n return decryptSegment({\n decryptionWorker,\n segment,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n } // Otherwise, everything is ready just continue\n\n handleSegmentBytes({\n segment,\n bytes: segment.bytes,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n });\n }; // Keep track of when *all* of the requests have completed\n\n segment.endOfAllRequests = Date.now();\n if (segment.map && segment.map.encryptedBytes && !segment.map.bytes) {\n return decrypt({\n decryptionWorker,\n // add -init to the \"id\" to differentiate between segment\n // and init segment decryption, just in case they happen\n // at the same time at some point in the future.\n id: segment.requestId + '-init',\n encryptedBytes: segment.map.encryptedBytes,\n key: segment.map.key\n }, decryptedBytes => {\n segment.map.bytes = decryptedBytes;\n parseInitSegment(segment, parseError => {\n if (parseError) {\n abortAll(activeXhrs);\n return doneFn(parseError, segment);\n }\n segmentFinish();\n });\n });\n }\n segmentFinish();\n }\n };\n};\n/**\n * Calls the abort callback if any request within the batch was aborted. Will only call\n * the callback once per batch of requests, even if multiple were aborted.\n *\n * @param {Object} loadendState - state to check to see if the abort function was called\n * @param {Function} abortFn - callback to call for abort\n */\n\nconst handleLoadEnd = ({\n loadendState,\n abortFn\n}) => event => {\n const request = event.target;\n if (request.aborted && abortFn && !loadendState.calledAbortFn) {\n abortFn();\n loadendState.calledAbortFn = true;\n }\n};\n/**\n * Simple progress event callback handler that gathers some stats before\n * executing a provided callback with the `segment` object\n *\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} progressFn - a callback that is executed each time a progress event\n * is received\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that is executed when segment bytes are available\n * and ready to use\n * @param {Event} event - the progress event object from XMLHttpRequest\n */\n\nconst handleProgress = ({\n segment,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn\n}) => event => {\n const request = event.target;\n if (request.aborted) {\n return;\n }\n segment.stats = merge(segment.stats, getProgressStats(event)); // record the time that we receive the first byte of data\n\n if (!segment.stats.firstBytesReceivedAt && segment.stats.bytesReceived) {\n segment.stats.firstBytesReceivedAt = Date.now();\n }\n return progressFn(event, segment);\n};\n/**\n * Load all resources and does any processing necessary for a media-segment\n *\n * Features:\n * decrypts the media-segment if it has a key uri and an iv\n * aborts *all* requests if *any* one request fails\n *\n * The segment object, at minimum, has the following format:\n * {\n * resolvedUri: String,\n * [transmuxer]: Object,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [key]: {\n * resolvedUri: String\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * iv: {\n * bytes: Uint32Array\n * }\n * },\n * [map]: {\n * resolvedUri: String,\n * [byterange]: {\n * offset: Number,\n * length: Number\n * },\n * [bytes]: Uint8Array\n * }\n * }\n * ...where [name] denotes optional properties\n *\n * @param {Function} xhr - an instance of the xhr wrapper in xhr.js\n * @param {Object} xhrOptions - the base options to provide to all xhr requests\n * @param {WebWorker} decryptionWorker - a WebWorker interface to AES-128\n * decryption routines\n * @param {Object} segment - a simplified copy of the segmentInfo object\n * from SegmentLoader\n * @param {Function} abortFn - a callback called (only once) if any piece of a request was\n * aborted\n * @param {Function} progressFn - a callback that receives progress events from the main\n * segment's xhr request\n * @param {Function} trackInfoFn - a callback that receives track info\n * @param {Function} timingInfoFn - a callback that receives timing info\n * @param {Function} videoSegmentTimingInfoFn\n * a callback that receives video timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} audioSegmentTimingInfoFn\n * a callback that receives audio timing info based on media times and\n * any adjustments made by the transmuxer\n * @param {Function} id3Fn - a callback that receives ID3 metadata\n * @param {Function} captionsFn - a callback that receives captions\n * @param {boolean} isEndOfTimeline\n * true if this segment represents the last segment in a timeline\n * @param {Function} endedTimelineFn\n * a callback made when a timeline is ended, will only be called if\n * isEndOfTimeline is true\n * @param {Function} dataFn - a callback that receives data from the main segment's xhr\n * request, transmuxed if needed\n * @param {Function} doneFn - a callback that is executed only once all requests have\n * succeeded or failed\n * @return {Function} a function that, when invoked, immediately aborts all\n * outstanding requests\n */\n\nconst mediaSegmentRequest = ({\n xhr,\n xhrOptions,\n decryptionWorker,\n segment,\n abortFn,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n}) => {\n const activeXhrs = [];\n const finishProcessingFn = waitForCompletion({\n activeXhrs,\n decryptionWorker,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn,\n doneFn,\n onTransmuxerLog\n }); // optionally, request the decryption key\n\n if (segment.key && !segment.key.bytes) {\n const objects = [segment.key];\n if (segment.map && !segment.map.bytes && segment.map.key && segment.map.key.resolvedUri === segment.key.resolvedUri) {\n objects.push(segment.map.key);\n }\n const keyRequestOptions = merge(xhrOptions, {\n uri: segment.key.resolvedUri,\n responseType: 'arraybuffer'\n });\n const keyRequestCallback = handleKeyResponse(segment, objects, finishProcessingFn);\n const keyXhr = xhr(keyRequestOptions, keyRequestCallback);\n activeXhrs.push(keyXhr);\n } // optionally, request the associated media init segment\n\n if (segment.map && !segment.map.bytes) {\n const differentMapKey = segment.map.key && (!segment.key || segment.key.resolvedUri !== segment.map.key.resolvedUri);\n if (differentMapKey) {\n const mapKeyRequestOptions = merge(xhrOptions, {\n uri: segment.map.key.resolvedUri,\n responseType: 'arraybuffer'\n });\n const mapKeyRequestCallback = handleKeyResponse(segment, [segment.map.key], finishProcessingFn);\n const mapKeyXhr = xhr(mapKeyRequestOptions, mapKeyRequestCallback);\n activeXhrs.push(mapKeyXhr);\n }\n const initSegmentOptions = merge(xhrOptions, {\n uri: segment.map.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment.map)\n });\n const initSegmentRequestCallback = handleInitSegmentResponse({\n segment,\n finishProcessingFn\n });\n const initSegmentXhr = xhr(initSegmentOptions, initSegmentRequestCallback);\n activeXhrs.push(initSegmentXhr);\n }\n const segmentRequestOptions = merge(xhrOptions, {\n uri: segment.part && segment.part.resolvedUri || segment.resolvedUri,\n responseType: 'arraybuffer',\n headers: segmentXhrHeaders(segment)\n });\n const segmentRequestCallback = handleSegmentResponse({\n segment,\n finishProcessingFn,\n responseType: segmentRequestOptions.responseType\n });\n const segmentXhr = xhr(segmentRequestOptions, segmentRequestCallback);\n segmentXhr.addEventListener('progress', handleProgress({\n segment,\n progressFn,\n trackInfoFn,\n timingInfoFn,\n videoSegmentTimingInfoFn,\n audioSegmentTimingInfoFn,\n id3Fn,\n captionsFn,\n isEndOfTimeline,\n endedTimelineFn,\n dataFn\n }));\n activeXhrs.push(segmentXhr); // since all parts of the request must be considered, but should not make callbacks\n // multiple times, provide a shared state object\n\n const loadendState = {};\n activeXhrs.forEach(activeXhr => {\n activeXhr.addEventListener('loadend', handleLoadEnd({\n loadendState,\n abortFn\n }));\n });\n return () => abortAll(activeXhrs);\n};\n\n/**\n * @file - codecs.js - Handles tasks regarding codec strings such as translating them to\n * codec strings, or translating codec strings into objects that can be examined.\n */\nconst logFn$1 = logger('CodecUtils');\n/**\n * Returns a set of codec strings parsed from the playlist or the default\n * codec strings if no codecs were specified in the playlist\n *\n * @param {Playlist} media the current media playlist\n * @return {Object} an object with the video and audio codecs\n */\n\nconst getCodecs = function (media) {\n // if the codecs were explicitly specified, use them instead of the\n // defaults\n const mediaAttributes = media.attributes || {};\n if (mediaAttributes.CODECS) {\n return parseCodecs(mediaAttributes.CODECS);\n }\n};\nconst isMaat = (main, media) => {\n const mediaAttributes = media.attributes || {};\n return main && main.mediaGroups && main.mediaGroups.AUDIO && mediaAttributes.AUDIO && main.mediaGroups.AUDIO[mediaAttributes.AUDIO];\n};\nconst isMuxed = (main, media) => {\n if (!isMaat(main, media)) {\n return true;\n }\n const mediaAttributes = media.attributes || {};\n const audioGroup = main.mediaGroups.AUDIO[mediaAttributes.AUDIO];\n for (const groupId in audioGroup) {\n // If an audio group has a URI (the case for HLS, as HLS will use external playlists),\n // or there are listed playlists (the case for DASH, as the manifest will have already\n // provided all of the details necessary to generate the audio playlist, as opposed to\n // HLS' externally requested playlists), then the content is demuxed.\n if (!audioGroup[groupId].uri && !audioGroup[groupId].playlists) {\n return true;\n }\n }\n return false;\n};\nconst unwrapCodecList = function (codecList) {\n const codecs = {};\n codecList.forEach(({\n mediaType,\n type,\n details\n }) => {\n codecs[mediaType] = codecs[mediaType] || [];\n codecs[mediaType].push(translateLegacyCodec(`${type}${details}`));\n });\n Object.keys(codecs).forEach(function (mediaType) {\n if (codecs[mediaType].length > 1) {\n logFn$1(`multiple ${mediaType} codecs found as attributes: ${codecs[mediaType].join(', ')}. Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs.`);\n codecs[mediaType] = null;\n return;\n }\n codecs[mediaType] = codecs[mediaType][0];\n });\n return codecs;\n};\nconst codecCount = function (codecObj) {\n let count = 0;\n if (codecObj.audio) {\n count++;\n }\n if (codecObj.video) {\n count++;\n }\n return count;\n};\n/**\n * Calculates the codec strings for a working configuration of\n * SourceBuffers to play variant streams in a main playlist. If\n * there is no possible working configuration, an empty object will be\n * returned.\n *\n * @param main {Object} the m3u8 object for the main playlist\n * @param media {Object} the m3u8 object for the variant playlist\n * @return {Object} the codec strings.\n *\n * @private\n */\n\nconst codecsForPlaylist = function (main, media) {\n const mediaAttributes = media.attributes || {};\n const codecInfo = unwrapCodecList(getCodecs(media) || []); // HLS with multiple-audio tracks must always get an audio codec.\n // Put another way, there is no way to have a video-only multiple-audio HLS!\n\n if (isMaat(main, media) && !codecInfo.audio) {\n if (!isMuxed(main, media)) {\n // It is possible for codecs to be specified on the audio media group playlist but\n // not on the rendition playlist. This is mostly the case for DASH, where audio and\n // video are always separate (and separately specified).\n const defaultCodecs = unwrapCodecList(codecsFromDefault(main, mediaAttributes.AUDIO) || []);\n if (defaultCodecs.audio) {\n codecInfo.audio = defaultCodecs.audio;\n }\n }\n }\n return codecInfo;\n};\nconst logFn = logger('PlaylistSelector');\nconst representationToString = function (representation) {\n if (!representation || !representation.playlist) {\n return;\n }\n const playlist = representation.playlist;\n return JSON.stringify({\n id: playlist.id,\n bandwidth: representation.bandwidth,\n width: representation.width,\n height: representation.height,\n codecs: playlist.attributes && playlist.attributes.CODECS || ''\n });\n}; // Utilities\n\n/**\n * Returns the CSS value for the specified property on an element\n * using `getComputedStyle`. Firefox has a long-standing issue where\n * getComputedStyle() may return null when running in an iframe with\n * `display: none`.\n *\n * @see https://bugzilla.mozilla.org/show_bug.cgi?id=548397\n * @param {HTMLElement} el the htmlelement to work on\n * @param {string} the proprety to get the style for\n */\n\nconst safeGetComputedStyle = function (el, property) {\n if (!el) {\n return '';\n }\n const result = window$1.getComputedStyle(el);\n if (!result) {\n return '';\n }\n return result[property];\n};\n/**\n * Resuable stable sort function\n *\n * @param {Playlists} array\n * @param {Function} sortFn Different comparators\n * @function stableSort\n */\n\nconst stableSort = function (array, sortFn) {\n const newArray = array.slice();\n array.sort(function (left, right) {\n const cmp = sortFn(left, right);\n if (cmp === 0) {\n return newArray.indexOf(left) - newArray.indexOf(right);\n }\n return cmp;\n });\n};\n/**\n * A comparator function to sort two playlist object by bandwidth.\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {number} Greater than zero if the bandwidth attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the bandwidth of right is greater than left and\n * exactly zero if the two are equal.\n */\n\nconst comparePlaylistBandwidth = function (left, right) {\n let leftBandwidth;\n let rightBandwidth;\n if (left.attributes.BANDWIDTH) {\n leftBandwidth = left.attributes.BANDWIDTH;\n }\n leftBandwidth = leftBandwidth || window$1.Number.MAX_VALUE;\n if (right.attributes.BANDWIDTH) {\n rightBandwidth = right.attributes.BANDWIDTH;\n }\n rightBandwidth = rightBandwidth || window$1.Number.MAX_VALUE;\n return leftBandwidth - rightBandwidth;\n};\n/**\n * A comparator function to sort two playlist object by resolution (width).\n *\n * @param {Object} left a media playlist object\n * @param {Object} right a media playlist object\n * @return {number} Greater than zero if the resolution.width attribute of\n * left is greater than the corresponding attribute of right. Less\n * than zero if the resolution.width of right is greater than left and\n * exactly zero if the two are equal.\n */\n\nconst comparePlaylistResolution = function (left, right) {\n let leftWidth;\n let rightWidth;\n if (left.attributes.RESOLUTION && left.attributes.RESOLUTION.width) {\n leftWidth = left.attributes.RESOLUTION.width;\n }\n leftWidth = leftWidth || window$1.Number.MAX_VALUE;\n if (right.attributes.RESOLUTION && right.attributes.RESOLUTION.width) {\n rightWidth = right.attributes.RESOLUTION.width;\n }\n rightWidth = rightWidth || window$1.Number.MAX_VALUE; // NOTE - Fallback to bandwidth sort as appropriate in cases where multiple renditions\n // have the same media dimensions/ resolution\n\n if (leftWidth === rightWidth && left.attributes.BANDWIDTH && right.attributes.BANDWIDTH) {\n return left.attributes.BANDWIDTH - right.attributes.BANDWIDTH;\n }\n return leftWidth - rightWidth;\n};\n/**\n * Chooses the appropriate media playlist based on bandwidth and player size\n *\n * @param {Object} main\n * Object representation of the main manifest\n * @param {number} playerBandwidth\n * Current calculated bandwidth of the player\n * @param {number} playerWidth\n * Current width of the player element (should account for the device pixel ratio)\n * @param {number} playerHeight\n * Current height of the player element (should account for the device pixel ratio)\n * @param {boolean} limitRenditionByPlayerDimensions\n * True if the player width and height should be used during the selection, false otherwise\n * @param {Object} playlistController\n * the current playlistController object\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\n\nlet simpleSelector = function (main, playerBandwidth, playerWidth, playerHeight, limitRenditionByPlayerDimensions, playlistController) {\n // If we end up getting called before `main` is available, exit early\n if (!main) {\n return;\n }\n const options = {\n bandwidth: playerBandwidth,\n width: playerWidth,\n height: playerHeight,\n limitRenditionByPlayerDimensions\n };\n let playlists = main.playlists; // if playlist is audio only, select between currently active audio group playlists.\n\n if (Playlist.isAudioOnly(main)) {\n playlists = playlistController.getAudioTrackPlaylists_(); // add audioOnly to options so that we log audioOnly: true\n // at the buttom of this function for debugging.\n\n options.audioOnly = true;\n } // convert the playlists to an intermediary representation to make comparisons easier\n\n let sortedPlaylistReps = playlists.map(playlist => {\n let bandwidth;\n const width = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.width;\n const height = playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height;\n bandwidth = playlist.attributes && playlist.attributes.BANDWIDTH;\n bandwidth = bandwidth || window$1.Number.MAX_VALUE;\n return {\n bandwidth,\n width,\n height,\n playlist\n };\n });\n stableSort(sortedPlaylistReps, (left, right) => left.bandwidth - right.bandwidth); // filter out any playlists that have been excluded due to\n // incompatible configurations\n\n sortedPlaylistReps = sortedPlaylistReps.filter(rep => !Playlist.isIncompatible(rep.playlist)); // filter out any playlists that have been disabled manually through the representations\n // api or excluded temporarily due to playback errors.\n\n let enabledPlaylistReps = sortedPlaylistReps.filter(rep => Playlist.isEnabled(rep.playlist));\n if (!enabledPlaylistReps.length) {\n // if there are no enabled playlists, then they have all been excluded or disabled\n // by the user through the representations api. In this case, ignore exclusion and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylistReps = sortedPlaylistReps.filter(rep => !Playlist.isDisabled(rep.playlist));\n } // filter out any variant that has greater effective bitrate\n // than the current estimated bandwidth\n\n const bandwidthPlaylistReps = enabledPlaylistReps.filter(rep => rep.bandwidth * Config.BANDWIDTH_VARIANCE < playerBandwidth);\n let highestRemainingBandwidthRep = bandwidthPlaylistReps[bandwidthPlaylistReps.length - 1]; // get all of the renditions with the same (highest) bandwidth\n // and then taking the very first element\n\n const bandwidthBestRep = bandwidthPlaylistReps.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0]; // if we're not going to limit renditions by player size, make an early decision.\n\n if (limitRenditionByPlayerDimensions === false) {\n const chosenRep = bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n if (chosenRep && chosenRep.playlist) {\n let type = 'sortedPlaylistReps';\n if (bandwidthBestRep) {\n type = 'bandwidthBestRep';\n }\n if (enabledPlaylistReps[0]) {\n type = 'enabledPlaylistReps';\n }\n logFn(`choosing ${representationToString(chosenRep)} using ${type} with options`, options);\n return chosenRep.playlist;\n }\n logFn('could not choose a playlist with options', options);\n return null;\n } // filter out playlists without resolution information\n\n const haveResolution = bandwidthPlaylistReps.filter(rep => rep.width && rep.height); // sort variants by resolution\n\n stableSort(haveResolution, (left, right) => left.width - right.width); // if we have the exact resolution as the player use it\n\n const resolutionBestRepList = haveResolution.filter(rep => rep.width === playerWidth && rep.height === playerHeight);\n highestRemainingBandwidthRep = resolutionBestRepList[resolutionBestRepList.length - 1]; // ensure that we pick the highest bandwidth variant that have exact resolution\n\n const resolutionBestRep = resolutionBestRepList.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0];\n let resolutionPlusOneList;\n let resolutionPlusOneSmallest;\n let resolutionPlusOneRep; // find the smallest variant that is larger than the player\n // if there is no match of exact resolution\n\n if (!resolutionBestRep) {\n resolutionPlusOneList = haveResolution.filter(rep => rep.width > playerWidth || rep.height > playerHeight); // find all the variants have the same smallest resolution\n\n resolutionPlusOneSmallest = resolutionPlusOneList.filter(rep => rep.width === resolutionPlusOneList[0].width && rep.height === resolutionPlusOneList[0].height); // ensure that we also pick the highest bandwidth variant that\n // is just-larger-than the video player\n\n highestRemainingBandwidthRep = resolutionPlusOneSmallest[resolutionPlusOneSmallest.length - 1];\n resolutionPlusOneRep = resolutionPlusOneSmallest.filter(rep => rep.bandwidth === highestRemainingBandwidthRep.bandwidth)[0];\n }\n let leastPixelDiffRep; // If this selector proves to be better than others,\n // resolutionPlusOneRep and resolutionBestRep and all\n // the code involving them should be removed.\n\n if (playlistController.leastPixelDiffSelector) {\n // find the variant that is closest to the player's pixel size\n const leastPixelDiffList = haveResolution.map(rep => {\n rep.pixelDiff = Math.abs(rep.width - playerWidth) + Math.abs(rep.height - playerHeight);\n return rep;\n }); // get the highest bandwidth, closest resolution playlist\n\n stableSort(leastPixelDiffList, (left, right) => {\n // sort by highest bandwidth if pixelDiff is the same\n if (left.pixelDiff === right.pixelDiff) {\n return right.bandwidth - left.bandwidth;\n }\n return left.pixelDiff - right.pixelDiff;\n });\n leastPixelDiffRep = leastPixelDiffList[0];\n } // fallback chain of variants\n\n const chosenRep = leastPixelDiffRep || resolutionPlusOneRep || resolutionBestRep || bandwidthBestRep || enabledPlaylistReps[0] || sortedPlaylistReps[0];\n if (chosenRep && chosenRep.playlist) {\n let type = 'sortedPlaylistReps';\n if (leastPixelDiffRep) {\n type = 'leastPixelDiffRep';\n } else if (resolutionPlusOneRep) {\n type = 'resolutionPlusOneRep';\n } else if (resolutionBestRep) {\n type = 'resolutionBestRep';\n } else if (bandwidthBestRep) {\n type = 'bandwidthBestRep';\n } else if (enabledPlaylistReps[0]) {\n type = 'enabledPlaylistReps';\n }\n logFn(`choosing ${representationToString(chosenRep)} using ${type} with options`, options);\n return chosenRep.playlist;\n }\n logFn('could not choose a playlist with options', options);\n return null;\n};\n\n/**\n * Chooses the appropriate media playlist based on the most recent\n * bandwidth estimate and the player size.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @return {Playlist} the highest bitrate playlist less than the\n * currently detected bandwidth, accounting for some amount of\n * bandwidth variance\n */\n\nconst lastBandwidthSelector = function () {\n const pixelRatio = this.useDevicePixelRatio ? window$1.devicePixelRatio || 1 : 1;\n return simpleSelector(this.playlists.main, this.systemBandwidth, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_);\n};\n/**\n * Chooses the appropriate media playlist based on an\n * exponential-weighted moving average of the bandwidth after\n * filtering for player size.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @param {number} decay - a number between 0 and 1. Higher values of\n * this parameter will cause previous bandwidth estimates to lose\n * significance more quickly.\n * @return {Function} a function which can be invoked to create a new\n * playlist selector function.\n * @see https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n */\n\nconst movingAverageBandwidthSelector = function (decay) {\n let average = -1;\n let lastSystemBandwidth = -1;\n if (decay < 0 || decay > 1) {\n throw new Error('Moving average bandwidth decay must be between 0 and 1.');\n }\n return function () {\n const pixelRatio = this.useDevicePixelRatio ? window$1.devicePixelRatio || 1 : 1;\n if (average < 0) {\n average = this.systemBandwidth;\n lastSystemBandwidth = this.systemBandwidth;\n } // stop the average value from decaying for every 250ms\n // when the systemBandwidth is constant\n // and\n // stop average from setting to a very low value when the\n // systemBandwidth becomes 0 in case of chunk cancellation\n\n if (this.systemBandwidth > 0 && this.systemBandwidth !== lastSystemBandwidth) {\n average = decay * this.systemBandwidth + (1 - decay) * average;\n lastSystemBandwidth = this.systemBandwidth;\n }\n return simpleSelector(this.playlists.main, average, parseInt(safeGetComputedStyle(this.tech_.el(), 'width'), 10) * pixelRatio, parseInt(safeGetComputedStyle(this.tech_.el(), 'height'), 10) * pixelRatio, this.limitRenditionByPlayerDimensions, this.playlistController_);\n };\n};\n/**\n * Chooses the appropriate media playlist based on the potential to rebuffer\n *\n * @param {Object} settings\n * Object of information required to use this selector\n * @param {Object} settings.main\n * Object representation of the main manifest\n * @param {number} settings.currentTime\n * The current time of the player\n * @param {number} settings.bandwidth\n * Current measured bandwidth\n * @param {number} settings.duration\n * Duration of the media\n * @param {number} settings.segmentDuration\n * Segment duration to be used in round trip time calculations\n * @param {number} settings.timeUntilRebuffer\n * Time left in seconds until the player has to rebuffer\n * @param {number} settings.currentTimeline\n * The current timeline segments are being loaded from\n * @param {SyncController} settings.syncController\n * SyncController for determining if we have a sync point for a given playlist\n * @return {Object|null}\n * {Object} return.playlist\n * The highest bandwidth playlist with the least amount of rebuffering\n * {Number} return.rebufferingImpact\n * The amount of time in seconds switching to this playlist will rebuffer. A\n * negative value means that switching will cause zero rebuffering.\n */\n\nconst minRebufferMaxBandwidthSelector = function (settings) {\n const {\n main,\n currentTime,\n bandwidth,\n duration,\n segmentDuration,\n timeUntilRebuffer,\n currentTimeline,\n syncController\n } = settings; // filter out any playlists that have been excluded due to\n // incompatible configurations\n\n const compatiblePlaylists = main.playlists.filter(playlist => !Playlist.isIncompatible(playlist)); // filter out any playlists that have been disabled manually through the representations\n // api or excluded temporarily due to playback errors.\n\n let enabledPlaylists = compatiblePlaylists.filter(Playlist.isEnabled);\n if (!enabledPlaylists.length) {\n // if there are no enabled playlists, then they have all been excluded or disabled\n // by the user through the representations api. In this case, ignore exclusion and\n // fallback to what the user wants by using playlists the user has not disabled.\n enabledPlaylists = compatiblePlaylists.filter(playlist => !Playlist.isDisabled(playlist));\n }\n const bandwidthPlaylists = enabledPlaylists.filter(Playlist.hasAttribute.bind(null, 'BANDWIDTH'));\n const rebufferingEstimates = bandwidthPlaylists.map(playlist => {\n const syncPoint = syncController.getSyncPoint(playlist, duration, currentTimeline, currentTime); // If there is no sync point for this playlist, switching to it will require a\n // sync request first. This will double the request time\n\n const numRequests = syncPoint ? 1 : 2;\n const requestTimeEstimate = Playlist.estimateSegmentRequestTime(segmentDuration, bandwidth, playlist);\n const rebufferingImpact = requestTimeEstimate * numRequests - timeUntilRebuffer;\n return {\n playlist,\n rebufferingImpact\n };\n });\n const noRebufferingPlaylists = rebufferingEstimates.filter(estimate => estimate.rebufferingImpact <= 0); // Sort by bandwidth DESC\n\n stableSort(noRebufferingPlaylists, (a, b) => comparePlaylistBandwidth(b.playlist, a.playlist));\n if (noRebufferingPlaylists.length) {\n return noRebufferingPlaylists[0];\n }\n stableSort(rebufferingEstimates, (a, b) => a.rebufferingImpact - b.rebufferingImpact);\n return rebufferingEstimates[0] || null;\n};\n/**\n * Chooses the appropriate media playlist, which in this case is the lowest bitrate\n * one with video. If no renditions with video exist, return the lowest audio rendition.\n *\n * Expects to be called within the context of an instance of VhsHandler\n *\n * @return {Object|null}\n * {Object} return.playlist\n * The lowest bitrate playlist that contains a video codec. If no such rendition\n * exists pick the lowest audio rendition.\n */\n\nconst lowestBitrateCompatibleVariantSelector = function () {\n // filter out any playlists that have been excluded due to\n // incompatible configurations or playback errors\n const playlists = this.playlists.main.playlists.filter(Playlist.isEnabled); // Sort ascending by bitrate\n\n stableSort(playlists, (a, b) => comparePlaylistBandwidth(a, b)); // Parse and assume that playlists with no video codec have no video\n // (this is not necessarily true, although it is generally true).\n //\n // If an entire manifest has no valid videos everything will get filtered\n // out.\n\n const playlistsWithVideo = playlists.filter(playlist => !!codecsForPlaylist(this.playlists.main, playlist).video);\n return playlistsWithVideo[0] || null;\n};\n\n/**\n * Combine all segments into a single Uint8Array\n *\n * @param {Object} segmentObj\n * @return {Uint8Array} concatenated bytes\n * @private\n */\nconst concatSegments = segmentObj => {\n let offset = 0;\n let tempBuffer;\n if (segmentObj.bytes) {\n tempBuffer = new Uint8Array(segmentObj.bytes); // combine the individual segments into one large typed-array\n\n segmentObj.segments.forEach(segment => {\n tempBuffer.set(segment, offset);\n offset += segment.byteLength;\n });\n }\n return tempBuffer;\n};\n\n/**\n * @file text-tracks.js\n */\n/**\n * Create captions text tracks on video.js if they do not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {Object} tech the video.js tech\n * @param {Object} captionStream the caption stream to create\n * @private\n */\n\nconst createCaptionsTrackIfNotExists = function (inbandTextTracks, tech, captionStream) {\n if (!inbandTextTracks[captionStream]) {\n tech.trigger({\n type: 'usage',\n name: 'vhs-608'\n });\n let instreamId = captionStream; // we need to translate SERVICEn for 708 to how mux.js currently labels them\n\n if (/^cc708_/.test(captionStream)) {\n instreamId = 'SERVICE' + captionStream.split('_')[1];\n }\n const track = tech.textTracks().getTrackById(instreamId);\n if (track) {\n // Resuse an existing track with a CC# id because this was\n // very likely created by videojs-contrib-hls from information\n // in the m3u8 for us to use\n inbandTextTracks[captionStream] = track;\n } else {\n // This section gets called when we have caption services that aren't specified in the manifest.\n // Manifest level caption services are handled in media-groups.js under CLOSED-CAPTIONS.\n const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {};\n let label = captionStream;\n let language = captionStream;\n let def = false;\n const captionService = captionServices[instreamId];\n if (captionService) {\n label = captionService.label;\n language = captionService.language;\n def = captionService.default;\n } // Otherwise, create a track with the default `CC#` label and\n // without a language\n\n inbandTextTracks[captionStream] = tech.addRemoteTextTrack({\n kind: 'captions',\n id: instreamId,\n // TODO: investigate why this doesn't seem to turn the caption on by default\n default: def,\n label,\n language\n }, false).track;\n }\n }\n};\n/**\n * Add caption text track data to a source handler given an array of captions\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {number} timestampOffset the timestamp offset of the source buffer\n * @param {Array} captionArray an array of caption data\n * @private\n */\n\nconst addCaptionData = function ({\n inbandTextTracks,\n captionArray,\n timestampOffset\n}) {\n if (!captionArray) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n captionArray.forEach(caption => {\n const track = caption.stream; // in CEA 608 captions, video.js/mux.js sends a content array\n // with positioning data\n\n if (caption.content) {\n caption.content.forEach(value => {\n const cue = new Cue(caption.startTime + timestampOffset, caption.endTime + timestampOffset, value.text);\n cue.line = value.line;\n cue.align = 'left';\n cue.position = value.position;\n cue.positionAlign = 'line-left';\n inbandTextTracks[track].addCue(cue);\n });\n } else {\n // otherwise, a text value with combined captions is sent\n inbandTextTracks[track].addCue(new Cue(caption.startTime + timestampOffset, caption.endTime + timestampOffset, caption.text));\n }\n });\n};\n/**\n * Define properties on a cue for backwards compatability,\n * but warn the user that the way that they are using it\n * is depricated and will be removed at a later date.\n *\n * @param {Cue} cue the cue to add the properties on\n * @private\n */\n\nconst deprecateOldCue = function (cue) {\n Object.defineProperties(cue.frame, {\n id: {\n get() {\n videojs.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.');\n return cue.value.key;\n }\n },\n value: {\n get() {\n videojs.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n },\n privateData: {\n get() {\n videojs.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.');\n return cue.value.data;\n }\n }\n });\n};\n/**\n * Add metadata text track data to a source handler given an array of metadata\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {Array} metadataArray an array of meta data\n * @param {number} timestampOffset the timestamp offset of the source buffer\n * @param {number} videoDuration the duration of the video\n * @private\n */\n\nconst addMetadata = ({\n inbandTextTracks,\n metadataArray,\n timestampOffset,\n videoDuration\n}) => {\n if (!metadataArray) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n const metadataTrack = inbandTextTracks.metadataTrack_;\n if (!metadataTrack) {\n return;\n }\n metadataArray.forEach(metadata => {\n const time = metadata.cueTime + timestampOffset; // if time isn't a finite number between 0 and Infinity, like NaN,\n // ignore this bit of metadata.\n // This likely occurs when you have an non-timed ID3 tag like TIT2,\n // which is the \"Title/Songname/Content description\" frame\n\n if (typeof time !== 'number' || window$1.isNaN(time) || time < 0 || !(time < Infinity)) {\n return;\n } // If we have no frames, we can't create a cue.\n\n if (!metadata.frames || !metadata.frames.length) {\n return;\n }\n metadata.frames.forEach(frame => {\n const cue = new Cue(time, time, frame.value || frame.url || frame.data || '');\n cue.frame = frame;\n cue.value = frame;\n deprecateOldCue(cue);\n metadataTrack.addCue(cue);\n });\n });\n if (!metadataTrack.cues || !metadataTrack.cues.length) {\n return;\n } // Updating the metadeta cues so that\n // the endTime of each cue is the startTime of the next cue\n // the endTime of last cue is the duration of the video\n\n const cues = metadataTrack.cues;\n const cuesArray = []; // Create a copy of the TextTrackCueList...\n // ...disregarding cues with a falsey value\n\n for (let i = 0; i < cues.length; i++) {\n if (cues[i]) {\n cuesArray.push(cues[i]);\n }\n } // Group cues by their startTime value\n\n const cuesGroupedByStartTime = cuesArray.reduce((obj, cue) => {\n const timeSlot = obj[cue.startTime] || [];\n timeSlot.push(cue);\n obj[cue.startTime] = timeSlot;\n return obj;\n }, {}); // Sort startTimes by ascending order\n\n const sortedStartTimes = Object.keys(cuesGroupedByStartTime).sort((a, b) => Number(a) - Number(b)); // Map each cue group's endTime to the next group's startTime\n\n sortedStartTimes.forEach((startTime, idx) => {\n const cueGroup = cuesGroupedByStartTime[startTime];\n const finiteDuration = isFinite(videoDuration) ? videoDuration : startTime;\n const nextTime = Number(sortedStartTimes[idx + 1]) || finiteDuration; // Map each cue's endTime the next group's startTime\n\n cueGroup.forEach(cue => {\n cue.endTime = nextTime;\n });\n });\n}; // object for mapping daterange attributes\n\nconst dateRangeAttr = {\n id: 'ID',\n class: 'CLASS',\n startDate: 'START-DATE',\n duration: 'DURATION',\n endDate: 'END-DATE',\n endOnNext: 'END-ON-NEXT',\n plannedDuration: 'PLANNED-DURATION',\n scte35Out: 'SCTE35-OUT',\n scte35In: 'SCTE35-IN'\n};\nconst dateRangeKeysToOmit = new Set(['id', 'class', 'startDate', 'duration', 'endDate', 'endOnNext', 'startTime', 'endTime', 'processDateRange']);\n/**\n * Add DateRange metadata text track to a source handler given an array of metadata\n *\n * @param {Object}\n * @param {Object} inbandTextTracks the inband text tracks\n * @param {Array} dateRanges parsed media playlist\n * @private\n */\n\nconst addDateRangeMetadata = ({\n inbandTextTracks,\n dateRanges\n}) => {\n const metadataTrack = inbandTextTracks.metadataTrack_;\n if (!metadataTrack) {\n return;\n }\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n dateRanges.forEach(dateRange => {\n // we generate multiple cues for each date range with different attributes\n for (const key of Object.keys(dateRange)) {\n if (dateRangeKeysToOmit.has(key)) {\n continue;\n }\n const cue = new Cue(dateRange.startTime, dateRange.endTime, '');\n cue.id = dateRange.id;\n cue.type = 'com.apple.quicktime.HLS';\n cue.value = {\n key: dateRangeAttr[key],\n data: dateRange[key]\n };\n if (key === 'scte35Out' || key === 'scte35In') {\n cue.value.data = new Uint8Array(cue.value.data.match(/[\\da-f]{2}/gi)).buffer;\n }\n metadataTrack.addCue(cue);\n }\n dateRange.processDateRange();\n });\n};\n/**\n * Create metadata text track on video.js if it does not exist\n *\n * @param {Object} inbandTextTracks a reference to current inbandTextTracks\n * @param {string} dispatchType the inband metadata track dispatch type\n * @param {Object} tech the video.js tech\n * @private\n */\n\nconst createMetadataTrackIfNotExists = (inbandTextTracks, dispatchType, tech) => {\n if (inbandTextTracks.metadataTrack_) {\n return;\n }\n inbandTextTracks.metadataTrack_ = tech.addRemoteTextTrack({\n kind: 'metadata',\n label: 'Timed Metadata'\n }, false).track;\n if (!videojs.browser.IS_ANY_SAFARI) {\n inbandTextTracks.metadataTrack_.inBandMetadataTrackDispatchType = dispatchType;\n }\n};\n/**\n * Remove cues from a track on video.js.\n *\n * @param {Double} start start of where we should remove the cue\n * @param {Double} end end of where the we should remove the cue\n * @param {Object} track the text track to remove the cues from\n * @private\n */\n\nconst removeCuesFromTrack = function (start, end, track) {\n let i;\n let cue;\n if (!track) {\n return;\n }\n if (!track.cues) {\n return;\n }\n i = track.cues.length;\n while (i--) {\n cue = track.cues[i]; // Remove any cue within the provided start and end time\n\n if (cue.startTime >= start && cue.endTime <= end) {\n track.removeCue(cue);\n }\n }\n};\n/**\n * Remove duplicate cues from a track on video.js (a cue is considered a\n * duplicate if it has the same time interval and text as another)\n *\n * @param {Object} track the text track to remove the duplicate cues from\n * @private\n */\n\nconst removeDuplicateCuesFromTrack = function (track) {\n const cues = track.cues;\n if (!cues) {\n return;\n }\n const uniqueCues = {};\n for (let i = cues.length - 1; i >= 0; i--) {\n const cue = cues[i];\n const cueKey = `${cue.startTime}-${cue.endTime}-${cue.text}`;\n if (uniqueCues[cueKey]) {\n track.removeCue(cue);\n } else {\n uniqueCues[cueKey] = cue;\n }\n }\n};\n\n/**\n * Returns a list of gops in the buffer that have a pts value of 3 seconds or more in\n * front of current time.\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {number} currentTime\n * The current time\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n * @return {Array}\n * List of gops considered safe to append over\n */\n\nconst gopsSafeToAlignWith = (buffer, currentTime, mapping) => {\n if (typeof currentTime === 'undefined' || currentTime === null || !buffer.length) {\n return [];\n } // pts value for current time + 3 seconds to give a bit more wiggle room\n\n const currentTimePts = Math.ceil((currentTime - mapping + 3) * ONE_SECOND_IN_TS);\n let i;\n for (i = 0; i < buffer.length; i++) {\n if (buffer[i].pts > currentTimePts) {\n break;\n }\n }\n return buffer.slice(i);\n};\n/**\n * Appends gop information (timing and byteLength) received by the transmuxer for the\n * gops appended in the last call to appendBuffer\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Array} gops\n * List of new gop information\n * @param {boolean} replace\n * If true, replace the buffer with the new gop information. If false, append the\n * new gop information to the buffer in the right location of time.\n * @return {Array}\n * Updated list of gop information\n */\n\nconst updateGopBuffer = (buffer, gops, replace) => {\n if (!gops.length) {\n return buffer;\n }\n if (replace) {\n // If we are in safe append mode, then completely overwrite the gop buffer\n // with the most recent appeneded data. This will make sure that when appending\n // future segments, we only try to align with gops that are both ahead of current\n // time and in the last segment appended.\n return gops.slice();\n }\n const start = gops[0].pts;\n let i = 0;\n for (i; i < buffer.length; i++) {\n if (buffer[i].pts >= start) {\n break;\n }\n }\n return buffer.slice(0, i).concat(gops);\n};\n/**\n * Removes gop information in buffer that overlaps with provided start and end\n *\n * @param {Array} buffer\n * The current buffer of gop information\n * @param {Double} start\n * position to start the remove at\n * @param {Double} end\n * position to end the remove at\n * @param {Double} mapping\n * Offset to map display time to stream presentation time\n */\n\nconst removeGopBuffer = (buffer, start, end, mapping) => {\n const startPts = Math.ceil((start - mapping) * ONE_SECOND_IN_TS);\n const endPts = Math.ceil((end - mapping) * ONE_SECOND_IN_TS);\n const updatedBuffer = buffer.slice();\n let i = buffer.length;\n while (i--) {\n if (buffer[i].pts <= endPts) {\n break;\n }\n }\n if (i === -1) {\n // no removal because end of remove range is before start of buffer\n return updatedBuffer;\n }\n let j = i + 1;\n while (j--) {\n if (buffer[j].pts <= startPts) {\n break;\n }\n } // clamp remove range start to 0 index\n\n j = Math.max(j, 0);\n updatedBuffer.splice(j, i - j + 1);\n return updatedBuffer;\n};\nconst shallowEqual = function (a, b) {\n // if both are undefined\n // or one or the other is undefined\n // they are not equal\n if (!a && !b || !a && b || a && !b) {\n return false;\n } // they are the same object and thus, equal\n\n if (a === b) {\n return true;\n } // sort keys so we can make sure they have\n // all the same keys later.\n\n const akeys = Object.keys(a).sort();\n const bkeys = Object.keys(b).sort(); // different number of keys, not equal\n\n if (akeys.length !== bkeys.length) {\n return false;\n }\n for (let i = 0; i < akeys.length; i++) {\n const key = akeys[i]; // different sorted keys, not equal\n\n if (key !== bkeys[i]) {\n return false;\n } // different values, not equal\n\n if (a[key] !== b[key]) {\n return false;\n }\n }\n return true;\n};\n\n// https://www.w3.org/TR/WebIDL-1/#quotaexceedederror\nconst QUOTA_EXCEEDED_ERR = 22;\n\n/**\n * The segment loader has no recourse except to fetch a segment in the\n * current playlist and use the internal timestamps in that segment to\n * generate a syncPoint. This function returns a good candidate index\n * for that process.\n *\n * @param {Array} segments - the segments array from a playlist.\n * @return {number} An index of a segment from the playlist to load\n */\n\nconst getSyncSegmentCandidate = function (currentTimeline, segments, targetTime) {\n segments = segments || [];\n const timelineSegments = [];\n let time = 0;\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n if (currentTimeline === segment.timeline) {\n timelineSegments.push(i);\n time += segment.duration;\n if (time > targetTime) {\n return i;\n }\n }\n }\n if (timelineSegments.length === 0) {\n return 0;\n } // default to the last timeline segment\n\n return timelineSegments[timelineSegments.length - 1];\n}; // In the event of a quota exceeded error, keep at least one second of back buffer. This\n// number was arbitrarily chosen and may be updated in the future, but seemed reasonable\n// as a start to prevent any potential issues with removing content too close to the\n// playhead.\n\nconst MIN_BACK_BUFFER = 1; // in ms\n\nconst CHECK_BUFFER_DELAY = 500;\nconst finite = num => typeof num === 'number' && isFinite(num); // With most content hovering around 30fps, if a segment has a duration less than a half\n// frame at 30fps or one frame at 60fps, the bandwidth and throughput calculations will\n// not accurately reflect the rest of the content.\n\nconst MIN_SEGMENT_DURATION_TO_SAVE_STATS = 1 / 60;\nconst illegalMediaSwitch = (loaderType, startingMedia, trackInfo) => {\n // Although these checks should most likely cover non 'main' types, for now it narrows\n // the scope of our checks.\n if (loaderType !== 'main' || !startingMedia || !trackInfo) {\n return null;\n }\n if (!trackInfo.hasAudio && !trackInfo.hasVideo) {\n return 'Neither audio nor video found in segment.';\n }\n if (startingMedia.hasVideo && !trackInfo.hasVideo) {\n return 'Only audio found in segment when we expected video.' + ' We can\\'t switch to audio only from a stream that had video.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n if (!startingMedia.hasVideo && trackInfo.hasVideo) {\n return 'Video found in segment when we expected only audio.' + ' We can\\'t switch to a stream with video from an audio only stream.' + ' To get rid of this message, please add codec information to the manifest.';\n }\n return null;\n};\n/**\n * Calculates a time value that is safe to remove from the back buffer without interrupting\n * playback.\n *\n * @param {TimeRange} seekable\n * The current seekable range\n * @param {number} currentTime\n * The current time of the player\n * @param {number} targetDuration\n * The target duration of the current playlist\n * @return {number}\n * Time that is safe to remove from the back buffer without interrupting playback\n */\n\nconst safeBackBufferTrimTime = (seekable, currentTime, targetDuration) => {\n // 30 seconds before the playhead provides a safe default for trimming.\n //\n // Choosing a reasonable default is particularly important for high bitrate content and\n // VOD videos/live streams with large windows, as the buffer may end up overfilled and\n // throw an APPEND_BUFFER_ERR.\n let trimTime = currentTime - Config.BACK_BUFFER_LENGTH;\n if (seekable.length) {\n // Some live playlists may have a shorter window of content than the full allowed back\n // buffer. For these playlists, don't save content that's no longer within the window.\n trimTime = Math.max(trimTime, seekable.start(0));\n } // Don't remove within target duration of the current time to avoid the possibility of\n // removing the GOP currently being played, as removing it can cause playback stalls.\n\n const maxTrimTime = currentTime - targetDuration;\n return Math.min(maxTrimTime, trimTime);\n};\nconst segmentInfoString = segmentInfo => {\n const {\n startOfSegment,\n duration,\n segment,\n part,\n playlist: {\n mediaSequence: seq,\n id,\n segments = []\n },\n mediaIndex: index,\n partIndex,\n timeline\n } = segmentInfo;\n const segmentLen = segments.length - 1;\n let selection = 'mediaIndex/partIndex increment';\n if (segmentInfo.getMediaInfoForTime) {\n selection = `getMediaInfoForTime (${segmentInfo.getMediaInfoForTime})`;\n } else if (segmentInfo.isSyncRequest) {\n selection = 'getSyncSegmentCandidate (isSyncRequest)';\n }\n if (segmentInfo.independent) {\n selection += ` with independent ${segmentInfo.independent}`;\n }\n const hasPartIndex = typeof partIndex === 'number';\n const name = segmentInfo.segment.uri ? 'segment' : 'pre-segment';\n const zeroBasedPartCount = hasPartIndex ? getKnownPartCount({\n preloadSegment: segment\n }) - 1 : 0;\n return `${name} [${seq + index}/${seq + segmentLen}]` + (hasPartIndex ? ` part [${partIndex}/${zeroBasedPartCount}]` : '') + ` segment start/end [${segment.start} => ${segment.end}]` + (hasPartIndex ? ` part start/end [${part.start} => ${part.end}]` : '') + ` startOfSegment [${startOfSegment}]` + ` duration [${duration}]` + ` timeline [${timeline}]` + ` selected by [${selection}]` + ` playlist [${id}]`;\n};\nconst timingInfoPropertyForMedia = mediaType => `${mediaType}TimingInfo`;\n/**\n * Returns the timestamp offset to use for the segment.\n *\n * @param {number} segmentTimeline\n * The timeline of the segment\n * @param {number} currentTimeline\n * The timeline currently being followed by the loader\n * @param {number} startOfSegment\n * The estimated segment start\n * @param {TimeRange[]} buffered\n * The loader's buffer\n * @param {boolean} overrideCheck\n * If true, no checks are made to see if the timestamp offset value should be set,\n * but sets it directly to a value.\n *\n * @return {number|null}\n * Either a number representing a new timestamp offset, or null if the segment is\n * part of the same timeline\n */\n\nconst timestampOffsetForSegment = ({\n segmentTimeline,\n currentTimeline,\n startOfSegment,\n buffered,\n overrideCheck\n}) => {\n // Check to see if we are crossing a discontinuity to see if we need to set the\n // timestamp offset on the transmuxer and source buffer.\n //\n // Previously, we changed the timestampOffset if the start of this segment was less than\n // the currently set timestampOffset, but this isn't desirable as it can produce bad\n // behavior, especially around long running live streams.\n if (!overrideCheck && segmentTimeline === currentTimeline) {\n return null;\n } // When changing renditions, it's possible to request a segment on an older timeline. For\n // instance, given two renditions with the following:\n //\n // #EXTINF:10\n // segment1\n // #EXT-X-DISCONTINUITY\n // #EXTINF:10\n // segment2\n // #EXTINF:10\n // segment3\n //\n // And the current player state:\n //\n // current time: 8\n // buffer: 0 => 20\n //\n // The next segment on the current rendition would be segment3, filling the buffer from\n // 20s onwards. However, if a rendition switch happens after segment2 was requested,\n // then the next segment to be requested will be segment1 from the new rendition in\n // order to fill time 8 and onwards. Using the buffered end would result in repeated\n // content (since it would position segment1 of the new rendition starting at 20s). This\n // case can be identified when the new segment's timeline is a prior value. Instead of\n // using the buffered end, the startOfSegment can be used, which, hopefully, will be\n // more accurate to the actual start time of the segment.\n\n if (segmentTimeline < currentTimeline) {\n return startOfSegment;\n } // segmentInfo.startOfSegment used to be used as the timestamp offset, however, that\n // value uses the end of the last segment if it is available. While this value\n // should often be correct, it's better to rely on the buffered end, as the new\n // content post discontinuity should line up with the buffered end as if it were\n // time 0 for the new content.\n\n return buffered.length ? buffered.end(buffered.length - 1) : startOfSegment;\n};\n/**\n * Returns whether or not the loader should wait for a timeline change from the timeline\n * change controller before processing the segment.\n *\n * Primary timing in VHS goes by video. This is different from most media players, as\n * audio is more often used as the primary timing source. For the foreseeable future, VHS\n * will continue to use video as the primary timing source, due to the current logic and\n * expectations built around it.\n\n * Since the timing follows video, in order to maintain sync, the video loader is\n * responsible for setting both audio and video source buffer timestamp offsets.\n *\n * Setting different values for audio and video source buffers could lead to\n * desyncing. The following examples demonstrate some of the situations where this\n * distinction is important. Note that all of these cases involve demuxed content. When\n * content is muxed, the audio and video are packaged together, therefore syncing\n * separate media playlists is not an issue.\n *\n * CASE 1: Audio prepares to load a new timeline before video:\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, the audio loader is preparing to load the 6th segment, the first\n * after a discontinuity, while the video loader is still loading the 5th segment, before\n * the discontinuity.\n *\n * If the audio loader goes ahead and loads and appends the 6th segment before the video\n * loader crosses the discontinuity, then when appended, the 6th audio segment will use\n * the timestamp offset from timeline 0. This will likely lead to desyncing. In addition,\n * the audio loader must provide the audioAppendStart value to trim the content in the\n * transmuxer, and that value relies on the audio timestamp offset. Since the audio\n * timestamp offset is set by the video (main) loader, the audio loader shouldn't load the\n * segment until that value is provided.\n *\n * CASE 2: Video prepares to load a new timeline before audio:\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, the video loader is preparing to load the 6th segment, the first\n * after a discontinuity, while the audio loader is still loading the 5th segment, before\n * the discontinuity.\n *\n * If the video loader goes ahead and loads and appends the 6th segment, then once the\n * segment is loaded and processed, both the video and audio timestamp offsets will be\n * set, since video is used as the primary timing source. This is to ensure content lines\n * up appropriately, as any modifications to the video timing are reflected by audio when\n * the video loader sets the audio and video timestamp offsets to the same value. However,\n * setting the timestamp offset for audio before audio has had a chance to change\n * timelines will likely lead to desyncing, as the audio loader will append segment 5 with\n * a timestamp intended to apply to segments from timeline 1 rather than timeline 0.\n *\n * CASE 3: When seeking, audio prepares to load a new timeline before video\n *\n * Timeline: 0 1\n * Audio Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Audio Loader: ^\n * Video Segments: 0 1 2 3 4 5 DISCO 6 7 8 9\n * Video Loader ^\n *\n * In the above example, both audio and video loaders are loading segments from timeline\n * 0, but imagine that the seek originated from timeline 1.\n *\n * When seeking to a new timeline, the timestamp offset will be set based on the expected\n * segment start of the loaded video segment. In order to maintain sync, the audio loader\n * must wait for the video loader to load its segment and update both the audio and video\n * timestamp offsets before it may load and append its own segment. This is the case\n * whether the seek results in a mismatched segment request (e.g., the audio loader\n * chooses to load segment 3 and the video loader chooses to load segment 4) or the\n * loaders choose to load the same segment index from each playlist, as the segments may\n * not be aligned perfectly, even for matching segment indexes.\n *\n * @param {Object} timelinechangeController\n * @param {number} currentTimeline\n * The timeline currently being followed by the loader\n * @param {number} segmentTimeline\n * The timeline of the segment being loaded\n * @param {('main'|'audio')} loaderType\n * The loader type\n * @param {boolean} audioDisabled\n * Whether the audio is disabled for the loader. This should only be true when the\n * loader may have muxed audio in its segment, but should not append it, e.g., for\n * the main loader when an alternate audio playlist is active.\n *\n * @return {boolean}\n * Whether the loader should wait for a timeline change from the timeline change\n * controller before processing the segment\n */\n\nconst shouldWaitForTimelineChange = ({\n timelineChangeController,\n currentTimeline,\n segmentTimeline,\n loaderType,\n audioDisabled\n}) => {\n if (currentTimeline === segmentTimeline) {\n return false;\n }\n if (loaderType === 'audio') {\n const lastMainTimelineChange = timelineChangeController.lastTimelineChange({\n type: 'main'\n }); // Audio loader should wait if:\n //\n // * main hasn't had a timeline change yet (thus has not loaded its first segment)\n // * main hasn't yet changed to the timeline audio is looking to load\n\n return !lastMainTimelineChange || lastMainTimelineChange.to !== segmentTimeline;\n } // The main loader only needs to wait for timeline changes if there's demuxed audio.\n // Otherwise, there's nothing to wait for, since audio would be muxed into the main\n // loader's segments (or the content is audio/video only and handled by the main\n // loader).\n\n if (loaderType === 'main' && audioDisabled) {\n const pendingAudioTimelineChange = timelineChangeController.pendingTimelineChange({\n type: 'audio'\n }); // Main loader should wait for the audio loader if audio is not pending a timeline\n // change to the current timeline.\n //\n // Since the main loader is responsible for setting the timestamp offset for both\n // audio and video, the main loader must wait for audio to be about to change to its\n // timeline before setting the offset, otherwise, if audio is behind in loading,\n // segments from the previous timeline would be adjusted by the new timestamp offset.\n //\n // This requirement means that video will not cross a timeline until the audio is\n // about to cross to it, so that way audio and video will always cross the timeline\n // together.\n //\n // In addition to normal timeline changes, these rules also apply to the start of a\n // stream (going from a non-existent timeline, -1, to timeline 0). It's important\n // that these rules apply to the first timeline change because if they did not, it's\n // possible that the main loader will cross two timelines before the audio loader has\n // crossed one. Logic may be implemented to handle the startup as a special case, but\n // it's easier to simply treat all timeline changes the same.\n\n if (pendingAudioTimelineChange && pendingAudioTimelineChange.to === segmentTimeline) {\n return false;\n }\n return true;\n }\n return false;\n};\nconst mediaDuration = timingInfos => {\n let maxDuration = 0;\n ['video', 'audio'].forEach(function (type) {\n const typeTimingInfo = timingInfos[`${type}TimingInfo`];\n if (!typeTimingInfo) {\n return;\n }\n const {\n start,\n end\n } = typeTimingInfo;\n let duration;\n if (typeof start === 'bigint' || typeof end === 'bigint') {\n duration = window$1.BigInt(end) - window$1.BigInt(start);\n } else if (typeof start === 'number' && typeof end === 'number') {\n duration = end - start;\n }\n if (typeof duration !== 'undefined' && duration > maxDuration) {\n maxDuration = duration;\n }\n }); // convert back to a number if it is lower than MAX_SAFE_INTEGER\n // as we only need BigInt when we are above that.\n\n if (typeof maxDuration === 'bigint' && maxDuration < Number.MAX_SAFE_INTEGER) {\n maxDuration = Number(maxDuration);\n }\n return maxDuration;\n};\nconst segmentTooLong = ({\n segmentDuration,\n maxDuration\n}) => {\n // 0 duration segments are most likely due to metadata only segments or a lack of\n // information.\n if (!segmentDuration) {\n return false;\n } // For HLS:\n //\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1\n // The EXTINF duration of each Media Segment in the Playlist\n // file, when rounded to the nearest integer, MUST be less than or equal\n // to the target duration; longer segments can trigger playback stalls\n // or other errors.\n //\n // For DASH, the mpd-parser uses the largest reported segment duration as the target\n // duration. Although that reported duration is occasionally approximate (i.e., not\n // exact), a strict check may report that a segment is too long more often in DASH.\n\n return Math.round(segmentDuration) > maxDuration + TIME_FUDGE_FACTOR;\n};\nconst getTroublesomeSegmentDurationMessage = (segmentInfo, sourceType) => {\n // Right now we aren't following DASH's timing model exactly, so only perform\n // this check for HLS content.\n if (sourceType !== 'hls') {\n return null;\n }\n const segmentDuration = mediaDuration({\n audioTimingInfo: segmentInfo.audioTimingInfo,\n videoTimingInfo: segmentInfo.videoTimingInfo\n }); // Don't report if we lack information.\n //\n // If the segment has a duration of 0 it is either a lack of information or a\n // metadata only segment and shouldn't be reported here.\n\n if (!segmentDuration) {\n return null;\n }\n const targetDuration = segmentInfo.playlist.targetDuration;\n const isSegmentWayTooLong = segmentTooLong({\n segmentDuration,\n maxDuration: targetDuration * 2\n });\n const isSegmentSlightlyTooLong = segmentTooLong({\n segmentDuration,\n maxDuration: targetDuration\n });\n const segmentTooLongMessage = `Segment with index ${segmentInfo.mediaIndex} ` + `from playlist ${segmentInfo.playlist.id} ` + `has a duration of ${segmentDuration} ` + `when the reported duration is ${segmentInfo.duration} ` + `and the target duration is ${targetDuration}. ` + 'For HLS content, a duration in excess of the target duration may result in ' + 'playback issues. See the HLS specification section on EXT-X-TARGETDURATION for ' + 'more details: ' + 'https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1';\n if (isSegmentWayTooLong || isSegmentSlightlyTooLong) {\n return {\n severity: isSegmentWayTooLong ? 'warn' : 'info',\n message: segmentTooLongMessage\n };\n }\n return null;\n};\n/**\n * An object that manages segment loading and appending.\n *\n * @class SegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nclass SegmentLoader extends videojs.EventTarget {\n constructor(settings, options = {}) {\n super(); // check pre-conditions\n\n if (!settings) {\n throw new TypeError('Initialization settings are required');\n }\n if (typeof settings.currentTime !== 'function') {\n throw new TypeError('No currentTime getter specified');\n }\n if (!settings.mediaSource) {\n throw new TypeError('No MediaSource specified');\n } // public properties\n\n this.bandwidth = settings.bandwidth;\n this.throughput = {\n rate: 0,\n count: 0\n };\n this.roundTrip = NaN;\n this.resetStats_();\n this.mediaIndex = null;\n this.partIndex = null; // private settings\n\n this.hasPlayed_ = settings.hasPlayed;\n this.currentTime_ = settings.currentTime;\n this.seekable_ = settings.seekable;\n this.seeking_ = settings.seeking;\n this.duration_ = settings.duration;\n this.mediaSource_ = settings.mediaSource;\n this.vhs_ = settings.vhs;\n this.loaderType_ = settings.loaderType;\n this.currentMediaInfo_ = void 0;\n this.startingMediaInfo_ = void 0;\n this.segmentMetadataTrack_ = settings.segmentMetadataTrack;\n this.goalBufferLength_ = settings.goalBufferLength;\n this.sourceType_ = settings.sourceType;\n this.sourceUpdater_ = settings.sourceUpdater;\n this.inbandTextTracks_ = settings.inbandTextTracks;\n this.state_ = 'INIT';\n this.timelineChangeController_ = settings.timelineChangeController;\n this.shouldSaveSegmentTimingInfo_ = true;\n this.parse708captions_ = settings.parse708captions;\n this.useDtsForTimestampOffset_ = settings.useDtsForTimestampOffset;\n this.captionServices_ = settings.captionServices;\n this.exactManifestTimings = settings.exactManifestTimings;\n this.addMetadataToTextTrack = settings.addMetadataToTextTrack; // private instance variables\n\n this.checkBufferTimeout_ = null;\n this.error_ = void 0;\n this.currentTimeline_ = -1;\n this.shouldForceTimestampOffsetAfterResync_ = false;\n this.pendingSegment_ = null;\n this.xhrOptions_ = null;\n this.pendingSegments_ = [];\n this.audioDisabled_ = false;\n this.isPendingTimestampOffset_ = false; // TODO possibly move gopBuffer and timeMapping info to a separate controller\n\n this.gopBuffer_ = [];\n this.timeMapping_ = 0;\n this.safeAppend_ = false;\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.playlistOfLastInitSegment_ = {\n audio: null,\n video: null\n };\n this.callQueue_ = []; // If the segment loader prepares to load a segment, but does not have enough\n // information yet to start the loading process (e.g., if the audio loader wants to\n // load a segment from the next timeline but the main loader hasn't yet crossed that\n // timeline), then the load call will be added to the queue until it is ready to be\n // processed.\n\n this.loadQueue_ = [];\n this.metadataQueue_ = {\n id3: [],\n caption: []\n };\n this.waitingOnRemove_ = false;\n this.quotaExceededErrorRetryTimeout_ = null; // Fragmented mp4 playback\n\n this.activeInitSegmentId_ = null;\n this.initSegments_ = {}; // HLSe playback\n\n this.cacheEncryptionKeys_ = settings.cacheEncryptionKeys;\n this.keyCache_ = {};\n this.decrypter_ = settings.decrypter; // Manages the tracking and generation of sync-points, mappings\n // between a time in the display time and a segment index within\n // a playlist\n\n this.syncController_ = settings.syncController;\n this.syncPoint_ = {\n segmentIndex: 0,\n time: 0\n };\n this.transmuxer_ = this.createTransmuxer_();\n this.triggerSyncInfoUpdate_ = () => this.trigger('syncinfoupdate');\n this.syncController_.on('syncinfoupdate', this.triggerSyncInfoUpdate_);\n this.mediaSource_.addEventListener('sourceopen', () => {\n if (!this.isEndOfStream_()) {\n this.ended_ = false;\n }\n }); // ...for determining the fetch location\n\n this.fetchAtBuffer_ = false;\n this.logger_ = logger(`SegmentLoader[${this.loaderType_}]`);\n Object.defineProperty(this, 'state', {\n get() {\n return this.state_;\n },\n set(newState) {\n if (newState !== this.state_) {\n this.logger_(`${this.state_} -> ${newState}`);\n this.state_ = newState;\n this.trigger('statechange');\n }\n }\n });\n this.sourceUpdater_.on('ready', () => {\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n }); // Only the main loader needs to listen for pending timeline changes, as the main\n // loader should wait for audio to be ready to change its timeline so that both main\n // and audio timelines change together. For more details, see the\n // shouldWaitForTimelineChange function.\n\n if (this.loaderType_ === 'main') {\n this.timelineChangeController_.on('pendingtimelinechange', () => {\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n });\n } // The main loader only listens on pending timeline changes, but the audio loader,\n // since its loads follow main, needs to listen on timeline changes. For more details,\n // see the shouldWaitForTimelineChange function.\n\n if (this.loaderType_ === 'audio') {\n this.timelineChangeController_.on('timelinechange', () => {\n if (this.hasEnoughInfoToLoad_()) {\n this.processLoadQueue_();\n }\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n });\n }\n }\n createTransmuxer_() {\n return segmentTransmuxer.createTransmuxer({\n remux: false,\n alignGopsAtEnd: this.safeAppend_,\n keepOriginalTimestamps: true,\n parse708captions: this.parse708captions_,\n captionServices: this.captionServices_\n });\n }\n /**\n * reset all of our media stats\n *\n * @private\n */\n\n resetStats_() {\n this.mediaBytesTransferred = 0;\n this.mediaRequests = 0;\n this.mediaRequestsAborted = 0;\n this.mediaRequestsTimedout = 0;\n this.mediaRequestsErrored = 0;\n this.mediaTransferDuration = 0;\n this.mediaSecondsLoaded = 0;\n this.mediaAppends = 0;\n }\n /**\n * dispose of the SegmentLoader and reset to the default state\n */\n\n dispose() {\n this.trigger('dispose');\n this.state = 'DISPOSED';\n this.pause();\n this.abort_();\n if (this.transmuxer_) {\n this.transmuxer_.terminate();\n }\n this.resetStats_();\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n if (this.syncController_ && this.triggerSyncInfoUpdate_) {\n this.syncController_.off('syncinfoupdate', this.triggerSyncInfoUpdate_);\n }\n this.off();\n }\n setAudio(enable) {\n this.audioDisabled_ = !enable;\n if (enable) {\n this.appendInitSegment_.audio = true;\n } else {\n // remove current track audio if it gets disabled\n this.sourceUpdater_.removeAudio(0, this.duration_());\n }\n }\n /**\n * abort anything that is currently doing on with the SegmentLoader\n * and reset to a default state\n */\n\n abort() {\n if (this.state !== 'WAITING') {\n if (this.pendingSegment_) {\n this.pendingSegment_ = null;\n }\n return;\n }\n this.abort_(); // We aborted the requests we were waiting on, so reset the loader's state to READY\n // since we are no longer \"waiting\" on any requests. XHR callback is not always run\n // when the request is aborted. This will prevent the loader from being stuck in the\n // WAITING state indefinitely.\n\n this.state = 'READY'; // don't wait for buffer check timeouts to begin fetching the\n // next segment\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n /**\n * abort all pending xhr requests and null any pending segements\n *\n * @private\n */\n\n abort_() {\n if (this.pendingSegment_ && this.pendingSegment_.abortRequests) {\n this.pendingSegment_.abortRequests();\n } // clear out the segment being processed\n\n this.pendingSegment_ = null;\n this.callQueue_ = [];\n this.loadQueue_ = [];\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_);\n this.waitingOnRemove_ = false;\n window$1.clearTimeout(this.quotaExceededErrorRetryTimeout_);\n this.quotaExceededErrorRetryTimeout_ = null;\n }\n checkForAbort_(requestId) {\n // If the state is APPENDING, then aborts will not modify the state, meaning the first\n // callback that happens should reset the state to READY so that loading can continue.\n if (this.state === 'APPENDING' && !this.pendingSegment_) {\n this.state = 'READY';\n return true;\n }\n if (!this.pendingSegment_ || this.pendingSegment_.requestId !== requestId) {\n return true;\n }\n return false;\n }\n /**\n * set an error on the segment loader and null out any pending segements\n *\n * @param {Error} error the error to set on the SegmentLoader\n * @return {Error} the error that was set or that is currently set\n */\n\n error(error) {\n if (typeof error !== 'undefined') {\n this.logger_('error occurred:', error);\n this.error_ = error;\n }\n this.pendingSegment_ = null;\n return this.error_;\n }\n endOfStream() {\n this.ended_ = true;\n if (this.transmuxer_) {\n // need to clear out any cached data to prepare for the new segment\n segmentTransmuxer.reset(this.transmuxer_);\n }\n this.gopBuffer_.length = 0;\n this.pause();\n this.trigger('ended');\n }\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n buffered_() {\n const trackInfo = this.getMediaInfo_();\n if (!this.sourceUpdater_ || !trackInfo) {\n return createTimeRanges();\n }\n if (this.loaderType_ === 'main') {\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n if (hasVideo && hasAudio && !this.audioDisabled_ && !isMuxed) {\n return this.sourceUpdater_.buffered();\n }\n if (hasVideo) {\n return this.sourceUpdater_.videoBuffered();\n }\n } // One case that can be ignored for now is audio only with alt audio,\n // as we don't yet have proper support for that.\n\n return this.sourceUpdater_.audioBuffered();\n }\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n\n initSegmentForMap(map, set = false) {\n if (!map) {\n return null;\n }\n const id = initSegmentId(map);\n let storedMap = this.initSegments_[id];\n if (set && !storedMap && map.bytes) {\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: map.bytes,\n tracks: map.tracks,\n timescales: map.timescales\n };\n }\n return storedMap || map;\n }\n /**\n * Gets and sets key for the provided key\n *\n * @param {Object} key\n * The key object representing the key to get or set\n * @param {boolean=} set\n * If true, the key for the provided key should be saved\n * @return {Object}\n * Key object for desired key\n */\n\n segmentKey(key, set = false) {\n if (!key) {\n return null;\n }\n const id = segmentKeyId(key);\n let storedKey = this.keyCache_[id]; // TODO: We should use the HTTP Expires header to invalidate our cache per\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-6.2.3\n\n if (this.cacheEncryptionKeys_ && set && !storedKey && key.bytes) {\n this.keyCache_[id] = storedKey = {\n resolvedUri: key.resolvedUri,\n bytes: key.bytes\n };\n }\n const result = {\n resolvedUri: (storedKey || key).resolvedUri\n };\n if (storedKey) {\n result.bytes = storedKey.bytes;\n }\n return result;\n }\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {boolean} True if the all configuration is ready for loading\n * @private\n */\n\n couldBeginLoading_() {\n return this.playlist_ && !this.paused();\n }\n /**\n * load a playlist and start to fill the buffer\n */\n\n load() {\n // un-pause\n this.monitorBuffer_(); // if we don't have a playlist yet, keep waiting for one to be\n // specified\n\n if (!this.playlist_) {\n return;\n } // if all the configuration is ready, initialize and begin loading\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n } // if we're in the middle of processing a segment already, don't\n // kick off an additional segment request\n\n if (!this.couldBeginLoading_() || this.state !== 'READY' && this.state !== 'INIT') {\n return;\n }\n this.state = 'READY';\n }\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n\n init_() {\n this.state = 'READY'; // if this is the audio segment loader, and it hasn't been inited before, then any old\n // audio data from the muxed content should be removed\n\n this.resetEverything();\n return this.monitorBuffer_();\n }\n /**\n * set a playlist on the segment loader\n *\n * @param {PlaylistLoader} media the playlist to set on the segment loader\n */\n\n playlist(newPlaylist, options = {}) {\n if (!newPlaylist) {\n return;\n }\n const oldPlaylist = this.playlist_;\n const segmentInfo = this.pendingSegment_;\n this.playlist_ = newPlaylist;\n this.xhrOptions_ = options; // when we haven't started playing yet, the start of a live playlist\n // is always our zero-time so force a sync update each time the playlist\n // is refreshed from the server\n //\n // Use the INIT state to determine if playback has started, as the playlist sync info\n // should be fixed once requests begin (as sync points are generated based on sync\n // info), but not before then.\n\n if (this.state === 'INIT') {\n newPlaylist.syncInfo = {\n mediaSequence: newPlaylist.mediaSequence,\n time: 0\n }; // Setting the date time mapping means mapping the program date time (if available)\n // to time 0 on the player's timeline. The playlist's syncInfo serves a similar\n // purpose, mapping the initial mediaSequence to time zero. Since the syncInfo can\n // be updated as the playlist is refreshed before the loader starts loading, the\n // program date time mapping needs to be updated as well.\n //\n // This mapping is only done for the main loader because a program date time should\n // map equivalently between playlists.\n\n if (this.loaderType_ === 'main') {\n this.syncController_.setDateTimeMappingForStart(newPlaylist);\n }\n }\n let oldId = null;\n if (oldPlaylist) {\n if (oldPlaylist.id) {\n oldId = oldPlaylist.id;\n } else if (oldPlaylist.uri) {\n oldId = oldPlaylist.uri;\n }\n }\n this.logger_(`playlist update [${oldId} => ${newPlaylist.id || newPlaylist.uri}]`);\n this.syncController_.updateMediaSequenceMap(newPlaylist, this.currentTime_(), this.loaderType_); // in VOD, this is always a rendition switch (or we updated our syncInfo above)\n // in LIVE, we always want to update with new playlists (including refreshes)\n\n this.trigger('syncinfoupdate'); // if we were unpaused but waiting for a playlist, start\n // buffering now\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n return this.init_();\n }\n if (!oldPlaylist || oldPlaylist.uri !== newPlaylist.uri) {\n if (this.mediaIndex !== null) {\n // we must reset/resync the segment loader when we switch renditions and\n // the segment loader is already synced to the previous rendition\n // We only want to reset the loader here for LLHLS playback, as resetLoader sets fetchAtBuffer_\n // to false, resulting in fetching segments at currentTime and causing repeated\n // same-segment requests on playlist change. This erroneously drives up the playback watcher\n // stalled segment count, as re-requesting segments at the currentTime or browser cached segments\n // will not change the buffer.\n // Reference for LLHLS fixes: https://github.com/videojs/http-streaming/pull/1201\n const isLLHLS = !newPlaylist.endList && typeof newPlaylist.partTargetDuration === 'number';\n if (isLLHLS) {\n this.resetLoader();\n } else {\n this.resyncLoader();\n }\n }\n this.currentMediaInfo_ = void 0;\n this.trigger('playlistupdate'); // the rest of this function depends on `oldPlaylist` being defined\n\n return;\n } // we reloaded the same playlist so we are in a live scenario\n // and we will likely need to adjust the mediaIndex\n\n const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence;\n this.logger_(`live window shift [${mediaSequenceDiff}]`); // update the mediaIndex on the SegmentLoader\n // this is important because we can abort a request and this value must be\n // equal to the last appended mediaIndex\n\n if (this.mediaIndex !== null) {\n this.mediaIndex -= mediaSequenceDiff; // this can happen if we are going to load the first segment, but get a playlist\n // update during that. mediaIndex would go from 0 to -1 if mediaSequence in the\n // new playlist was incremented by 1.\n\n if (this.mediaIndex < 0) {\n this.mediaIndex = null;\n this.partIndex = null;\n } else {\n const segment = this.playlist_.segments[this.mediaIndex]; // partIndex should remain the same for the same segment\n // unless parts fell off of the playlist for this segment.\n // In that case we need to reset partIndex and resync\n\n if (this.partIndex && (!segment.parts || !segment.parts.length || !segment.parts[this.partIndex])) {\n const mediaIndex = this.mediaIndex;\n this.logger_(`currently processing part (index ${this.partIndex}) no longer exists.`);\n this.resetLoader(); // We want to throw away the partIndex and the data associated with it,\n // as the part was dropped from our current playlists segment.\n // The mediaIndex will still be valid so keep that around.\n\n this.mediaIndex = mediaIndex;\n }\n }\n } // update the mediaIndex on the SegmentInfo object\n // this is important because we will update this.mediaIndex with this value\n // in `handleAppendsDone_` after the segment has been successfully appended\n\n if (segmentInfo) {\n segmentInfo.mediaIndex -= mediaSequenceDiff;\n if (segmentInfo.mediaIndex < 0) {\n segmentInfo.mediaIndex = null;\n segmentInfo.partIndex = null;\n } else {\n // we need to update the referenced segment so that timing information is\n // saved for the new playlist's segment, however, if the segment fell off the\n // playlist, we can leave the old reference and just lose the timing info\n if (segmentInfo.mediaIndex >= 0) {\n segmentInfo.segment = newPlaylist.segments[segmentInfo.mediaIndex];\n }\n if (segmentInfo.partIndex >= 0 && segmentInfo.segment.parts) {\n segmentInfo.part = segmentInfo.segment.parts[segmentInfo.partIndex];\n }\n }\n }\n this.syncController_.saveExpiredSegmentInfo(oldPlaylist, newPlaylist);\n }\n /**\n * Prevent the loader from fetching additional segments. If there\n * is a segment request outstanding, it will finish processing\n * before the loader halts. A segment loader can be unpaused by\n * calling load().\n */\n\n pause() {\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n this.checkBufferTimeout_ = null;\n }\n }\n /**\n * Returns whether the segment loader is fetching additional\n * segments when given the opportunity. This property can be\n * modified through calls to pause() and load().\n */\n\n paused() {\n return this.checkBufferTimeout_ === null;\n }\n /**\n * Delete all the buffered data and reset the SegmentLoader\n *\n * @param {Function} [done] an optional callback to be executed when the remove\n * operation is complete\n */\n\n resetEverything(done) {\n this.ended_ = false;\n this.activeInitSegmentId_ = null;\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.resetLoader(); // remove from 0, the earliest point, to Infinity, to signify removal of everything.\n // VTT Segment Loader doesn't need to do anything but in the regular SegmentLoader,\n // we then clamp the value to duration if necessary.\n\n this.remove(0, Infinity, done); // clears fmp4 captions\n\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearAllMp4Captions'\n }); // reset the cache in the transmuxer\n\n this.transmuxer_.postMessage({\n action: 'reset'\n });\n }\n }\n /**\n * Force the SegmentLoader to resync and start loading around the currentTime instead\n * of starting at the end of the buffer\n *\n * Useful for fast quality changes\n */\n\n resetLoader() {\n this.fetchAtBuffer_ = false;\n this.resyncLoader();\n }\n /**\n * Force the SegmentLoader to restart synchronization and make a conservative guess\n * before returning to the simple walk-forward method\n */\n\n resyncLoader() {\n if (this.transmuxer_) {\n // need to clear out any cached data to prepare for the new segment\n segmentTransmuxer.reset(this.transmuxer_);\n }\n this.mediaIndex = null;\n this.partIndex = null;\n this.syncPoint_ = null;\n this.isPendingTimestampOffset_ = false;\n this.shouldForceTimestampOffsetAfterResync_ = true;\n this.callQueue_ = [];\n this.loadQueue_ = [];\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n this.abort();\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearParsedMp4Captions'\n });\n }\n }\n /**\n * Remove any data in the source buffer between start and end times\n *\n * @param {number} start - the start time of the region to remove from the buffer\n * @param {number} end - the end time of the region to remove from the buffer\n * @param {Function} [done] - an optional callback to be executed when the remove\n * @param {boolean} force - force all remove operations to happen\n * operation is complete\n */\n\n remove(start, end, done = () => {}, force = false) {\n // clamp end to duration if we need to remove everything.\n // This is due to a browser bug that causes issues if we remove to Infinity.\n // videojs/videojs-contrib-hls#1225\n if (end === Infinity) {\n end = this.duration_();\n } // skip removes that would throw an error\n // commonly happens during a rendition switch at the start of a video\n // from start 0 to end 0\n\n if (end <= start) {\n this.logger_('skipping remove because end ${end} is <= start ${start}');\n return;\n }\n if (!this.sourceUpdater_ || !this.getMediaInfo_()) {\n this.logger_('skipping remove because no source updater or starting media info'); // nothing to remove if we haven't processed any media\n\n return;\n } // set it to one to complete this function's removes\n\n let removesRemaining = 1;\n const removeFinished = () => {\n removesRemaining--;\n if (removesRemaining === 0) {\n done();\n }\n };\n if (force || !this.audioDisabled_) {\n removesRemaining++;\n this.sourceUpdater_.removeAudio(start, end, removeFinished);\n } // While it would be better to only remove video if the main loader has video, this\n // should be safe with audio only as removeVideo will call back even if there's no\n // video buffer.\n //\n // In theory we can check to see if there's video before calling the remove, but in\n // the event that we're switching between renditions and from video to audio only\n // (when we add support for that), we may need to clear the video contents despite\n // what the new media will contain.\n\n if (force || this.loaderType_ === 'main') {\n this.gopBuffer_ = removeGopBuffer(this.gopBuffer_, start, end, this.timeMapping_);\n removesRemaining++;\n this.sourceUpdater_.removeVideo(start, end, removeFinished);\n } // remove any captions and ID3 tags\n\n for (const track in this.inbandTextTracks_) {\n removeCuesFromTrack(start, end, this.inbandTextTracks_[track]);\n }\n removeCuesFromTrack(start, end, this.segmentMetadataTrack_); // finished this function's removes\n\n removeFinished();\n }\n /**\n * (re-)schedule monitorBufferTick_ to run as soon as possible\n *\n * @private\n */\n\n monitorBuffer_() {\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n this.checkBufferTimeout_ = window$1.setTimeout(this.monitorBufferTick_.bind(this), 1);\n }\n /**\n * As long as the SegmentLoader is in the READY state, periodically\n * invoke fillBuffer_().\n *\n * @private\n */\n\n monitorBufferTick_() {\n if (this.state === 'READY') {\n this.fillBuffer_();\n }\n if (this.checkBufferTimeout_) {\n window$1.clearTimeout(this.checkBufferTimeout_);\n }\n this.checkBufferTimeout_ = window$1.setTimeout(this.monitorBufferTick_.bind(this), CHECK_BUFFER_DELAY);\n }\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n\n fillBuffer_() {\n // TODO since the source buffer maintains a queue, and we shouldn't call this function\n // except when we're ready for the next segment, this check can most likely be removed\n if (this.sourceUpdater_.updating()) {\n return;\n } // see if we need to begin loading immediately\n\n const segmentInfo = this.chooseNextRequest_();\n if (!segmentInfo) {\n return;\n }\n if (typeof segmentInfo.timestampOffset === 'number') {\n this.isPendingTimestampOffset_ = false;\n this.timelineChangeController_.pendingTimelineChange({\n type: this.loaderType_,\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n });\n }\n this.loadSegment_(segmentInfo);\n }\n /**\n * Determines if we should call endOfStream on the media source based\n * on the state of the buffer or if appened segment was the final\n * segment in the playlist.\n *\n * @param {number} [mediaIndex] the media index of segment we last appended\n * @param {Object} [playlist] a media playlist object\n * @return {boolean} do we need to call endOfStream on the MediaSource\n */\n\n isEndOfStream_(mediaIndex = this.mediaIndex, playlist = this.playlist_, partIndex = this.partIndex) {\n if (!playlist || !this.mediaSource_) {\n return false;\n }\n const segment = typeof mediaIndex === 'number' && playlist.segments[mediaIndex]; // mediaIndex is zero based but length is 1 based\n\n const appendedLastSegment = mediaIndex + 1 === playlist.segments.length; // true if there are no parts, or this is the last part.\n\n const appendedLastPart = !segment || !segment.parts || partIndex + 1 === segment.parts.length; // if we've buffered to the end of the video, we need to call endOfStream\n // so that MediaSources can trigger the `ended` event when it runs out of\n // buffered data instead of waiting for me\n\n return playlist.endList && this.mediaSource_.readyState === 'open' && appendedLastSegment && appendedLastPart;\n }\n /**\n * Determines what request should be made given current segment loader state.\n *\n * @return {Object} a request object that describes the segment/part to load\n */\n\n chooseNextRequest_() {\n const buffered = this.buffered_();\n const bufferedEnd = lastBufferedEnd(buffered) || 0;\n const bufferedTime = timeAheadOf(buffered, this.currentTime_());\n const preloaded = !this.hasPlayed_() && bufferedTime >= 1;\n const haveEnoughBuffer = bufferedTime >= this.goalBufferLength_();\n const segments = this.playlist_.segments; // return no segment if:\n // 1. we don't have segments\n // 2. The video has not yet played and we already downloaded a segment\n // 3. we already have enough buffered time\n\n if (!segments.length || preloaded || haveEnoughBuffer) {\n return null;\n }\n this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_(), this.loaderType_);\n const next = {\n partIndex: null,\n mediaIndex: null,\n startOfSegment: null,\n playlist: this.playlist_,\n isSyncRequest: Boolean(!this.syncPoint_)\n };\n if (next.isSyncRequest) {\n next.mediaIndex = getSyncSegmentCandidate(this.currentTimeline_, segments, bufferedEnd);\n this.logger_(`choose next request. Can not find sync point. Fallback to media Index: ${next.mediaIndex}`);\n } else if (this.mediaIndex !== null) {\n const segment = segments[this.mediaIndex];\n const partIndex = typeof this.partIndex === 'number' ? this.partIndex : -1;\n next.startOfSegment = segment.end ? segment.end : bufferedEnd;\n if (segment.parts && segment.parts[partIndex + 1]) {\n next.mediaIndex = this.mediaIndex;\n next.partIndex = partIndex + 1;\n } else {\n next.mediaIndex = this.mediaIndex + 1;\n }\n } else {\n // Find the segment containing the end of the buffer or current time.\n const {\n segmentIndex,\n startTime,\n partIndex\n } = Playlist.getMediaInfoForTime({\n exactManifestTimings: this.exactManifestTimings,\n playlist: this.playlist_,\n currentTime: this.fetchAtBuffer_ ? bufferedEnd : this.currentTime_(),\n startingPartIndex: this.syncPoint_.partIndex,\n startingSegmentIndex: this.syncPoint_.segmentIndex,\n startTime: this.syncPoint_.time\n });\n next.getMediaInfoForTime = this.fetchAtBuffer_ ? `bufferedEnd ${bufferedEnd}` : `currentTime ${this.currentTime_()}`;\n next.mediaIndex = segmentIndex;\n next.startOfSegment = startTime;\n next.partIndex = partIndex;\n this.logger_(`choose next request. Playlist switched and we have a sync point. Media Index: ${next.mediaIndex} `);\n }\n const nextSegment = segments[next.mediaIndex];\n let nextPart = nextSegment && typeof next.partIndex === 'number' && nextSegment.parts && nextSegment.parts[next.partIndex]; // if the next segment index is invalid or\n // the next partIndex is invalid do not choose a next segment.\n\n if (!nextSegment || typeof next.partIndex === 'number' && !nextPart) {\n return null;\n } // if the next segment has parts, and we don't have a partIndex.\n // Set partIndex to 0\n\n if (typeof next.partIndex !== 'number' && nextSegment.parts) {\n next.partIndex = 0;\n nextPart = nextSegment.parts[0];\n } // independentSegments applies to every segment in a playlist. If independentSegments appears in a main playlist,\n // it applies to each segment in each media playlist.\n // https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming-23#section-4.3.5.1\n\n const hasIndependentSegments = this.vhs_.playlists && this.vhs_.playlists.main && this.vhs_.playlists.main.independentSegments || this.playlist_.independentSegments; // if we have no buffered data then we need to make sure\n // that the next part we append is \"independent\" if possible.\n // So we check if the previous part is independent, and request\n // it if it is.\n\n if (!bufferedTime && nextPart && !hasIndependentSegments && !nextPart.independent) {\n if (next.partIndex === 0) {\n const lastSegment = segments[next.mediaIndex - 1];\n const lastSegmentLastPart = lastSegment.parts && lastSegment.parts.length && lastSegment.parts[lastSegment.parts.length - 1];\n if (lastSegmentLastPart && lastSegmentLastPart.independent) {\n next.mediaIndex -= 1;\n next.partIndex = lastSegment.parts.length - 1;\n next.independent = 'previous segment';\n }\n } else if (nextSegment.parts[next.partIndex - 1].independent) {\n next.partIndex -= 1;\n next.independent = 'previous part';\n }\n }\n const ended = this.mediaSource_ && this.mediaSource_.readyState === 'ended'; // do not choose a next segment if all of the following:\n // 1. this is the last segment in the playlist\n // 2. end of stream has been called on the media source already\n // 3. the player is not seeking\n\n if (next.mediaIndex >= segments.length - 1 && ended && !this.seeking_()) {\n return null;\n }\n if (this.shouldForceTimestampOffsetAfterResync_) {\n this.shouldForceTimestampOffsetAfterResync_ = false;\n next.forceTimestampOffset = true;\n this.logger_('choose next request. Force timestamp offset after loader resync');\n }\n return this.generateSegmentInfo_(next);\n }\n generateSegmentInfo_(options) {\n const {\n independent,\n playlist,\n mediaIndex,\n startOfSegment,\n isSyncRequest,\n partIndex,\n forceTimestampOffset,\n getMediaInfoForTime\n } = options;\n const segment = playlist.segments[mediaIndex];\n const part = typeof partIndex === 'number' && segment.parts[partIndex];\n const segmentInfo = {\n requestId: 'segment-loader-' + Math.random(),\n // resolve the segment URL relative to the playlist\n uri: part && part.resolvedUri || segment.resolvedUri,\n // the segment's mediaIndex at the time it was requested\n mediaIndex,\n partIndex: part ? partIndex : null,\n // whether or not to update the SegmentLoader's state with this\n // segment's mediaIndex\n isSyncRequest,\n startOfSegment,\n // the segment's playlist\n playlist,\n // unencrypted bytes of the segment\n bytes: null,\n // when a key is defined for this segment, the encrypted bytes\n encryptedBytes: null,\n // The target timestampOffset for this segment when we append it\n // to the source buffer\n timestampOffset: null,\n // The timeline that the segment is in\n timeline: segment.timeline,\n // The expected duration of the segment in seconds\n duration: part && part.duration || segment.duration,\n // retain the segment in case the playlist updates while doing an async process\n segment,\n part,\n byteLength: 0,\n transmuxer: this.transmuxer_,\n // type of getMediaInfoForTime that was used to get this segment\n getMediaInfoForTime,\n independent\n };\n const overrideCheck = typeof forceTimestampOffset !== 'undefined' ? forceTimestampOffset : this.isPendingTimestampOffset_;\n segmentInfo.timestampOffset = this.timestampOffsetForSegment_({\n segmentTimeline: segment.timeline,\n currentTimeline: this.currentTimeline_,\n startOfSegment,\n buffered: this.buffered_(),\n overrideCheck\n });\n const audioBufferedEnd = lastBufferedEnd(this.sourceUpdater_.audioBuffered());\n if (typeof audioBufferedEnd === 'number') {\n // since the transmuxer is using the actual timing values, but the buffer is\n // adjusted by the timestamp offset, we must adjust the value here\n segmentInfo.audioAppendStart = audioBufferedEnd - this.sourceUpdater_.audioTimestampOffset();\n }\n if (this.sourceUpdater_.videoBuffered().length) {\n segmentInfo.gopsToAlignWith = gopsSafeToAlignWith(this.gopBuffer_,\n // since the transmuxer is using the actual timing values, but the time is\n // adjusted by the timestmap offset, we must adjust the value here\n this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_);\n }\n return segmentInfo;\n } // get the timestampoffset for a segment,\n // added so that vtt segment loader can override and prevent\n // adding timestamp offsets.\n\n timestampOffsetForSegment_(options) {\n return timestampOffsetForSegment(options);\n }\n /**\n * Determines if the network has enough bandwidth to complete the current segment\n * request in a timely manner. If not, the request will be aborted early and bandwidth\n * updated to trigger a playlist switch.\n *\n * @param {Object} stats\n * Object containing stats about the request timing and size\n * @private\n */\n\n earlyAbortWhenNeeded_(stats) {\n if (this.vhs_.tech_.paused() ||\n // Don't abort if the current playlist is on the lowestEnabledRendition\n // TODO: Replace using timeout with a boolean indicating whether this playlist is\n // the lowestEnabledRendition.\n !this.xhrOptions_.timeout ||\n // Don't abort if we have no bandwidth information to estimate segment sizes\n !this.playlist_.attributes.BANDWIDTH) {\n return;\n } // Wait at least 1 second since the first byte of data has been received before\n // using the calculated bandwidth from the progress event to allow the bitrate\n // to stabilize\n\n if (Date.now() - (stats.firstBytesReceivedAt || Date.now()) < 1000) {\n return;\n }\n const currentTime = this.currentTime_();\n const measuredBandwidth = stats.bandwidth;\n const segmentDuration = this.pendingSegment_.duration;\n const requestTimeRemaining = Playlist.estimateSegmentRequestTime(segmentDuration, measuredBandwidth, this.playlist_, stats.bytesReceived); // Subtract 1 from the timeUntilRebuffer so we still consider an early abort\n // if we are only left with less than 1 second when the request completes.\n // A negative timeUntilRebuffering indicates we are already rebuffering\n\n const timeUntilRebuffer$1 = timeUntilRebuffer(this.buffered_(), currentTime, this.vhs_.tech_.playbackRate()) - 1; // Only consider aborting early if the estimated time to finish the download\n // is larger than the estimated time until the player runs out of forward buffer\n\n if (requestTimeRemaining <= timeUntilRebuffer$1) {\n return;\n }\n const switchCandidate = minRebufferMaxBandwidthSelector({\n main: this.vhs_.playlists.main,\n currentTime,\n bandwidth: measuredBandwidth,\n duration: this.duration_(),\n segmentDuration,\n timeUntilRebuffer: timeUntilRebuffer$1,\n currentTimeline: this.currentTimeline_,\n syncController: this.syncController_\n });\n if (!switchCandidate) {\n return;\n }\n const rebufferingImpact = requestTimeRemaining - timeUntilRebuffer$1;\n const timeSavedBySwitching = rebufferingImpact - switchCandidate.rebufferingImpact;\n let minimumTimeSaving = 0.5; // If we are already rebuffering, increase the amount of variance we add to the\n // potential round trip time of the new request so that we are not too aggressive\n // with switching to a playlist that might save us a fraction of a second.\n\n if (timeUntilRebuffer$1 <= TIME_FUDGE_FACTOR) {\n minimumTimeSaving = 1;\n }\n if (!switchCandidate.playlist || switchCandidate.playlist.uri === this.playlist_.uri || timeSavedBySwitching < minimumTimeSaving) {\n return;\n } // set the bandwidth to that of the desired playlist being sure to scale by\n // BANDWIDTH_VARIANCE and add one so the playlist selector does not exclude it\n // don't trigger a bandwidthupdate as the bandwidth is artifial\n\n this.bandwidth = switchCandidate.playlist.attributes.BANDWIDTH * Config.BANDWIDTH_VARIANCE + 1;\n this.trigger('earlyabort');\n }\n handleAbort_(segmentInfo) {\n this.logger_(`Aborting ${segmentInfoString(segmentInfo)}`);\n this.mediaRequestsAborted += 1;\n }\n /**\n * XHR `progress` event handler\n *\n * @param {Event}\n * The XHR `progress` event\n * @param {Object} simpleSegment\n * A simplified segment object copy\n * @private\n */\n\n handleProgress_(event, simpleSegment) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n this.trigger('progress');\n }\n handleTrackInfo_(simpleSegment, trackInfo) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n if (this.checkForIllegalMediaSwitch(trackInfo)) {\n return;\n }\n trackInfo = trackInfo || {}; // When we have track info, determine what media types this loader is dealing with.\n // Guard against cases where we're not getting track info at all until we are\n // certain that all streams will provide it.\n\n if (!shallowEqual(this.currentMediaInfo_, trackInfo)) {\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n this.startingMediaInfo_ = trackInfo;\n this.currentMediaInfo_ = trackInfo;\n this.logger_('trackinfo update', trackInfo);\n this.trigger('trackinfo');\n } // trackinfo may cause an abort if the trackinfo\n // causes a codec change to an unsupported codec.\n\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // set trackinfo on the pending segment so that\n // it can append.\n\n this.pendingSegment_.trackInfo = trackInfo; // check if any calls were waiting on the track info\n\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n }\n handleTimingInfo_(simpleSegment, mediaType, timeType, time) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n const segmentInfo = this.pendingSegment_;\n const timingInfoProperty = timingInfoPropertyForMedia(mediaType);\n segmentInfo[timingInfoProperty] = segmentInfo[timingInfoProperty] || {};\n segmentInfo[timingInfoProperty][timeType] = time;\n this.logger_(`timinginfo: ${mediaType} - ${timeType} - ${time}`); // check if any calls were waiting on the timing info\n\n if (this.hasEnoughInfoToAppend_()) {\n this.processCallQueue_();\n }\n }\n handleCaptions_(simpleSegment, captionData) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // This could only happen with fmp4 segments, but\n // should still not happen in general\n\n if (captionData.length === 0) {\n this.logger_('SegmentLoader received no captions from a caption event');\n return;\n }\n const segmentInfo = this.pendingSegment_; // Wait until we have some video data so that caption timing\n // can be adjusted by the timestamp offset\n\n if (!segmentInfo.hasAppendedData_) {\n this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, simpleSegment, captionData));\n return;\n }\n const timestampOffset = this.sourceUpdater_.videoTimestampOffset() === null ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset();\n const captionTracks = {}; // get total start/end and captions for each track/stream\n\n captionData.forEach(caption => {\n // caption.stream is actually a track name...\n // set to the existing values in tracks or default values\n captionTracks[caption.stream] = captionTracks[caption.stream] || {\n // Infinity, as any other value will be less than this\n startTime: Infinity,\n captions: [],\n // 0 as an other value will be more than this\n endTime: 0\n };\n const captionTrack = captionTracks[caption.stream];\n captionTrack.startTime = Math.min(captionTrack.startTime, caption.startTime + timestampOffset);\n captionTrack.endTime = Math.max(captionTrack.endTime, caption.endTime + timestampOffset);\n captionTrack.captions.push(caption);\n });\n Object.keys(captionTracks).forEach(trackName => {\n const {\n startTime,\n endTime,\n captions\n } = captionTracks[trackName];\n const inbandTextTracks = this.inbandTextTracks_;\n this.logger_(`adding cues from ${startTime} -> ${endTime} for ${trackName}`);\n createCaptionsTrackIfNotExists(inbandTextTracks, this.vhs_.tech_, trackName); // clear out any cues that start and end at the same time period for the same track.\n // We do this because a rendition change that also changes the timescale for captions\n // will result in captions being re-parsed for certain segments. If we add them again\n // without clearing we will have two of the same captions visible.\n\n removeCuesFromTrack(startTime, endTime, inbandTextTracks[trackName]);\n addCaptionData({\n captionArray: captions,\n inbandTextTracks,\n timestampOffset\n });\n }); // Reset stored captions since we added parsed\n // captions to a text track at this point\n\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearParsedMp4Captions'\n });\n }\n }\n handleId3_(simpleSegment, id3Frames, dispatchType) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n }\n const segmentInfo = this.pendingSegment_; // we need to have appended data in order for the timestamp offset to be set\n\n if (!segmentInfo.hasAppendedData_) {\n this.metadataQueue_.id3.push(this.handleId3_.bind(this, simpleSegment, id3Frames, dispatchType));\n return;\n }\n this.addMetadataToTextTrack(dispatchType, id3Frames, this.duration_());\n }\n processMetadataQueue_() {\n this.metadataQueue_.id3.forEach(fn => fn());\n this.metadataQueue_.caption.forEach(fn => fn());\n this.metadataQueue_.id3 = [];\n this.metadataQueue_.caption = [];\n }\n processCallQueue_() {\n const callQueue = this.callQueue_; // Clear out the queue before the queued functions are run, since some of the\n // functions may check the length of the load queue and default to pushing themselves\n // back onto the queue.\n\n this.callQueue_ = [];\n callQueue.forEach(fun => fun());\n }\n processLoadQueue_() {\n const loadQueue = this.loadQueue_; // Clear out the queue before the queued functions are run, since some of the\n // functions may check the length of the load queue and default to pushing themselves\n // back onto the queue.\n\n this.loadQueue_ = [];\n loadQueue.forEach(fun => fun());\n }\n /**\n * Determines whether the loader has enough info to load the next segment.\n *\n * @return {boolean}\n * Whether or not the loader has enough info to load the next segment\n */\n\n hasEnoughInfoToLoad_() {\n // Since primary timing goes by video, only the audio loader potentially needs to wait\n // to load.\n if (this.loaderType_ !== 'audio') {\n return true;\n }\n const segmentInfo = this.pendingSegment_; // A fill buffer must have already run to establish a pending segment before there's\n // enough info to load.\n\n if (!segmentInfo) {\n return false;\n } // The first segment can and should be loaded immediately so that source buffers are\n // created together (before appending). Source buffer creation uses the presence of\n // audio and video data to determine whether to create audio/video source buffers, and\n // uses processed (transmuxed or parsed) media to determine the types required.\n\n if (!this.getCurrentMediaInfo_()) {\n return true;\n }\n if (\n // Technically, instead of waiting to load a segment on timeline changes, a segment\n // can be requested and downloaded and only wait before it is transmuxed or parsed.\n // But in practice, there are a few reasons why it is better to wait until a loader\n // is ready to append that segment before requesting and downloading:\n //\n // 1. Because audio and main loaders cross discontinuities together, if this loader\n // is waiting for the other to catch up, then instead of requesting another\n // segment and using up more bandwidth, by not yet loading, more bandwidth is\n // allotted to the loader currently behind.\n // 2. media-segment-request doesn't have to have logic to consider whether a segment\n // is ready to be processed or not, isolating the queueing behavior to the loader.\n // 3. The audio loader bases some of its segment properties on timing information\n // provided by the main loader, meaning that, if the logic for waiting on\n // processing was in media-segment-request, then it would also need to know how\n // to re-generate the segment information after the main loader caught up.\n shouldWaitForTimelineChange({\n timelineChangeController: this.timelineChangeController_,\n currentTimeline: this.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: this.loaderType_,\n audioDisabled: this.audioDisabled_\n })) {\n return false;\n }\n return true;\n }\n getCurrentMediaInfo_(segmentInfo = this.pendingSegment_) {\n return segmentInfo && segmentInfo.trackInfo || this.currentMediaInfo_;\n }\n getMediaInfo_(segmentInfo = this.pendingSegment_) {\n return this.getCurrentMediaInfo_(segmentInfo) || this.startingMediaInfo_;\n }\n getPendingSegmentPlaylist() {\n return this.pendingSegment_ ? this.pendingSegment_.playlist : null;\n }\n hasEnoughInfoToAppend_() {\n if (!this.sourceUpdater_.ready()) {\n return false;\n } // If content needs to be removed or the loader is waiting on an append reattempt,\n // then no additional content should be appended until the prior append is resolved.\n\n if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) {\n return false;\n }\n const segmentInfo = this.pendingSegment_;\n const trackInfo = this.getCurrentMediaInfo_(); // no segment to append any data for or\n // we do not have information on this specific\n // segment yet\n\n if (!segmentInfo || !trackInfo) {\n return false;\n }\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n if (hasVideo && !segmentInfo.videoTimingInfo) {\n return false;\n } // muxed content only relies on video timing information for now.\n\n if (hasAudio && !this.audioDisabled_ && !isMuxed && !segmentInfo.audioTimingInfo) {\n return false;\n }\n if (shouldWaitForTimelineChange({\n timelineChangeController: this.timelineChangeController_,\n currentTimeline: this.currentTimeline_,\n segmentTimeline: segmentInfo.timeline,\n loaderType: this.loaderType_,\n audioDisabled: this.audioDisabled_\n })) {\n return false;\n }\n return true;\n }\n handleData_(simpleSegment, result) {\n this.earlyAbortWhenNeeded_(simpleSegment.stats);\n if (this.checkForAbort_(simpleSegment.requestId)) {\n return;\n } // If there's anything in the call queue, then this data came later and should be\n // executed after the calls currently queued.\n\n if (this.callQueue_.length || !this.hasEnoughInfoToAppend_()) {\n this.callQueue_.push(this.handleData_.bind(this, simpleSegment, result));\n return;\n }\n const segmentInfo = this.pendingSegment_; // update the time mapping so we can translate from display time to media time\n\n this.setTimeMapping_(segmentInfo.timeline); // for tracking overall stats\n\n this.updateMediaSecondsLoaded_(segmentInfo.part || segmentInfo.segment); // Note that the state isn't changed from loading to appending. This is because abort\n // logic may change behavior depending on the state, and changing state too early may\n // inflate our estimates of bandwidth. In the future this should be re-examined to\n // note more granular states.\n // don't process and append data if the mediaSource is closed\n\n if (this.mediaSource_.readyState === 'closed') {\n return;\n } // if this request included an initialization segment, save that data\n // to the initSegment cache\n\n if (simpleSegment.map) {\n simpleSegment.map = this.initSegmentForMap(simpleSegment.map, true); // move over init segment properties to media request\n\n segmentInfo.segment.map = simpleSegment.map;\n } // if this request included a segment key, save that data in the cache\n\n if (simpleSegment.key) {\n this.segmentKey(simpleSegment.key, true);\n }\n segmentInfo.isFmp4 = simpleSegment.isFmp4;\n segmentInfo.timingInfo = segmentInfo.timingInfo || {};\n if (segmentInfo.isFmp4) {\n this.trigger('fmp4');\n segmentInfo.timingInfo.start = segmentInfo[timingInfoPropertyForMedia(result.type)].start;\n } else {\n const trackInfo = this.getCurrentMediaInfo_();\n const useVideoTimingInfo = this.loaderType_ === 'main' && trackInfo && trackInfo.hasVideo;\n let firstVideoFrameTimeForData;\n if (useVideoTimingInfo) {\n firstVideoFrameTimeForData = segmentInfo.videoTimingInfo.start;\n } // Segment loader knows more about segment timing than the transmuxer (in certain\n // aspects), so make any changes required for a more accurate start time.\n // Don't set the end time yet, as the segment may not be finished processing.\n\n segmentInfo.timingInfo.start = this.trueSegmentStart_({\n currentStart: segmentInfo.timingInfo.start,\n playlist: segmentInfo.playlist,\n mediaIndex: segmentInfo.mediaIndex,\n currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(),\n useVideoTimingInfo,\n firstVideoFrameTimeForData,\n videoTimingInfo: segmentInfo.videoTimingInfo,\n audioTimingInfo: segmentInfo.audioTimingInfo\n });\n } // Init segments for audio and video only need to be appended in certain cases. Now\n // that data is about to be appended, we can check the final cases to determine\n // whether we should append an init segment.\n\n this.updateAppendInitSegmentStatus(segmentInfo, result.type); // Timestamp offset should be updated once we get new data and have its timing info,\n // as we use the start of the segment to offset the best guess (playlist provided)\n // timestamp offset.\n\n this.updateSourceBufferTimestampOffset_(segmentInfo); // if this is a sync request we need to determine whether it should\n // be appended or not.\n\n if (segmentInfo.isSyncRequest) {\n // first save/update our timing info for this segment.\n // this is what allows us to choose an accurate segment\n // and the main reason we make a sync request.\n this.updateTimingInfoEnd_(segmentInfo);\n this.syncController_.saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping: this.loaderType_ === 'main'\n });\n const next = this.chooseNextRequest_(); // If the sync request isn't the segment that would be requested next\n // after taking into account its timing info, do not append it.\n\n if (next.mediaIndex !== segmentInfo.mediaIndex || next.partIndex !== segmentInfo.partIndex) {\n this.logger_('sync segment was incorrect, not appending');\n return;\n } // otherwise append it like any other segment as our guess was correct.\n\n this.logger_('sync segment was correct, appending');\n } // Save some state so that in the future anything waiting on first append (and/or\n // timestamp offset(s)) can process immediately. While the extra state isn't optimal,\n // we need some notion of whether the timestamp offset or other relevant information\n // has had a chance to be set.\n\n segmentInfo.hasAppendedData_ = true; // Now that the timestamp offset should be set, we can append any waiting ID3 tags.\n\n this.processMetadataQueue_();\n this.appendData_(segmentInfo, result);\n }\n updateAppendInitSegmentStatus(segmentInfo, type) {\n // alt audio doesn't manage timestamp offset\n if (this.loaderType_ === 'main' && typeof segmentInfo.timestampOffset === 'number' &&\n // in the case that we're handling partial data, we don't want to append an init\n // segment for each chunk\n !segmentInfo.changedTimestampOffset) {\n // if the timestamp offset changed, the timeline may have changed, so we have to re-\n // append init segments\n this.appendInitSegment_ = {\n audio: true,\n video: true\n };\n }\n if (this.playlistOfLastInitSegment_[type] !== segmentInfo.playlist) {\n // make sure we append init segment on playlist changes, in case the media config\n // changed\n this.appendInitSegment_[type] = true;\n }\n }\n getInitSegmentAndUpdateState_({\n type,\n initSegment,\n map,\n playlist\n }) {\n // \"The EXT-X-MAP tag specifies how to obtain the Media Initialization Section\n // (Section 3) required to parse the applicable Media Segments. It applies to every\n // Media Segment that appears after it in the Playlist until the next EXT-X-MAP tag\n // or until the end of the playlist.\"\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.2.5\n if (map) {\n const id = initSegmentId(map);\n if (this.activeInitSegmentId_ === id) {\n // don't need to re-append the init segment if the ID matches\n return null;\n } // a map-specified init segment takes priority over any transmuxed (or otherwise\n // obtained) init segment\n //\n // this also caches the init segment for later use\n\n initSegment = this.initSegmentForMap(map, true).bytes;\n this.activeInitSegmentId_ = id;\n } // We used to always prepend init segments for video, however, that shouldn't be\n // necessary. Instead, we should only append on changes, similar to what we've always\n // done for audio. This is more important (though may not be that important) for\n // frame-by-frame appending for LHLS, simply because of the increased quantity of\n // appends.\n\n if (initSegment && this.appendInitSegment_[type]) {\n // Make sure we track the playlist that we last used for the init segment, so that\n // we can re-append the init segment in the event that we get data from a new\n // playlist. Discontinuities and track changes are handled in other sections.\n this.playlistOfLastInitSegment_[type] = playlist; // Disable future init segment appends for this type. Until a change is necessary.\n\n this.appendInitSegment_[type] = false; // we need to clear out the fmp4 active init segment id, since\n // we are appending the muxer init segment\n\n this.activeInitSegmentId_ = null;\n return initSegment;\n }\n return null;\n }\n handleQuotaExceededError_({\n segmentInfo,\n type,\n bytes\n }, error) {\n const audioBuffered = this.sourceUpdater_.audioBuffered();\n const videoBuffered = this.sourceUpdater_.videoBuffered(); // For now we're ignoring any notion of gaps in the buffer, but they, in theory,\n // should be cleared out during the buffer removals. However, log in case it helps\n // debug.\n\n if (audioBuffered.length > 1) {\n this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: ' + timeRangesToArray(audioBuffered).join(', '));\n }\n if (videoBuffered.length > 1) {\n this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: ' + timeRangesToArray(videoBuffered).join(', '));\n }\n const audioBufferStart = audioBuffered.length ? audioBuffered.start(0) : 0;\n const audioBufferEnd = audioBuffered.length ? audioBuffered.end(audioBuffered.length - 1) : 0;\n const videoBufferStart = videoBuffered.length ? videoBuffered.start(0) : 0;\n const videoBufferEnd = videoBuffered.length ? videoBuffered.end(videoBuffered.length - 1) : 0;\n if (audioBufferEnd - audioBufferStart <= MIN_BACK_BUFFER && videoBufferEnd - videoBufferStart <= MIN_BACK_BUFFER) {\n // Can't remove enough buffer to make room for new segment (or the browser doesn't\n // allow for appends of segments this size). In the future, it may be possible to\n // split up the segment and append in pieces, but for now, error out this playlist\n // in an attempt to switch to a more manageable rendition.\n this.logger_('On QUOTA_EXCEEDED_ERR, single segment too large to append to ' + 'buffer, triggering an error. ' + `Appended byte length: ${bytes.byteLength}, ` + `audio buffer: ${timeRangesToArray(audioBuffered).join(', ')}, ` + `video buffer: ${timeRangesToArray(videoBuffered).join(', ')}, `);\n this.error({\n message: 'Quota exceeded error with append of a single segment of content',\n excludeUntil: Infinity\n });\n this.trigger('error');\n return;\n } // To try to resolve the quota exceeded error, clear back buffer and retry. This means\n // that the segment-loader should block on future events until this one is handled, so\n // that it doesn't keep moving onto further segments. Adding the call to the call\n // queue will prevent further appends until waitingOnRemove_ and\n // quotaExceededErrorRetryTimeout_ are cleared.\n //\n // Note that this will only block the current loader. In the case of demuxed content,\n // the other load may keep filling as fast as possible. In practice, this should be\n // OK, as it is a rare case when either audio has a high enough bitrate to fill up a\n // source buffer, or video fills without enough room for audio to append (and without\n // the availability of clearing out seconds of back buffer to make room for audio).\n // But it might still be good to handle this case in the future as a TODO.\n\n this.waitingOnRemove_ = true;\n this.callQueue_.push(this.appendToSourceBuffer_.bind(this, {\n segmentInfo,\n type,\n bytes\n }));\n const currentTime = this.currentTime_(); // Try to remove as much audio and video as possible to make room for new content\n // before retrying.\n\n const timeToRemoveUntil = currentTime - MIN_BACK_BUFFER;\n this.logger_(`On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to ${timeToRemoveUntil}`);\n this.remove(0, timeToRemoveUntil, () => {\n this.logger_(`On QUOTA_EXCEEDED_ERR, retrying append in ${MIN_BACK_BUFFER}s`);\n this.waitingOnRemove_ = false; // wait the length of time alotted in the back buffer to prevent wasted\n // attempts (since we can't clear less than the minimum)\n\n this.quotaExceededErrorRetryTimeout_ = window$1.setTimeout(() => {\n this.logger_('On QUOTA_EXCEEDED_ERR, re-processing call queue');\n this.quotaExceededErrorRetryTimeout_ = null;\n this.processCallQueue_();\n }, MIN_BACK_BUFFER * 1000);\n }, true);\n }\n handleAppendError_({\n segmentInfo,\n type,\n bytes\n }, error) {\n // if there's no error, nothing to do\n if (!error) {\n return;\n }\n if (error.code === QUOTA_EXCEEDED_ERR) {\n this.handleQuotaExceededError_({\n segmentInfo,\n type,\n bytes\n }); // A quota exceeded error should be recoverable with a future re-append, so no need\n // to trigger an append error.\n\n return;\n }\n this.logger_('Received non QUOTA_EXCEEDED_ERR on append', error);\n this.error(`${type} append of ${bytes.length}b failed for segment ` + `#${segmentInfo.mediaIndex} in playlist ${segmentInfo.playlist.id}`); // If an append errors, we often can't recover.\n // (see https://w3c.github.io/media-source/#sourcebuffer-append-error).\n //\n // Trigger a special error so that it can be handled separately from normal,\n // recoverable errors.\n\n this.trigger('appenderror');\n }\n appendToSourceBuffer_({\n segmentInfo,\n type,\n initSegment,\n data,\n bytes\n }) {\n // If this is a re-append, bytes were already created and don't need to be recreated\n if (!bytes) {\n const segments = [data];\n let byteLength = data.byteLength;\n if (initSegment) {\n // if the media initialization segment is changing, append it before the content\n // segment\n segments.unshift(initSegment);\n byteLength += initSegment.byteLength;\n } // Technically we should be OK appending the init segment separately, however, we\n // haven't yet tested that, and prepending is how we have always done things.\n\n bytes = concatSegments({\n bytes: byteLength,\n segments\n });\n }\n this.sourceUpdater_.appendBuffer({\n segmentInfo,\n type,\n bytes\n }, this.handleAppendError_.bind(this, {\n segmentInfo,\n type,\n bytes\n }));\n }\n handleSegmentTimingInfo_(type, requestId, segmentTimingInfo) {\n if (!this.pendingSegment_ || requestId !== this.pendingSegment_.requestId) {\n return;\n }\n const segment = this.pendingSegment_.segment;\n const timingInfoProperty = `${type}TimingInfo`;\n if (!segment[timingInfoProperty]) {\n segment[timingInfoProperty] = {};\n }\n segment[timingInfoProperty].transmuxerPrependedSeconds = segmentTimingInfo.prependedContentDuration || 0;\n segment[timingInfoProperty].transmuxedPresentationStart = segmentTimingInfo.start.presentation;\n segment[timingInfoProperty].transmuxedDecodeStart = segmentTimingInfo.start.decode;\n segment[timingInfoProperty].transmuxedPresentationEnd = segmentTimingInfo.end.presentation;\n segment[timingInfoProperty].transmuxedDecodeEnd = segmentTimingInfo.end.decode; // mainly used as a reference for debugging\n\n segment[timingInfoProperty].baseMediaDecodeTime = segmentTimingInfo.baseMediaDecodeTime;\n }\n appendData_(segmentInfo, result) {\n const {\n type,\n data\n } = result;\n if (!data || !data.byteLength) {\n return;\n }\n if (type === 'audio' && this.audioDisabled_) {\n return;\n }\n const initSegment = this.getInitSegmentAndUpdateState_({\n type,\n initSegment: result.initSegment,\n playlist: segmentInfo.playlist,\n map: segmentInfo.isFmp4 ? segmentInfo.segment.map : null\n });\n this.appendToSourceBuffer_({\n segmentInfo,\n type,\n initSegment,\n data\n });\n }\n /**\n * load a specific segment from a request into the buffer\n *\n * @private\n */\n\n loadSegment_(segmentInfo) {\n this.state = 'WAITING';\n this.pendingSegment_ = segmentInfo;\n this.trimBackBuffer_(segmentInfo);\n if (typeof segmentInfo.timestampOffset === 'number') {\n if (this.transmuxer_) {\n this.transmuxer_.postMessage({\n action: 'clearAllMp4Captions'\n });\n }\n }\n if (!this.hasEnoughInfoToLoad_()) {\n this.loadQueue_.push(() => {\n // regenerate the audioAppendStart, timestampOffset, etc as they\n // may have changed since this function was added to the queue.\n const options = _extends({}, segmentInfo, {\n forceTimestampOffset: true\n });\n _extends(segmentInfo, this.generateSegmentInfo_(options));\n this.isPendingTimestampOffset_ = false;\n this.updateTransmuxerAndRequestSegment_(segmentInfo);\n });\n return;\n }\n this.updateTransmuxerAndRequestSegment_(segmentInfo);\n }\n updateTransmuxerAndRequestSegment_(segmentInfo) {\n // We'll update the source buffer's timestamp offset once we have transmuxed data, but\n // the transmuxer still needs to be updated before then.\n //\n // Even though keepOriginalTimestamps is set to true for the transmuxer, timestamp\n // offset must be passed to the transmuxer for stream correcting adjustments.\n if (this.shouldUpdateTransmuxerTimestampOffset_(segmentInfo.timestampOffset)) {\n this.gopBuffer_.length = 0; // gopsToAlignWith was set before the GOP buffer was cleared\n\n segmentInfo.gopsToAlignWith = [];\n this.timeMapping_ = 0; // reset values in the transmuxer since a discontinuity should start fresh\n\n this.transmuxer_.postMessage({\n action: 'reset'\n });\n this.transmuxer_.postMessage({\n action: 'setTimestampOffset',\n timestampOffset: segmentInfo.timestampOffset\n });\n }\n const simpleSegment = this.createSimplifiedSegmentObj_(segmentInfo);\n const isEndOfStream = this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex);\n const isWalkingForward = this.mediaIndex !== null;\n const isDiscontinuity = segmentInfo.timeline !== this.currentTimeline_ &&\n // currentTimeline starts at -1, so we shouldn't end the timeline switching to 0,\n // the first timeline\n segmentInfo.timeline > 0;\n const isEndOfTimeline = isEndOfStream || isWalkingForward && isDiscontinuity;\n this.logger_(`Requesting ${segmentInfoString(segmentInfo)}`); // If there's an init segment associated with this segment, but it is not cached (identified by a lack of bytes),\n // then this init segment has never been seen before and should be appended.\n //\n // At this point the content type (audio/video or both) is not yet known, but it should be safe to set\n // both to true and leave the decision of whether to append the init segment to append time.\n\n if (simpleSegment.map && !simpleSegment.map.bytes) {\n this.logger_('going to request init segment.');\n this.appendInitSegment_ = {\n video: true,\n audio: true\n };\n }\n segmentInfo.abortRequests = mediaSegmentRequest({\n xhr: this.vhs_.xhr,\n xhrOptions: this.xhrOptions_,\n decryptionWorker: this.decrypter_,\n segment: simpleSegment,\n abortFn: this.handleAbort_.bind(this, segmentInfo),\n progressFn: this.handleProgress_.bind(this),\n trackInfoFn: this.handleTrackInfo_.bind(this),\n timingInfoFn: this.handleTimingInfo_.bind(this),\n videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'video', segmentInfo.requestId),\n audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'audio', segmentInfo.requestId),\n captionsFn: this.handleCaptions_.bind(this),\n isEndOfTimeline,\n endedTimelineFn: () => {\n this.logger_('received endedtimeline callback');\n },\n id3Fn: this.handleId3_.bind(this),\n dataFn: this.handleData_.bind(this),\n doneFn: this.segmentRequestFinished_.bind(this),\n onTransmuxerLog: ({\n message,\n level,\n stream\n }) => {\n this.logger_(`${segmentInfoString(segmentInfo)} logged from transmuxer stream ${stream} as a ${level}: ${message}`);\n }\n });\n }\n /**\n * trim the back buffer so that we don't have too much data\n * in the source buffer\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n */\n\n trimBackBuffer_(segmentInfo) {\n const removeToTime = safeBackBufferTrimTime(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); // Chrome has a hard limit of 150MB of\n // buffer and a very conservative \"garbage collector\"\n // We manually clear out the old buffer to ensure\n // we don't trigger the QuotaExceeded error\n // on the source buffer during subsequent appends\n\n if (removeToTime > 0) {\n this.remove(0, removeToTime);\n }\n }\n /**\n * created a simplified copy of the segment object with just the\n * information necessary to perform the XHR and decryption\n *\n * @private\n *\n * @param {Object} segmentInfo - the current segment\n * @return {Object} a simplified segment object copy\n */\n\n createSimplifiedSegmentObj_(segmentInfo) {\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n const simpleSegment = {\n resolvedUri: part ? part.resolvedUri : segment.resolvedUri,\n byterange: part ? part.byterange : segment.byterange,\n requestId: segmentInfo.requestId,\n transmuxer: segmentInfo.transmuxer,\n audioAppendStart: segmentInfo.audioAppendStart,\n gopsToAlignWith: segmentInfo.gopsToAlignWith,\n part: segmentInfo.part\n };\n const previousSegment = segmentInfo.playlist.segments[segmentInfo.mediaIndex - 1];\n if (previousSegment && previousSegment.timeline === segment.timeline) {\n // The baseStartTime of a segment is used to handle rollover when probing the TS\n // segment to retrieve timing information. Since the probe only looks at the media's\n // times (e.g., PTS and DTS values of the segment), and doesn't consider the\n // player's time (e.g., player.currentTime()), baseStartTime should reflect the\n // media time as well. transmuxedDecodeEnd represents the end time of a segment, in\n // seconds of media time, so should be used here. The previous segment is used since\n // the end of the previous segment should represent the beginning of the current\n // segment, so long as they are on the same timeline.\n if (previousSegment.videoTimingInfo) {\n simpleSegment.baseStartTime = previousSegment.videoTimingInfo.transmuxedDecodeEnd;\n } else if (previousSegment.audioTimingInfo) {\n simpleSegment.baseStartTime = previousSegment.audioTimingInfo.transmuxedDecodeEnd;\n }\n }\n if (segment.key) {\n // if the media sequence is greater than 2^32, the IV will be incorrect\n // assuming 10s segments, that would be about 1300 years\n const iv = segment.key.iv || new Uint32Array([0, 0, 0, segmentInfo.mediaIndex + segmentInfo.playlist.mediaSequence]);\n simpleSegment.key = this.segmentKey(segment.key);\n simpleSegment.key.iv = iv;\n }\n if (segment.map) {\n simpleSegment.map = this.initSegmentForMap(segment.map);\n }\n return simpleSegment;\n }\n saveTransferStats_(stats) {\n // every request counts as a media request even if it has been aborted\n // or canceled due to a timeout\n this.mediaRequests += 1;\n if (stats) {\n this.mediaBytesTransferred += stats.bytesReceived;\n this.mediaTransferDuration += stats.roundTripTime;\n }\n }\n saveBandwidthRelatedStats_(duration, stats) {\n // byteLength will be used for throughput, and should be based on bytes receieved,\n // which we only know at the end of the request and should reflect total bytes\n // downloaded rather than just bytes processed from components of the segment\n this.pendingSegment_.byteLength = stats.bytesReceived;\n if (duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) {\n this.logger_(`Ignoring segment's bandwidth because its duration of ${duration}` + ` is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS}`);\n return;\n }\n this.bandwidth = stats.bandwidth;\n this.roundTrip = stats.roundTripTime;\n }\n handleTimeout_() {\n // although the VTT segment loader bandwidth isn't really used, it's good to\n // maintain functinality between segment loaders\n this.mediaRequestsTimedout += 1;\n this.bandwidth = 1;\n this.roundTrip = NaN;\n this.trigger('bandwidthupdate');\n this.trigger('timeout');\n }\n /**\n * Handle the callback from the segmentRequest function and set the\n * associated SegmentLoader state and errors if necessary\n *\n * @private\n */\n\n segmentRequestFinished_(error, simpleSegment, result) {\n // TODO handle special cases, e.g., muxed audio/video but only audio in the segment\n // check the call queue directly since this function doesn't need to deal with any\n // data, and can continue even if the source buffers are not set up and we didn't get\n // any data from the segment\n if (this.callQueue_.length) {\n this.callQueue_.push(this.segmentRequestFinished_.bind(this, error, simpleSegment, result));\n return;\n }\n this.saveTransferStats_(simpleSegment.stats); // The request was aborted and the SegmentLoader has already been reset\n\n if (!this.pendingSegment_) {\n return;\n } // the request was aborted and the SegmentLoader has already started\n // another request. this can happen when the timeout for an aborted\n // request triggers due to a limitation in the XHR library\n // do not count this as any sort of request or we risk double-counting\n\n if (simpleSegment.requestId !== this.pendingSegment_.requestId) {\n return;\n } // an error occurred from the active pendingSegment_ so reset everything\n\n if (error) {\n this.pendingSegment_ = null;\n this.state = 'READY'; // aborts are not a true error condition and nothing corrective needs to be done\n\n if (error.code === REQUEST_ERRORS.ABORTED) {\n return;\n }\n this.pause(); // the error is really just that at least one of the requests timed-out\n // set the bandwidth to a very low value and trigger an ABR switch to\n // take emergency action\n\n if (error.code === REQUEST_ERRORS.TIMEOUT) {\n this.handleTimeout_();\n return;\n } // if control-flow has arrived here, then the error is real\n // emit an error event to exclude the current playlist\n\n this.mediaRequestsErrored += 1;\n this.error(error);\n this.trigger('error');\n return;\n }\n const segmentInfo = this.pendingSegment_; // the response was a success so set any bandwidth stats the request\n // generated for ABR purposes\n\n this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats);\n segmentInfo.endOfAllRequests = simpleSegment.endOfAllRequests;\n if (result.gopInfo) {\n this.gopBuffer_ = updateGopBuffer(this.gopBuffer_, result.gopInfo, this.safeAppend_);\n } // Although we may have already started appending on progress, we shouldn't switch the\n // state away from loading until we are officially done loading the segment data.\n\n this.state = 'APPENDING'; // used for testing\n\n this.trigger('appending');\n this.waitForAppendsToComplete_(segmentInfo);\n }\n setTimeMapping_(timeline) {\n const timelineMapping = this.syncController_.mappingForTimeline(timeline);\n if (timelineMapping !== null) {\n this.timeMapping_ = timelineMapping;\n }\n }\n updateMediaSecondsLoaded_(segment) {\n if (typeof segment.start === 'number' && typeof segment.end === 'number') {\n this.mediaSecondsLoaded += segment.end - segment.start;\n } else {\n this.mediaSecondsLoaded += segment.duration;\n }\n }\n shouldUpdateTransmuxerTimestampOffset_(timestampOffset) {\n if (timestampOffset === null) {\n return false;\n } // note that we're potentially using the same timestamp offset for both video and\n // audio\n\n if (this.loaderType_ === 'main' && timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) {\n return true;\n }\n if (!this.audioDisabled_ && timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) {\n return true;\n }\n return false;\n }\n trueSegmentStart_({\n currentStart,\n playlist,\n mediaIndex,\n firstVideoFrameTimeForData,\n currentVideoTimestampOffset,\n useVideoTimingInfo,\n videoTimingInfo,\n audioTimingInfo\n }) {\n if (typeof currentStart !== 'undefined') {\n // if start was set once, keep using it\n return currentStart;\n }\n if (!useVideoTimingInfo) {\n return audioTimingInfo.start;\n }\n const previousSegment = playlist.segments[mediaIndex - 1]; // The start of a segment should be the start of the first full frame contained\n // within that segment. Since the transmuxer maintains a cache of incomplete data\n // from and/or the last frame seen, the start time may reflect a frame that starts\n // in the previous segment. Check for that case and ensure the start time is\n // accurate for the segment.\n\n if (mediaIndex === 0 || !previousSegment || typeof previousSegment.start === 'undefined' || previousSegment.end !== firstVideoFrameTimeForData + currentVideoTimestampOffset) {\n return firstVideoFrameTimeForData;\n }\n return videoTimingInfo.start;\n }\n waitForAppendsToComplete_(segmentInfo) {\n const trackInfo = this.getCurrentMediaInfo_(segmentInfo);\n if (!trackInfo) {\n this.error({\n message: 'No starting media returned, likely due to an unsupported media format.',\n playlistExclusionDuration: Infinity\n });\n this.trigger('error');\n return;\n } // Although transmuxing is done, appends may not yet be finished. Throw a marker\n // on each queue this loader is responsible for to ensure that the appends are\n // complete.\n\n const {\n hasAudio,\n hasVideo,\n isMuxed\n } = trackInfo;\n const waitForVideo = this.loaderType_ === 'main' && hasVideo;\n const waitForAudio = !this.audioDisabled_ && hasAudio && !isMuxed;\n segmentInfo.waitingOnAppends = 0; // segments with no data\n\n if (!segmentInfo.hasAppendedData_) {\n if (!segmentInfo.timingInfo && typeof segmentInfo.timestampOffset === 'number') {\n // When there's no audio or video data in the segment, there's no audio or video\n // timing information.\n //\n // If there's no audio or video timing information, then the timestamp offset\n // can't be adjusted to the appropriate value for the transmuxer and source\n // buffers.\n //\n // Therefore, the next segment should be used to set the timestamp offset.\n this.isPendingTimestampOffset_ = true;\n } // override settings for metadata only segments\n\n segmentInfo.timingInfo = {\n start: 0\n };\n segmentInfo.waitingOnAppends++;\n if (!this.isPendingTimestampOffset_) {\n // update the timestampoffset\n this.updateSourceBufferTimestampOffset_(segmentInfo); // make sure the metadata queue is processed even though we have\n // no video/audio data.\n\n this.processMetadataQueue_();\n } // append is \"done\" instantly with no data.\n\n this.checkAppendsDone_(segmentInfo);\n return;\n } // Since source updater could call back synchronously, do the increments first.\n\n if (waitForVideo) {\n segmentInfo.waitingOnAppends++;\n }\n if (waitForAudio) {\n segmentInfo.waitingOnAppends++;\n }\n if (waitForVideo) {\n this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo));\n }\n if (waitForAudio) {\n this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, segmentInfo));\n }\n }\n checkAppendsDone_(segmentInfo) {\n if (this.checkForAbort_(segmentInfo.requestId)) {\n return;\n }\n segmentInfo.waitingOnAppends--;\n if (segmentInfo.waitingOnAppends === 0) {\n this.handleAppendsDone_();\n }\n }\n checkForIllegalMediaSwitch(trackInfo) {\n const illegalMediaSwitchError = illegalMediaSwitch(this.loaderType_, this.getCurrentMediaInfo_(), trackInfo);\n if (illegalMediaSwitchError) {\n this.error({\n message: illegalMediaSwitchError,\n playlistExclusionDuration: Infinity\n });\n this.trigger('error');\n return true;\n }\n return false;\n }\n updateSourceBufferTimestampOffset_(segmentInfo) {\n if (segmentInfo.timestampOffset === null ||\n // we don't yet have the start for whatever media type (video or audio) has\n // priority, timing-wise, so we must wait\n typeof segmentInfo.timingInfo.start !== 'number' ||\n // already updated the timestamp offset for this segment\n segmentInfo.changedTimestampOffset ||\n // the alt audio loader should not be responsible for setting the timestamp offset\n this.loaderType_ !== 'main') {\n return;\n }\n let didChange = false; // Primary timing goes by video, and audio is trimmed in the transmuxer, meaning that\n // the timing info here comes from video. In the event that the audio is longer than\n // the video, this will trim the start of the audio.\n // This also trims any offset from 0 at the beginning of the media\n\n segmentInfo.timestampOffset -= this.getSegmentStartTimeForTimestampOffsetCalculation_({\n videoTimingInfo: segmentInfo.segment.videoTimingInfo,\n audioTimingInfo: segmentInfo.segment.audioTimingInfo,\n timingInfo: segmentInfo.timingInfo\n }); // In the event that there are part segment downloads, each will try to update the\n // timestamp offset. Retaining this bit of state prevents us from updating in the\n // future (within the same segment), however, there may be a better way to handle it.\n\n segmentInfo.changedTimestampOffset = true;\n if (segmentInfo.timestampOffset !== this.sourceUpdater_.videoTimestampOffset()) {\n this.sourceUpdater_.videoTimestampOffset(segmentInfo.timestampOffset);\n didChange = true;\n }\n if (segmentInfo.timestampOffset !== this.sourceUpdater_.audioTimestampOffset()) {\n this.sourceUpdater_.audioTimestampOffset(segmentInfo.timestampOffset);\n didChange = true;\n }\n if (didChange) {\n this.trigger('timestampoffset');\n }\n }\n getSegmentStartTimeForTimestampOffsetCalculation_({\n videoTimingInfo,\n audioTimingInfo,\n timingInfo\n }) {\n if (!this.useDtsForTimestampOffset_) {\n return timingInfo.start;\n }\n if (videoTimingInfo && typeof videoTimingInfo.transmuxedDecodeStart === 'number') {\n return videoTimingInfo.transmuxedDecodeStart;\n } // handle audio only\n\n if (audioTimingInfo && typeof audioTimingInfo.transmuxedDecodeStart === 'number') {\n return audioTimingInfo.transmuxedDecodeStart;\n } // handle content not transmuxed (e.g., MP4)\n\n return timingInfo.start;\n }\n updateTimingInfoEnd_(segmentInfo) {\n segmentInfo.timingInfo = segmentInfo.timingInfo || {};\n const trackInfo = this.getMediaInfo_();\n const useVideoTimingInfo = this.loaderType_ === 'main' && trackInfo && trackInfo.hasVideo;\n const prioritizedTimingInfo = useVideoTimingInfo && segmentInfo.videoTimingInfo ? segmentInfo.videoTimingInfo : segmentInfo.audioTimingInfo;\n if (!prioritizedTimingInfo) {\n return;\n }\n segmentInfo.timingInfo.end = typeof prioritizedTimingInfo.end === 'number' ?\n // End time may not exist in a case where we aren't parsing the full segment (one\n // current example is the case of fmp4), so use the rough duration to calculate an\n // end time.\n prioritizedTimingInfo.end : prioritizedTimingInfo.start + segmentInfo.duration;\n }\n /**\n * callback to run when appendBuffer is finished. detects if we are\n * in a good state to do things with the data we got, or if we need\n * to wait for more\n *\n * @private\n */\n\n handleAppendsDone_() {\n // appendsdone can cause an abort\n if (this.pendingSegment_) {\n this.trigger('appendsdone');\n }\n if (!this.pendingSegment_) {\n this.state = 'READY'; // TODO should this move into this.checkForAbort to speed up requests post abort in\n // all appending cases?\n\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n return;\n }\n const segmentInfo = this.pendingSegment_; // Now that the end of the segment has been reached, we can set the end time. It's\n // best to wait until all appends are done so we're sure that the primary media is\n // finished (and we have its end time).\n\n this.updateTimingInfoEnd_(segmentInfo);\n if (this.shouldSaveSegmentTimingInfo_) {\n // Timeline mappings should only be saved for the main loader. This is for multiple\n // reasons:\n //\n // 1) Only one mapping is saved per timeline, meaning that if both the audio loader\n // and the main loader try to save the timeline mapping, whichever comes later\n // will overwrite the first. In theory this is OK, as the mappings should be the\n // same, however, it breaks for (2)\n // 2) In the event of a live stream, the initial live point will make for a somewhat\n // arbitrary mapping. If audio and video streams are not perfectly in-sync, then\n // the mapping will be off for one of the streams, dependent on which one was\n // first saved (see (1)).\n // 3) Primary timing goes by video in VHS, so the mapping should be video.\n //\n // Since the audio loader will wait for the main loader to load the first segment,\n // the main loader will save the first timeline mapping, and ensure that there won't\n // be a case where audio loads two segments without saving a mapping (thus leading\n // to missing segment timing info).\n this.syncController_.saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping: this.loaderType_ === 'main'\n });\n }\n const segmentDurationMessage = getTroublesomeSegmentDurationMessage(segmentInfo, this.sourceType_);\n if (segmentDurationMessage) {\n if (segmentDurationMessage.severity === 'warn') {\n videojs.log.warn(segmentDurationMessage.message);\n } else {\n this.logger_(segmentDurationMessage.message);\n }\n }\n this.recordThroughput_(segmentInfo);\n this.pendingSegment_ = null;\n this.state = 'READY';\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate'); // if the sync request was not appended\n // then it was not the correct segment.\n // throw it away and use the data it gave us\n // to get the correct one.\n\n if (!segmentInfo.hasAppendedData_) {\n this.logger_(`Throwing away un-appended sync request ${segmentInfoString(segmentInfo)}`);\n return;\n }\n }\n this.logger_(`Appended ${segmentInfoString(segmentInfo)}`);\n this.addSegmentMetadataCue_(segmentInfo);\n this.fetchAtBuffer_ = true;\n if (this.currentTimeline_ !== segmentInfo.timeline) {\n this.timelineChangeController_.lastTimelineChange({\n type: this.loaderType_,\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n }); // If audio is not disabled, the main segment loader is responsible for updating\n // the audio timeline as well. If the content is video only, this won't have any\n // impact.\n\n if (this.loaderType_ === 'main' && !this.audioDisabled_) {\n this.timelineChangeController_.lastTimelineChange({\n type: 'audio',\n from: this.currentTimeline_,\n to: segmentInfo.timeline\n });\n }\n }\n this.currentTimeline_ = segmentInfo.timeline; // We must update the syncinfo to recalculate the seekable range before\n // the following conditional otherwise it may consider this a bad \"guess\"\n // and attempt to resync when the post-update seekable window and live\n // point would mean that this was the perfect segment to fetch\n\n this.trigger('syncinfoupdate');\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n const badSegmentGuess = segment.end && this.currentTime_() - segment.end > segmentInfo.playlist.targetDuration * 3;\n const badPartGuess = part && part.end && this.currentTime_() - part.end > segmentInfo.playlist.partTargetDuration * 3; // If we previously appended a segment/part that ends more than 3 part/targetDurations before\n // the currentTime_ that means that our conservative guess was too conservative.\n // In that case, reset the loader state so that we try to use any information gained\n // from the previous request to create a new, more accurate, sync-point.\n\n if (badSegmentGuess || badPartGuess) {\n this.logger_(`bad ${badSegmentGuess ? 'segment' : 'part'} ${segmentInfoString(segmentInfo)}`);\n this.resetEverything();\n return;\n }\n const isWalkingForward = this.mediaIndex !== null; // Don't do a rendition switch unless we have enough time to get a sync segment\n // and conservatively guess\n\n if (isWalkingForward) {\n this.trigger('bandwidthupdate');\n }\n this.trigger('progress');\n this.mediaIndex = segmentInfo.mediaIndex;\n this.partIndex = segmentInfo.partIndex; // any time an update finishes and the last segment is in the\n // buffer, end the stream. this ensures the \"ended\" event will\n // fire if playback reaches that point.\n\n if (this.isEndOfStream_(segmentInfo.mediaIndex, segmentInfo.playlist, segmentInfo.partIndex)) {\n this.endOfStream();\n } // used for testing\n\n this.trigger('appended');\n if (segmentInfo.hasAppendedData_) {\n this.mediaAppends++;\n }\n if (!this.paused()) {\n this.monitorBuffer_();\n }\n }\n /**\n * Records the current throughput of the decrypt, transmux, and append\n * portion of the semgment pipeline. `throughput.rate` is a the cumulative\n * moving average of the throughput. `throughput.count` is the number of\n * data points in the average.\n *\n * @private\n * @param {Object} segmentInfo the object returned by loadSegment\n */\n\n recordThroughput_(segmentInfo) {\n if (segmentInfo.duration < MIN_SEGMENT_DURATION_TO_SAVE_STATS) {\n this.logger_(`Ignoring segment's throughput because its duration of ${segmentInfo.duration}` + ` is less than the min to record ${MIN_SEGMENT_DURATION_TO_SAVE_STATS}`);\n return;\n }\n const rate = this.throughput.rate; // Add one to the time to ensure that we don't accidentally attempt to divide\n // by zero in the case where the throughput is ridiculously high\n\n const segmentProcessingTime = Date.now() - segmentInfo.endOfAllRequests + 1; // Multiply by 8000 to convert from bytes/millisecond to bits/second\n\n const segmentProcessingThroughput = Math.floor(segmentInfo.byteLength / segmentProcessingTime * 8 * 1000); // This is just a cumulative moving average calculation:\n // newAvg = oldAvg + (sample - oldAvg) / (sampleCount + 1)\n\n this.throughput.rate += (segmentProcessingThroughput - rate) / ++this.throughput.count;\n }\n /**\n * Adds a cue to the segment-metadata track with some metadata information about the\n * segment\n *\n * @private\n * @param {Object} segmentInfo\n * the object returned by loadSegment\n * @method addSegmentMetadataCue_\n */\n\n addSegmentMetadataCue_(segmentInfo) {\n if (!this.segmentMetadataTrack_) {\n return;\n }\n const segment = segmentInfo.segment;\n const start = segment.start;\n const end = segment.end; // Do not try adding the cue if the start and end times are invalid.\n\n if (!finite(start) || !finite(end)) {\n return;\n }\n removeCuesFromTrack(start, end, this.segmentMetadataTrack_);\n const Cue = window$1.WebKitDataCue || window$1.VTTCue;\n const value = {\n custom: segment.custom,\n dateTimeObject: segment.dateTimeObject,\n dateTimeString: segment.dateTimeString,\n programDateTime: segment.programDateTime,\n bandwidth: segmentInfo.playlist.attributes.BANDWIDTH,\n resolution: segmentInfo.playlist.attributes.RESOLUTION,\n codecs: segmentInfo.playlist.attributes.CODECS,\n byteLength: segmentInfo.byteLength,\n uri: segmentInfo.uri,\n timeline: segmentInfo.timeline,\n playlist: segmentInfo.playlist.id,\n start,\n end\n };\n const data = JSON.stringify(value);\n const cue = new Cue(start, end, data); // Attach the metadata to the value property of the cue to keep consistency between\n // the differences of WebKitDataCue in safari and VTTCue in other browsers\n\n cue.value = value;\n this.segmentMetadataTrack_.addCue(cue);\n }\n}\nfunction noop() {}\nconst toTitleCase = function (string) {\n if (typeof string !== 'string') {\n return string;\n }\n return string.replace(/./, w => w.toUpperCase());\n};\n\n/**\n * @file source-updater.js\n */\nconst bufferTypes = ['video', 'audio'];\nconst updating = (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n return sourceBuffer && sourceBuffer.updating || sourceUpdater.queuePending[type];\n};\nconst nextQueueIndexOfType = (type, queue) => {\n for (let i = 0; i < queue.length; i++) {\n const queueEntry = queue[i];\n if (queueEntry.type === 'mediaSource') {\n // If the next entry is a media source entry (uses multiple source buffers), block\n // processing to allow it to go through first.\n return null;\n }\n if (queueEntry.type === type) {\n return i;\n }\n }\n return null;\n};\nconst shiftQueue = (type, sourceUpdater) => {\n if (sourceUpdater.queue.length === 0) {\n return;\n }\n let queueIndex = 0;\n let queueEntry = sourceUpdater.queue[queueIndex];\n if (queueEntry.type === 'mediaSource') {\n if (!sourceUpdater.updating() && sourceUpdater.mediaSource.readyState !== 'closed') {\n sourceUpdater.queue.shift();\n queueEntry.action(sourceUpdater);\n if (queueEntry.doneFn) {\n queueEntry.doneFn();\n } // Only specific source buffer actions must wait for async updateend events. Media\n // Source actions process synchronously. Therefore, both audio and video source\n // buffers are now clear to process the next queue entries.\n\n shiftQueue('audio', sourceUpdater);\n shiftQueue('video', sourceUpdater);\n } // Media Source actions require both source buffers, so if the media source action\n // couldn't process yet (because one or both source buffers are busy), block other\n // queue actions until both are available and the media source action can process.\n\n return;\n }\n if (type === 'mediaSource') {\n // If the queue was shifted by a media source action (this happens when pushing a\n // media source action onto the queue), then it wasn't from an updateend event from an\n // audio or video source buffer, so there's no change from previous state, and no\n // processing should be done.\n return;\n } // Media source queue entries don't need to consider whether the source updater is\n // started (i.e., source buffers are created) as they don't need the source buffers, but\n // source buffer queue entries do.\n\n if (!sourceUpdater.ready() || sourceUpdater.mediaSource.readyState === 'closed' || updating(type, sourceUpdater)) {\n return;\n }\n if (queueEntry.type !== type) {\n queueIndex = nextQueueIndexOfType(type, sourceUpdater.queue);\n if (queueIndex === null) {\n // Either there's no queue entry that uses this source buffer type in the queue, or\n // there's a media source queue entry before the next entry of this type, in which\n // case wait for that action to process first.\n return;\n }\n queueEntry = sourceUpdater.queue[queueIndex];\n }\n sourceUpdater.queue.splice(queueIndex, 1); // Keep a record that this source buffer type is in use.\n //\n // The queue pending operation must be set before the action is performed in the event\n // that the action results in a synchronous event that is acted upon. For instance, if\n // an exception is thrown that can be handled, it's possible that new actions will be\n // appended to an empty queue and immediately executed, but would not have the correct\n // pending information if this property was set after the action was performed.\n\n sourceUpdater.queuePending[type] = queueEntry;\n queueEntry.action(type, sourceUpdater);\n if (!queueEntry.doneFn) {\n // synchronous operation, process next entry\n sourceUpdater.queuePending[type] = null;\n shiftQueue(type, sourceUpdater);\n return;\n }\n};\nconst cleanupBuffer = (type, sourceUpdater) => {\n const buffer = sourceUpdater[`${type}Buffer`];\n const titleType = toTitleCase(type);\n if (!buffer) {\n return;\n }\n buffer.removeEventListener('updateend', sourceUpdater[`on${titleType}UpdateEnd_`]);\n buffer.removeEventListener('error', sourceUpdater[`on${titleType}Error_`]);\n sourceUpdater.codecs[type] = null;\n sourceUpdater[`${type}Buffer`] = null;\n};\nconst inSourceBuffers = (mediaSource, sourceBuffer) => mediaSource && sourceBuffer && Array.prototype.indexOf.call(mediaSource.sourceBuffers, sourceBuffer) !== -1;\nconst actions = {\n appendBuffer: (bytes, segmentInfo, onError) => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Appending segment ${segmentInfo.mediaIndex}'s ${bytes.length} bytes to ${type}Buffer`);\n try {\n sourceBuffer.appendBuffer(bytes);\n } catch (e) {\n sourceUpdater.logger_(`Error with code ${e.code} ` + (e.code === QUOTA_EXCEEDED_ERR ? '(QUOTA_EXCEEDED_ERR) ' : '') + `when appending segment ${segmentInfo.mediaIndex} to ${type}Buffer`);\n sourceUpdater.queuePending[type] = null;\n onError(e);\n }\n },\n remove: (start, end) => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Removing ${start} to ${end} from ${type}Buffer`);\n try {\n sourceBuffer.remove(start, end);\n } catch (e) {\n sourceUpdater.logger_(`Remove ${start} to ${end} from ${type}Buffer failed`);\n }\n },\n timestampOffset: offset => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Setting ${type}timestampOffset to ${offset}`);\n sourceBuffer.timestampOffset = offset;\n },\n callback: callback => (type, sourceUpdater) => {\n callback();\n },\n endOfStream: error => sourceUpdater => {\n if (sourceUpdater.mediaSource.readyState !== 'open') {\n return;\n }\n sourceUpdater.logger_(`Calling mediaSource endOfStream(${error || ''})`);\n try {\n sourceUpdater.mediaSource.endOfStream(error);\n } catch (e) {\n videojs.log.warn('Failed to call media source endOfStream', e);\n }\n },\n duration: duration => sourceUpdater => {\n sourceUpdater.logger_(`Setting mediaSource duration to ${duration}`);\n try {\n sourceUpdater.mediaSource.duration = duration;\n } catch (e) {\n videojs.log.warn('Failed to set media source duration', e);\n }\n },\n abort: () => (type, sourceUpdater) => {\n if (sourceUpdater.mediaSource.readyState !== 'open') {\n return;\n }\n const sourceBuffer = sourceUpdater[`${type}Buffer`]; // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`calling abort on ${type}Buffer`);\n try {\n sourceBuffer.abort();\n } catch (e) {\n videojs.log.warn(`Failed to abort on ${type}Buffer`, e);\n }\n },\n addSourceBuffer: (type, codec) => sourceUpdater => {\n const titleType = toTitleCase(type);\n const mime = getMimeForCodec(codec);\n sourceUpdater.logger_(`Adding ${type}Buffer with codec ${codec} to mediaSource`);\n const sourceBuffer = sourceUpdater.mediaSource.addSourceBuffer(mime);\n sourceBuffer.addEventListener('updateend', sourceUpdater[`on${titleType}UpdateEnd_`]);\n sourceBuffer.addEventListener('error', sourceUpdater[`on${titleType}Error_`]);\n sourceUpdater.codecs[type] = codec;\n sourceUpdater[`${type}Buffer`] = sourceBuffer;\n },\n removeSourceBuffer: type => sourceUpdater => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n cleanupBuffer(type, sourceUpdater); // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n }\n sourceUpdater.logger_(`Removing ${type}Buffer with codec ${sourceUpdater.codecs[type]} from mediaSource`);\n try {\n sourceUpdater.mediaSource.removeSourceBuffer(sourceBuffer);\n } catch (e) {\n videojs.log.warn(`Failed to removeSourceBuffer ${type}Buffer`, e);\n }\n },\n changeType: codec => (type, sourceUpdater) => {\n const sourceBuffer = sourceUpdater[`${type}Buffer`];\n const mime = getMimeForCodec(codec); // can't do anything if the media source / source buffer is null\n // or the media source does not contain this source buffer.\n\n if (!inSourceBuffers(sourceUpdater.mediaSource, sourceBuffer)) {\n return;\n } // do not update codec if we don't need to.\n\n if (sourceUpdater.codecs[type] === codec) {\n return;\n }\n sourceUpdater.logger_(`changing ${type}Buffer codec from ${sourceUpdater.codecs[type]} to ${codec}`); // check if change to the provided type is supported\n\n try {\n sourceBuffer.changeType(mime);\n sourceUpdater.codecs[type] = codec;\n } catch (e) {\n videojs.log.warn(`Failed to changeType on ${type}Buffer`, e);\n }\n }\n};\nconst pushQueue = ({\n type,\n sourceUpdater,\n action,\n doneFn,\n name\n}) => {\n sourceUpdater.queue.push({\n type,\n action,\n doneFn,\n name\n });\n shiftQueue(type, sourceUpdater);\n};\nconst onUpdateend = (type, sourceUpdater) => e => {\n // Although there should, in theory, be a pending action for any updateend receieved,\n // there are some actions that may trigger updateend events without set definitions in\n // the w3c spec. For instance, setting the duration on the media source may trigger\n // updateend events on source buffers. This does not appear to be in the spec. As such,\n // if we encounter an updateend without a corresponding pending action from our queue\n // for that source buffer type, process the next action.\n if (sourceUpdater.queuePending[type]) {\n const doneFn = sourceUpdater.queuePending[type].doneFn;\n sourceUpdater.queuePending[type] = null;\n if (doneFn) {\n // if there's an error, report it\n doneFn(sourceUpdater[`${type}Error_`]);\n }\n }\n shiftQueue(type, sourceUpdater);\n};\n/**\n * A queue of callbacks to be serialized and applied when a\n * MediaSource and its associated SourceBuffers are not in the\n * updating state. It is used by the segment loader to update the\n * underlying SourceBuffers when new data is loaded, for instance.\n *\n * @class SourceUpdater\n * @param {MediaSource} mediaSource the MediaSource to create the SourceBuffer from\n * @param {string} mimeType the desired MIME type of the underlying SourceBuffer\n */\n\nclass SourceUpdater extends videojs.EventTarget {\n constructor(mediaSource) {\n super();\n this.mediaSource = mediaSource;\n this.sourceopenListener_ = () => shiftQueue('mediaSource', this);\n this.mediaSource.addEventListener('sourceopen', this.sourceopenListener_);\n this.logger_ = logger('SourceUpdater'); // initial timestamp offset is 0\n\n this.audioTimestampOffset_ = 0;\n this.videoTimestampOffset_ = 0;\n this.queue = [];\n this.queuePending = {\n audio: null,\n video: null\n };\n this.delayedAudioAppendQueue_ = [];\n this.videoAppendQueued_ = false;\n this.codecs = {};\n this.onVideoUpdateEnd_ = onUpdateend('video', this);\n this.onAudioUpdateEnd_ = onUpdateend('audio', this);\n this.onVideoError_ = e => {\n // used for debugging\n this.videoError_ = e;\n };\n this.onAudioError_ = e => {\n // used for debugging\n this.audioError_ = e;\n };\n this.createdSourceBuffers_ = false;\n this.initializedEme_ = false;\n this.triggeredReady_ = false;\n }\n initializedEme() {\n this.initializedEme_ = true;\n this.triggerReady();\n }\n hasCreatedSourceBuffers() {\n // if false, likely waiting on one of the segment loaders to get enough data to create\n // source buffers\n return this.createdSourceBuffers_;\n }\n hasInitializedAnyEme() {\n return this.initializedEme_;\n }\n ready() {\n return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme();\n }\n createSourceBuffers(codecs) {\n if (this.hasCreatedSourceBuffers()) {\n // already created them before\n return;\n } // the intial addOrChangeSourceBuffers will always be\n // two add buffers.\n\n this.addOrChangeSourceBuffers(codecs);\n this.createdSourceBuffers_ = true;\n this.trigger('createdsourcebuffers');\n this.triggerReady();\n }\n triggerReady() {\n // only allow ready to be triggered once, this prevents the case\n // where:\n // 1. we trigger createdsourcebuffers\n // 2. ie 11 synchronously initializates eme\n // 3. the synchronous initialization causes us to trigger ready\n // 4. We go back to the ready check in createSourceBuffers and ready is triggered again.\n if (this.ready() && !this.triggeredReady_) {\n this.triggeredReady_ = true;\n this.trigger('ready');\n }\n }\n /**\n * Add a type of source buffer to the media source.\n *\n * @param {string} type\n * The type of source buffer to add.\n *\n * @param {string} codec\n * The codec to add the source buffer with.\n */\n\n addSourceBuffer(type, codec) {\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.addSourceBuffer(type, codec),\n name: 'addSourceBuffer'\n });\n }\n /**\n * call abort on a source buffer.\n *\n * @param {string} type\n * The type of source buffer to call abort on.\n */\n\n abort(type) {\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.abort(type),\n name: 'abort'\n });\n }\n /**\n * Call removeSourceBuffer and remove a specific type\n * of source buffer on the mediaSource.\n *\n * @param {string} type\n * The type of source buffer to remove.\n */\n\n removeSourceBuffer(type) {\n if (!this.canRemoveSourceBuffer()) {\n videojs.log.error('removeSourceBuffer is not supported!');\n return;\n }\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.removeSourceBuffer(type),\n name: 'removeSourceBuffer'\n });\n }\n /**\n * Whether or not the removeSourceBuffer function is supported\n * on the mediaSource.\n *\n * @return {boolean}\n * if removeSourceBuffer can be called.\n */\n\n canRemoveSourceBuffer() {\n // As of Firefox 83 removeSourceBuffer\n // throws errors, so we report that it does not support this.\n return !videojs.browser.IS_FIREFOX && window$1.MediaSource && window$1.MediaSource.prototype && typeof window$1.MediaSource.prototype.removeSourceBuffer === 'function';\n }\n /**\n * Whether or not the changeType function is supported\n * on our SourceBuffers.\n *\n * @return {boolean}\n * if changeType can be called.\n */\n\n static canChangeType() {\n return window$1.SourceBuffer && window$1.SourceBuffer.prototype && typeof window$1.SourceBuffer.prototype.changeType === 'function';\n }\n /**\n * Whether or not the changeType function is supported\n * on our SourceBuffers.\n *\n * @return {boolean}\n * if changeType can be called.\n */\n\n canChangeType() {\n return this.constructor.canChangeType();\n }\n /**\n * Call the changeType function on a source buffer, given the code and type.\n *\n * @param {string} type\n * The type of source buffer to call changeType on.\n *\n * @param {string} codec\n * The codec string to change type with on the source buffer.\n */\n\n changeType(type, codec) {\n if (!this.canChangeType()) {\n videojs.log.error('changeType is not supported!');\n return;\n }\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.changeType(codec),\n name: 'changeType'\n });\n }\n /**\n * Add source buffers with a codec or, if they are already created,\n * call changeType on source buffers using changeType.\n *\n * @param {Object} codecs\n * Codecs to switch to\n */\n\n addOrChangeSourceBuffers(codecs) {\n if (!codecs || typeof codecs !== 'object' || Object.keys(codecs).length === 0) {\n throw new Error('Cannot addOrChangeSourceBuffers to undefined codecs');\n }\n Object.keys(codecs).forEach(type => {\n const codec = codecs[type];\n if (!this.hasCreatedSourceBuffers()) {\n return this.addSourceBuffer(type, codec);\n }\n if (this.canChangeType()) {\n this.changeType(type, codec);\n }\n });\n }\n /**\n * Queue an update to append an ArrayBuffer.\n *\n * @param {MediaObject} object containing audioBytes and/or videoBytes\n * @param {Function} done the function to call when done\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-appendBuffer-void-ArrayBuffer-data\n */\n\n appendBuffer(options, doneFn) {\n const {\n segmentInfo,\n type,\n bytes\n } = options;\n this.processedAppend_ = true;\n if (type === 'audio' && this.videoBuffer && !this.videoAppendQueued_) {\n this.delayedAudioAppendQueue_.push([options, doneFn]);\n this.logger_(`delayed audio append of ${bytes.length} until video append`);\n return;\n } // In the case of certain errors, for instance, QUOTA_EXCEEDED_ERR, updateend will\n // not be fired. This means that the queue will be blocked until the next action\n // taken by the segment-loader. Provide a mechanism for segment-loader to handle\n // these errors by calling the doneFn with the specific error.\n\n const onError = doneFn;\n pushQueue({\n type,\n sourceUpdater: this,\n action: actions.appendBuffer(bytes, segmentInfo || {\n mediaIndex: -1\n }, onError),\n doneFn,\n name: 'appendBuffer'\n });\n if (type === 'video') {\n this.videoAppendQueued_ = true;\n if (!this.delayedAudioAppendQueue_.length) {\n return;\n }\n const queue = this.delayedAudioAppendQueue_.slice();\n this.logger_(`queuing delayed audio ${queue.length} appendBuffers`);\n this.delayedAudioAppendQueue_.length = 0;\n queue.forEach(que => {\n this.appendBuffer.apply(this, que);\n });\n }\n }\n /**\n * Get the audio buffer's buffered timerange.\n *\n * @return {TimeRange}\n * The audio buffer's buffered time range\n */\n\n audioBuffered() {\n // no media source/source buffer or it isn't in the media sources\n // source buffer list\n if (!inSourceBuffers(this.mediaSource, this.audioBuffer)) {\n return createTimeRanges();\n }\n return this.audioBuffer.buffered ? this.audioBuffer.buffered : createTimeRanges();\n }\n /**\n * Get the video buffer's buffered timerange.\n *\n * @return {TimeRange}\n * The video buffer's buffered time range\n */\n\n videoBuffered() {\n // no media source/source buffer or it isn't in the media sources\n // source buffer list\n if (!inSourceBuffers(this.mediaSource, this.videoBuffer)) {\n return createTimeRanges();\n }\n return this.videoBuffer.buffered ? this.videoBuffer.buffered : createTimeRanges();\n }\n /**\n * Get a combined video/audio buffer's buffered timerange.\n *\n * @return {TimeRange}\n * the combined time range\n */\n\n buffered() {\n const video = inSourceBuffers(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null;\n const audio = inSourceBuffers(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null;\n if (audio && !video) {\n return this.audioBuffered();\n }\n if (video && !audio) {\n return this.videoBuffered();\n }\n return bufferIntersection(this.audioBuffered(), this.videoBuffered());\n }\n /**\n * Add a callback to the queue that will set duration on the mediaSource.\n *\n * @param {number} duration\n * The duration to set\n *\n * @param {Function} [doneFn]\n * function to run after duration has been set.\n */\n\n setDuration(duration, doneFn = noop) {\n // In order to set the duration on the media source, it's necessary to wait for all\n // source buffers to no longer be updating. \"If the updating attribute equals true on\n // any SourceBuffer in sourceBuffers, then throw an InvalidStateError exception and\n // abort these steps.\" (source: https://www.w3.org/TR/media-source/#attributes).\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.duration(duration),\n name: 'duration',\n doneFn\n });\n }\n /**\n * Add a mediaSource endOfStream call to the queue\n *\n * @param {Error} [error]\n * Call endOfStream with an error\n *\n * @param {Function} [doneFn]\n * A function that should be called when the\n * endOfStream call has finished.\n */\n\n endOfStream(error = null, doneFn = noop) {\n if (typeof error !== 'string') {\n error = undefined;\n } // In order to set the duration on the media source, it's necessary to wait for all\n // source buffers to no longer be updating. \"If the updating attribute equals true on\n // any SourceBuffer in sourceBuffers, then throw an InvalidStateError exception and\n // abort these steps.\" (source: https://www.w3.org/TR/media-source/#attributes).\n\n pushQueue({\n type: 'mediaSource',\n sourceUpdater: this,\n action: actions.endOfStream(error),\n name: 'endOfStream',\n doneFn\n });\n }\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {number} start where to start the removal\n * @param {number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n\n removeAudio(start, end, done = noop) {\n if (!this.audioBuffered().length || this.audioBuffered().end(0) === 0) {\n done();\n return;\n }\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.remove(start, end),\n doneFn: done,\n name: 'remove'\n });\n }\n /**\n * Queue an update to remove a time range from the buffer.\n *\n * @param {number} start where to start the removal\n * @param {number} end where to end the removal\n * @param {Function} [done=noop] optional callback to be executed when the remove\n * operation is complete\n * @see http://www.w3.org/TR/media-source/#widl-SourceBuffer-remove-void-double-start-unrestricted-double-end\n */\n\n removeVideo(start, end, done = noop) {\n if (!this.videoBuffered().length || this.videoBuffered().end(0) === 0) {\n done();\n return;\n }\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.remove(start, end),\n doneFn: done,\n name: 'remove'\n });\n }\n /**\n * Whether the underlying sourceBuffer is updating or not\n *\n * @return {boolean} the updating status of the SourceBuffer\n */\n\n updating() {\n // the audio/video source buffer is updating\n if (updating('audio', this) || updating('video', this)) {\n return true;\n }\n return false;\n }\n /**\n * Set/get the timestampoffset on the audio SourceBuffer\n *\n * @return {number} the timestamp offset\n */\n\n audioTimestampOffset(offset) {\n if (typeof offset !== 'undefined' && this.audioBuffer &&\n // no point in updating if it's the same\n this.audioTimestampOffset_ !== offset) {\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.timestampOffset(offset),\n name: 'timestampOffset'\n });\n this.audioTimestampOffset_ = offset;\n }\n return this.audioTimestampOffset_;\n }\n /**\n * Set/get the timestampoffset on the video SourceBuffer\n *\n * @return {number} the timestamp offset\n */\n\n videoTimestampOffset(offset) {\n if (typeof offset !== 'undefined' && this.videoBuffer &&\n // no point in updating if it's the same\n this.videoTimestampOffset !== offset) {\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.timestampOffset(offset),\n name: 'timestampOffset'\n });\n this.videoTimestampOffset_ = offset;\n }\n return this.videoTimestampOffset_;\n }\n /**\n * Add a function to the queue that will be called\n * when it is its turn to run in the audio queue.\n *\n * @param {Function} callback\n * The callback to queue.\n */\n\n audioQueueCallback(callback) {\n if (!this.audioBuffer) {\n return;\n }\n pushQueue({\n type: 'audio',\n sourceUpdater: this,\n action: actions.callback(callback),\n name: 'callback'\n });\n }\n /**\n * Add a function to the queue that will be called\n * when it is its turn to run in the video queue.\n *\n * @param {Function} callback\n * The callback to queue.\n */\n\n videoQueueCallback(callback) {\n if (!this.videoBuffer) {\n return;\n }\n pushQueue({\n type: 'video',\n sourceUpdater: this,\n action: actions.callback(callback),\n name: 'callback'\n });\n }\n /**\n * dispose of the source updater and the underlying sourceBuffer\n */\n\n dispose() {\n this.trigger('dispose');\n bufferTypes.forEach(type => {\n this.abort(type);\n if (this.canRemoveSourceBuffer()) {\n this.removeSourceBuffer(type);\n } else {\n this[`${type}QueueCallback`](() => cleanupBuffer(type, this));\n }\n });\n this.videoAppendQueued_ = false;\n this.delayedAudioAppendQueue_.length = 0;\n if (this.sourceopenListener_) {\n this.mediaSource.removeEventListener('sourceopen', this.sourceopenListener_);\n }\n this.off();\n }\n}\nconst uint8ToUtf8 = uintArray => decodeURIComponent(escape(String.fromCharCode.apply(null, uintArray)));\nconst bufferToHexString = buffer => {\n const uInt8Buffer = new Uint8Array(buffer);\n return Array.from(uInt8Buffer).map(byte => byte.toString(16).padStart(2, '0')).join('');\n};\n\n/**\n * @file vtt-segment-loader.js\n */\nconst VTT_LINE_TERMINATORS = new Uint8Array('\\n\\n'.split('').map(char => char.charCodeAt(0)));\nclass NoVttJsError extends Error {\n constructor() {\n super('Trying to parse received VTT cues, but there is no WebVTT. Make sure vtt.js is loaded.');\n }\n}\n/**\n * An object that manages segment loading and appending.\n *\n * @class VTTSegmentLoader\n * @param {Object} options required and optional options\n * @extends videojs.EventTarget\n */\n\nclass VTTSegmentLoader extends SegmentLoader {\n constructor(settings, options = {}) {\n super(settings, options); // SegmentLoader requires a MediaSource be specified or it will throw an error;\n // however, VTTSegmentLoader has no need of a media source, so delete the reference\n\n this.mediaSource_ = null;\n this.subtitlesTrack_ = null;\n this.loaderType_ = 'subtitle';\n this.featuresNativeTextTracks_ = settings.featuresNativeTextTracks;\n this.loadVttJs = settings.loadVttJs; // The VTT segment will have its own time mappings. Saving VTT segment timing info in\n // the sync controller leads to improper behavior.\n\n this.shouldSaveSegmentTimingInfo_ = false;\n }\n createTransmuxer_() {\n // don't need to transmux any subtitles\n return null;\n }\n /**\n * Indicates which time ranges are buffered\n *\n * @return {TimeRange}\n * TimeRange object representing the current buffered ranges\n */\n\n buffered_() {\n if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) {\n return createTimeRanges();\n }\n const cues = this.subtitlesTrack_.cues;\n const start = cues[0].startTime;\n const end = cues[cues.length - 1].startTime;\n return createTimeRanges([[start, end]]);\n }\n /**\n * Gets and sets init segment for the provided map\n *\n * @param {Object} map\n * The map object representing the init segment to get or set\n * @param {boolean=} set\n * If true, the init segment for the provided map should be saved\n * @return {Object}\n * map object for desired init segment\n */\n\n initSegmentForMap(map, set = false) {\n if (!map) {\n return null;\n }\n const id = initSegmentId(map);\n let storedMap = this.initSegments_[id];\n if (set && !storedMap && map.bytes) {\n // append WebVTT line terminators to the media initialization segment if it exists\n // to follow the WebVTT spec (https://w3c.github.io/webvtt/#file-structure) that\n // requires two or more WebVTT line terminators between the WebVTT header and the\n // rest of the file\n const combinedByteLength = VTT_LINE_TERMINATORS.byteLength + map.bytes.byteLength;\n const combinedSegment = new Uint8Array(combinedByteLength);\n combinedSegment.set(map.bytes);\n combinedSegment.set(VTT_LINE_TERMINATORS, map.bytes.byteLength);\n this.initSegments_[id] = storedMap = {\n resolvedUri: map.resolvedUri,\n byterange: map.byterange,\n bytes: combinedSegment\n };\n }\n return storedMap || map;\n }\n /**\n * Returns true if all configuration required for loading is present, otherwise false.\n *\n * @return {boolean} True if the all configuration is ready for loading\n * @private\n */\n\n couldBeginLoading_() {\n return this.playlist_ && this.subtitlesTrack_ && !this.paused();\n }\n /**\n * Once all the starting parameters have been specified, begin\n * operation. This method should only be invoked from the INIT\n * state.\n *\n * @private\n */\n\n init_() {\n this.state = 'READY';\n this.resetEverything();\n return this.monitorBuffer_();\n }\n /**\n * Set a subtitle track on the segment loader to add subtitles to\n *\n * @param {TextTrack=} track\n * The text track to add loaded subtitles to\n * @return {TextTrack}\n * Returns the subtitles track\n */\n\n track(track) {\n if (typeof track === 'undefined') {\n return this.subtitlesTrack_;\n }\n this.subtitlesTrack_ = track; // if we were unpaused but waiting for a sourceUpdater, start\n // buffering now\n\n if (this.state === 'INIT' && this.couldBeginLoading_()) {\n this.init_();\n }\n return this.subtitlesTrack_;\n }\n /**\n * Remove any data in the source buffer between start and end times\n *\n * @param {number} start - the start time of the region to remove from the buffer\n * @param {number} end - the end time of the region to remove from the buffer\n */\n\n remove(start, end) {\n removeCuesFromTrack(start, end, this.subtitlesTrack_);\n }\n /**\n * fill the buffer with segements unless the sourceBuffers are\n * currently updating\n *\n * Note: this function should only ever be called by monitorBuffer_\n * and never directly\n *\n * @private\n */\n\n fillBuffer_() {\n // see if we need to begin loading immediately\n const segmentInfo = this.chooseNextRequest_();\n if (!segmentInfo) {\n return;\n }\n if (this.syncController_.timestampOffsetForTimeline(segmentInfo.timeline) === null) {\n // We don't have the timestamp offset that we need to sync subtitles.\n // Rerun on a timestamp offset or user interaction.\n const checkTimestampOffset = () => {\n this.state = 'READY';\n if (!this.paused()) {\n // if not paused, queue a buffer check as soon as possible\n this.monitorBuffer_();\n }\n };\n this.syncController_.one('timestampoffset', checkTimestampOffset);\n this.state = 'WAITING_ON_TIMELINE';\n return;\n }\n this.loadSegment_(segmentInfo);\n } // never set a timestamp offset for vtt segments.\n\n timestampOffsetForSegment_() {\n return null;\n }\n chooseNextRequest_() {\n return this.skipEmptySegments_(super.chooseNextRequest_());\n }\n /**\n * Prevents the segment loader from requesting segments we know contain no subtitles\n * by walking forward until we find the next segment that we don't know whether it is\n * empty or not.\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @return {Object}\n * a segment info object that describes the current segment\n */\n\n skipEmptySegments_(segmentInfo) {\n while (segmentInfo && segmentInfo.segment.empty) {\n // stop at the last possible segmentInfo\n if (segmentInfo.mediaIndex + 1 >= segmentInfo.playlist.segments.length) {\n segmentInfo = null;\n break;\n }\n segmentInfo = this.generateSegmentInfo_({\n playlist: segmentInfo.playlist,\n mediaIndex: segmentInfo.mediaIndex + 1,\n startOfSegment: segmentInfo.startOfSegment + segmentInfo.duration,\n isSyncRequest: segmentInfo.isSyncRequest\n });\n }\n return segmentInfo;\n }\n stopForError(error) {\n this.error(error);\n this.state = 'READY';\n this.pause();\n this.trigger('error');\n }\n /**\n * append a decrypted segement to the SourceBuffer through a SourceUpdater\n *\n * @private\n */\n\n segmentRequestFinished_(error, simpleSegment, result) {\n if (!this.subtitlesTrack_) {\n this.state = 'READY';\n return;\n }\n this.saveTransferStats_(simpleSegment.stats); // the request was aborted\n\n if (!this.pendingSegment_) {\n this.state = 'READY';\n this.mediaRequestsAborted += 1;\n return;\n }\n if (error) {\n if (error.code === REQUEST_ERRORS.TIMEOUT) {\n this.handleTimeout_();\n }\n if (error.code === REQUEST_ERRORS.ABORTED) {\n this.mediaRequestsAborted += 1;\n } else {\n this.mediaRequestsErrored += 1;\n }\n this.stopForError(error);\n return;\n }\n const segmentInfo = this.pendingSegment_; // although the VTT segment loader bandwidth isn't really used, it's good to\n // maintain functionality between segment loaders\n\n this.saveBandwidthRelatedStats_(segmentInfo.duration, simpleSegment.stats); // if this request included a segment key, save that data in the cache\n\n if (simpleSegment.key) {\n this.segmentKey(simpleSegment.key, true);\n }\n this.state = 'APPENDING'; // used for tests\n\n this.trigger('appending');\n const segment = segmentInfo.segment;\n if (segment.map) {\n segment.map.bytes = simpleSegment.map.bytes;\n }\n segmentInfo.bytes = simpleSegment.bytes; // Make sure that vttjs has loaded, otherwise, load it and wait till it finished loading\n\n if (typeof window$1.WebVTT !== 'function' && typeof this.loadVttJs === 'function') {\n this.state = 'WAITING_ON_VTTJS'; // should be fine to call multiple times\n // script will be loaded once but multiple listeners will be added to the queue, which is expected.\n\n this.loadVttJs().then(() => this.segmentRequestFinished_(error, simpleSegment, result), () => this.stopForError({\n message: 'Error loading vtt.js'\n }));\n return;\n }\n segment.requested = true;\n try {\n this.parseVTTCues_(segmentInfo);\n } catch (e) {\n this.stopForError({\n message: e.message\n });\n return;\n }\n this.updateTimeMapping_(segmentInfo, this.syncController_.timelines[segmentInfo.timeline], this.playlist_);\n if (segmentInfo.cues.length) {\n segmentInfo.timingInfo = {\n start: segmentInfo.cues[0].startTime,\n end: segmentInfo.cues[segmentInfo.cues.length - 1].endTime\n };\n } else {\n segmentInfo.timingInfo = {\n start: segmentInfo.startOfSegment,\n end: segmentInfo.startOfSegment + segmentInfo.duration\n };\n }\n if (segmentInfo.isSyncRequest) {\n this.trigger('syncinfoupdate');\n this.pendingSegment_ = null;\n this.state = 'READY';\n return;\n }\n segmentInfo.byteLength = segmentInfo.bytes.byteLength;\n this.mediaSecondsLoaded += segment.duration; // Create VTTCue instances for each cue in the new segment and add them to\n // the subtitle track\n\n segmentInfo.cues.forEach(cue => {\n this.subtitlesTrack_.addCue(this.featuresNativeTextTracks_ ? new window$1.VTTCue(cue.startTime, cue.endTime, cue.text) : cue);\n }); // Remove any duplicate cues from the subtitle track. The WebVTT spec allows\n // cues to have identical time-intervals, but if the text is also identical\n // we can safely assume it is a duplicate that can be removed (ex. when a cue\n // \"overlaps\" VTT segments)\n\n removeDuplicateCuesFromTrack(this.subtitlesTrack_);\n this.handleAppendsDone_();\n }\n handleData_() {// noop as we shouldn't be getting video/audio data captions\n // that we do not support here.\n }\n updateTimingInfoEnd_() {// noop\n }\n /**\n * Uses the WebVTT parser to parse the segment response\n *\n * @throws NoVttJsError\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @private\n */\n\n parseVTTCues_(segmentInfo) {\n let decoder;\n let decodeBytesToString = false;\n if (typeof window$1.WebVTT !== 'function') {\n // caller is responsible for exception handling.\n throw new NoVttJsError();\n }\n if (typeof window$1.TextDecoder === 'function') {\n decoder = new window$1.TextDecoder('utf8');\n } else {\n decoder = window$1.WebVTT.StringDecoder();\n decodeBytesToString = true;\n }\n const parser = new window$1.WebVTT.Parser(window$1, window$1.vttjs, decoder);\n segmentInfo.cues = [];\n segmentInfo.timestampmap = {\n MPEGTS: 0,\n LOCAL: 0\n };\n parser.oncue = segmentInfo.cues.push.bind(segmentInfo.cues);\n parser.ontimestampmap = map => {\n segmentInfo.timestampmap = map;\n };\n parser.onparsingerror = error => {\n videojs.log.warn('Error encountered when parsing cues: ' + error.message);\n };\n if (segmentInfo.segment.map) {\n let mapData = segmentInfo.segment.map.bytes;\n if (decodeBytesToString) {\n mapData = uint8ToUtf8(mapData);\n }\n parser.parse(mapData);\n }\n let segmentData = segmentInfo.bytes;\n if (decodeBytesToString) {\n segmentData = uint8ToUtf8(segmentData);\n }\n parser.parse(segmentData);\n parser.flush();\n }\n /**\n * Updates the start and end times of any cues parsed by the WebVTT parser using\n * the information parsed from the X-TIMESTAMP-MAP header and a TS to media time mapping\n * from the SyncController\n *\n * @param {Object} segmentInfo\n * a segment info object that describes the current segment\n * @param {Object} mappingObj\n * object containing a mapping from TS to media time\n * @param {Object} playlist\n * the playlist object containing the segment\n * @private\n */\n\n updateTimeMapping_(segmentInfo, mappingObj, playlist) {\n const segment = segmentInfo.segment;\n if (!mappingObj) {\n // If the sync controller does not have a mapping of TS to Media Time for the\n // timeline, then we don't have enough information to update the cue\n // start/end times\n return;\n }\n if (!segmentInfo.cues.length) {\n // If there are no cues, we also do not have enough information to figure out\n // segment timing. Mark that the segment contains no cues so we don't re-request\n // an empty segment.\n segment.empty = true;\n return;\n }\n const {\n MPEGTS,\n LOCAL\n } = segmentInfo.timestampmap;\n /**\n * From the spec:\n * The MPEGTS media timestamp MUST use a 90KHz timescale,\n * even when non-WebVTT Media Segments use a different timescale.\n */\n\n const mpegTsInSeconds = MPEGTS / ONE_SECOND_IN_TS;\n const diff = mpegTsInSeconds - LOCAL + mappingObj.mapping;\n segmentInfo.cues.forEach(cue => {\n const duration = cue.endTime - cue.startTime;\n const startTime = MPEGTS === 0 ? cue.startTime + diff : this.handleRollover_(cue.startTime + diff, mappingObj.time);\n cue.startTime = Math.max(startTime, 0);\n cue.endTime = Math.max(startTime + duration, 0);\n });\n if (!playlist.syncInfo) {\n const firstStart = segmentInfo.cues[0].startTime;\n const lastStart = segmentInfo.cues[segmentInfo.cues.length - 1].startTime;\n playlist.syncInfo = {\n mediaSequence: playlist.mediaSequence + segmentInfo.mediaIndex,\n time: Math.min(firstStart, lastStart - segment.duration)\n };\n }\n }\n /**\n * MPEG-TS PES timestamps are limited to 2^33.\n * Once they reach 2^33, they roll over to 0.\n * mux.js handles PES timestamp rollover for the following scenarios:\n * [forward rollover(right)] ->\n * PES timestamps monotonically increase, and once they reach 2^33, they roll over to 0\n * [backward rollover(left)] -->\n * we seek back to position before rollover.\n *\n * According to the HLS SPEC:\n * When synchronizing WebVTT with PES timestamps, clients SHOULD account\n * for cases where the 33-bit PES timestamps have wrapped and the WebVTT\n * cue times have not. When the PES timestamp wraps, the WebVTT Segment\n * SHOULD have a X-TIMESTAMP-MAP header that maps the current WebVTT\n * time to the new (low valued) PES timestamp.\n *\n * So we want to handle rollover here and align VTT Cue start/end time to the player's time.\n */\n\n handleRollover_(value, reference) {\n if (reference === null) {\n return value;\n }\n let valueIn90khz = value * ONE_SECOND_IN_TS;\n const referenceIn90khz = reference * ONE_SECOND_IN_TS;\n let offset;\n if (referenceIn90khz < valueIn90khz) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n } // distance(value - reference) > 2^32\n\n while (Math.abs(valueIn90khz - referenceIn90khz) > 4294967296) {\n valueIn90khz += offset;\n }\n return valueIn90khz / ONE_SECOND_IN_TS;\n }\n}\n\n/**\n * @file ad-cue-tags.js\n */\n/**\n * Searches for an ad cue that overlaps with the given mediaTime\n *\n * @param {Object} track\n * the track to find the cue for\n *\n * @param {number} mediaTime\n * the time to find the cue at\n *\n * @return {Object|null}\n * the found cue or null\n */\n\nconst findAdCue = function (track, mediaTime) {\n const cues = track.cues;\n for (let i = 0; i < cues.length; i++) {\n const cue = cues[i];\n if (mediaTime >= cue.adStartTime && mediaTime <= cue.adEndTime) {\n return cue;\n }\n }\n return null;\n};\nconst updateAdCues = function (media, track, offset = 0) {\n if (!media.segments) {\n return;\n }\n let mediaTime = offset;\n let cue;\n for (let i = 0; i < media.segments.length; i++) {\n const segment = media.segments[i];\n if (!cue) {\n // Since the cues will span for at least the segment duration, adding a fudge\n // factor of half segment duration will prevent duplicate cues from being\n // created when timing info is not exact (e.g. cue start time initialized\n // at 10.006677, but next call mediaTime is 10.003332 )\n cue = findAdCue(track, mediaTime + segment.duration / 2);\n }\n if (cue) {\n if ('cueIn' in segment) {\n // Found a CUE-IN so end the cue\n cue.endTime = mediaTime;\n cue.adEndTime = mediaTime;\n mediaTime += segment.duration;\n cue = null;\n continue;\n }\n if (mediaTime < cue.endTime) {\n // Already processed this mediaTime for this cue\n mediaTime += segment.duration;\n continue;\n } // otherwise extend cue until a CUE-IN is found\n\n cue.endTime += segment.duration;\n } else {\n if ('cueOut' in segment) {\n cue = new window$1.VTTCue(mediaTime, mediaTime + segment.duration, segment.cueOut);\n cue.adStartTime = mediaTime; // Assumes tag format to be\n // #EXT-X-CUE-OUT:30\n\n cue.adEndTime = mediaTime + parseFloat(segment.cueOut);\n track.addCue(cue);\n }\n if ('cueOutCont' in segment) {\n // Entered into the middle of an ad cue\n // Assumes tag formate to be\n // #EXT-X-CUE-OUT-CONT:10/30\n const [adOffset, adTotal] = segment.cueOutCont.split('/').map(parseFloat);\n cue = new window$1.VTTCue(mediaTime, mediaTime + segment.duration, '');\n cue.adStartTime = mediaTime - adOffset;\n cue.adEndTime = cue.adStartTime + adTotal;\n track.addCue(cue);\n }\n }\n mediaTime += segment.duration;\n }\n};\n\n/**\n * @file sync-controller.js\n */\n// synchronize expired playlist segments.\n// the max media sequence diff is 48 hours of live stream\n// content with two second segments. Anything larger than that\n// will likely be invalid.\n\nconst MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC = 86400;\nconst syncPointStrategies = [\n// Stategy \"VOD\": Handle the VOD-case where the sync-point is *always*\n// the equivalence display-time 0 === segment-index 0\n{\n name: 'VOD',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (duration !== Infinity) {\n const syncPoint = {\n time: 0,\n segmentIndex: 0,\n partIndex: null\n };\n return syncPoint;\n }\n return null;\n }\n}, {\n name: 'MediaSequence',\n /**\n * run media sequence strategy\n *\n * @param {SyncController} syncController\n * @param {Object} playlist\n * @param {number} duration\n * @param {number} currentTimeline\n * @param {number} currentTime\n * @param {string} type\n */\n run: (syncController, playlist, duration, currentTimeline, currentTime, type) => {\n if (!type) {\n return null;\n }\n const mediaSequenceMap = syncController.getMediaSequenceMap(type);\n if (!mediaSequenceMap || mediaSequenceMap.size === 0) {\n return null;\n }\n if (playlist.mediaSequence === undefined || !Array.isArray(playlist.segments) || !playlist.segments.length) {\n return null;\n }\n let currentMediaSequence = playlist.mediaSequence;\n let segmentIndex = 0;\n for (const segment of playlist.segments) {\n const range = mediaSequenceMap.get(currentMediaSequence);\n if (!range) {\n // unexpected case\n // we expect this playlist to be the same playlist in the map\n // just break from the loop and move forward to the next strategy\n break;\n }\n if (currentTime >= range.start && currentTime < range.end) {\n // we found segment\n if (Array.isArray(segment.parts) && segment.parts.length) {\n let currentPartStart = range.start;\n let partIndex = 0;\n for (const part of segment.parts) {\n const start = currentPartStart;\n const end = start + part.duration;\n if (currentTime >= start && currentTime < end) {\n return {\n time: range.start,\n segmentIndex,\n partIndex\n };\n }\n partIndex++;\n currentPartStart = end;\n }\n } // no parts found, return sync point for segment\n\n return {\n time: range.start,\n segmentIndex,\n partIndex: null\n };\n }\n segmentIndex++;\n currentMediaSequence++;\n } // we didn't find any segments for provided current time\n\n return null;\n }\n},\n// Stategy \"ProgramDateTime\": We have a program-date-time tag in this playlist\n{\n name: 'ProgramDateTime',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (!Object.keys(syncController.timelineToDatetimeMappings).length) {\n return null;\n }\n let syncPoint = null;\n let lastDistance = null;\n const partsAndSegments = getPartsAndSegments(playlist);\n currentTime = currentTime || 0;\n for (let i = 0; i < partsAndSegments.length; i++) {\n // start from the end and loop backwards for live\n // or start from the front and loop forwards for non-live\n const index = playlist.endList || currentTime === 0 ? i : partsAndSegments.length - (i + 1);\n const partAndSegment = partsAndSegments[index];\n const segment = partAndSegment.segment;\n const datetimeMapping = syncController.timelineToDatetimeMappings[segment.timeline];\n if (!datetimeMapping || !segment.dateTimeObject) {\n continue;\n }\n const segmentTime = segment.dateTimeObject.getTime() / 1000;\n let start = segmentTime + datetimeMapping; // take part duration into account.\n\n if (segment.parts && typeof partAndSegment.partIndex === 'number') {\n for (let z = 0; z < partAndSegment.partIndex; z++) {\n start += segment.parts[z].duration;\n }\n }\n const distance = Math.abs(currentTime - start); // Once the distance begins to increase, or if distance is 0, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && (distance === 0 || lastDistance < distance)) {\n break;\n }\n lastDistance = distance;\n syncPoint = {\n time: start,\n segmentIndex: partAndSegment.segmentIndex,\n partIndex: partAndSegment.partIndex\n };\n }\n return syncPoint;\n }\n},\n// Stategy \"Segment\": We have a known time mapping for a timeline and a\n// segment in the current timeline with timing data\n{\n name: 'Segment',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n let syncPoint = null;\n let lastDistance = null;\n currentTime = currentTime || 0;\n const partsAndSegments = getPartsAndSegments(playlist);\n for (let i = 0; i < partsAndSegments.length; i++) {\n // start from the end and loop backwards for live\n // or start from the front and loop forwards for non-live\n const index = playlist.endList || currentTime === 0 ? i : partsAndSegments.length - (i + 1);\n const partAndSegment = partsAndSegments[index];\n const segment = partAndSegment.segment;\n const start = partAndSegment.part && partAndSegment.part.start || segment && segment.start;\n if (segment.timeline === currentTimeline && typeof start !== 'undefined') {\n const distance = Math.abs(currentTime - start); // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: start,\n segmentIndex: partAndSegment.segmentIndex,\n partIndex: partAndSegment.partIndex\n };\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Discontinuity\": We have a discontinuity with a known\n// display-time\n{\n name: 'Discontinuity',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n let syncPoint = null;\n currentTime = currentTime || 0;\n if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n let lastDistance = null;\n for (let i = 0; i < playlist.discontinuityStarts.length; i++) {\n const segmentIndex = playlist.discontinuityStarts[i];\n const discontinuity = playlist.discontinuitySequence + i + 1;\n const discontinuitySync = syncController.discontinuities[discontinuity];\n if (discontinuitySync) {\n const distance = Math.abs(currentTime - discontinuitySync.time); // Once the distance begins to increase, we have passed\n // currentTime and can stop looking for better candidates\n\n if (lastDistance !== null && lastDistance < distance) {\n break;\n }\n if (!syncPoint || lastDistance === null || lastDistance >= distance) {\n lastDistance = distance;\n syncPoint = {\n time: discontinuitySync.time,\n segmentIndex,\n partIndex: null\n };\n }\n }\n }\n }\n return syncPoint;\n }\n},\n// Stategy \"Playlist\": We have a playlist with a known mapping of\n// segment index to display time\n{\n name: 'Playlist',\n run: (syncController, playlist, duration, currentTimeline, currentTime) => {\n if (playlist.syncInfo) {\n const syncPoint = {\n time: playlist.syncInfo.time,\n segmentIndex: playlist.syncInfo.mediaSequence - playlist.mediaSequence,\n partIndex: null\n };\n return syncPoint;\n }\n return null;\n }\n}];\nclass SyncController extends videojs.EventTarget {\n constructor(options = {}) {\n super(); // ...for synching across variants\n\n this.timelines = [];\n this.discontinuities = [];\n this.timelineToDatetimeMappings = {};\n /**\n * @type {Map>}\n * @private\n */\n\n this.mediaSequenceStorage_ = new Map();\n this.logger_ = logger('SyncController');\n }\n /**\n * Get media sequence map by type\n *\n * @param {string} type - segment loader type\n * @return {Map | undefined}\n */\n\n getMediaSequenceMap(type) {\n return this.mediaSequenceStorage_.get(type);\n }\n /**\n * Update Media Sequence Map -> \n *\n * @param {Object} playlist - parsed playlist\n * @param {number} currentTime - current player's time\n * @param {string} type - segment loader type\n * @return {void}\n */\n\n updateMediaSequenceMap(playlist, currentTime, type) {\n // we should not process this playlist if it does not have mediaSequence or segments\n if (playlist.mediaSequence === undefined || !Array.isArray(playlist.segments) || !playlist.segments.length) {\n return;\n }\n const currentMap = this.getMediaSequenceMap(type);\n const result = new Map();\n let currentMediaSequence = playlist.mediaSequence;\n let currentBaseTime;\n if (!currentMap) {\n // first playlist setup:\n currentBaseTime = 0;\n } else if (currentMap.has(playlist.mediaSequence)) {\n // further playlists setup:\n currentBaseTime = currentMap.get(playlist.mediaSequence).start;\n } else {\n // it seems like we have a gap between playlists, use current time as a fallback:\n this.logger_(`MediaSequence sync for ${type} segment loader - received a gap between playlists.\nFallback base time to: ${currentTime}.\nReceived media sequence: ${currentMediaSequence}.\nCurrent map: `, currentMap);\n currentBaseTime = currentTime;\n }\n this.logger_(`MediaSequence sync for ${type} segment loader.\nReceived media sequence: ${currentMediaSequence}.\nbase time is ${currentBaseTime}\nCurrent map: `, currentMap);\n playlist.segments.forEach(segment => {\n const start = currentBaseTime;\n const end = start + segment.duration;\n const range = {\n start,\n end\n };\n result.set(currentMediaSequence, range);\n currentMediaSequence++;\n currentBaseTime = end;\n });\n this.mediaSequenceStorage_.set(type, result);\n }\n /**\n * Find a sync-point for the playlist specified\n *\n * A sync-point is defined as a known mapping from display-time to\n * a segment-index in the current playlist.\n *\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {number} duration\n * Duration of the MediaSource (Infinite if playing a live source)\n * @param {number} currentTimeline\n * The last timeline from which a segment was loaded\n * @param {number} currentTime\n * Current player's time\n * @param {string} type\n * Segment loader type\n * @return {Object}\n * A sync-point object\n */\n\n getSyncPoint(playlist, duration, currentTimeline, currentTime, type) {\n // Always use VOD sync point for VOD\n if (duration !== Infinity) {\n const vodSyncPointStrategy = syncPointStrategies.find(({\n name\n }) => name === 'VOD');\n return vodSyncPointStrategy.run(this, playlist, duration);\n }\n const syncPoints = this.runStrategies_(playlist, duration, currentTimeline, currentTime, type);\n if (!syncPoints.length) {\n // Signal that we need to attempt to get a sync-point manually\n // by fetching a segment in the playlist and constructing\n // a sync-point from that information\n return null;\n } // If we have exact match just return it instead of finding the nearest distance\n\n for (const syncPointInfo of syncPoints) {\n const {\n syncPoint,\n strategy\n } = syncPointInfo;\n const {\n segmentIndex,\n time\n } = syncPoint;\n if (segmentIndex < 0) {\n continue;\n }\n const selectedSegment = playlist.segments[segmentIndex];\n const start = time;\n const end = start + selectedSegment.duration;\n this.logger_(`Strategy: ${strategy}. Current time: ${currentTime}. selected segment: ${segmentIndex}. Time: [${start} -> ${end}]}`);\n if (currentTime >= start && currentTime < end) {\n this.logger_('Found sync point with exact match: ', syncPoint);\n return syncPoint;\n }\n } // Now find the sync-point that is closest to the currentTime because\n // that should result in the most accurate guess about which segment\n // to fetch\n\n return this.selectSyncPoint_(syncPoints, {\n key: 'time',\n value: currentTime\n });\n }\n /**\n * Calculate the amount of time that has expired off the playlist during playback\n *\n * @param {Playlist} playlist\n * Playlist object to calculate expired from\n * @param {number} duration\n * Duration of the MediaSource (Infinity if playling a live source)\n * @return {number|null}\n * The amount of time that has expired off the playlist during playback. Null\n * if no sync-points for the playlist can be found.\n */\n\n getExpiredTime(playlist, duration) {\n if (!playlist || !playlist.segments) {\n return null;\n }\n const syncPoints = this.runStrategies_(playlist, duration, playlist.discontinuitySequence, 0, 'main'); // Without sync-points, there is not enough information to determine the expired time\n\n if (!syncPoints.length) {\n return null;\n }\n const syncPoint = this.selectSyncPoint_(syncPoints, {\n key: 'segmentIndex',\n value: 0\n }); // If the sync-point is beyond the start of the playlist, we want to subtract the\n // duration from index 0 to syncPoint.segmentIndex instead of adding.\n\n if (syncPoint.segmentIndex > 0) {\n syncPoint.time *= -1;\n }\n return Math.abs(syncPoint.time + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: syncPoint.segmentIndex,\n endIndex: 0\n }));\n }\n /**\n * Runs each sync-point strategy and returns a list of sync-points returned by the\n * strategies\n *\n * @private\n * @param {Playlist} playlist\n * The playlist that needs a sync-point\n * @param {number} duration\n * Duration of the MediaSource (Infinity if playing a live source)\n * @param {number} currentTimeline\n * The last timeline from which a segment was loaded\n * @param {number} currentTime\n * Current player's time\n * @param {string} type\n * Segment loader type\n * @return {Array}\n * A list of sync-point objects\n */\n\n runStrategies_(playlist, duration, currentTimeline, currentTime, type) {\n const syncPoints = []; // Try to find a sync-point in by utilizing various strategies...\n\n for (let i = 0; i < syncPointStrategies.length; i++) {\n const strategy = syncPointStrategies[i];\n const syncPoint = strategy.run(this, playlist, duration, currentTimeline, currentTime, type);\n if (syncPoint) {\n syncPoint.strategy = strategy.name;\n syncPoints.push({\n strategy: strategy.name,\n syncPoint\n });\n }\n }\n return syncPoints;\n }\n /**\n * Selects the sync-point nearest the specified target\n *\n * @private\n * @param {Array} syncPoints\n * List of sync-points to select from\n * @param {Object} target\n * Object specifying the property and value we are targeting\n * @param {string} target.key\n * Specifies the property to target. Must be either 'time' or 'segmentIndex'\n * @param {number} target.value\n * The value to target for the specified key.\n * @return {Object}\n * The sync-point nearest the target\n */\n\n selectSyncPoint_(syncPoints, target) {\n let bestSyncPoint = syncPoints[0].syncPoint;\n let bestDistance = Math.abs(syncPoints[0].syncPoint[target.key] - target.value);\n let bestStrategy = syncPoints[0].strategy;\n for (let i = 1; i < syncPoints.length; i++) {\n const newDistance = Math.abs(syncPoints[i].syncPoint[target.key] - target.value);\n if (newDistance < bestDistance) {\n bestDistance = newDistance;\n bestSyncPoint = syncPoints[i].syncPoint;\n bestStrategy = syncPoints[i].strategy;\n }\n }\n this.logger_(`syncPoint for [${target.key}: ${target.value}] chosen with strategy` + ` [${bestStrategy}]: [time:${bestSyncPoint.time},` + ` segmentIndex:${bestSyncPoint.segmentIndex}` + (typeof bestSyncPoint.partIndex === 'number' ? `,partIndex:${bestSyncPoint.partIndex}` : '') + ']');\n return bestSyncPoint;\n }\n /**\n * Save any meta-data present on the segments when segments leave\n * the live window to the playlist to allow for synchronization at the\n * playlist level later.\n *\n * @param {Playlist} oldPlaylist - The previous active playlist\n * @param {Playlist} newPlaylist - The updated and most current playlist\n */\n\n saveExpiredSegmentInfo(oldPlaylist, newPlaylist) {\n const mediaSequenceDiff = newPlaylist.mediaSequence - oldPlaylist.mediaSequence; // Ignore large media sequence gaps\n\n if (mediaSequenceDiff > MAX_MEDIA_SEQUENCE_DIFF_FOR_SYNC) {\n videojs.log.warn(`Not saving expired segment info. Media sequence gap ${mediaSequenceDiff} is too large.`);\n return;\n } // When a segment expires from the playlist and it has a start time\n // save that information as a possible sync-point reference in future\n\n for (let i = mediaSequenceDiff - 1; i >= 0; i--) {\n const lastRemovedSegment = oldPlaylist.segments[i];\n if (lastRemovedSegment && typeof lastRemovedSegment.start !== 'undefined') {\n newPlaylist.syncInfo = {\n mediaSequence: oldPlaylist.mediaSequence + i,\n time: lastRemovedSegment.start\n };\n this.logger_(`playlist refresh sync: [time:${newPlaylist.syncInfo.time},` + ` mediaSequence: ${newPlaylist.syncInfo.mediaSequence}]`);\n this.trigger('syncinfoupdate');\n break;\n }\n }\n }\n /**\n * Save the mapping from playlist's ProgramDateTime to display. This should only happen\n * before segments start to load.\n *\n * @param {Playlist} playlist - The currently active playlist\n */\n\n setDateTimeMappingForStart(playlist) {\n // It's possible for the playlist to be updated before playback starts, meaning time\n // zero is not yet set. If, during these playlist refreshes, a discontinuity is\n // crossed, then the old time zero mapping (for the prior timeline) would be retained\n // unless the mappings are cleared.\n this.timelineToDatetimeMappings = {};\n if (playlist.segments && playlist.segments.length && playlist.segments[0].dateTimeObject) {\n const firstSegment = playlist.segments[0];\n const playlistTimestamp = firstSegment.dateTimeObject.getTime() / 1000;\n this.timelineToDatetimeMappings[firstSegment.timeline] = -playlistTimestamp;\n }\n }\n /**\n * Calculates and saves timeline mappings, playlist sync info, and segment timing values\n * based on the latest timing information.\n *\n * @param {Object} options\n * Options object\n * @param {SegmentInfo} options.segmentInfo\n * The current active request information\n * @param {boolean} options.shouldSaveTimelineMapping\n * If there's a timeline change, determines if the timeline mapping should be\n * saved for timeline mapping and program date time mappings.\n */\n\n saveSegmentTimingInfo({\n segmentInfo,\n shouldSaveTimelineMapping\n }) {\n const didCalculateSegmentTimeMapping = this.calculateSegmentTimeMapping_(segmentInfo, segmentInfo.timingInfo, shouldSaveTimelineMapping);\n const segment = segmentInfo.segment;\n if (didCalculateSegmentTimeMapping) {\n this.saveDiscontinuitySyncInfo_(segmentInfo); // If the playlist does not have sync information yet, record that information\n // now with segment timing information\n\n if (!segmentInfo.playlist.syncInfo) {\n segmentInfo.playlist.syncInfo = {\n mediaSequence: segmentInfo.playlist.mediaSequence + segmentInfo.mediaIndex,\n time: segment.start\n };\n }\n }\n const dateTime = segment.dateTimeObject;\n if (segment.discontinuity && shouldSaveTimelineMapping && dateTime) {\n this.timelineToDatetimeMappings[segment.timeline] = -(dateTime.getTime() / 1000);\n }\n }\n timestampOffsetForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].time;\n }\n mappingForTimeline(timeline) {\n if (typeof this.timelines[timeline] === 'undefined') {\n return null;\n }\n return this.timelines[timeline].mapping;\n }\n /**\n * Use the \"media time\" for a segment to generate a mapping to \"display time\" and\n * save that display time to the segment.\n *\n * @private\n * @param {SegmentInfo} segmentInfo\n * The current active request information\n * @param {Object} timingInfo\n * The start and end time of the current segment in \"media time\"\n * @param {boolean} shouldSaveTimelineMapping\n * If there's a timeline change, determines if the timeline mapping should be\n * saved in timelines.\n * @return {boolean}\n * Returns false if segment time mapping could not be calculated\n */\n\n calculateSegmentTimeMapping_(segmentInfo, timingInfo, shouldSaveTimelineMapping) {\n // TODO: remove side effects\n const segment = segmentInfo.segment;\n const part = segmentInfo.part;\n let mappingObj = this.timelines[segmentInfo.timeline];\n let start;\n let end;\n if (typeof segmentInfo.timestampOffset === 'number') {\n mappingObj = {\n time: segmentInfo.startOfSegment,\n mapping: segmentInfo.startOfSegment - timingInfo.start\n };\n if (shouldSaveTimelineMapping) {\n this.timelines[segmentInfo.timeline] = mappingObj;\n this.trigger('timestampoffset');\n this.logger_(`time mapping for timeline ${segmentInfo.timeline}: ` + `[time: ${mappingObj.time}] [mapping: ${mappingObj.mapping}]`);\n }\n start = segmentInfo.startOfSegment;\n end = timingInfo.end + mappingObj.mapping;\n } else if (mappingObj) {\n start = timingInfo.start + mappingObj.mapping;\n end = timingInfo.end + mappingObj.mapping;\n } else {\n return false;\n }\n if (part) {\n part.start = start;\n part.end = end;\n } // If we don't have a segment start yet or the start value we got\n // is less than our current segment.start value, save a new start value.\n // We have to do this because parts will have segment timing info saved\n // multiple times and we want segment start to be the earliest part start\n // value for that segment.\n\n if (!segment.start || start < segment.start) {\n segment.start = start;\n }\n segment.end = end;\n return true;\n }\n /**\n * Each time we have discontinuity in the playlist, attempt to calculate the location\n * in display of the start of the discontinuity and save that. We also save an accuracy\n * value so that we save values with the most accuracy (closest to 0.)\n *\n * @private\n * @param {SegmentInfo} segmentInfo - The current active request information\n */\n\n saveDiscontinuitySyncInfo_(segmentInfo) {\n const playlist = segmentInfo.playlist;\n const segment = segmentInfo.segment; // If the current segment is a discontinuity then we know exactly where\n // the start of the range and it's accuracy is 0 (greater accuracy values\n // mean more approximation)\n\n if (segment.discontinuity) {\n this.discontinuities[segment.timeline] = {\n time: segment.start,\n accuracy: 0\n };\n } else if (playlist.discontinuityStarts && playlist.discontinuityStarts.length) {\n // Search for future discontinuities that we can provide better timing\n // information for and save that information for sync purposes\n for (let i = 0; i < playlist.discontinuityStarts.length; i++) {\n const segmentIndex = playlist.discontinuityStarts[i];\n const discontinuity = playlist.discontinuitySequence + i + 1;\n const mediaIndexDiff = segmentIndex - segmentInfo.mediaIndex;\n const accuracy = Math.abs(mediaIndexDiff);\n if (!this.discontinuities[discontinuity] || this.discontinuities[discontinuity].accuracy > accuracy) {\n let time;\n if (mediaIndexDiff < 0) {\n time = segment.start - sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: segmentInfo.mediaIndex,\n endIndex: segmentIndex\n });\n } else {\n time = segment.end + sumDurations({\n defaultDuration: playlist.targetDuration,\n durationList: playlist.segments,\n startIndex: segmentInfo.mediaIndex + 1,\n endIndex: segmentIndex\n });\n }\n this.discontinuities[discontinuity] = {\n time,\n accuracy\n };\n }\n }\n }\n }\n dispose() {\n this.trigger('dispose');\n this.off();\n }\n}\n\n/**\n * The TimelineChangeController acts as a source for segment loaders to listen for and\n * keep track of latest and pending timeline changes. This is useful to ensure proper\n * sync, as each loader may need to make a consideration for what timeline the other\n * loader is on before making changes which could impact the other loader's media.\n *\n * @class TimelineChangeController\n * @extends videojs.EventTarget\n */\n\nclass TimelineChangeController extends videojs.EventTarget {\n constructor() {\n super();\n this.pendingTimelineChanges_ = {};\n this.lastTimelineChanges_ = {};\n }\n clearPendingTimelineChange(type) {\n this.pendingTimelineChanges_[type] = null;\n this.trigger('pendingtimelinechange');\n }\n pendingTimelineChange({\n type,\n from,\n to\n }) {\n if (typeof from === 'number' && typeof to === 'number') {\n this.pendingTimelineChanges_[type] = {\n type,\n from,\n to\n };\n this.trigger('pendingtimelinechange');\n }\n return this.pendingTimelineChanges_[type];\n }\n lastTimelineChange({\n type,\n from,\n to\n }) {\n if (typeof from === 'number' && typeof to === 'number') {\n this.lastTimelineChanges_[type] = {\n type,\n from,\n to\n };\n delete this.pendingTimelineChanges_[type];\n this.trigger('timelinechange');\n }\n return this.lastTimelineChanges_[type];\n }\n dispose() {\n this.trigger('dispose');\n this.pendingTimelineChanges_ = {};\n this.lastTimelineChanges_ = {};\n this.off();\n }\n}\n\n/* rollup-plugin-worker-factory start for worker!/home/runner/work/http-streaming/http-streaming/src/decrypter-worker.js */\nconst workerCode = transform(getWorkerString(function () {\n /**\n * @file stream.js\n */\n\n /**\n * A lightweight readable stream implemention that handles event dispatching.\n *\n * @class Stream\n */\n\n var Stream = /*#__PURE__*/function () {\n function Stream() {\n this.listeners = {};\n }\n /**\n * Add a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener the callback to be invoked when an event of\n * the specified type occurs\n */\n\n var _proto = Stream.prototype;\n _proto.on = function on(type, listener) {\n if (!this.listeners[type]) {\n this.listeners[type] = [];\n }\n this.listeners[type].push(listener);\n }\n /**\n * Remove a listener for a specified event type.\n *\n * @param {string} type the event name\n * @param {Function} listener a function previously registered for this\n * type of event through `on`\n * @return {boolean} if we could turn it off or not\n */;\n\n _proto.off = function off(type, listener) {\n if (!this.listeners[type]) {\n return false;\n }\n var index = this.listeners[type].indexOf(listener); // TODO: which is better?\n // In Video.js we slice listener functions\n // on trigger so that it does not mess up the order\n // while we loop through.\n //\n // Here we slice on off so that the loop in trigger\n // can continue using it's old reference to loop without\n // messing up the order.\n\n this.listeners[type] = this.listeners[type].slice(0);\n this.listeners[type].splice(index, 1);\n return index > -1;\n }\n /**\n * Trigger an event of the specified type on this stream. Any additional\n * arguments to this function are passed as parameters to event listeners.\n *\n * @param {string} type the event name\n */;\n\n _proto.trigger = function trigger(type) {\n var callbacks = this.listeners[type];\n if (!callbacks) {\n return;\n } // Slicing the arguments on every invocation of this method\n // can add a significant amount of overhead. Avoid the\n // intermediate object creation for the common case of a\n // single callback argument\n\n if (arguments.length === 2) {\n var length = callbacks.length;\n for (var i = 0; i < length; ++i) {\n callbacks[i].call(this, arguments[1]);\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n var _length = callbacks.length;\n for (var _i = 0; _i < _length; ++_i) {\n callbacks[_i].apply(this, args);\n }\n }\n }\n /**\n * Destroys the stream and cleans up.\n */;\n\n _proto.dispose = function dispose() {\n this.listeners = {};\n }\n /**\n * Forwards all `data` events on this stream to the destination stream. The\n * destination stream should provide a method `push` to receive the data\n * events as they arrive.\n *\n * @param {Stream} destination the stream that will receive all `data` events\n * @see http://nodejs.org/api/stream.html#stream_readable_pipe_destination_options\n */;\n\n _proto.pipe = function pipe(destination) {\n this.on('data', function (data) {\n destination.push(data);\n });\n };\n return Stream;\n }();\n /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */\n\n /**\n * Returns the subarray of a Uint8Array without PKCS#7 padding.\n *\n * @param padded {Uint8Array} unencrypted bytes that have been padded\n * @return {Uint8Array} the unpadded bytes\n * @see http://tools.ietf.org/html/rfc5652\n */\n\n function unpad(padded) {\n return padded.subarray(0, padded.byteLength - padded[padded.byteLength - 1]);\n }\n /*! @name aes-decrypter @version 4.0.1 @license Apache-2.0 */\n\n /**\n * @file aes.js\n *\n * This file contains an adaptation of the AES decryption algorithm\n * from the Standford Javascript Cryptography Library. That work is\n * covered by the following copyright and permissions notice:\n *\n * Copyright 2009-2010 Emily Stark, Mike Hamburg, Dan Boneh.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n *\n * 2. Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR\n * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL OR CONTRIBUTORS BE\n * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR\n * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE\n * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN\n * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * The views and conclusions contained in the software and documentation\n * are those of the authors and should not be interpreted as representing\n * official policies, either expressed or implied, of the authors.\n */\n\n /**\n * Expand the S-box tables.\n *\n * @private\n */\n\n const precompute = function () {\n const tables = [[[], [], [], [], []], [[], [], [], [], []]];\n const encTable = tables[0];\n const decTable = tables[1];\n const sbox = encTable[4];\n const sboxInv = decTable[4];\n let i;\n let x;\n let xInv;\n const d = [];\n const th = [];\n let x2;\n let x4;\n let x8;\n let s;\n let tEnc;\n let tDec; // Compute double and third tables\n\n for (i = 0; i < 256; i++) {\n th[(d[i] = i << 1 ^ (i >> 7) * 283) ^ i] = i;\n }\n for (x = xInv = 0; !sbox[x]; x ^= x2 || 1, xInv = th[xInv] || 1) {\n // Compute sbox\n s = xInv ^ xInv << 1 ^ xInv << 2 ^ xInv << 3 ^ xInv << 4;\n s = s >> 8 ^ s & 255 ^ 99;\n sbox[x] = s;\n sboxInv[s] = x; // Compute MixColumns\n\n x8 = d[x4 = d[x2 = d[x]]];\n tDec = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n tEnc = d[s] * 0x101 ^ s * 0x1010100;\n for (i = 0; i < 4; i++) {\n encTable[i][x] = tEnc = tEnc << 24 ^ tEnc >>> 8;\n decTable[i][s] = tDec = tDec << 24 ^ tDec >>> 8;\n }\n } // Compactify. Considerable speedup on Firefox.\n\n for (i = 0; i < 5; i++) {\n encTable[i] = encTable[i].slice(0);\n decTable[i] = decTable[i].slice(0);\n }\n return tables;\n };\n let aesTables = null;\n /**\n * Schedule out an AES key for both encryption and decryption. This\n * is a low-level class. Use a cipher mode to do bulk encryption.\n *\n * @class AES\n * @param key {Array} The key as an array of 4, 6 or 8 words.\n */\n\n class AES {\n constructor(key) {\n /**\n * The expanded S-box and inverse S-box tables. These will be computed\n * on the client so that we don't have to send them down the wire.\n *\n * There are two tables, _tables[0] is for encryption and\n * _tables[1] is for decryption.\n *\n * The first 4 sub-tables are the expanded S-box with MixColumns. The\n * last (_tables[01][4]) is the S-box itself.\n *\n * @private\n */\n // if we have yet to precompute the S-box tables\n // do so now\n if (!aesTables) {\n aesTables = precompute();\n } // then make a copy of that object for use\n\n this._tables = [[aesTables[0][0].slice(), aesTables[0][1].slice(), aesTables[0][2].slice(), aesTables[0][3].slice(), aesTables[0][4].slice()], [aesTables[1][0].slice(), aesTables[1][1].slice(), aesTables[1][2].slice(), aesTables[1][3].slice(), aesTables[1][4].slice()]];\n let i;\n let j;\n let tmp;\n const sbox = this._tables[0][4];\n const decTable = this._tables[1];\n const keyLen = key.length;\n let rcon = 1;\n if (keyLen !== 4 && keyLen !== 6 && keyLen !== 8) {\n throw new Error('Invalid aes key size');\n }\n const encKey = key.slice(0);\n const decKey = [];\n this._key = [encKey, decKey]; // schedule encryption keys\n\n for (i = keyLen; i < 4 * keyLen + 28; i++) {\n tmp = encKey[i - 1]; // apply sbox\n\n if (i % keyLen === 0 || keyLen === 8 && i % keyLen === 4) {\n tmp = sbox[tmp >>> 24] << 24 ^ sbox[tmp >> 16 & 255] << 16 ^ sbox[tmp >> 8 & 255] << 8 ^ sbox[tmp & 255]; // shift rows and add rcon\n\n if (i % keyLen === 0) {\n tmp = tmp << 8 ^ tmp >>> 24 ^ rcon << 24;\n rcon = rcon << 1 ^ (rcon >> 7) * 283;\n }\n }\n encKey[i] = encKey[i - keyLen] ^ tmp;\n } // schedule decryption keys\n\n for (j = 0; i; j++, i--) {\n tmp = encKey[j & 3 ? i : i - 4];\n if (i <= 4 || j < 4) {\n decKey[j] = tmp;\n } else {\n decKey[j] = decTable[0][sbox[tmp >>> 24]] ^ decTable[1][sbox[tmp >> 16 & 255]] ^ decTable[2][sbox[tmp >> 8 & 255]] ^ decTable[3][sbox[tmp & 255]];\n }\n }\n }\n /**\n * Decrypt 16 bytes, specified as four 32-bit words.\n *\n * @param {number} encrypted0 the first word to decrypt\n * @param {number} encrypted1 the second word to decrypt\n * @param {number} encrypted2 the third word to decrypt\n * @param {number} encrypted3 the fourth word to decrypt\n * @param {Int32Array} out the array to write the decrypted words\n * into\n * @param {number} offset the offset into the output array to start\n * writing results\n * @return {Array} The plaintext.\n */\n\n decrypt(encrypted0, encrypted1, encrypted2, encrypted3, out, offset) {\n const key = this._key[1]; // state variables a,b,c,d are loaded with pre-whitened data\n\n let a = encrypted0 ^ key[0];\n let b = encrypted3 ^ key[1];\n let c = encrypted2 ^ key[2];\n let d = encrypted1 ^ key[3];\n let a2;\n let b2;\n let c2; // key.length === 2 ?\n\n const nInnerRounds = key.length / 4 - 2;\n let i;\n let kIndex = 4;\n const table = this._tables[1]; // load up the tables\n\n const table0 = table[0];\n const table1 = table[1];\n const table2 = table[2];\n const table3 = table[3];\n const sbox = table[4]; // Inner rounds. Cribbed from OpenSSL.\n\n for (i = 0; i < nInnerRounds; i++) {\n a2 = table0[a >>> 24] ^ table1[b >> 16 & 255] ^ table2[c >> 8 & 255] ^ table3[d & 255] ^ key[kIndex];\n b2 = table0[b >>> 24] ^ table1[c >> 16 & 255] ^ table2[d >> 8 & 255] ^ table3[a & 255] ^ key[kIndex + 1];\n c2 = table0[c >>> 24] ^ table1[d >> 16 & 255] ^ table2[a >> 8 & 255] ^ table3[b & 255] ^ key[kIndex + 2];\n d = table0[d >>> 24] ^ table1[a >> 16 & 255] ^ table2[b >> 8 & 255] ^ table3[c & 255] ^ key[kIndex + 3];\n kIndex += 4;\n a = a2;\n b = b2;\n c = c2;\n } // Last round.\n\n for (i = 0; i < 4; i++) {\n out[(3 & -i) + offset] = sbox[a >>> 24] << 24 ^ sbox[b >> 16 & 255] << 16 ^ sbox[c >> 8 & 255] << 8 ^ sbox[d & 255] ^ key[kIndex++];\n a2 = a;\n a = b;\n b = c;\n c = d;\n d = a2;\n }\n }\n }\n /**\n * @file async-stream.js\n */\n\n /**\n * A wrapper around the Stream class to use setTimeout\n * and run stream \"jobs\" Asynchronously\n *\n * @class AsyncStream\n * @extends Stream\n */\n\n class AsyncStream extends Stream {\n constructor() {\n super(Stream);\n this.jobs = [];\n this.delay = 1;\n this.timeout_ = null;\n }\n /**\n * process an async job\n *\n * @private\n */\n\n processJob_() {\n this.jobs.shift()();\n if (this.jobs.length) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n } else {\n this.timeout_ = null;\n }\n }\n /**\n * push a job into the stream\n *\n * @param {Function} job the job to push into the stream\n */\n\n push(job) {\n this.jobs.push(job);\n if (!this.timeout_) {\n this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay);\n }\n }\n }\n /**\n * @file decrypter.js\n *\n * An asynchronous implementation of AES-128 CBC decryption with\n * PKCS#7 padding.\n */\n\n /**\n * Convert network-order (big-endian) bytes into their little-endian\n * representation.\n */\n\n const ntoh = function (word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n };\n /**\n * Decrypt bytes using AES-128 with CBC and PKCS#7 padding.\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * use for the first round of CBC.\n * @return {Uint8Array} the decrypted bytes\n *\n * @see http://en.wikipedia.org/wiki/Advanced_Encryption_Standard\n * @see http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29\n * @see https://tools.ietf.org/html/rfc2315\n */\n\n const decrypt = function (encrypted, key, initVector) {\n // word-level access to the encrypted bytes\n const encrypted32 = new Int32Array(encrypted.buffer, encrypted.byteOffset, encrypted.byteLength >> 2);\n const decipher = new AES(Array.prototype.slice.call(key)); // byte and word-level access for the decrypted output\n\n const decrypted = new Uint8Array(encrypted.byteLength);\n const decrypted32 = new Int32Array(decrypted.buffer); // temporary variables for working with the IV, encrypted, and\n // decrypted data\n\n let init0;\n let init1;\n let init2;\n let init3;\n let encrypted0;\n let encrypted1;\n let encrypted2;\n let encrypted3; // iteration variable\n\n let wordIx; // pull out the words of the IV to ensure we don't modify the\n // passed-in reference and easier access\n\n init0 = initVector[0];\n init1 = initVector[1];\n init2 = initVector[2];\n init3 = initVector[3]; // decrypt four word sequences, applying cipher-block chaining (CBC)\n // to each decrypted block\n\n for (wordIx = 0; wordIx < encrypted32.length; wordIx += 4) {\n // convert big-endian (network order) words into little-endian\n // (javascript order)\n encrypted0 = ntoh(encrypted32[wordIx]);\n encrypted1 = ntoh(encrypted32[wordIx + 1]);\n encrypted2 = ntoh(encrypted32[wordIx + 2]);\n encrypted3 = ntoh(encrypted32[wordIx + 3]); // decrypt the block\n\n decipher.decrypt(encrypted0, encrypted1, encrypted2, encrypted3, decrypted32, wordIx); // XOR with the IV, and restore network byte-order to obtain the\n // plaintext\n\n decrypted32[wordIx] = ntoh(decrypted32[wordIx] ^ init0);\n decrypted32[wordIx + 1] = ntoh(decrypted32[wordIx + 1] ^ init1);\n decrypted32[wordIx + 2] = ntoh(decrypted32[wordIx + 2] ^ init2);\n decrypted32[wordIx + 3] = ntoh(decrypted32[wordIx + 3] ^ init3); // setup the IV for the next round\n\n init0 = encrypted0;\n init1 = encrypted1;\n init2 = encrypted2;\n init3 = encrypted3;\n }\n return decrypted;\n };\n /**\n * The `Decrypter` class that manages decryption of AES\n * data through `AsyncStream` objects and the `decrypt`\n * function\n *\n * @param {Uint8Array} encrypted the encrypted bytes\n * @param {Uint32Array} key the bytes of the decryption key\n * @param {Uint32Array} initVector the initialization vector (IV) to\n * @param {Function} done the function to run when done\n * @class Decrypter\n */\n\n class Decrypter {\n constructor(encrypted, key, initVector, done) {\n const step = Decrypter.STEP;\n const encrypted32 = new Int32Array(encrypted.buffer);\n const decrypted = new Uint8Array(encrypted.byteLength);\n let i = 0;\n this.asyncStream_ = new AsyncStream(); // split up the encryption job and do the individual chunks asynchronously\n\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n for (i = step; i < encrypted32.length; i += step) {\n initVector = new Uint32Array([ntoh(encrypted32[i - 4]), ntoh(encrypted32[i - 3]), ntoh(encrypted32[i - 2]), ntoh(encrypted32[i - 1])]);\n this.asyncStream_.push(this.decryptChunk_(encrypted32.subarray(i, i + step), key, initVector, decrypted));\n } // invoke the done() callback when everything is finished\n\n this.asyncStream_.push(function () {\n // remove pkcs#7 padding from the decrypted bytes\n done(null, unpad(decrypted));\n });\n }\n /**\n * a getter for step the maximum number of bytes to process at one time\n *\n * @return {number} the value of step 32000\n */\n\n static get STEP() {\n // 4 * 8000;\n return 32000;\n }\n /**\n * @private\n */\n\n decryptChunk_(encrypted, key, initVector, decrypted) {\n return function () {\n const bytes = decrypt(encrypted, key, initVector);\n decrypted.set(bytes, encrypted.byteOffset);\n };\n }\n }\n var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n var win;\n if (typeof window !== \"undefined\") {\n win = window;\n } else if (typeof commonjsGlobal !== \"undefined\") {\n win = commonjsGlobal;\n } else if (typeof self !== \"undefined\") {\n win = self;\n } else {\n win = {};\n }\n var window_1 = win;\n var isArrayBufferView = function isArrayBufferView(obj) {\n if (ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(obj);\n }\n return obj && obj.buffer instanceof ArrayBuffer;\n };\n var BigInt = window_1.BigInt || Number;\n [BigInt('0x1'), BigInt('0x100'), BigInt('0x10000'), BigInt('0x1000000'), BigInt('0x100000000'), BigInt('0x10000000000'), BigInt('0x1000000000000'), BigInt('0x100000000000000'), BigInt('0x10000000000000000')];\n (function () {\n var a = new Uint16Array([0xFFCC]);\n var b = new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n if (b[0] === 0xFF) {\n return 'big';\n }\n if (b[0] === 0xCC) {\n return 'little';\n }\n return 'unknown';\n })();\n /**\n * Creates an object for sending to a web worker modifying properties that are TypedArrays\n * into a new object with seperated properties for the buffer, byteOffset, and byteLength.\n *\n * @param {Object} message\n * Object of properties and values to send to the web worker\n * @return {Object}\n * Modified message with TypedArray values expanded\n * @function createTransferableMessage\n */\n\n const createTransferableMessage = function (message) {\n const transferable = {};\n Object.keys(message).forEach(key => {\n const value = message[key];\n if (isArrayBufferView(value)) {\n transferable[key] = {\n bytes: value.buffer,\n byteOffset: value.byteOffset,\n byteLength: value.byteLength\n };\n } else {\n transferable[key] = value;\n }\n });\n return transferable;\n };\n /* global self */\n\n /**\n * Our web worker interface so that things can talk to aes-decrypter\n * that will be running in a web worker. the scope is passed to this by\n * webworkify.\n */\n\n self.onmessage = function (event) {\n const data = event.data;\n const encrypted = new Uint8Array(data.encrypted.bytes, data.encrypted.byteOffset, data.encrypted.byteLength);\n const key = new Uint32Array(data.key.bytes, data.key.byteOffset, data.key.byteLength / 4);\n const iv = new Uint32Array(data.iv.bytes, data.iv.byteOffset, data.iv.byteLength / 4);\n /* eslint-disable no-new, handle-callback-err */\n\n new Decrypter(encrypted, key, iv, function (err, bytes) {\n self.postMessage(createTransferableMessage({\n source: data.source,\n decrypted: bytes\n }), [bytes.buffer]);\n });\n /* eslint-enable */\n };\n}));\n\nvar Decrypter = factory(workerCode);\n/* rollup-plugin-worker-factory end for worker!/home/runner/work/http-streaming/http-streaming/src/decrypter-worker.js */\n\n/**\n * Convert the properties of an HLS track into an audioTrackKind.\n *\n * @private\n */\n\nconst audioTrackKind_ = properties => {\n let kind = properties.default ? 'main' : 'alternative';\n if (properties.characteristics && properties.characteristics.indexOf('public.accessibility.describes-video') >= 0) {\n kind = 'main-desc';\n }\n return kind;\n};\n/**\n * Pause provided segment loader and playlist loader if active\n *\n * @param {SegmentLoader} segmentLoader\n * SegmentLoader to pause\n * @param {Object} mediaType\n * Active media type\n * @function stopLoaders\n */\n\nconst stopLoaders = (segmentLoader, mediaType) => {\n segmentLoader.abort();\n segmentLoader.pause();\n if (mediaType && mediaType.activePlaylistLoader) {\n mediaType.activePlaylistLoader.pause();\n mediaType.activePlaylistLoader = null;\n }\n};\n/**\n * Start loading provided segment loader and playlist loader\n *\n * @param {PlaylistLoader} playlistLoader\n * PlaylistLoader to start loading\n * @param {Object} mediaType\n * Active media type\n * @function startLoaders\n */\n\nconst startLoaders = (playlistLoader, mediaType) => {\n // Segment loader will be started after `loadedmetadata` or `loadedplaylist` from the\n // playlist loader\n mediaType.activePlaylistLoader = playlistLoader;\n playlistLoader.load();\n};\n/**\n * Returns a function to be called when the media group changes. It performs a\n * non-destructive (preserve the buffer) resync of the SegmentLoader. This is because a\n * change of group is merely a rendition switch of the same content at another encoding,\n * rather than a change of content, such as switching audio from English to Spanish.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a non-destructive resync of SegmentLoader when the active media\n * group changes.\n * @function onGroupChanged\n */\n\nconst onGroupChanged = (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader,\n main: mainSegmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.getActiveGroup();\n const previousActiveLoader = mediaType.activePlaylistLoader;\n const lastGroup = mediaType.lastGroup_; // the group did not change do nothing\n\n if (activeGroup && lastGroup && activeGroup.id === lastGroup.id) {\n return;\n }\n mediaType.lastGroup_ = activeGroup;\n mediaType.lastTrack_ = activeTrack;\n stopLoaders(segmentLoader, mediaType);\n if (!activeGroup || activeGroup.isMainPlaylist) {\n // there is no group active or active group is a main playlist and won't change\n return;\n }\n if (!activeGroup.playlistLoader) {\n if (previousActiveLoader) {\n // The previous group had a playlist loader but the new active group does not\n // this means we are switching from demuxed to muxed audio. In this case we want to\n // do a destructive reset of the main segment loader and not restart the audio\n // loaders.\n mainSegmentLoader.resetEverything();\n }\n return;\n } // Non-destructive resync\n\n segmentLoader.resyncLoader();\n startLoaders(activeGroup.playlistLoader, mediaType);\n};\nconst onGroupChanging = (type, settings) => () => {\n const {\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n mediaType.lastGroup_ = null;\n segmentLoader.abort();\n segmentLoader.pause();\n};\n/**\n * Returns a function to be called when the media track changes. It performs a\n * destructive reset of the SegmentLoader to ensure we start loading as close to\n * currentTime as possible.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Handler for a destructive reset of SegmentLoader when the active media\n * track changes.\n * @function onTrackChanged\n */\n\nconst onTrackChanged = (type, settings) => () => {\n const {\n mainPlaylistLoader,\n segmentLoaders: {\n [type]: segmentLoader,\n main: mainSegmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.getActiveGroup();\n const previousActiveLoader = mediaType.activePlaylistLoader;\n const lastTrack = mediaType.lastTrack_; // track did not change, do nothing\n\n if (lastTrack && activeTrack && lastTrack.id === activeTrack.id) {\n return;\n }\n mediaType.lastGroup_ = activeGroup;\n mediaType.lastTrack_ = activeTrack;\n stopLoaders(segmentLoader, mediaType);\n if (!activeGroup) {\n // there is no group active so we do not want to restart loaders\n return;\n }\n if (activeGroup.isMainPlaylist) {\n // track did not change, do nothing\n if (!activeTrack || !lastTrack || activeTrack.id === lastTrack.id) {\n return;\n }\n const pc = settings.vhs.playlistController_;\n const newPlaylist = pc.selectPlaylist(); // media will not change do nothing\n\n if (pc.media() === newPlaylist) {\n return;\n }\n mediaType.logger_(`track change. Switching main audio from ${lastTrack.id} to ${activeTrack.id}`);\n mainPlaylistLoader.pause();\n mainSegmentLoader.resetEverything();\n pc.fastQualityChange_(newPlaylist);\n return;\n }\n if (type === 'AUDIO') {\n if (!activeGroup.playlistLoader) {\n // when switching from demuxed audio/video to muxed audio/video (noted by no\n // playlist loader for the audio group), we want to do a destructive reset of the\n // main segment loader and not restart the audio loaders\n mainSegmentLoader.setAudio(true); // don't have to worry about disabling the audio of the audio segment loader since\n // it should be stopped\n\n mainSegmentLoader.resetEverything();\n return;\n } // although the segment loader is an audio segment loader, call the setAudio\n // function to ensure it is prepared to re-append the init segment (or handle other\n // config changes)\n\n segmentLoader.setAudio(true);\n mainSegmentLoader.setAudio(false);\n }\n if (previousActiveLoader === activeGroup.playlistLoader) {\n // Nothing has actually changed. This can happen because track change events can fire\n // multiple times for a \"single\" change. One for enabling the new active track, and\n // one for disabling the track that was active\n startLoaders(activeGroup.playlistLoader, mediaType);\n return;\n }\n if (segmentLoader.track) {\n // For WebVTT, set the new text track in the segmentloader\n segmentLoader.track(activeTrack);\n } // destructive reset\n\n segmentLoader.resetEverything();\n startLoaders(activeGroup.playlistLoader, mediaType);\n};\nconst onError = {\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning (or error if the playlist is excluded) to\n * console and switches back to default audio track.\n * @function onError.AUDIO\n */\n AUDIO: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: mediaType\n },\n excludePlaylist\n } = settings; // switch back to default audio track\n\n const activeTrack = mediaType.activeTrack();\n const activeGroup = mediaType.activeGroup();\n const id = (activeGroup.filter(group => group.default)[0] || activeGroup[0]).id;\n const defaultTrack = mediaType.tracks[id];\n if (activeTrack === defaultTrack) {\n // Default track encountered an error. All we can do now is exclude the current\n // rendition and hope another will switch audio groups\n excludePlaylist({\n error: {\n message: 'Problem encountered loading the default audio track.'\n }\n });\n return;\n }\n videojs.log.warn('Problem encountered loading the alternate audio track.' + 'Switching back to default.');\n for (const trackId in mediaType.tracks) {\n mediaType.tracks[trackId].enabled = mediaType.tracks[trackId] === defaultTrack;\n }\n mediaType.onTrackChanged();\n },\n /**\n * Returns a function to be called when a SegmentLoader or PlaylistLoader encounters\n * an error.\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Error handler. Logs warning to console and disables the active subtitle track\n * @function onError.SUBTITLES\n */\n SUBTITLES: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n videojs.log.warn('Problem encountered loading the subtitle track.' + 'Disabling subtitle track.');\n const track = mediaType.activeTrack();\n if (track) {\n track.mode = 'disabled';\n }\n mediaType.onTrackChanged();\n }\n};\nconst setupListeners = {\n /**\n * Setup event listeners for audio playlist loader\n *\n * @param {string} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.AUDIO\n */\n AUDIO: (type, playlistLoader, settings) => {\n if (!playlistLoader) {\n // no playlist loader means audio will be muxed with the video\n return;\n }\n const {\n tech,\n requestOptions,\n segmentLoaders: {\n [type]: segmentLoader\n }\n } = settings;\n playlistLoader.on('loadedmetadata', () => {\n const media = playlistLoader.media();\n segmentLoader.playlist(media, requestOptions); // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n playlistLoader.on('loadedplaylist', () => {\n segmentLoader.playlist(playlistLoader.media(), requestOptions); // If the player isn't paused, ensure that the segment loader is running\n\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n playlistLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup event listeners for subtitle playlist loader\n *\n * @param {string} type\n * MediaGroup type\n * @param {PlaylistLoader|null} playlistLoader\n * PlaylistLoader to register listeners on\n * @param {Object} settings\n * Object containing required information for media groups\n * @function setupListeners.SUBTITLES\n */\n SUBTITLES: (type, playlistLoader, settings) => {\n const {\n tech,\n requestOptions,\n segmentLoaders: {\n [type]: segmentLoader\n },\n mediaTypes: {\n [type]: mediaType\n }\n } = settings;\n playlistLoader.on('loadedmetadata', () => {\n const media = playlistLoader.media();\n segmentLoader.playlist(media, requestOptions);\n segmentLoader.track(mediaType.activeTrack()); // if the video is already playing, or if this isn't a live video and preload\n // permits, start downloading segments\n\n if (!tech.paused() || media.endList && tech.preload() !== 'none') {\n segmentLoader.load();\n }\n });\n playlistLoader.on('loadedplaylist', () => {\n segmentLoader.playlist(playlistLoader.media(), requestOptions); // If the player isn't paused, ensure that the segment loader is running\n\n if (!tech.paused()) {\n segmentLoader.load();\n }\n });\n playlistLoader.on('error', onError[type](type, settings));\n }\n};\nconst initialize = {\n /**\n * Setup PlaylistLoaders and AudioTracks for the audio groups\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.AUDIO\n */\n 'AUDIO': (type, settings) => {\n const {\n vhs,\n sourceType,\n segmentLoaders: {\n [type]: segmentLoader\n },\n requestOptions,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks,\n logger_\n }\n },\n mainPlaylistLoader\n } = settings;\n const audioOnlyMain = isAudioOnly(mainPlaylistLoader.main); // force a default if we have none\n\n if (!mediaGroups[type] || Object.keys(mediaGroups[type]).length === 0) {\n mediaGroups[type] = {\n main: {\n default: {\n default: true\n }\n }\n };\n if (audioOnlyMain) {\n mediaGroups[type].main.default.playlists = mainPlaylistLoader.main.playlists;\n }\n }\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n let properties = mediaGroups[type][groupId][variantLabel];\n let playlistLoader;\n if (audioOnlyMain) {\n logger_(`AUDIO group '${groupId}' label '${variantLabel}' is a main playlist`);\n properties.isMainPlaylist = true;\n playlistLoader = null; // if vhs-json was provided as the source, and the media playlist was resolved,\n // use the resolved media playlist object\n } else if (sourceType === 'vhs-json' && properties.playlists) {\n playlistLoader = new PlaylistLoader(properties.playlists[0], vhs, requestOptions);\n } else if (properties.resolvedUri) {\n playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions); // TODO: dash isn't the only type with properties.playlists\n // should we even have properties.playlists in this check.\n } else if (properties.playlists && sourceType === 'dash') {\n playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader);\n } else {\n // no resolvedUri means the audio is muxed with the video when using this\n // audio track\n playlistLoader = null;\n }\n properties = merge({\n id: variantLabel,\n playlistLoader\n }, properties);\n setupListeners[type](type, properties.playlistLoader, settings);\n groups[groupId].push(properties);\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = new videojs.AudioTrack({\n id: variantLabel,\n kind: audioTrackKind_(properties),\n enabled: false,\n language: properties.language,\n default: properties.default,\n label: variantLabel\n });\n tracks[variantLabel] = track;\n }\n }\n } // setup single error event handler for the segment loader\n\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup PlaylistLoaders and TextTracks for the subtitle groups\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize.SUBTITLES\n */\n 'SUBTITLES': (type, settings) => {\n const {\n tech,\n vhs,\n sourceType,\n segmentLoaders: {\n [type]: segmentLoader\n },\n requestOptions,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks\n }\n },\n mainPlaylistLoader\n } = settings;\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n if (!vhs.options_.useForcedSubtitles && mediaGroups[type][groupId][variantLabel].forced) {\n // Subtitle playlists with the forced attribute are not selectable in Safari.\n // According to Apple's HLS Authoring Specification:\n // If content has forced subtitles and regular subtitles in a given language,\n // the regular subtitles track in that language MUST contain both the forced\n // subtitles and the regular subtitles for that language.\n // Because of this requirement and that Safari does not add forced subtitles,\n // forced subtitles are skipped here to maintain consistent experience across\n // all platforms\n continue;\n }\n let properties = mediaGroups[type][groupId][variantLabel];\n let playlistLoader;\n if (sourceType === 'hls') {\n playlistLoader = new PlaylistLoader(properties.resolvedUri, vhs, requestOptions);\n } else if (sourceType === 'dash') {\n const playlists = properties.playlists.filter(p => p.excludeUntil !== Infinity);\n if (!playlists.length) {\n return;\n }\n playlistLoader = new DashPlaylistLoader(properties.playlists[0], vhs, requestOptions, mainPlaylistLoader);\n } else if (sourceType === 'vhs-json') {\n playlistLoader = new PlaylistLoader(\n // if the vhs-json object included the media playlist, use the media playlist\n // as provided, otherwise use the resolved URI to load the playlist\n properties.playlists ? properties.playlists[0] : properties.resolvedUri, vhs, requestOptions);\n }\n properties = merge({\n id: variantLabel,\n playlistLoader\n }, properties);\n setupListeners[type](type, properties.playlistLoader, settings);\n groups[groupId].push(properties);\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = tech.addRemoteTextTrack({\n id: variantLabel,\n kind: 'subtitles',\n default: properties.default && properties.autoselect,\n language: properties.language,\n label: variantLabel\n }, false).track;\n tracks[variantLabel] = track;\n }\n }\n } // setup single error event handler for the segment loader\n\n segmentLoader.on('error', onError[type](type, settings));\n },\n /**\n * Setup TextTracks for the closed-caption groups\n *\n * @param {String} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @function initialize['CLOSED-CAPTIONS']\n */\n 'CLOSED-CAPTIONS': (type, settings) => {\n const {\n tech,\n main: {\n mediaGroups\n },\n mediaTypes: {\n [type]: {\n groups,\n tracks\n }\n }\n } = settings;\n for (const groupId in mediaGroups[type]) {\n if (!groups[groupId]) {\n groups[groupId] = [];\n }\n for (const variantLabel in mediaGroups[type][groupId]) {\n const properties = mediaGroups[type][groupId][variantLabel]; // Look for either 608 (CCn) or 708 (SERVICEn) caption services\n\n if (!/^(?:CC|SERVICE)/.test(properties.instreamId)) {\n continue;\n }\n const captionServices = tech.options_.vhs && tech.options_.vhs.captionServices || {};\n let newProps = {\n label: variantLabel,\n language: properties.language,\n instreamId: properties.instreamId,\n default: properties.default && properties.autoselect\n };\n if (captionServices[newProps.instreamId]) {\n newProps = merge(newProps, captionServices[newProps.instreamId]);\n }\n if (newProps.default === undefined) {\n delete newProps.default;\n } // No PlaylistLoader is required for Closed-Captions because the captions are\n // embedded within the video stream\n\n groups[groupId].push(merge({\n id: variantLabel\n }, properties));\n if (typeof tracks[variantLabel] === 'undefined') {\n const track = tech.addRemoteTextTrack({\n id: newProps.instreamId,\n kind: 'captions',\n default: newProps.default,\n language: newProps.language,\n label: newProps.label\n }, false).track;\n tracks[variantLabel] = track;\n }\n }\n }\n }\n};\nconst groupMatch = (list, media) => {\n for (let i = 0; i < list.length; i++) {\n if (playlistMatch(media, list[i])) {\n return true;\n }\n if (list[i].playlists && groupMatch(list[i].playlists, media)) {\n return true;\n }\n }\n return false;\n};\n/**\n * Returns a function used to get the active group of the provided type\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media group for the provided type. Takes an\n * optional parameter {TextTrack} track. If no track is provided, a list of all\n * variants in the group, otherwise the variant corresponding to the provided\n * track is returned.\n * @function activeGroup\n */\n\nconst activeGroup = (type, settings) => track => {\n const {\n mainPlaylistLoader,\n mediaTypes: {\n [type]: {\n groups\n }\n }\n } = settings;\n const media = mainPlaylistLoader.media();\n if (!media) {\n return null;\n }\n let variants = null; // set to variants to main media active group\n\n if (media.attributes[type]) {\n variants = groups[media.attributes[type]];\n }\n const groupKeys = Object.keys(groups);\n if (!variants) {\n // find the mainPlaylistLoader media\n // that is in a media group if we are dealing\n // with audio only\n if (type === 'AUDIO' && groupKeys.length > 1 && isAudioOnly(settings.main)) {\n for (let i = 0; i < groupKeys.length; i++) {\n const groupPropertyList = groups[groupKeys[i]];\n if (groupMatch(groupPropertyList, media)) {\n variants = groupPropertyList;\n break;\n }\n } // use the main group if it exists\n } else if (groups.main) {\n variants = groups.main; // only one group, use that one\n } else if (groupKeys.length === 1) {\n variants = groups[groupKeys[0]];\n }\n }\n if (typeof track === 'undefined') {\n return variants;\n }\n if (track === null || !variants) {\n // An active track was specified so a corresponding group is expected. track === null\n // means no track is currently active so there is no corresponding group\n return null;\n }\n return variants.filter(props => props.id === track.id)[0] || null;\n};\nconst activeTrack = {\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.AUDIO\n */\n AUDIO: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: {\n tracks\n }\n }\n } = settings;\n for (const id in tracks) {\n if (tracks[id].enabled) {\n return tracks[id];\n }\n }\n return null;\n },\n /**\n * Returns a function used to get the active track of type provided\n *\n * @param {string} type\n * MediaGroup type\n * @param {Object} settings\n * Object containing required information for media groups\n * @return {Function}\n * Function that returns the active media track for the provided type. Returns\n * null if no track is active\n * @function activeTrack.SUBTITLES\n */\n SUBTITLES: (type, settings) => () => {\n const {\n mediaTypes: {\n [type]: {\n tracks\n }\n }\n } = settings;\n for (const id in tracks) {\n if (tracks[id].mode === 'showing' || tracks[id].mode === 'hidden') {\n return tracks[id];\n }\n }\n return null;\n }\n};\nconst getActiveGroup = (type, {\n mediaTypes\n}) => () => {\n const activeTrack_ = mediaTypes[type].activeTrack();\n if (!activeTrack_) {\n return null;\n }\n return mediaTypes[type].activeGroup(activeTrack_);\n};\n/**\n * Setup PlaylistLoaders and Tracks for media groups (Audio, Subtitles,\n * Closed-Captions) specified in the main manifest.\n *\n * @param {Object} settings\n * Object containing required information for setting up the media groups\n * @param {Tech} settings.tech\n * The tech of the player\n * @param {Object} settings.requestOptions\n * XHR request options used by the segment loaders\n * @param {PlaylistLoader} settings.mainPlaylistLoader\n * PlaylistLoader for the main source\n * @param {VhsHandler} settings.vhs\n * VHS SourceHandler\n * @param {Object} settings.main\n * The parsed main manifest\n * @param {Object} settings.mediaTypes\n * Object to store the loaders, tracks, and utility methods for each media type\n * @param {Function} settings.excludePlaylist\n * Excludes the current rendition and forces a rendition switch.\n * @function setupMediaGroups\n */\n\nconst setupMediaGroups = settings => {\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n initialize[type](type, settings);\n });\n const {\n mediaTypes,\n mainPlaylistLoader,\n tech,\n vhs,\n segmentLoaders: {\n ['AUDIO']: audioSegmentLoader,\n main: mainSegmentLoader\n }\n } = settings; // setup active group and track getters and change event handlers\n\n ['AUDIO', 'SUBTITLES'].forEach(type => {\n mediaTypes[type].activeGroup = activeGroup(type, settings);\n mediaTypes[type].activeTrack = activeTrack[type](type, settings);\n mediaTypes[type].onGroupChanged = onGroupChanged(type, settings);\n mediaTypes[type].onGroupChanging = onGroupChanging(type, settings);\n mediaTypes[type].onTrackChanged = onTrackChanged(type, settings);\n mediaTypes[type].getActiveGroup = getActiveGroup(type, settings);\n }); // DO NOT enable the default subtitle or caption track.\n // DO enable the default audio track\n\n const audioGroup = mediaTypes.AUDIO.activeGroup();\n if (audioGroup) {\n const groupId = (audioGroup.filter(group => group.default)[0] || audioGroup[0]).id;\n mediaTypes.AUDIO.tracks[groupId].enabled = true;\n mediaTypes.AUDIO.onGroupChanged();\n mediaTypes.AUDIO.onTrackChanged();\n const activeAudioGroup = mediaTypes.AUDIO.getActiveGroup(); // a similar check for handling setAudio on each loader is run again each time the\n // track is changed, but needs to be handled here since the track may not be considered\n // changed on the first call to onTrackChanged\n\n if (!activeAudioGroup.playlistLoader) {\n // either audio is muxed with video or the stream is audio only\n mainSegmentLoader.setAudio(true);\n } else {\n // audio is demuxed\n mainSegmentLoader.setAudio(false);\n audioSegmentLoader.setAudio(true);\n }\n }\n mainPlaylistLoader.on('mediachange', () => {\n ['AUDIO', 'SUBTITLES'].forEach(type => mediaTypes[type].onGroupChanged());\n });\n mainPlaylistLoader.on('mediachanging', () => {\n ['AUDIO', 'SUBTITLES'].forEach(type => mediaTypes[type].onGroupChanging());\n }); // custom audio track change event handler for usage event\n\n const onAudioTrackChanged = () => {\n mediaTypes.AUDIO.onTrackChanged();\n tech.trigger({\n type: 'usage',\n name: 'vhs-audio-change'\n });\n };\n tech.audioTracks().addEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().addEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n vhs.on('dispose', () => {\n tech.audioTracks().removeEventListener('change', onAudioTrackChanged);\n tech.remoteTextTracks().removeEventListener('change', mediaTypes.SUBTITLES.onTrackChanged);\n }); // clear existing audio tracks and add the ones we just created\n\n tech.clearTracks('audio');\n for (const id in mediaTypes.AUDIO.tracks) {\n tech.audioTracks().addTrack(mediaTypes.AUDIO.tracks[id]);\n }\n};\n/**\n * Creates skeleton object used to store the loaders, tracks, and utility methods for each\n * media type\n *\n * @return {Object}\n * Object to store the loaders, tracks, and utility methods for each media type\n * @function createMediaTypes\n */\n\nconst createMediaTypes = () => {\n const mediaTypes = {};\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n mediaTypes[type] = {\n groups: {},\n tracks: {},\n activePlaylistLoader: null,\n activeGroup: noop,\n activeTrack: noop,\n getActiveGroup: noop,\n onGroupChanged: noop,\n onTrackChanged: noop,\n lastTrack_: null,\n logger_: logger(`MediaGroups[${type}]`)\n };\n });\n return mediaTypes;\n};\n\n/**\n * A utility class for setting properties and maintaining the state of the content steering manifest.\n *\n * Content Steering manifest format:\n * VERSION: number (required) currently only version 1 is supported.\n * TTL: number in seconds (optional) until the next content steering manifest reload.\n * RELOAD-URI: string (optional) uri to fetch the next content steering manifest.\n * SERVICE-LOCATION-PRIORITY or PATHWAY-PRIORITY a non empty array of unique string values.\n * PATHWAY-CLONES: array (optional) (HLS only) pathway clone objects to copy from other playlists.\n */\n\nclass SteeringManifest {\n constructor() {\n this.priority_ = [];\n this.pathwayClones_ = new Map();\n }\n set version(number) {\n // Only version 1 is currently supported for both DASH and HLS.\n if (number === 1) {\n this.version_ = number;\n }\n }\n set ttl(seconds) {\n // TTL = time-to-live, default = 300 seconds.\n this.ttl_ = seconds || 300;\n }\n set reloadUri(uri) {\n if (uri) {\n // reload URI can be relative to the previous reloadUri.\n this.reloadUri_ = resolveUrl(this.reloadUri_, uri);\n }\n }\n set priority(array) {\n // priority must be non-empty and unique values.\n if (array && array.length) {\n this.priority_ = array;\n }\n }\n set pathwayClones(array) {\n // pathwayClones must be non-empty.\n if (array && array.length) {\n this.pathwayClones_ = new Map(array.map(clone => [clone.ID, clone]));\n }\n }\n get version() {\n return this.version_;\n }\n get ttl() {\n return this.ttl_;\n }\n get reloadUri() {\n return this.reloadUri_;\n }\n get priority() {\n return this.priority_;\n }\n get pathwayClones() {\n return this.pathwayClones_;\n }\n}\n/**\n * This class represents a content steering manifest and associated state. See both HLS and DASH specifications.\n * HLS: https://developer.apple.com/streaming/HLSContentSteeringSpecification.pdf and\n * https://datatracker.ietf.org/doc/draft-pantos-hls-rfc8216bis/ section 4.4.6.6.\n * DASH: https://dashif.org/docs/DASH-IF-CTS-00XX-Content-Steering-Community-Review.pdf\n *\n * @param {function} xhr for making a network request from the browser.\n * @param {function} bandwidth for fetching the current bandwidth from the main segment loader.\n */\n\nclass ContentSteeringController extends videojs.EventTarget {\n constructor(xhr, bandwidth) {\n super();\n this.currentPathway = null;\n this.defaultPathway = null;\n this.queryBeforeStart = false;\n this.availablePathways_ = new Set();\n this.steeringManifest = new SteeringManifest();\n this.proxyServerUrl_ = null;\n this.manifestType_ = null;\n this.ttlTimeout_ = null;\n this.request_ = null;\n this.currentPathwayClones = new Map();\n this.nextPathwayClones = new Map();\n this.excludedSteeringManifestURLs = new Set();\n this.logger_ = logger('Content Steering');\n this.xhr_ = xhr;\n this.getBandwidth_ = bandwidth;\n }\n /**\n * Assigns the content steering tag properties to the steering controller\n *\n * @param {string} baseUrl the baseURL from the main manifest for resolving the steering manifest url\n * @param {Object} steeringTag the content steering tag from the main manifest\n */\n\n assignTagProperties(baseUrl, steeringTag) {\n this.manifestType_ = steeringTag.serverUri ? 'HLS' : 'DASH'; // serverUri is HLS serverURL is DASH\n\n const steeringUri = steeringTag.serverUri || steeringTag.serverURL;\n if (!steeringUri) {\n this.logger_(`steering manifest URL is ${steeringUri}, cannot request steering manifest.`);\n this.trigger('error');\n return;\n } // Content steering manifests can be encoded as a data URI. We can decode, parse and return early if that's the case.\n\n if (steeringUri.startsWith('data:')) {\n this.decodeDataUriManifest_(steeringUri.substring(steeringUri.indexOf(',') + 1));\n return;\n } // reloadUri is the resolution of the main manifest URL and steering URL.\n\n this.steeringManifest.reloadUri = resolveUrl(baseUrl, steeringUri); // pathwayId is HLS defaultServiceLocation is DASH\n\n this.defaultPathway = steeringTag.pathwayId || steeringTag.defaultServiceLocation; // currently only DASH supports the following properties on tags.\n\n this.queryBeforeStart = steeringTag.queryBeforeStart;\n this.proxyServerUrl_ = steeringTag.proxyServerURL; // trigger a steering event if we have a pathway from the content steering tag.\n // this tells VHS which segment pathway to start with.\n // If queryBeforeStart is true we need to wait for the steering manifest response.\n\n if (this.defaultPathway && !this.queryBeforeStart) {\n this.trigger('content-steering');\n }\n }\n /**\n * Requests the content steering manifest and parse the response. This should only be called after\n * assignTagProperties was called with a content steering tag.\n *\n * @param {string} initialUri The optional uri to make the request with.\n * If set, the request should be made with exactly what is passed in this variable.\n * This scenario should only happen once on initalization.\n */\n\n requestSteeringManifest(initial) {\n const reloadUri = this.steeringManifest.reloadUri;\n if (!reloadUri) {\n return;\n } // We currently don't support passing MPD query parameters directly to the content steering URL as this requires\n // ExtUrlQueryInfo tag support. See the DASH content steering spec section 8.1.\n // This request URI accounts for manifest URIs that have been excluded.\n\n const uri = initial ? reloadUri : this.getRequestURI(reloadUri); // If there are no valid manifest URIs, we should stop content steering.\n\n if (!uri) {\n this.logger_('No valid content steering manifest URIs. Stopping content steering.');\n this.trigger('error');\n this.dispose();\n return;\n }\n this.request_ = this.xhr_({\n uri\n }, (error, errorInfo) => {\n if (error) {\n // If the client receives HTTP 410 Gone in response to a manifest request,\n // it MUST NOT issue another request for that URI for the remainder of the\n // playback session. It MAY continue to use the most-recently obtained set\n // of Pathways.\n if (errorInfo.status === 410) {\n this.logger_(`manifest request 410 ${error}.`);\n this.logger_(`There will be no more content steering requests to ${uri} this session.`);\n this.excludedSteeringManifestURLs.add(uri);\n return;\n } // If the client receives HTTP 429 Too Many Requests with a Retry-After\n // header in response to a manifest request, it SHOULD wait until the time\n // specified by the Retry-After header to reissue the request.\n\n if (errorInfo.status === 429) {\n const retrySeconds = errorInfo.responseHeaders['retry-after'];\n this.logger_(`manifest request 429 ${error}.`);\n this.logger_(`content steering will retry in ${retrySeconds} seconds.`);\n this.startTTLTimeout_(parseInt(retrySeconds, 10));\n return;\n } // If the Steering Manifest cannot be loaded and parsed correctly, the\n // client SHOULD continue to use the previous values and attempt to reload\n // it after waiting for the previously-specified TTL (or 5 minutes if\n // none).\n\n this.logger_(`manifest failed to load ${error}.`);\n this.startTTLTimeout_();\n return;\n }\n const steeringManifestJson = JSON.parse(this.request_.responseText);\n this.assignSteeringProperties_(steeringManifestJson);\n this.startTTLTimeout_();\n });\n }\n /**\n * Set the proxy server URL and add the steering manifest url as a URI encoded parameter.\n *\n * @param {string} steeringUrl the steering manifest url\n * @return the steering manifest url to a proxy server with all parameters set\n */\n\n setProxyServerUrl_(steeringUrl) {\n const steeringUrlObject = new window$1.URL(steeringUrl);\n const proxyServerUrlObject = new window$1.URL(this.proxyServerUrl_);\n proxyServerUrlObject.searchParams.set('url', encodeURI(steeringUrlObject.toString()));\n return this.setSteeringParams_(proxyServerUrlObject.toString());\n }\n /**\n * Decodes and parses the data uri encoded steering manifest\n *\n * @param {string} dataUri the data uri to be decoded and parsed.\n */\n\n decodeDataUriManifest_(dataUri) {\n const steeringManifestJson = JSON.parse(window$1.atob(dataUri));\n this.assignSteeringProperties_(steeringManifestJson);\n }\n /**\n * Set the HLS or DASH content steering manifest request query parameters. For example:\n * _HLS_pathway=\"\" and _HLS_throughput=\n * _DASH_pathway and _DASH_throughput\n *\n * @param {string} uri to add content steering server parameters to.\n * @return a new uri as a string with the added steering query parameters.\n */\n\n setSteeringParams_(url) {\n const urlObject = new window$1.URL(url);\n const path = this.getPathway();\n const networkThroughput = this.getBandwidth_();\n if (path) {\n const pathwayKey = `_${this.manifestType_}_pathway`;\n urlObject.searchParams.set(pathwayKey, path);\n }\n if (networkThroughput) {\n const throughputKey = `_${this.manifestType_}_throughput`;\n urlObject.searchParams.set(throughputKey, networkThroughput);\n }\n return urlObject.toString();\n }\n /**\n * Assigns the current steering manifest properties and to the SteeringManifest object\n *\n * @param {Object} steeringJson the raw JSON steering manifest\n */\n\n assignSteeringProperties_(steeringJson) {\n this.steeringManifest.version = steeringJson.VERSION;\n if (!this.steeringManifest.version) {\n this.logger_(`manifest version is ${steeringJson.VERSION}, which is not supported.`);\n this.trigger('error');\n return;\n }\n this.steeringManifest.ttl = steeringJson.TTL;\n this.steeringManifest.reloadUri = steeringJson['RELOAD-URI']; // HLS = PATHWAY-PRIORITY required. DASH = SERVICE-LOCATION-PRIORITY optional\n\n this.steeringManifest.priority = steeringJson['PATHWAY-PRIORITY'] || steeringJson['SERVICE-LOCATION-PRIORITY']; // Pathway clones to be created/updated in HLS.\n // See section 7.2 https://datatracker.ietf.org/doc/draft-pantos-hls-rfc8216bis/\n\n this.steeringManifest.pathwayClones = steeringJson['PATHWAY-CLONES'];\n this.nextPathwayClones = this.steeringManifest.pathwayClones; // 1. apply first pathway from the array.\n // 2. if first pathway doesn't exist in manifest, try next pathway.\n // a. if all pathways are exhausted, ignore the steering manifest priority.\n // 3. if segments fail from an established pathway, try all variants/renditions, then exclude the failed pathway.\n // a. exclude a pathway for a minimum of the last TTL duration. Meaning, from the next steering response,\n // the excluded pathway will be ignored.\n // See excludePathway usage in excludePlaylist().\n // If there are no available pathways, we need to stop content steering.\n\n if (!this.availablePathways_.size) {\n this.logger_('There are no available pathways for content steering. Ending content steering.');\n this.trigger('error');\n this.dispose();\n }\n const chooseNextPathway = pathwaysByPriority => {\n for (const path of pathwaysByPriority) {\n if (this.availablePathways_.has(path)) {\n return path;\n }\n } // If no pathway matches, ignore the manifest and choose the first available.\n\n return [...this.availablePathways_][0];\n };\n const nextPathway = chooseNextPathway(this.steeringManifest.priority);\n if (this.currentPathway !== nextPathway) {\n this.currentPathway = nextPathway;\n this.trigger('content-steering');\n }\n }\n /**\n * Returns the pathway to use for steering decisions\n *\n * @return {string} returns the current pathway or the default\n */\n\n getPathway() {\n return this.currentPathway || this.defaultPathway;\n }\n /**\n * Chooses the manifest request URI based on proxy URIs and server URLs.\n * Also accounts for exclusion on certain manifest URIs.\n *\n * @param {string} reloadUri the base uri before parameters\n *\n * @return {string} the final URI for the request to the manifest server.\n */\n\n getRequestURI(reloadUri) {\n if (!reloadUri) {\n return null;\n }\n const isExcluded = uri => this.excludedSteeringManifestURLs.has(uri);\n if (this.proxyServerUrl_) {\n const proxyURI = this.setProxyServerUrl_(reloadUri);\n if (!isExcluded(proxyURI)) {\n return proxyURI;\n }\n }\n const steeringURI = this.setSteeringParams_(reloadUri);\n if (!isExcluded(steeringURI)) {\n return steeringURI;\n } // Return nothing if all valid manifest URIs are excluded.\n\n return null;\n }\n /**\n * Start the timeout for re-requesting the steering manifest at the TTL interval.\n *\n * @param {number} ttl time in seconds of the timeout. Defaults to the\n * ttl interval in the steering manifest\n */\n\n startTTLTimeout_(ttl = this.steeringManifest.ttl) {\n // 300 (5 minutes) is the default value.\n const ttlMS = ttl * 1000;\n this.ttlTimeout_ = window$1.setTimeout(() => {\n this.requestSteeringManifest();\n }, ttlMS);\n }\n /**\n * Clear the TTL timeout if necessary.\n */\n\n clearTTLTimeout_() {\n window$1.clearTimeout(this.ttlTimeout_);\n this.ttlTimeout_ = null;\n }\n /**\n * aborts any current steering xhr and sets the current request object to null\n */\n\n abort() {\n if (this.request_) {\n this.request_.abort();\n }\n this.request_ = null;\n }\n /**\n * aborts steering requests clears the ttl timeout and resets all properties.\n */\n\n dispose() {\n this.off('content-steering');\n this.off('error');\n this.abort();\n this.clearTTLTimeout_();\n this.currentPathway = null;\n this.defaultPathway = null;\n this.queryBeforeStart = null;\n this.proxyServerUrl_ = null;\n this.manifestType_ = null;\n this.ttlTimeout_ = null;\n this.request_ = null;\n this.excludedSteeringManifestURLs = new Set();\n this.availablePathways_ = new Set();\n this.steeringManifest = new SteeringManifest();\n }\n /**\n * adds a pathway to the available pathways set\n *\n * @param {string} pathway the pathway string to add\n */\n\n addAvailablePathway(pathway) {\n if (pathway) {\n this.availablePathways_.add(pathway);\n }\n }\n /**\n * Clears all pathways from the available pathways set\n */\n\n clearAvailablePathways() {\n this.availablePathways_.clear();\n }\n /**\n * Removes a pathway from the available pathways set.\n */\n\n excludePathway(pathway) {\n return this.availablePathways_.delete(pathway);\n }\n /**\n * Checks the refreshed DASH manifest content steering tag for changes.\n *\n * @param {string} baseURL new steering tag on DASH manifest refresh\n * @param {Object} newTag the new tag to check for changes\n * @return a true or false whether the new tag has different values\n */\n\n didDASHTagChange(baseURL, newTag) {\n return !newTag && this.steeringManifest.reloadUri || newTag && (resolveUrl(baseURL, newTag.serverURL) !== this.steeringManifest.reloadUri || newTag.defaultServiceLocation !== this.defaultPathway || newTag.queryBeforeStart !== this.queryBeforeStart || newTag.proxyServerURL !== this.proxyServerUrl_);\n }\n getAvailablePathways() {\n return this.availablePathways_;\n }\n}\n\n/**\n * @file playlist-controller.js\n */\nconst ABORT_EARLY_EXCLUSION_SECONDS = 10;\nlet Vhs$1; // SegmentLoader stats that need to have each loader's\n// values summed to calculate the final value\n\nconst loaderStats = ['mediaRequests', 'mediaRequestsAborted', 'mediaRequestsTimedout', 'mediaRequestsErrored', 'mediaTransferDuration', 'mediaBytesTransferred', 'mediaAppends'];\nconst sumLoaderStat = function (stat) {\n return this.audioSegmentLoader_[stat] + this.mainSegmentLoader_[stat];\n};\nconst shouldSwitchToMedia = function ({\n currentPlaylist,\n buffered,\n currentTime,\n nextPlaylist,\n bufferLowWaterLine,\n bufferHighWaterLine,\n duration,\n bufferBasedABR,\n log\n}) {\n // we have no other playlist to switch to\n if (!nextPlaylist) {\n videojs.log.warn('We received no playlist to switch to. Please check your stream.');\n return false;\n }\n const sharedLogLine = `allowing switch ${currentPlaylist && currentPlaylist.id || 'null'} -> ${nextPlaylist.id}`;\n if (!currentPlaylist) {\n log(`${sharedLogLine} as current playlist is not set`);\n return true;\n } // no need to switch if playlist is the same\n\n if (nextPlaylist.id === currentPlaylist.id) {\n return false;\n } // determine if current time is in a buffered range.\n\n const isBuffered = Boolean(findRange(buffered, currentTime).length); // If the playlist is live, then we want to not take low water line into account.\n // This is because in LIVE, the player plays 3 segments from the end of the\n // playlist, and if `BUFFER_LOW_WATER_LINE` is greater than the duration availble\n // in those segments, a viewer will never experience a rendition upswitch.\n\n if (!currentPlaylist.endList) {\n // For LLHLS live streams, don't switch renditions before playback has started, as it almost\n // doubles the time to first playback.\n if (!isBuffered && typeof currentPlaylist.partTargetDuration === 'number') {\n log(`not ${sharedLogLine} as current playlist is live llhls, but currentTime isn't in buffered.`);\n return false;\n }\n log(`${sharedLogLine} as current playlist is live`);\n return true;\n }\n const forwardBuffer = timeAheadOf(buffered, currentTime);\n const maxBufferLowWaterLine = bufferBasedABR ? Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : Config.MAX_BUFFER_LOW_WATER_LINE; // For the same reason as LIVE, we ignore the low water line when the VOD\n // duration is below the max potential low water line\n\n if (duration < maxBufferLowWaterLine) {\n log(`${sharedLogLine} as duration < max low water line (${duration} < ${maxBufferLowWaterLine})`);\n return true;\n }\n const nextBandwidth = nextPlaylist.attributes.BANDWIDTH;\n const currBandwidth = currentPlaylist.attributes.BANDWIDTH; // when switching down, if our buffer is lower than the high water line,\n // we can switch down\n\n if (nextBandwidth < currBandwidth && (!bufferBasedABR || forwardBuffer < bufferHighWaterLine)) {\n let logLine = `${sharedLogLine} as next bandwidth < current bandwidth (${nextBandwidth} < ${currBandwidth})`;\n if (bufferBasedABR) {\n logLine += ` and forwardBuffer < bufferHighWaterLine (${forwardBuffer} < ${bufferHighWaterLine})`;\n }\n log(logLine);\n return true;\n } // and if our buffer is higher than the low water line,\n // we can switch up\n\n if ((!bufferBasedABR || nextBandwidth > currBandwidth) && forwardBuffer >= bufferLowWaterLine) {\n let logLine = `${sharedLogLine} as forwardBuffer >= bufferLowWaterLine (${forwardBuffer} >= ${bufferLowWaterLine})`;\n if (bufferBasedABR) {\n logLine += ` and next bandwidth > current bandwidth (${nextBandwidth} > ${currBandwidth})`;\n }\n log(logLine);\n return true;\n }\n log(`not ${sharedLogLine} as no switching criteria met`);\n return false;\n};\n/**\n * the main playlist controller controller all interactons\n * between playlists and segmentloaders. At this time this mainly\n * involves a main playlist and a series of audio playlists\n * if they are available\n *\n * @class PlaylistController\n * @extends videojs.EventTarget\n */\n\nclass PlaylistController extends videojs.EventTarget {\n constructor(options) {\n super();\n const {\n src,\n withCredentials,\n tech,\n bandwidth,\n externVhs,\n useCueTags,\n playlistExclusionDuration,\n enableLowInitialPlaylist,\n sourceType,\n cacheEncryptionKeys,\n bufferBasedABR,\n leastPixelDiffSelector,\n captionServices\n } = options;\n if (!src) {\n throw new Error('A non-empty playlist URL or JSON manifest string is required');\n }\n let {\n maxPlaylistRetries\n } = options;\n if (maxPlaylistRetries === null || typeof maxPlaylistRetries === 'undefined') {\n maxPlaylistRetries = Infinity;\n }\n Vhs$1 = externVhs;\n this.bufferBasedABR = Boolean(bufferBasedABR);\n this.leastPixelDiffSelector = Boolean(leastPixelDiffSelector);\n this.withCredentials = withCredentials;\n this.tech_ = tech;\n this.vhs_ = tech.vhs;\n this.sourceType_ = sourceType;\n this.useCueTags_ = useCueTags;\n this.playlistExclusionDuration = playlistExclusionDuration;\n this.maxPlaylistRetries = maxPlaylistRetries;\n this.enableLowInitialPlaylist = enableLowInitialPlaylist;\n if (this.useCueTags_) {\n this.cueTagsTrack_ = this.tech_.addTextTrack('metadata', 'ad-cues');\n this.cueTagsTrack_.inBandMetadataTrackDispatchType = '';\n }\n this.requestOptions_ = {\n withCredentials,\n maxPlaylistRetries,\n timeout: null\n };\n this.on('error', this.pauseLoading);\n this.mediaTypes_ = createMediaTypes();\n this.mediaSource = new window$1.MediaSource();\n this.handleDurationChange_ = this.handleDurationChange_.bind(this);\n this.handleSourceOpen_ = this.handleSourceOpen_.bind(this);\n this.handleSourceEnded_ = this.handleSourceEnded_.bind(this);\n this.mediaSource.addEventListener('durationchange', this.handleDurationChange_); // load the media source into the player\n\n this.mediaSource.addEventListener('sourceopen', this.handleSourceOpen_);\n this.mediaSource.addEventListener('sourceended', this.handleSourceEnded_); // we don't have to handle sourceclose since dispose will handle termination of\n // everything, and the MediaSource should not be detached without a proper disposal\n\n this.seekable_ = createTimeRanges();\n this.hasPlayed_ = false;\n this.syncController_ = new SyncController(options);\n this.segmentMetadataTrack_ = tech.addRemoteTextTrack({\n kind: 'metadata',\n label: 'segment-metadata'\n }, false).track;\n this.decrypter_ = new Decrypter();\n this.sourceUpdater_ = new SourceUpdater(this.mediaSource);\n this.inbandTextTracks_ = {};\n this.timelineChangeController_ = new TimelineChangeController();\n this.keyStatusMap_ = new Map();\n const segmentLoaderSettings = {\n vhs: this.vhs_,\n parse708captions: options.parse708captions,\n useDtsForTimestampOffset: options.useDtsForTimestampOffset,\n captionServices,\n mediaSource: this.mediaSource,\n currentTime: this.tech_.currentTime.bind(this.tech_),\n seekable: () => this.seekable(),\n seeking: () => this.tech_.seeking(),\n duration: () => this.duration(),\n hasPlayed: () => this.hasPlayed_,\n goalBufferLength: () => this.goalBufferLength(),\n bandwidth,\n syncController: this.syncController_,\n decrypter: this.decrypter_,\n sourceType: this.sourceType_,\n inbandTextTracks: this.inbandTextTracks_,\n cacheEncryptionKeys,\n sourceUpdater: this.sourceUpdater_,\n timelineChangeController: this.timelineChangeController_,\n exactManifestTimings: options.exactManifestTimings,\n addMetadataToTextTrack: this.addMetadataToTextTrack.bind(this)\n }; // The source type check not only determines whether a special DASH playlist loader\n // should be used, but also covers the case where the provided src is a vhs-json\n // manifest object (instead of a URL). In the case of vhs-json, the default\n // PlaylistLoader should be used.\n\n this.mainPlaylistLoader_ = this.sourceType_ === 'dash' ? new DashPlaylistLoader(src, this.vhs_, merge(this.requestOptions_, {\n addMetadataToTextTrack: this.addMetadataToTextTrack.bind(this)\n })) : new PlaylistLoader(src, this.vhs_, merge(this.requestOptions_, {\n addDateRangesToTextTrack: this.addDateRangesToTextTrack_.bind(this)\n }));\n this.setupMainPlaylistLoaderListeners_(); // setup segment loaders\n // combined audio/video or just video when alternate audio track is selected\n\n this.mainSegmentLoader_ = new SegmentLoader(merge(segmentLoaderSettings, {\n segmentMetadataTrack: this.segmentMetadataTrack_,\n loaderType: 'main'\n }), options); // alternate audio track\n\n this.audioSegmentLoader_ = new SegmentLoader(merge(segmentLoaderSettings, {\n loaderType: 'audio'\n }), options);\n this.subtitleSegmentLoader_ = new VTTSegmentLoader(merge(segmentLoaderSettings, {\n loaderType: 'vtt',\n featuresNativeTextTracks: this.tech_.featuresNativeTextTracks,\n loadVttJs: () => new Promise((resolve, reject) => {\n function onLoad() {\n tech.off('vttjserror', onError);\n resolve();\n }\n function onError() {\n tech.off('vttjsloaded', onLoad);\n reject();\n }\n tech.one('vttjsloaded', onLoad);\n tech.one('vttjserror', onError); // safe to call multiple times, script will be loaded only once:\n\n tech.addWebVttScript_();\n })\n }), options);\n const getBandwidth = () => {\n return this.mainSegmentLoader_.bandwidth;\n };\n this.contentSteeringController_ = new ContentSteeringController(this.vhs_.xhr, getBandwidth);\n this.setupSegmentLoaderListeners_();\n if (this.bufferBasedABR) {\n this.mainPlaylistLoader_.one('loadedplaylist', () => this.startABRTimer_());\n this.tech_.on('pause', () => this.stopABRTimer_());\n this.tech_.on('play', () => this.startABRTimer_());\n } // Create SegmentLoader stat-getters\n // mediaRequests_\n // mediaRequestsAborted_\n // mediaRequestsTimedout_\n // mediaRequestsErrored_\n // mediaTransferDuration_\n // mediaBytesTransferred_\n // mediaAppends_\n\n loaderStats.forEach(stat => {\n this[stat + '_'] = sumLoaderStat.bind(this, stat);\n });\n this.logger_ = logger('pc');\n this.triggeredFmp4Usage = false;\n if (this.tech_.preload() === 'none') {\n this.loadOnPlay_ = () => {\n this.loadOnPlay_ = null;\n this.mainPlaylistLoader_.load();\n };\n this.tech_.one('play', this.loadOnPlay_);\n } else {\n this.mainPlaylistLoader_.load();\n }\n this.timeToLoadedData__ = -1;\n this.mainAppendsToLoadedData__ = -1;\n this.audioAppendsToLoadedData__ = -1;\n const event = this.tech_.preload() === 'none' ? 'play' : 'loadstart'; // start the first frame timer on loadstart or play (for preload none)\n\n this.tech_.one(event, () => {\n const timeToLoadedDataStart = Date.now();\n this.tech_.one('loadeddata', () => {\n this.timeToLoadedData__ = Date.now() - timeToLoadedDataStart;\n this.mainAppendsToLoadedData__ = this.mainSegmentLoader_.mediaAppends;\n this.audioAppendsToLoadedData__ = this.audioSegmentLoader_.mediaAppends;\n });\n });\n }\n mainAppendsToLoadedData_() {\n return this.mainAppendsToLoadedData__;\n }\n audioAppendsToLoadedData_() {\n return this.audioAppendsToLoadedData__;\n }\n appendsToLoadedData_() {\n const main = this.mainAppendsToLoadedData_();\n const audio = this.audioAppendsToLoadedData_();\n if (main === -1 || audio === -1) {\n return -1;\n }\n return main + audio;\n }\n timeToLoadedData_() {\n return this.timeToLoadedData__;\n }\n /**\n * Run selectPlaylist and switch to the new playlist if we should\n *\n * @param {string} [reason=abr] a reason for why the ABR check is made\n * @private\n */\n\n checkABR_(reason = 'abr') {\n const nextPlaylist = this.selectPlaylist();\n if (nextPlaylist && this.shouldSwitchToMedia_(nextPlaylist)) {\n this.switchMedia_(nextPlaylist, reason);\n }\n }\n switchMedia_(playlist, cause, delay) {\n const oldMedia = this.media();\n const oldId = oldMedia && (oldMedia.id || oldMedia.uri);\n const newId = playlist && (playlist.id || playlist.uri);\n if (oldId && oldId !== newId) {\n this.logger_(`switch media ${oldId} -> ${newId} from ${cause}`);\n this.tech_.trigger({\n type: 'usage',\n name: `vhs-rendition-change-${cause}`\n });\n }\n this.mainPlaylistLoader_.media(playlist, delay);\n }\n /**\n * A function that ensures we switch our playlists inside of `mediaTypes`\n * to match the current `serviceLocation` provided by the contentSteering controller.\n * We want to check media types of `AUDIO`, `SUBTITLES`, and `CLOSED-CAPTIONS`.\n *\n * This should only be called on a DASH playback scenario while using content steering.\n * This is necessary due to differences in how media in HLS manifests are generally tied to\n * a video playlist, where in DASH that is not always the case.\n */\n\n switchMediaForDASHContentSteering_() {\n ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(type => {\n const mediaType = this.mediaTypes_[type];\n const activeGroup = mediaType ? mediaType.activeGroup() : null;\n const pathway = this.contentSteeringController_.getPathway();\n if (activeGroup && pathway) {\n // activeGroup can be an array or a single group\n const mediaPlaylists = activeGroup.length ? activeGroup[0].playlists : activeGroup.playlists;\n const dashMediaPlaylists = mediaPlaylists.filter(p => p.attributes.serviceLocation === pathway); // Switch the current active playlist to the correct CDN\n\n if (dashMediaPlaylists.length) {\n this.mediaTypes_[type].activePlaylistLoader.media(dashMediaPlaylists[0]);\n }\n }\n });\n }\n /**\n * Start a timer that periodically calls checkABR_\n *\n * @private\n */\n\n startABRTimer_() {\n this.stopABRTimer_();\n this.abrTimer_ = window$1.setInterval(() => this.checkABR_(), 250);\n }\n /**\n * Stop the timer that periodically calls checkABR_\n *\n * @private\n */\n\n stopABRTimer_() {\n // if we're scrubbing, we don't need to pause.\n // This getter will be added to Video.js in version 7.11.\n if (this.tech_.scrubbing && this.tech_.scrubbing()) {\n return;\n }\n window$1.clearInterval(this.abrTimer_);\n this.abrTimer_ = null;\n }\n /**\n * Get a list of playlists for the currently selected audio playlist\n *\n * @return {Array} the array of audio playlists\n */\n\n getAudioTrackPlaylists_() {\n const main = this.main();\n const defaultPlaylists = main && main.playlists || []; // if we don't have any audio groups then we can only\n // assume that the audio tracks are contained in main\n // playlist array, use that or an empty array.\n\n if (!main || !main.mediaGroups || !main.mediaGroups.AUDIO) {\n return defaultPlaylists;\n }\n const AUDIO = main.mediaGroups.AUDIO;\n const groupKeys = Object.keys(AUDIO);\n let track; // get the current active track\n\n if (Object.keys(this.mediaTypes_.AUDIO.groups).length) {\n track = this.mediaTypes_.AUDIO.activeTrack(); // or get the default track from main if mediaTypes_ isn't setup yet\n } else {\n // default group is `main` or just the first group.\n const defaultGroup = AUDIO.main || groupKeys.length && AUDIO[groupKeys[0]];\n for (const label in defaultGroup) {\n if (defaultGroup[label].default) {\n track = {\n label\n };\n break;\n }\n }\n } // no active track no playlists.\n\n if (!track) {\n return defaultPlaylists;\n }\n const playlists = []; // get all of the playlists that are possible for the\n // active track.\n\n for (const group in AUDIO) {\n if (AUDIO[group][track.label]) {\n const properties = AUDIO[group][track.label];\n if (properties.playlists && properties.playlists.length) {\n playlists.push.apply(playlists, properties.playlists);\n } else if (properties.uri) {\n playlists.push(properties);\n } else if (main.playlists.length) {\n // if an audio group does not have a uri\n // see if we have main playlists that use it as a group.\n // if we do then add those to the playlists list.\n for (let i = 0; i < main.playlists.length; i++) {\n const playlist = main.playlists[i];\n if (playlist.attributes && playlist.attributes.AUDIO && playlist.attributes.AUDIO === group) {\n playlists.push(playlist);\n }\n }\n }\n }\n }\n if (!playlists.length) {\n return defaultPlaylists;\n }\n return playlists;\n }\n /**\n * Register event handlers on the main playlist loader. A helper\n * function for construction time.\n *\n * @private\n */\n\n setupMainPlaylistLoaderListeners_() {\n this.mainPlaylistLoader_.on('loadedmetadata', () => {\n const media = this.mainPlaylistLoader_.media();\n const requestTimeout = media.targetDuration * 1.5 * 1000; // If we don't have any more available playlists, we don't want to\n // timeout the request.\n\n if (isLowestEnabledRendition(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) {\n this.requestOptions_.timeout = 0;\n } else {\n this.requestOptions_.timeout = requestTimeout;\n } // if this isn't a live video and preload permits, start\n // downloading segments\n\n if (media.endList && this.tech_.preload() !== 'none') {\n this.mainSegmentLoader_.playlist(media, this.requestOptions_);\n this.mainSegmentLoader_.load();\n }\n setupMediaGroups({\n sourceType: this.sourceType_,\n segmentLoaders: {\n AUDIO: this.audioSegmentLoader_,\n SUBTITLES: this.subtitleSegmentLoader_,\n main: this.mainSegmentLoader_\n },\n tech: this.tech_,\n requestOptions: this.requestOptions_,\n mainPlaylistLoader: this.mainPlaylistLoader_,\n vhs: this.vhs_,\n main: this.main(),\n mediaTypes: this.mediaTypes_,\n excludePlaylist: this.excludePlaylist.bind(this)\n });\n this.triggerPresenceUsage_(this.main(), media);\n this.setupFirstPlay();\n if (!this.mediaTypes_.AUDIO.activePlaylistLoader || this.mediaTypes_.AUDIO.activePlaylistLoader.media()) {\n this.trigger('selectedinitialmedia');\n } else {\n // We must wait for the active audio playlist loader to\n // finish setting up before triggering this event so the\n // representations API and EME setup is correct\n this.mediaTypes_.AUDIO.activePlaylistLoader.one('loadedmetadata', () => {\n this.trigger('selectedinitialmedia');\n });\n }\n });\n this.mainPlaylistLoader_.on('loadedplaylist', () => {\n if (this.loadOnPlay_) {\n this.tech_.off('play', this.loadOnPlay_);\n }\n let updatedPlaylist = this.mainPlaylistLoader_.media();\n if (!updatedPlaylist) {\n // Add content steering listeners on first load and init.\n this.attachContentSteeringListeners_();\n this.initContentSteeringController_(); // exclude any variants that are not supported by the browser before selecting\n // an initial media as the playlist selectors do not consider browser support\n\n this.excludeUnsupportedVariants_();\n let selectedMedia;\n if (this.enableLowInitialPlaylist) {\n selectedMedia = this.selectInitialPlaylist();\n }\n if (!selectedMedia) {\n selectedMedia = this.selectPlaylist();\n }\n if (!selectedMedia || !this.shouldSwitchToMedia_(selectedMedia)) {\n return;\n }\n this.initialMedia_ = selectedMedia;\n this.switchMedia_(this.initialMedia_, 'initial'); // Under the standard case where a source URL is provided, loadedplaylist will\n // fire again since the playlist will be requested. In the case of vhs-json\n // (where the manifest object is provided as the source), when the media\n // playlist's `segments` list is already available, a media playlist won't be\n // requested, and loadedplaylist won't fire again, so the playlist handler must be\n // called on its own here.\n\n const haveJsonSource = this.sourceType_ === 'vhs-json' && this.initialMedia_.segments;\n if (!haveJsonSource) {\n return;\n }\n updatedPlaylist = this.initialMedia_;\n }\n this.handleUpdatedMediaPlaylist(updatedPlaylist);\n });\n this.mainPlaylistLoader_.on('error', () => {\n const error = this.mainPlaylistLoader_.error;\n this.excludePlaylist({\n playlistToExclude: error.playlist,\n error\n });\n });\n this.mainPlaylistLoader_.on('mediachanging', () => {\n this.mainSegmentLoader_.abort();\n this.mainSegmentLoader_.pause();\n });\n this.mainPlaylistLoader_.on('mediachange', () => {\n const media = this.mainPlaylistLoader_.media();\n const requestTimeout = media.targetDuration * 1.5 * 1000; // If we don't have any more available playlists, we don't want to\n // timeout the request.\n\n if (isLowestEnabledRendition(this.mainPlaylistLoader_.main, this.mainPlaylistLoader_.media())) {\n this.requestOptions_.timeout = 0;\n } else {\n this.requestOptions_.timeout = requestTimeout;\n }\n if (this.sourceType_ === 'dash') {\n // we don't want to re-request the same hls playlist right after it was changed\n this.mainPlaylistLoader_.load();\n } // TODO: Create a new event on the PlaylistLoader that signals\n // that the segments have changed in some way and use that to\n // update the SegmentLoader instead of doing it twice here and\n // on `loadedplaylist`\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.playlist(media, this.requestOptions_);\n if (this.waitingForFastQualityPlaylistReceived_) {\n this.runFastQualitySwitch_();\n } else {\n this.mainSegmentLoader_.load();\n }\n this.tech_.trigger({\n type: 'mediachange',\n bubbles: true\n });\n });\n this.mainPlaylistLoader_.on('playlistunchanged', () => {\n const updatedPlaylist = this.mainPlaylistLoader_.media(); // ignore unchanged playlists that have already been\n // excluded for not-changing. We likely just have a really slowly updating\n // playlist.\n\n if (updatedPlaylist.lastExcludeReason_ === 'playlist-unchanged') {\n return;\n }\n const playlistOutdated = this.stuckAtPlaylistEnd_(updatedPlaylist);\n if (playlistOutdated) {\n // Playlist has stopped updating and we're stuck at its end. Try to\n // exclude it and switch to another playlist in the hope that that\n // one is updating (and give the player a chance to re-adjust to the\n // safe live point).\n this.excludePlaylist({\n error: {\n message: 'Playlist no longer updating.',\n reason: 'playlist-unchanged'\n }\n }); // useful for monitoring QoS\n\n this.tech_.trigger('playliststuck');\n }\n });\n this.mainPlaylistLoader_.on('renditiondisabled', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-disabled'\n });\n });\n this.mainPlaylistLoader_.on('renditionenabled', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-enabled'\n });\n });\n }\n /**\n * Given an updated media playlist (whether it was loaded for the first time, or\n * refreshed for live playlists), update any relevant properties and state to reflect\n * changes in the media that should be accounted for (e.g., cues and duration).\n *\n * @param {Object} updatedPlaylist the updated media playlist object\n *\n * @private\n */\n\n handleUpdatedMediaPlaylist(updatedPlaylist) {\n if (this.useCueTags_) {\n this.updateAdCues_(updatedPlaylist);\n } // TODO: Create a new event on the PlaylistLoader that signals\n // that the segments have changed in some way and use that to\n // update the SegmentLoader instead of doing it twice here and\n // on `mediachange`\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.playlist(updatedPlaylist, this.requestOptions_);\n if (this.waitingForFastQualityPlaylistReceived_) {\n this.runFastQualitySwitch_();\n }\n this.updateDuration(!updatedPlaylist.endList); // If the player isn't paused, ensure that the segment loader is running,\n // as it is possible that it was temporarily stopped while waiting for\n // a playlist (e.g., in case the playlist errored and we re-requested it).\n\n if (!this.tech_.paused()) {\n this.mainSegmentLoader_.load();\n if (this.audioSegmentLoader_) {\n this.audioSegmentLoader_.load();\n }\n }\n }\n /**\n * A helper function for triggerring presence usage events once per source\n *\n * @private\n */\n\n triggerPresenceUsage_(main, media) {\n const mediaGroups = main.mediaGroups || {};\n let defaultDemuxed = true;\n const audioGroupKeys = Object.keys(mediaGroups.AUDIO);\n for (const mediaGroup in mediaGroups.AUDIO) {\n for (const label in mediaGroups.AUDIO[mediaGroup]) {\n const properties = mediaGroups.AUDIO[mediaGroup][label];\n if (!properties.uri) {\n defaultDemuxed = false;\n }\n }\n }\n if (defaultDemuxed) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-demuxed'\n });\n }\n if (Object.keys(mediaGroups.SUBTITLES).length) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-webvtt'\n });\n }\n if (Vhs$1.Playlist.isAes(media)) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-aes'\n });\n }\n if (audioGroupKeys.length && Object.keys(mediaGroups.AUDIO[audioGroupKeys[0]]).length > 1) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-alternate-audio'\n });\n }\n if (this.useCueTags_) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-playlist-cue-tags'\n });\n }\n }\n shouldSwitchToMedia_(nextPlaylist) {\n const currentPlaylist = this.mainPlaylistLoader_.media() || this.mainPlaylistLoader_.pendingMedia_;\n const currentTime = this.tech_.currentTime();\n const bufferLowWaterLine = this.bufferLowWaterLine();\n const bufferHighWaterLine = this.bufferHighWaterLine();\n const buffered = this.tech_.buffered();\n return shouldSwitchToMedia({\n buffered,\n currentTime,\n currentPlaylist,\n nextPlaylist,\n bufferLowWaterLine,\n bufferHighWaterLine,\n duration: this.duration(),\n bufferBasedABR: this.bufferBasedABR,\n log: this.logger_\n });\n }\n /**\n * Register event handlers on the segment loaders. A helper function\n * for construction time.\n *\n * @private\n */\n\n setupSegmentLoaderListeners_() {\n this.mainSegmentLoader_.on('bandwidthupdate', () => {\n // Whether or not buffer based ABR or another ABR is used, on a bandwidth change it's\n // useful to check to see if a rendition switch should be made.\n this.checkABR_('bandwidthupdate');\n this.tech_.trigger('bandwidthupdate');\n });\n this.mainSegmentLoader_.on('timeout', () => {\n if (this.bufferBasedABR) {\n // If a rendition change is needed, then it would've be done on `bandwidthupdate`.\n // Here the only consideration is that for buffer based ABR there's no guarantee\n // of an immediate switch (since the bandwidth is averaged with a timeout\n // bandwidth value of 1), so force a load on the segment loader to keep it going.\n this.mainSegmentLoader_.load();\n }\n }); // `progress` events are not reliable enough of a bandwidth measure to trigger buffer\n // based ABR.\n\n if (!this.bufferBasedABR) {\n this.mainSegmentLoader_.on('progress', () => {\n this.trigger('progress');\n });\n }\n this.mainSegmentLoader_.on('error', () => {\n const error = this.mainSegmentLoader_.error();\n this.excludePlaylist({\n playlistToExclude: error.playlist,\n error\n });\n });\n this.mainSegmentLoader_.on('appenderror', () => {\n this.error = this.mainSegmentLoader_.error_;\n this.trigger('error');\n });\n this.mainSegmentLoader_.on('syncinfoupdate', () => {\n this.onSyncInfoUpdate_();\n });\n this.mainSegmentLoader_.on('timestampoffset', () => {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-timestamp-offset'\n });\n });\n this.audioSegmentLoader_.on('syncinfoupdate', () => {\n this.onSyncInfoUpdate_();\n });\n this.audioSegmentLoader_.on('appenderror', () => {\n this.error = this.audioSegmentLoader_.error_;\n this.trigger('error');\n });\n this.mainSegmentLoader_.on('ended', () => {\n this.logger_('main segment loader ended');\n this.onEndOfStream();\n });\n this.mainSegmentLoader_.on('earlyabort', event => {\n // never try to early abort with the new ABR algorithm\n if (this.bufferBasedABR) {\n return;\n }\n this.delegateLoaders_('all', ['abort']);\n this.excludePlaylist({\n error: {\n message: 'Aborted early because there isn\\'t enough bandwidth to complete ' + 'the request without rebuffering.'\n },\n playlistExclusionDuration: ABORT_EARLY_EXCLUSION_SECONDS\n });\n });\n const updateCodecs = () => {\n if (!this.sourceUpdater_.hasCreatedSourceBuffers()) {\n return this.tryToCreateSourceBuffers_();\n }\n const codecs = this.getCodecsOrExclude_(); // no codecs means that the playlist was excluded\n\n if (!codecs) {\n return;\n }\n this.sourceUpdater_.addOrChangeSourceBuffers(codecs);\n };\n this.mainSegmentLoader_.on('trackinfo', updateCodecs);\n this.audioSegmentLoader_.on('trackinfo', updateCodecs);\n this.mainSegmentLoader_.on('fmp4', () => {\n if (!this.triggeredFmp4Usage) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-fmp4'\n });\n this.triggeredFmp4Usage = true;\n }\n });\n this.audioSegmentLoader_.on('fmp4', () => {\n if (!this.triggeredFmp4Usage) {\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-fmp4'\n });\n this.triggeredFmp4Usage = true;\n }\n });\n this.audioSegmentLoader_.on('ended', () => {\n this.logger_('audioSegmentLoader ended');\n this.onEndOfStream();\n });\n }\n mediaSecondsLoaded_() {\n return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded);\n }\n /**\n * Call load on our SegmentLoaders\n */\n\n load() {\n this.mainSegmentLoader_.load();\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n this.audioSegmentLoader_.load();\n }\n if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) {\n this.subtitleSegmentLoader_.load();\n }\n }\n /**\n * Re-tune playback quality level for the current player\n * conditions. This method will perform destructive actions like removing\n * already buffered content in order to readjust the currently active\n * playlist quickly. This is good for manual quality changes\n *\n * @private\n */\n\n fastQualityChange_(media = this.selectPlaylist()) {\n if (media && media === this.mainPlaylistLoader_.media()) {\n this.logger_('skipping fastQualityChange because new media is same as old');\n return;\n }\n this.switchMedia_(media, 'fast-quality'); // we would like to avoid race condition when we call fastQuality,\n // reset everything and start loading segments from prev segments instead of new because new playlist is not received yet\n\n this.waitingForFastQualityPlaylistReceived_ = true;\n }\n runFastQualitySwitch_() {\n this.waitingForFastQualityPlaylistReceived_ = false; // Delete all buffered data to allow an immediate quality switch, then seek to give\n // the browser a kick to remove any cached frames from the previous rendtion (.04 seconds\n // ahead was roughly the minimum that will accomplish this across a variety of content\n // in IE and Edge, but seeking in place is sufficient on all other browsers)\n // Edge/IE bug: https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/14600375/\n // Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=651904\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.resetEverything(() => {\n this.tech_.setCurrentTime(this.tech_.currentTime());\n }); // don't need to reset audio as it is reset when media changes\n }\n /**\n * Begin playback.\n */\n\n play() {\n if (this.setupFirstPlay()) {\n return;\n }\n if (this.tech_.ended()) {\n this.tech_.setCurrentTime(0);\n }\n if (this.hasPlayed_) {\n this.load();\n }\n const seekable = this.tech_.seekable(); // if the viewer has paused and we fell out of the live window,\n // seek forward to the live point\n\n if (this.tech_.duration() === Infinity) {\n if (this.tech_.currentTime() < seekable.start(0)) {\n return this.tech_.setCurrentTime(seekable.end(seekable.length - 1));\n }\n }\n }\n /**\n * Seek to the latest media position if this is a live video and the\n * player and video are loaded and initialized.\n */\n\n setupFirstPlay() {\n const media = this.mainPlaylistLoader_.media(); // Check that everything is ready to begin buffering for the first call to play\n // If 1) there is no active media\n // 2) the player is paused\n // 3) the first play has already been setup\n // then exit early\n\n if (!media || this.tech_.paused() || this.hasPlayed_) {\n return false;\n } // when the video is a live stream and/or has a start time\n\n if (!media.endList || media.start) {\n const seekable = this.seekable();\n if (!seekable.length) {\n // without a seekable range, the player cannot seek to begin buffering at the\n // live or start point\n return false;\n }\n const seekableEnd = seekable.end(0);\n let startPoint = seekableEnd;\n if (media.start) {\n const offset = media.start.timeOffset;\n if (offset < 0) {\n startPoint = Math.max(seekableEnd + offset, seekable.start(0));\n } else {\n startPoint = Math.min(seekableEnd, offset);\n }\n } // trigger firstplay to inform the source handler to ignore the next seek event\n\n this.trigger('firstplay'); // seek to the live point\n\n this.tech_.setCurrentTime(startPoint);\n }\n this.hasPlayed_ = true; // we can begin loading now that everything is ready\n\n this.load();\n return true;\n }\n /**\n * handle the sourceopen event on the MediaSource\n *\n * @private\n */\n\n handleSourceOpen_() {\n // Only attempt to create the source buffer if none already exist.\n // handleSourceOpen is also called when we are \"re-opening\" a source buffer\n // after `endOfStream` has been called (in response to a seek for instance)\n this.tryToCreateSourceBuffers_(); // if autoplay is enabled, begin playback. This is duplicative of\n // code in video.js but is required because play() must be invoked\n // *after* the media source has opened.\n\n if (this.tech_.autoplay()) {\n const playPromise = this.tech_.play(); // Catch/silence error when a pause interrupts a play request\n // on browsers which return a promise\n\n if (typeof playPromise !== 'undefined' && typeof playPromise.then === 'function') {\n playPromise.then(null, e => {});\n }\n }\n this.trigger('sourceopen');\n }\n /**\n * handle the sourceended event on the MediaSource\n *\n * @private\n */\n\n handleSourceEnded_() {\n if (!this.inbandTextTracks_.metadataTrack_) {\n return;\n }\n const cues = this.inbandTextTracks_.metadataTrack_.cues;\n if (!cues || !cues.length) {\n return;\n }\n const duration = this.duration();\n cues[cues.length - 1].endTime = isNaN(duration) || Math.abs(duration) === Infinity ? Number.MAX_VALUE : duration;\n }\n /**\n * handle the durationchange event on the MediaSource\n *\n * @private\n */\n\n handleDurationChange_() {\n this.tech_.trigger('durationchange');\n }\n /**\n * Calls endOfStream on the media source when all active stream types have called\n * endOfStream\n *\n * @param {string} streamType\n * Stream type of the segment loader that called endOfStream\n * @private\n */\n\n onEndOfStream() {\n let isEndOfStream = this.mainSegmentLoader_.ended_;\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n const mainMediaInfo = this.mainSegmentLoader_.getCurrentMediaInfo_(); // if the audio playlist loader exists, then alternate audio is active\n\n if (!mainMediaInfo || mainMediaInfo.hasVideo) {\n // if we do not know if the main segment loader contains video yet or if we\n // definitively know the main segment loader contains video, then we need to wait\n // for both main and audio segment loaders to call endOfStream\n isEndOfStream = isEndOfStream && this.audioSegmentLoader_.ended_;\n } else {\n // otherwise just rely on the audio loader\n isEndOfStream = this.audioSegmentLoader_.ended_;\n }\n }\n if (!isEndOfStream) {\n return;\n }\n this.stopABRTimer_();\n this.sourceUpdater_.endOfStream();\n }\n /**\n * Check if a playlist has stopped being updated\n *\n * @param {Object} playlist the media playlist object\n * @return {boolean} whether the playlist has stopped being updated or not\n */\n\n stuckAtPlaylistEnd_(playlist) {\n const seekable = this.seekable();\n if (!seekable.length) {\n // playlist doesn't have enough information to determine whether we are stuck\n return false;\n }\n const expired = this.syncController_.getExpiredTime(playlist, this.duration());\n if (expired === null) {\n return false;\n } // does not use the safe live end to calculate playlist end, since we\n // don't want to say we are stuck while there is still content\n\n const absolutePlaylistEnd = Vhs$1.Playlist.playlistEnd(playlist, expired);\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n if (!buffered.length) {\n // return true if the playhead reached the absolute end of the playlist\n return absolutePlaylistEnd - currentTime <= SAFE_TIME_DELTA;\n }\n const bufferedEnd = buffered.end(buffered.length - 1); // return true if there is too little buffer left and buffer has reached absolute\n // end of playlist\n\n return bufferedEnd - currentTime <= SAFE_TIME_DELTA && absolutePlaylistEnd - bufferedEnd <= SAFE_TIME_DELTA;\n }\n /**\n * Exclude a playlist for a set amount of time, making it unavailable for selection by\n * the rendition selection algorithm, then force a new playlist (rendition) selection.\n *\n * @param {Object=} playlistToExclude\n * the playlist to exclude, defaults to the currently selected playlist\n * @param {Object=} error\n * an optional error\n * @param {number=} playlistExclusionDuration\n * an optional number of seconds to exclude the playlist\n */\n\n excludePlaylist({\n playlistToExclude = this.mainPlaylistLoader_.media(),\n error = {},\n playlistExclusionDuration\n }) {\n // If the `error` was generated by the playlist loader, it will contain\n // the playlist we were trying to load (but failed) and that should be\n // excluded instead of the currently selected playlist which is likely\n // out-of-date in this scenario\n playlistToExclude = playlistToExclude || this.mainPlaylistLoader_.media();\n playlistExclusionDuration = playlistExclusionDuration || error.playlistExclusionDuration || this.playlistExclusionDuration; // If there is no current playlist, then an error occurred while we were\n // trying to load the main OR while we were disposing of the tech\n\n if (!playlistToExclude) {\n this.error = error;\n if (this.mediaSource.readyState !== 'open') {\n this.trigger('error');\n } else {\n this.sourceUpdater_.endOfStream('network');\n }\n return;\n }\n playlistToExclude.playlistErrors_++;\n const playlists = this.mainPlaylistLoader_.main.playlists;\n const enabledPlaylists = playlists.filter(isEnabled);\n const isFinalRendition = enabledPlaylists.length === 1 && enabledPlaylists[0] === playlistToExclude; // Don't exclude the only playlist unless it was excluded\n // forever\n\n if (playlists.length === 1 && playlistExclusionDuration !== Infinity) {\n videojs.log.warn(`Problem encountered with playlist ${playlistToExclude.id}. ` + 'Trying again since it is the only playlist.');\n this.tech_.trigger('retryplaylist'); // if this is a final rendition, we should delay\n\n return this.mainPlaylistLoader_.load(isFinalRendition);\n }\n if (isFinalRendition) {\n // If we're content steering, try other pathways.\n if (this.main().contentSteering) {\n const pathway = this.pathwayAttribute_(playlistToExclude); // Ignore at least 1 steering manifest refresh.\n\n const reIncludeDelay = this.contentSteeringController_.steeringManifest.ttl * 1000;\n this.contentSteeringController_.excludePathway(pathway);\n this.excludeThenChangePathway_();\n setTimeout(() => {\n this.contentSteeringController_.addAvailablePathway(pathway);\n }, reIncludeDelay);\n return;\n } // Since we're on the final non-excluded playlist, and we're about to exclude\n // it, instead of erring the player or retrying this playlist, clear out the current\n // exclusion list. This allows other playlists to be attempted in case any have been\n // fixed.\n\n let reincluded = false;\n playlists.forEach(playlist => {\n // skip current playlist which is about to be excluded\n if (playlist === playlistToExclude) {\n return;\n }\n const excludeUntil = playlist.excludeUntil; // a playlist cannot be reincluded if it wasn't excluded to begin with.\n\n if (typeof excludeUntil !== 'undefined' && excludeUntil !== Infinity) {\n reincluded = true;\n delete playlist.excludeUntil;\n }\n });\n if (reincluded) {\n videojs.log.warn('Removing other playlists from the exclusion list because the last ' + 'rendition is about to be excluded.'); // Technically we are retrying a playlist, in that we are simply retrying a previous\n // playlist. This is needed for users relying on the retryplaylist event to catch a\n // case where the player might be stuck and looping through \"dead\" playlists.\n\n this.tech_.trigger('retryplaylist');\n }\n } // Exclude this playlist\n\n let excludeUntil;\n if (playlistToExclude.playlistErrors_ > this.maxPlaylistRetries) {\n excludeUntil = Infinity;\n } else {\n excludeUntil = Date.now() + playlistExclusionDuration * 1000;\n }\n playlistToExclude.excludeUntil = excludeUntil;\n if (error.reason) {\n playlistToExclude.lastExcludeReason_ = error.reason;\n }\n this.tech_.trigger('excludeplaylist');\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-rendition-excluded'\n }); // TODO: only load a new playlist if we're excluding the current playlist\n // If this function was called with a playlist that's not the current active playlist\n // (e.g., media().id !== playlistToExclude.id),\n // then a new playlist should not be selected and loaded, as there's nothing wrong with the current playlist.\n\n const nextPlaylist = this.selectPlaylist();\n if (!nextPlaylist) {\n this.error = 'Playback cannot continue. No available working or supported playlists.';\n this.trigger('error');\n return;\n }\n const logFn = error.internal ? this.logger_ : videojs.log.warn;\n const errorMessage = error.message ? ' ' + error.message : '';\n logFn(`${error.internal ? 'Internal problem' : 'Problem'} encountered with playlist ${playlistToExclude.id}.` + `${errorMessage} Switching to playlist ${nextPlaylist.id}.`); // if audio group changed reset audio loaders\n\n if (nextPlaylist.attributes.AUDIO !== playlistToExclude.attributes.AUDIO) {\n this.delegateLoaders_('audio', ['abort', 'pause']);\n } // if subtitle group changed reset subtitle loaders\n\n if (nextPlaylist.attributes.SUBTITLES !== playlistToExclude.attributes.SUBTITLES) {\n this.delegateLoaders_('subtitle', ['abort', 'pause']);\n }\n this.delegateLoaders_('main', ['abort', 'pause']);\n const delayDuration = nextPlaylist.targetDuration / 2 * 1000 || 5 * 1000;\n const shouldDelay = typeof nextPlaylist.lastRequest === 'number' && Date.now() - nextPlaylist.lastRequest <= delayDuration; // delay if it's a final rendition or if the last refresh is sooner than half targetDuration\n\n return this.switchMedia_(nextPlaylist, 'exclude', isFinalRendition || shouldDelay);\n }\n /**\n * Pause all segment/playlist loaders\n */\n\n pauseLoading() {\n this.delegateLoaders_('all', ['abort', 'pause']);\n this.stopABRTimer_();\n }\n /**\n * Call a set of functions in order on playlist loaders, segment loaders,\n * or both types of loaders.\n *\n * @param {string} filter\n * Filter loaders that should call fnNames using a string. Can be:\n * * all - run on all loaders\n * * audio - run on all audio loaders\n * * subtitle - run on all subtitle loaders\n * * main - run on the main loaders\n *\n * @param {Array|string} fnNames\n * A string or array of function names to call.\n */\n\n delegateLoaders_(filter, fnNames) {\n const loaders = [];\n const dontFilterPlaylist = filter === 'all';\n if (dontFilterPlaylist || filter === 'main') {\n loaders.push(this.mainPlaylistLoader_);\n }\n const mediaTypes = [];\n if (dontFilterPlaylist || filter === 'audio') {\n mediaTypes.push('AUDIO');\n }\n if (dontFilterPlaylist || filter === 'subtitle') {\n mediaTypes.push('CLOSED-CAPTIONS');\n mediaTypes.push('SUBTITLES');\n }\n mediaTypes.forEach(mediaType => {\n const loader = this.mediaTypes_[mediaType] && this.mediaTypes_[mediaType].activePlaylistLoader;\n if (loader) {\n loaders.push(loader);\n }\n });\n ['main', 'audio', 'subtitle'].forEach(name => {\n const loader = this[`${name}SegmentLoader_`];\n if (loader && (filter === name || filter === 'all')) {\n loaders.push(loader);\n }\n });\n loaders.forEach(loader => fnNames.forEach(fnName => {\n if (typeof loader[fnName] === 'function') {\n loader[fnName]();\n }\n }));\n }\n /**\n * set the current time on all segment loaders\n *\n * @param {TimeRange} currentTime the current time to set\n * @return {TimeRange} the current time\n */\n\n setCurrentTime(currentTime) {\n const buffered = findRange(this.tech_.buffered(), currentTime);\n if (!(this.mainPlaylistLoader_ && this.mainPlaylistLoader_.media())) {\n // return immediately if the metadata is not ready yet\n return 0;\n } // it's clearly an edge-case but don't thrown an error if asked to\n // seek within an empty playlist\n\n if (!this.mainPlaylistLoader_.media().segments) {\n return 0;\n } // if the seek location is already buffered, continue buffering as usual\n\n if (buffered && buffered.length) {\n return currentTime;\n } // cancel outstanding requests so we begin buffering at the new\n // location\n\n this.mainSegmentLoader_.pause();\n this.mainSegmentLoader_.resetEverything();\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n this.audioSegmentLoader_.pause();\n this.audioSegmentLoader_.resetEverything();\n }\n if (this.mediaTypes_.SUBTITLES.activePlaylistLoader) {\n this.subtitleSegmentLoader_.pause();\n this.subtitleSegmentLoader_.resetEverything();\n } // start segment loader loading in case they are paused\n\n this.load();\n }\n /**\n * get the current duration\n *\n * @return {TimeRange} the duration\n */\n\n duration() {\n if (!this.mainPlaylistLoader_) {\n return 0;\n }\n const media = this.mainPlaylistLoader_.media();\n if (!media) {\n // no playlists loaded yet, so can't determine a duration\n return 0;\n } // Don't rely on the media source for duration in the case of a live playlist since\n // setting the native MediaSource's duration to infinity ends up with consequences to\n // seekable behavior. See https://github.com/w3c/media-source/issues/5 for details.\n //\n // This is resolved in the spec by https://github.com/w3c/media-source/pull/92,\n // however, few browsers have support for setLiveSeekableRange()\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/setLiveSeekableRange\n //\n // Until a time when the duration of the media source can be set to infinity, and a\n // seekable range specified across browsers, just return Infinity.\n\n if (!media.endList) {\n return Infinity;\n } // Since this is a VOD video, it is safe to rely on the media source's duration (if\n // available). If it's not available, fall back to a playlist-calculated estimate.\n\n if (this.mediaSource) {\n return this.mediaSource.duration;\n }\n return Vhs$1.Playlist.duration(media);\n }\n /**\n * check the seekable range\n *\n * @return {TimeRange} the seekable range\n */\n\n seekable() {\n return this.seekable_;\n }\n onSyncInfoUpdate_() {\n let audioSeekable; // TODO check for creation of both source buffers before updating seekable\n //\n // A fix was made to this function where a check for\n // this.sourceUpdater_.hasCreatedSourceBuffers\n // was added to ensure that both source buffers were created before seekable was\n // updated. However, it originally had a bug where it was checking for a true and\n // returning early instead of checking for false. Setting it to check for false to\n // return early though created other issues. A call to play() would check for seekable\n // end without verifying that a seekable range was present. In addition, even checking\n // for that didn't solve some issues, as handleFirstPlay is sometimes worked around\n // due to a media update calling load on the segment loaders, skipping a seek to live,\n // thereby starting live streams at the beginning of the stream rather than at the end.\n //\n // This conditional should be fixed to wait for the creation of two source buffers at\n // the same time as the other sections of code are fixed to properly seek to live and\n // not throw an error due to checking for a seekable end when no seekable range exists.\n //\n // For now, fall back to the older behavior, with the understanding that the seekable\n // range may not be completely correct, leading to a suboptimal initial live point.\n\n if (!this.mainPlaylistLoader_) {\n return;\n }\n let media = this.mainPlaylistLoader_.media();\n if (!media) {\n return;\n }\n let expired = this.syncController_.getExpiredTime(media, this.duration());\n if (expired === null) {\n // not enough information to update seekable\n return;\n }\n const main = this.mainPlaylistLoader_.main;\n const mainSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(main, media));\n if (mainSeekable.length === 0) {\n return;\n }\n if (this.mediaTypes_.AUDIO.activePlaylistLoader) {\n media = this.mediaTypes_.AUDIO.activePlaylistLoader.media();\n expired = this.syncController_.getExpiredTime(media, this.duration());\n if (expired === null) {\n return;\n }\n audioSeekable = Vhs$1.Playlist.seekable(media, expired, Vhs$1.Playlist.liveEdgeDelay(main, media));\n if (audioSeekable.length === 0) {\n return;\n }\n }\n let oldEnd;\n let oldStart;\n if (this.seekable_ && this.seekable_.length) {\n oldEnd = this.seekable_.end(0);\n oldStart = this.seekable_.start(0);\n }\n if (!audioSeekable) {\n // seekable has been calculated based on buffering video data so it\n // can be returned directly\n this.seekable_ = mainSeekable;\n } else if (audioSeekable.start(0) > mainSeekable.end(0) || mainSeekable.start(0) > audioSeekable.end(0)) {\n // seekables are pretty far off, rely on main\n this.seekable_ = mainSeekable;\n } else {\n this.seekable_ = createTimeRanges([[audioSeekable.start(0) > mainSeekable.start(0) ? audioSeekable.start(0) : mainSeekable.start(0), audioSeekable.end(0) < mainSeekable.end(0) ? audioSeekable.end(0) : mainSeekable.end(0)]]);\n } // seekable is the same as last time\n\n if (this.seekable_ && this.seekable_.length) {\n if (this.seekable_.end(0) === oldEnd && this.seekable_.start(0) === oldStart) {\n return;\n }\n }\n this.logger_(`seekable updated [${printableRange(this.seekable_)}]`);\n this.tech_.trigger('seekablechanged');\n }\n /**\n * Update the player duration\n */\n\n updateDuration(isLive) {\n if (this.updateDuration_) {\n this.mediaSource.removeEventListener('sourceopen', this.updateDuration_);\n this.updateDuration_ = null;\n }\n if (this.mediaSource.readyState !== 'open') {\n this.updateDuration_ = this.updateDuration.bind(this, isLive);\n this.mediaSource.addEventListener('sourceopen', this.updateDuration_);\n return;\n }\n if (isLive) {\n const seekable = this.seekable();\n if (!seekable.length) {\n return;\n } // Even in the case of a live playlist, the native MediaSource's duration should not\n // be set to Infinity (even though this would be expected for a live playlist), since\n // setting the native MediaSource's duration to infinity ends up with consequences to\n // seekable behavior. See https://github.com/w3c/media-source/issues/5 for details.\n //\n // This is resolved in the spec by https://github.com/w3c/media-source/pull/92,\n // however, few browsers have support for setLiveSeekableRange()\n // https://developer.mozilla.org/en-US/docs/Web/API/MediaSource/setLiveSeekableRange\n //\n // Until a time when the duration of the media source can be set to infinity, and a\n // seekable range specified across browsers, the duration should be greater than or\n // equal to the last possible seekable value.\n // MediaSource duration starts as NaN\n // It is possible (and probable) that this case will never be reached for many\n // sources, since the MediaSource reports duration as the highest value without\n // accounting for timestamp offset. For example, if the timestamp offset is -100 and\n // we buffered times 0 to 100 with real times of 100 to 200, even though current\n // time will be between 0 and 100, the native media source may report the duration\n // as 200. However, since we report duration separate from the media source (as\n // Infinity), and as long as the native media source duration value is greater than\n // our reported seekable range, seeks will work as expected. The large number as\n // duration for live is actually a strategy used by some players to work around the\n // issue of live seekable ranges cited above.\n\n if (isNaN(this.mediaSource.duration) || this.mediaSource.duration < seekable.end(seekable.length - 1)) {\n this.sourceUpdater_.setDuration(seekable.end(seekable.length - 1));\n }\n return;\n }\n const buffered = this.tech_.buffered();\n let duration = Vhs$1.Playlist.duration(this.mainPlaylistLoader_.media());\n if (buffered.length > 0) {\n duration = Math.max(duration, buffered.end(buffered.length - 1));\n }\n if (this.mediaSource.duration !== duration) {\n this.sourceUpdater_.setDuration(duration);\n }\n }\n /**\n * dispose of the PlaylistController and everything\n * that it controls\n */\n\n dispose() {\n this.trigger('dispose');\n this.decrypter_.terminate();\n this.mainPlaylistLoader_.dispose();\n this.mainSegmentLoader_.dispose();\n this.contentSteeringController_.dispose();\n this.keyStatusMap_.clear();\n if (this.loadOnPlay_) {\n this.tech_.off('play', this.loadOnPlay_);\n }\n ['AUDIO', 'SUBTITLES'].forEach(type => {\n const groups = this.mediaTypes_[type].groups;\n for (const id in groups) {\n groups[id].forEach(group => {\n if (group.playlistLoader) {\n group.playlistLoader.dispose();\n }\n });\n }\n });\n this.audioSegmentLoader_.dispose();\n this.subtitleSegmentLoader_.dispose();\n this.sourceUpdater_.dispose();\n this.timelineChangeController_.dispose();\n this.stopABRTimer_();\n if (this.updateDuration_) {\n this.mediaSource.removeEventListener('sourceopen', this.updateDuration_);\n }\n this.mediaSource.removeEventListener('durationchange', this.handleDurationChange_); // load the media source into the player\n\n this.mediaSource.removeEventListener('sourceopen', this.handleSourceOpen_);\n this.mediaSource.removeEventListener('sourceended', this.handleSourceEnded_);\n this.off();\n }\n /**\n * return the main playlist object if we have one\n *\n * @return {Object} the main playlist object that we parsed\n */\n\n main() {\n return this.mainPlaylistLoader_.main;\n }\n /**\n * return the currently selected playlist\n *\n * @return {Object} the currently selected playlist object that we parsed\n */\n\n media() {\n // playlist loader will not return media if it has not been fully loaded\n return this.mainPlaylistLoader_.media() || this.initialMedia_;\n }\n areMediaTypesKnown_() {\n const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader;\n const hasMainMediaInfo = !!this.mainSegmentLoader_.getCurrentMediaInfo_(); // if we are not using an audio loader, then we have audio media info\n // otherwise check on the segment loader.\n\n const hasAudioMediaInfo = !usingAudioLoader ? true : !!this.audioSegmentLoader_.getCurrentMediaInfo_(); // one or both loaders has not loaded sufficently to get codecs\n\n if (!hasMainMediaInfo || !hasAudioMediaInfo) {\n return false;\n }\n return true;\n }\n getCodecsOrExclude_() {\n const media = {\n main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {},\n audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {}\n };\n const playlist = this.mainSegmentLoader_.getPendingSegmentPlaylist() || this.media(); // set \"main\" media equal to video\n\n media.video = media.main;\n const playlistCodecs = codecsForPlaylist(this.main(), playlist);\n const codecs = {};\n const usingAudioLoader = !!this.mediaTypes_.AUDIO.activePlaylistLoader;\n if (media.main.hasVideo) {\n codecs.video = playlistCodecs.video || media.main.videoCodec || DEFAULT_VIDEO_CODEC;\n }\n if (media.main.isMuxed) {\n codecs.video += `,${playlistCodecs.audio || media.main.audioCodec || DEFAULT_AUDIO_CODEC}`;\n }\n if (media.main.hasAudio && !media.main.isMuxed || media.audio.hasAudio || usingAudioLoader) {\n codecs.audio = playlistCodecs.audio || media.main.audioCodec || media.audio.audioCodec || DEFAULT_AUDIO_CODEC; // set audio isFmp4 so we use the correct \"supports\" function below\n\n media.audio.isFmp4 = media.main.hasAudio && !media.main.isMuxed ? media.main.isFmp4 : media.audio.isFmp4;\n } // no codecs, no playback.\n\n if (!codecs.audio && !codecs.video) {\n this.excludePlaylist({\n playlistToExclude: playlist,\n error: {\n message: 'Could not determine codecs for playlist.'\n },\n playlistExclusionDuration: Infinity\n });\n return;\n } // fmp4 relies on browser support, while ts relies on muxer support\n\n const supportFunction = (isFmp4, codec) => isFmp4 ? browserSupportsCodec(codec) : muxerSupportsCodec(codec);\n const unsupportedCodecs = {};\n let unsupportedAudio;\n ['video', 'audio'].forEach(function (type) {\n if (codecs.hasOwnProperty(type) && !supportFunction(media[type].isFmp4, codecs[type])) {\n const supporter = media[type].isFmp4 ? 'browser' : 'muxer';\n unsupportedCodecs[supporter] = unsupportedCodecs[supporter] || [];\n unsupportedCodecs[supporter].push(codecs[type]);\n if (type === 'audio') {\n unsupportedAudio = supporter;\n }\n }\n });\n if (usingAudioLoader && unsupportedAudio && playlist.attributes.AUDIO) {\n const audioGroup = playlist.attributes.AUDIO;\n this.main().playlists.forEach(variant => {\n const variantAudioGroup = variant.attributes && variant.attributes.AUDIO;\n if (variantAudioGroup === audioGroup && variant !== playlist) {\n variant.excludeUntil = Infinity;\n }\n });\n this.logger_(`excluding audio group ${audioGroup} as ${unsupportedAudio} does not support codec(s): \"${codecs.audio}\"`);\n } // if we have any unsupported codecs exclude this playlist.\n\n if (Object.keys(unsupportedCodecs).length) {\n const message = Object.keys(unsupportedCodecs).reduce((acc, supporter) => {\n if (acc) {\n acc += ', ';\n }\n acc += `${supporter} does not support codec(s): \"${unsupportedCodecs[supporter].join(',')}\"`;\n return acc;\n }, '') + '.';\n this.excludePlaylist({\n playlistToExclude: playlist,\n error: {\n internal: true,\n message\n },\n playlistExclusionDuration: Infinity\n });\n return;\n } // check if codec switching is happening\n\n if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_.canChangeType()) {\n const switchMessages = [];\n ['video', 'audio'].forEach(type => {\n const newCodec = (parseCodecs(this.sourceUpdater_.codecs[type] || '')[0] || {}).type;\n const oldCodec = (parseCodecs(codecs[type] || '')[0] || {}).type;\n if (newCodec && oldCodec && newCodec.toLowerCase() !== oldCodec.toLowerCase()) {\n switchMessages.push(`\"${this.sourceUpdater_.codecs[type]}\" -> \"${codecs[type]}\"`);\n }\n });\n if (switchMessages.length) {\n this.excludePlaylist({\n playlistToExclude: playlist,\n error: {\n message: `Codec switching not supported: ${switchMessages.join(', ')}.`,\n internal: true\n },\n playlistExclusionDuration: Infinity\n });\n return;\n }\n } // TODO: when using the muxer shouldn't we just return\n // the codecs that the muxer outputs?\n\n return codecs;\n }\n /**\n * Create source buffers and exlude any incompatible renditions.\n *\n * @private\n */\n\n tryToCreateSourceBuffers_() {\n // media source is not ready yet or sourceBuffers are already\n // created.\n if (this.mediaSource.readyState !== 'open' || this.sourceUpdater_.hasCreatedSourceBuffers()) {\n return;\n }\n if (!this.areMediaTypesKnown_()) {\n return;\n }\n const codecs = this.getCodecsOrExclude_(); // no codecs means that the playlist was excluded\n\n if (!codecs) {\n return;\n }\n this.sourceUpdater_.createSourceBuffers(codecs);\n const codecString = [codecs.video, codecs.audio].filter(Boolean).join(',');\n this.excludeIncompatibleVariants_(codecString);\n }\n /**\n * Excludes playlists with codecs that are unsupported by the muxer and browser.\n */\n\n excludeUnsupportedVariants_() {\n const playlists = this.main().playlists;\n const ids = []; // TODO: why don't we have a property to loop through all\n // playlist? Why did we ever mix indexes and keys?\n\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key]; // check if we already processed this playlist.\n\n if (ids.indexOf(variant.id) !== -1) {\n return;\n }\n ids.push(variant.id);\n const codecs = codecsForPlaylist(this.main, variant);\n const unsupported = [];\n if (codecs.audio && !muxerSupportsCodec(codecs.audio) && !browserSupportsCodec(codecs.audio)) {\n unsupported.push(`audio codec ${codecs.audio}`);\n }\n if (codecs.video && !muxerSupportsCodec(codecs.video) && !browserSupportsCodec(codecs.video)) {\n unsupported.push(`video codec ${codecs.video}`);\n }\n if (codecs.text && codecs.text === 'stpp.ttml.im1t') {\n unsupported.push(`text codec ${codecs.text}`);\n }\n if (unsupported.length) {\n variant.excludeUntil = Infinity;\n this.logger_(`excluding ${variant.id} for unsupported: ${unsupported.join(', ')}`);\n }\n });\n }\n /**\n * Exclude playlists that are known to be codec or\n * stream-incompatible with the SourceBuffer configuration. For\n * instance, Media Source Extensions would cause the video element to\n * stall waiting for video data if you switched from a variant with\n * video and audio to an audio-only one.\n *\n * @param {Object} media a media playlist compatible with the current\n * set of SourceBuffers. Variants in the current main playlist that\n * do not appear to have compatible codec or stream configurations\n * will be excluded from the default playlist selection algorithm\n * indefinitely.\n * @private\n */\n\n excludeIncompatibleVariants_(codecString) {\n const ids = [];\n const playlists = this.main().playlists;\n const codecs = unwrapCodecList(parseCodecs(codecString));\n const codecCount_ = codecCount(codecs);\n const videoDetails = codecs.video && parseCodecs(codecs.video)[0] || null;\n const audioDetails = codecs.audio && parseCodecs(codecs.audio)[0] || null;\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key]; // check if we already processed this playlist.\n // or it if it is already excluded forever.\n\n if (ids.indexOf(variant.id) !== -1 || variant.excludeUntil === Infinity) {\n return;\n }\n ids.push(variant.id);\n const exclusionReasons = []; // get codecs from the playlist for this variant\n\n const variantCodecs = codecsForPlaylist(this.mainPlaylistLoader_.main, variant);\n const variantCodecCount = codecCount(variantCodecs); // if no codecs are listed, we cannot determine that this\n // variant is incompatible. Wait for mux.js to probe\n\n if (!variantCodecs.audio && !variantCodecs.video) {\n return;\n } // TODO: we can support this by removing the\n // old media source and creating a new one, but it will take some work.\n // The number of streams cannot change\n\n if (variantCodecCount !== codecCount_) {\n exclusionReasons.push(`codec count \"${variantCodecCount}\" !== \"${codecCount_}\"`);\n } // only exclude playlists by codec change, if codecs cannot switch\n // during playback.\n\n if (!this.sourceUpdater_.canChangeType()) {\n const variantVideoDetails = variantCodecs.video && parseCodecs(variantCodecs.video)[0] || null;\n const variantAudioDetails = variantCodecs.audio && parseCodecs(variantCodecs.audio)[0] || null; // the video codec cannot change\n\n if (variantVideoDetails && videoDetails && variantVideoDetails.type.toLowerCase() !== videoDetails.type.toLowerCase()) {\n exclusionReasons.push(`video codec \"${variantVideoDetails.type}\" !== \"${videoDetails.type}\"`);\n } // the audio codec cannot change\n\n if (variantAudioDetails && audioDetails && variantAudioDetails.type.toLowerCase() !== audioDetails.type.toLowerCase()) {\n exclusionReasons.push(`audio codec \"${variantAudioDetails.type}\" !== \"${audioDetails.type}\"`);\n }\n }\n if (exclusionReasons.length) {\n variant.excludeUntil = Infinity;\n this.logger_(`excluding ${variant.id}: ${exclusionReasons.join(' && ')}`);\n }\n });\n }\n updateAdCues_(media) {\n let offset = 0;\n const seekable = this.seekable();\n if (seekable.length) {\n offset = seekable.start(0);\n }\n updateAdCues(media, this.cueTagsTrack_, offset);\n }\n /**\n * Calculates the desired forward buffer length based on current time\n *\n * @return {number} Desired forward buffer length in seconds\n */\n\n goalBufferLength() {\n const currentTime = this.tech_.currentTime();\n const initial = Config.GOAL_BUFFER_LENGTH;\n const rate = Config.GOAL_BUFFER_LENGTH_RATE;\n const max = Math.max(initial, Config.MAX_GOAL_BUFFER_LENGTH);\n return Math.min(initial + currentTime * rate, max);\n }\n /**\n * Calculates the desired buffer low water line based on current time\n *\n * @return {number} Desired buffer low water line in seconds\n */\n\n bufferLowWaterLine() {\n const currentTime = this.tech_.currentTime();\n const initial = Config.BUFFER_LOW_WATER_LINE;\n const rate = Config.BUFFER_LOW_WATER_LINE_RATE;\n const max = Math.max(initial, Config.MAX_BUFFER_LOW_WATER_LINE);\n const newMax = Math.max(initial, Config.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE);\n return Math.min(initial + currentTime * rate, this.bufferBasedABR ? newMax : max);\n }\n bufferHighWaterLine() {\n return Config.BUFFER_HIGH_WATER_LINE;\n }\n addDateRangesToTextTrack_(dateRanges) {\n createMetadataTrackIfNotExists(this.inbandTextTracks_, 'com.apple.streaming', this.tech_);\n addDateRangeMetadata({\n inbandTextTracks: this.inbandTextTracks_,\n dateRanges\n });\n }\n addMetadataToTextTrack(dispatchType, metadataArray, videoDuration) {\n const timestampOffset = this.sourceUpdater_.videoBuffer ? this.sourceUpdater_.videoTimestampOffset() : this.sourceUpdater_.audioTimestampOffset(); // There's potentially an issue where we could double add metadata if there's a muxed\n // audio/video source with a metadata track, and an alt audio with a metadata track.\n // However, this probably won't happen, and if it does it can be handled then.\n\n createMetadataTrackIfNotExists(this.inbandTextTracks_, dispatchType, this.tech_);\n addMetadata({\n inbandTextTracks: this.inbandTextTracks_,\n metadataArray,\n timestampOffset,\n videoDuration\n });\n }\n /**\n * Utility for getting the pathway or service location from an HLS or DASH playlist.\n *\n * @param {Object} playlist for getting pathway from.\n * @return the pathway attribute of a playlist\n */\n\n pathwayAttribute_(playlist) {\n return playlist.attributes['PATHWAY-ID'] || playlist.attributes.serviceLocation;\n }\n /**\n * Initialize available pathways and apply the tag properties.\n */\n\n initContentSteeringController_() {\n const main = this.main();\n if (!main.contentSteering) {\n return;\n }\n for (const playlist of main.playlists) {\n this.contentSteeringController_.addAvailablePathway(this.pathwayAttribute_(playlist));\n }\n this.contentSteeringController_.assignTagProperties(main.uri, main.contentSteering); // request the steering manifest immediately if queryBeforeStart is set.\n\n if (this.contentSteeringController_.queryBeforeStart) {\n // When queryBeforeStart is true, initial request should omit steering parameters.\n this.contentSteeringController_.requestSteeringManifest(true);\n return;\n } // otherwise start content steering after playback starts\n\n this.tech_.one('canplay', () => {\n this.contentSteeringController_.requestSteeringManifest();\n });\n }\n /**\n * Reset the content steering controller and re-init.\n */\n\n resetContentSteeringController_() {\n this.contentSteeringController_.clearAvailablePathways();\n this.contentSteeringController_.dispose();\n this.initContentSteeringController_();\n }\n /**\n * Attaches the listeners for content steering.\n */\n\n attachContentSteeringListeners_() {\n this.contentSteeringController_.on('content-steering', this.excludeThenChangePathway_.bind(this));\n if (this.sourceType_ === 'dash') {\n this.mainPlaylistLoader_.on('loadedplaylist', () => {\n const main = this.main(); // check if steering tag or pathways changed.\n\n const didDashTagChange = this.contentSteeringController_.didDASHTagChange(main.uri, main.contentSteering);\n const didPathwaysChange = () => {\n const availablePathways = this.contentSteeringController_.getAvailablePathways();\n const newPathways = [];\n for (const playlist of main.playlists) {\n const serviceLocation = playlist.attributes.serviceLocation;\n if (serviceLocation) {\n newPathways.push(serviceLocation);\n if (!availablePathways.has(serviceLocation)) {\n return true;\n }\n }\n } // If we have no new serviceLocations and previously had availablePathways\n\n if (!newPathways.length && availablePathways.size) {\n return true;\n }\n return false;\n };\n if (didDashTagChange || didPathwaysChange()) {\n this.resetContentSteeringController_();\n }\n });\n }\n }\n /**\n * Simple exclude and change playlist logic for content steering.\n */\n\n excludeThenChangePathway_() {\n const currentPathway = this.contentSteeringController_.getPathway();\n if (!currentPathway) {\n return;\n }\n this.handlePathwayClones_();\n const main = this.main();\n const playlists = main.playlists;\n const ids = new Set();\n let didEnablePlaylists = false;\n Object.keys(playlists).forEach(key => {\n const variant = playlists[key];\n const pathwayId = this.pathwayAttribute_(variant);\n const differentPathwayId = pathwayId && currentPathway !== pathwayId;\n const steeringExclusion = variant.excludeUntil === Infinity && variant.lastExcludeReason_ === 'content-steering';\n if (steeringExclusion && !differentPathwayId) {\n delete variant.excludeUntil;\n delete variant.lastExcludeReason_;\n didEnablePlaylists = true;\n }\n const noExcludeUntil = !variant.excludeUntil && variant.excludeUntil !== Infinity;\n const shouldExclude = !ids.has(variant.id) && differentPathwayId && noExcludeUntil;\n if (!shouldExclude) {\n return;\n }\n ids.add(variant.id);\n variant.excludeUntil = Infinity;\n variant.lastExcludeReason_ = 'content-steering'; // TODO: kind of spammy, maybe move this.\n\n this.logger_(`excluding ${variant.id} for ${variant.lastExcludeReason_}`);\n });\n if (this.contentSteeringController_.manifestType_ === 'DASH') {\n Object.keys(this.mediaTypes_).forEach(key => {\n const type = this.mediaTypes_[key];\n if (type.activePlaylistLoader) {\n const currentPlaylist = type.activePlaylistLoader.media_; // Check if the current media playlist matches the current CDN\n\n if (currentPlaylist && currentPlaylist.attributes.serviceLocation !== currentPathway) {\n didEnablePlaylists = true;\n }\n }\n });\n }\n if (didEnablePlaylists) {\n this.changeSegmentPathway_();\n }\n }\n /**\n * Add, update, or delete playlists and media groups for\n * the pathway clones for HLS Content Steering.\n *\n * See https://datatracker.ietf.org/doc/draft-pantos-hls-rfc8216bis/\n *\n * NOTE: Pathway cloning does not currently support the `PER_VARIANT_URIS` and\n * `PER_RENDITION_URIS` as we do not handle `STABLE-VARIANT-ID` or\n * `STABLE-RENDITION-ID` values.\n */\n\n handlePathwayClones_() {\n const main = this.main();\n const playlists = main.playlists;\n const currentPathwayClones = this.contentSteeringController_.currentPathwayClones;\n const nextPathwayClones = this.contentSteeringController_.nextPathwayClones;\n const hasClones = currentPathwayClones && currentPathwayClones.size || nextPathwayClones && nextPathwayClones.size;\n if (!hasClones) {\n return;\n }\n for (const [id, clone] of currentPathwayClones.entries()) {\n const newClone = nextPathwayClones.get(id); // Delete the old pathway clone.\n\n if (!newClone) {\n this.mainPlaylistLoader_.updateOrDeleteClone(clone);\n this.contentSteeringController_.excludePathway(id);\n }\n }\n for (const [id, clone] of nextPathwayClones.entries()) {\n const oldClone = currentPathwayClones.get(id); // Create a new pathway if it is a new pathway clone object.\n\n if (!oldClone) {\n const playlistsToClone = playlists.filter(p => {\n return p.attributes['PATHWAY-ID'] === clone['BASE-ID'];\n });\n playlistsToClone.forEach(p => {\n this.mainPlaylistLoader_.addClonePathway(clone, p);\n });\n this.contentSteeringController_.addAvailablePathway(id);\n continue;\n } // There have not been changes to the pathway clone object, so skip.\n\n if (this.equalPathwayClones_(oldClone, clone)) {\n continue;\n } // Update a preexisting cloned pathway.\n // True is set for the update flag.\n\n this.mainPlaylistLoader_.updateOrDeleteClone(clone, true);\n this.contentSteeringController_.addAvailablePathway(id);\n } // Deep copy contents of next to current pathways.\n\n this.contentSteeringController_.currentPathwayClones = new Map(JSON.parse(JSON.stringify([...nextPathwayClones])));\n }\n /**\n * Determines whether two pathway clone objects are equivalent.\n *\n * @param {Object} a The first pathway clone object.\n * @param {Object} b The second pathway clone object.\n * @return {boolean} True if the pathway clone objects are equal, false otherwise.\n */\n\n equalPathwayClones_(a, b) {\n if (a['BASE-ID'] !== b['BASE-ID'] || a.ID !== b.ID || a['URI-REPLACEMENT'].HOST !== b['URI-REPLACEMENT'].HOST) {\n return false;\n }\n const aParams = a['URI-REPLACEMENT'].PARAMS;\n const bParams = b['URI-REPLACEMENT'].PARAMS; // We need to iterate through both lists of params because one could be\n // missing a parameter that the other has.\n\n for (const p in aParams) {\n if (aParams[p] !== bParams[p]) {\n return false;\n }\n }\n for (const p in bParams) {\n if (aParams[p] !== bParams[p]) {\n return false;\n }\n }\n return true;\n }\n /**\n * Changes the current playlists for audio, video and subtitles after a new pathway\n * is chosen from content steering.\n */\n\n changeSegmentPathway_() {\n const nextPlaylist = this.selectPlaylist();\n this.pauseLoading(); // Switch audio and text track playlists if necessary in DASH\n\n if (this.contentSteeringController_.manifestType_ === 'DASH') {\n this.switchMediaForDASHContentSteering_();\n }\n this.switchMedia_(nextPlaylist, 'content-steering');\n }\n /**\n * Iterates through playlists and check their keyId set and compare with the\n * keyStatusMap, only enable playlists that have a usable key. If the playlist\n * has no keyId leave it enabled by default.\n */\n\n excludeNonUsablePlaylistsByKeyId_() {\n if (!this.mainPlaylistLoader_ || !this.mainPlaylistLoader_.main) {\n return;\n }\n let nonUsableKeyStatusCount = 0;\n const NON_USABLE = 'non-usable';\n this.mainPlaylistLoader_.main.playlists.forEach(playlist => {\n const keyIdSet = this.mainPlaylistLoader_.getKeyIdSet(playlist); // If the playlist doesn't have keyIDs lets not exclude it.\n\n if (!keyIdSet || !keyIdSet.size) {\n return;\n }\n keyIdSet.forEach(key => {\n const USABLE = 'usable';\n const hasUsableKeyStatus = this.keyStatusMap_.has(key) && this.keyStatusMap_.get(key) === USABLE;\n const nonUsableExclusion = playlist.lastExcludeReason_ === NON_USABLE && playlist.excludeUntil === Infinity;\n if (!hasUsableKeyStatus) {\n // Only exclude playlists that haven't already been excluded as non-usable.\n if (playlist.excludeUntil !== Infinity && playlist.lastExcludeReason_ !== NON_USABLE) {\n playlist.excludeUntil = Infinity;\n playlist.lastExcludeReason_ = NON_USABLE;\n this.logger_(`excluding playlist ${playlist.id} because the key ID ${key} doesn't exist in the keyStatusMap or is not ${USABLE}`);\n } // count all nonUsableKeyStatus\n\n nonUsableKeyStatusCount++;\n } else if (hasUsableKeyStatus && nonUsableExclusion) {\n delete playlist.excludeUntil;\n delete playlist.lastExcludeReason_;\n this.logger_(`enabling playlist ${playlist.id} because key ID ${key} is ${USABLE}`);\n }\n });\n }); // If for whatever reason every playlist has a non usable key status. Lets try re-including the SD renditions as a failsafe.\n\n if (nonUsableKeyStatusCount >= this.mainPlaylistLoader_.main.playlists.length) {\n this.mainPlaylistLoader_.main.playlists.forEach(playlist => {\n const isNonHD = playlist && playlist.attributes && playlist.attributes.RESOLUTION && playlist.attributes.RESOLUTION.height < 720;\n const excludedForNonUsableKey = playlist.excludeUntil === Infinity && playlist.lastExcludeReason_ === NON_USABLE;\n if (isNonHD && excludedForNonUsableKey) {\n // Only delete the excludeUntil so we don't try and re-exclude these playlists.\n delete playlist.excludeUntil;\n videojs.log.warn(`enabling non-HD playlist ${playlist.id} because all playlists were excluded due to ${NON_USABLE} key IDs`);\n }\n });\n }\n }\n /**\n * Adds a keystatus to the keystatus map, tries to convert to string if necessary.\n *\n * @param {any} keyId the keyId to add a status for\n * @param {string} status the status of the keyId\n */\n\n addKeyStatus_(keyId, status) {\n const isString = typeof keyId === 'string';\n const keyIdHexString = isString ? keyId : bufferToHexString(keyId);\n const formattedKeyIdString = keyIdHexString.slice(0, 32).toLowerCase();\n this.logger_(`KeyStatus '${status}' with key ID ${formattedKeyIdString} added to the keyStatusMap`);\n this.keyStatusMap_.set(formattedKeyIdString, status);\n }\n /**\n * Utility function for adding key status to the keyStatusMap and filtering usable encrypted playlists.\n *\n * @param {any} keyId the keyId from the keystatuschange event\n * @param {string} status the key status string\n */\n\n updatePlaylistByKeyStatus(keyId, status) {\n this.addKeyStatus_(keyId, status);\n if (!this.waitingForFastQualityPlaylistReceived_) {\n this.excludeNonUsableThenChangePlaylist_();\n } // Listen to loadedplaylist with a single listener and check for new contentProtection elements when a playlist is updated.\n\n this.mainPlaylistLoader_.off('loadedplaylist', this.excludeNonUsableThenChangePlaylist_.bind(this));\n this.mainPlaylistLoader_.on('loadedplaylist', this.excludeNonUsableThenChangePlaylist_.bind(this));\n }\n excludeNonUsableThenChangePlaylist_() {\n this.excludeNonUsablePlaylistsByKeyId_();\n this.fastQualityChange_();\n }\n}\n\n/**\n * Returns a function that acts as the Enable/disable playlist function.\n *\n * @param {PlaylistLoader} loader - The main playlist loader\n * @param {string} playlistID - id of the playlist\n * @param {Function} changePlaylistFn - A function to be called after a\n * playlist's enabled-state has been changed. Will NOT be called if a\n * playlist's enabled-state is unchanged\n * @param {boolean=} enable - Value to set the playlist enabled-state to\n * or if undefined returns the current enabled-state for the playlist\n * @return {Function} Function for setting/getting enabled\n */\n\nconst enableFunction = (loader, playlistID, changePlaylistFn) => enable => {\n const playlist = loader.main.playlists[playlistID];\n const incompatible = isIncompatible(playlist);\n const currentlyEnabled = isEnabled(playlist);\n if (typeof enable === 'undefined') {\n return currentlyEnabled;\n }\n if (enable) {\n delete playlist.disabled;\n } else {\n playlist.disabled = true;\n }\n if (enable !== currentlyEnabled && !incompatible) {\n // Ensure the outside world knows about our changes\n changePlaylistFn();\n if (enable) {\n loader.trigger('renditionenabled');\n } else {\n loader.trigger('renditiondisabled');\n }\n }\n return enable;\n};\n/**\n * The representation object encapsulates the publicly visible information\n * in a media playlist along with a setter/getter-type function (enabled)\n * for changing the enabled-state of a particular playlist entry\n *\n * @class Representation\n */\n\nclass Representation {\n constructor(vhsHandler, playlist, id) {\n const {\n playlistController_: pc\n } = vhsHandler;\n const qualityChangeFunction = pc.fastQualityChange_.bind(pc); // some playlist attributes are optional\n\n if (playlist.attributes) {\n const resolution = playlist.attributes.RESOLUTION;\n this.width = resolution && resolution.width;\n this.height = resolution && resolution.height;\n this.bandwidth = playlist.attributes.BANDWIDTH;\n this.frameRate = playlist.attributes['FRAME-RATE'];\n }\n this.codecs = codecsForPlaylist(pc.main(), playlist);\n this.playlist = playlist; // The id is simply the ordinality of the media playlist\n // within the main playlist\n\n this.id = id; // Partially-apply the enableFunction to create a playlist-\n // specific variant\n\n this.enabled = enableFunction(vhsHandler.playlists, playlist.id, qualityChangeFunction);\n }\n}\n/**\n * A mixin function that adds the `representations` api to an instance\n * of the VhsHandler class\n *\n * @param {VhsHandler} vhsHandler - An instance of VhsHandler to add the\n * representation API into\n */\n\nconst renditionSelectionMixin = function (vhsHandler) {\n // Add a single API-specific function to the VhsHandler instance\n vhsHandler.representations = () => {\n const main = vhsHandler.playlistController_.main();\n const playlists = isAudioOnly(main) ? vhsHandler.playlistController_.getAudioTrackPlaylists_() : main.playlists;\n if (!playlists) {\n return [];\n }\n return playlists.filter(media => !isIncompatible(media)).map((e, i) => new Representation(vhsHandler, e, e.id));\n };\n};\n\n/**\n * @file playback-watcher.js\n *\n * Playback starts, and now my watch begins. It shall not end until my death. I shall\n * take no wait, hold no uncleared timeouts, father no bad seeks. I shall wear no crowns\n * and win no glory. I shall live and die at my post. I am the corrector of the underflow.\n * I am the watcher of gaps. I am the shield that guards the realms of seekable. I pledge\n * my life and honor to the Playback Watch, for this Player and all the Players to come.\n */\n\nconst timerCancelEvents = ['seeking', 'seeked', 'pause', 'playing', 'error'];\n/**\n * @class PlaybackWatcher\n */\n\nclass PlaybackWatcher {\n /**\n * Represents an PlaybackWatcher object.\n *\n * @class\n * @param {Object} options an object that includes the tech and settings\n */\n constructor(options) {\n this.playlistController_ = options.playlistController;\n this.tech_ = options.tech;\n this.seekable = options.seekable;\n this.allowSeeksWithinUnsafeLiveWindow = options.allowSeeksWithinUnsafeLiveWindow;\n this.liveRangeSafeTimeDelta = options.liveRangeSafeTimeDelta;\n this.media = options.media;\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = null;\n this.checkCurrentTimeTimeout_ = null;\n this.logger_ = logger('PlaybackWatcher');\n this.logger_('initialize');\n const playHandler = () => this.monitorCurrentTime_();\n const canPlayHandler = () => this.monitorCurrentTime_();\n const waitingHandler = () => this.techWaiting_();\n const cancelTimerHandler = () => this.resetTimeUpdate_();\n const pc = this.playlistController_;\n const loaderTypes = ['main', 'subtitle', 'audio'];\n const loaderChecks = {};\n loaderTypes.forEach(type => {\n loaderChecks[type] = {\n reset: () => this.resetSegmentDownloads_(type),\n updateend: () => this.checkSegmentDownloads_(type)\n };\n pc[`${type}SegmentLoader_`].on('appendsdone', loaderChecks[type].updateend); // If a rendition switch happens during a playback stall where the buffer\n // isn't changing we want to reset. We cannot assume that the new rendition\n // will also be stalled, until after new appends.\n\n pc[`${type}SegmentLoader_`].on('playlistupdate', loaderChecks[type].reset); // Playback stalls should not be detected right after seeking.\n // This prevents one segment playlists (single vtt or single segment content)\n // from being detected as stalling. As the buffer will not change in those cases, since\n // the buffer is the entire video duration.\n\n this.tech_.on(['seeked', 'seeking'], loaderChecks[type].reset);\n });\n /**\n * We check if a seek was into a gap through the following steps:\n * 1. We get a seeking event and we do not get a seeked event. This means that\n * a seek was attempted but not completed.\n * 2. We run `fixesBadSeeks_` on segment loader appends. This means that we already\n * removed everything from our buffer and appended a segment, and should be ready\n * to check for gaps.\n */\n\n const setSeekingHandlers = fn => {\n ['main', 'audio'].forEach(type => {\n pc[`${type}SegmentLoader_`][fn]('appended', this.seekingAppendCheck_);\n });\n };\n this.seekingAppendCheck_ = () => {\n if (this.fixesBadSeeks_()) {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = this.tech_.currentTime();\n setSeekingHandlers('off');\n }\n };\n this.clearSeekingAppendCheck_ = () => setSeekingHandlers('off');\n this.watchForBadSeeking_ = () => {\n this.clearSeekingAppendCheck_();\n setSeekingHandlers('on');\n };\n this.tech_.on('seeked', this.clearSeekingAppendCheck_);\n this.tech_.on('seeking', this.watchForBadSeeking_);\n this.tech_.on('waiting', waitingHandler);\n this.tech_.on(timerCancelEvents, cancelTimerHandler);\n this.tech_.on('canplay', canPlayHandler);\n /*\n An edge case exists that results in gaps not being skipped when they exist at the beginning of a stream. This case\n is surfaced in one of two ways:\n 1) The `waiting` event is fired before the player has buffered content, making it impossible\n to find or skip the gap. The `waiting` event is followed by a `play` event. On first play\n we can check if playback is stalled due to a gap, and skip the gap if necessary.\n 2) A source with a gap at the beginning of the stream is loaded programatically while the player\n is in a playing state. To catch this case, it's important that our one-time play listener is setup\n even if the player is in a playing state\n */\n\n this.tech_.one('play', playHandler); // Define the dispose function to clean up our events\n\n this.dispose = () => {\n this.clearSeekingAppendCheck_();\n this.logger_('dispose');\n this.tech_.off('waiting', waitingHandler);\n this.tech_.off(timerCancelEvents, cancelTimerHandler);\n this.tech_.off('canplay', canPlayHandler);\n this.tech_.off('play', playHandler);\n this.tech_.off('seeking', this.watchForBadSeeking_);\n this.tech_.off('seeked', this.clearSeekingAppendCheck_);\n loaderTypes.forEach(type => {\n pc[`${type}SegmentLoader_`].off('appendsdone', loaderChecks[type].updateend);\n pc[`${type}SegmentLoader_`].off('playlistupdate', loaderChecks[type].reset);\n this.tech_.off(['seeked', 'seeking'], loaderChecks[type].reset);\n });\n if (this.checkCurrentTimeTimeout_) {\n window$1.clearTimeout(this.checkCurrentTimeTimeout_);\n }\n this.resetTimeUpdate_();\n };\n }\n /**\n * Periodically check current time to see if playback stopped\n *\n * @private\n */\n\n monitorCurrentTime_() {\n this.checkCurrentTime_();\n if (this.checkCurrentTimeTimeout_) {\n window$1.clearTimeout(this.checkCurrentTimeTimeout_);\n } // 42 = 24 fps // 250 is what Webkit uses // FF uses 15\n\n this.checkCurrentTimeTimeout_ = window$1.setTimeout(this.monitorCurrentTime_.bind(this), 250);\n }\n /**\n * Reset stalled download stats for a specific type of loader\n *\n * @param {string} type\n * The segment loader type to check.\n *\n * @listens SegmentLoader#playlistupdate\n * @listens Tech#seeking\n * @listens Tech#seeked\n */\n\n resetSegmentDownloads_(type) {\n const loader = this.playlistController_[`${type}SegmentLoader_`];\n if (this[`${type}StalledDownloads_`] > 0) {\n this.logger_(`resetting possible stalled download count for ${type} loader`);\n }\n this[`${type}StalledDownloads_`] = 0;\n this[`${type}Buffered_`] = loader.buffered_();\n }\n /**\n * Checks on every segment `appendsdone` to see\n * if segment appends are making progress. If they are not\n * and we are still downloading bytes. We exclude the playlist.\n *\n * @param {string} type\n * The segment loader type to check.\n *\n * @listens SegmentLoader#appendsdone\n */\n\n checkSegmentDownloads_(type) {\n const pc = this.playlistController_;\n const loader = pc[`${type}SegmentLoader_`];\n const buffered = loader.buffered_();\n const isBufferedDifferent = isRangeDifferent(this[`${type}Buffered_`], buffered);\n this[`${type}Buffered_`] = buffered; // if another watcher is going to fix the issue or\n // the buffered value for this loader changed\n // appends are working\n\n if (isBufferedDifferent) {\n this.resetSegmentDownloads_(type);\n return;\n }\n this[`${type}StalledDownloads_`]++;\n this.logger_(`found #${this[`${type}StalledDownloads_`]} ${type} appends that did not increase buffer (possible stalled download)`, {\n playlistId: loader.playlist_ && loader.playlist_.id,\n buffered: timeRangesToArray(buffered)\n }); // after 10 possibly stalled appends with no reset, exclude\n\n if (this[`${type}StalledDownloads_`] < 10) {\n return;\n }\n this.logger_(`${type} loader stalled download exclusion`);\n this.resetSegmentDownloads_(type);\n this.tech_.trigger({\n type: 'usage',\n name: `vhs-${type}-download-exclusion`\n });\n if (type === 'subtitle') {\n return;\n } // TODO: should we exclude audio tracks rather than main tracks\n // when type is audio?\n\n pc.excludePlaylist({\n error: {\n message: `Excessive ${type} segment downloading detected.`\n },\n playlistExclusionDuration: Infinity\n });\n }\n /**\n * The purpose of this function is to emulate the \"waiting\" event on\n * browsers that do not emit it when they are waiting for more\n * data to continue playback\n *\n * @private\n */\n\n checkCurrentTime_() {\n if (this.tech_.paused() || this.tech_.seeking()) {\n return;\n }\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n if (this.lastRecordedTime === currentTime && (!buffered.length || currentTime + SAFE_TIME_DELTA >= buffered.end(buffered.length - 1))) {\n // If current time is at the end of the final buffered region, then any playback\n // stall is most likely caused by buffering in a low bandwidth environment. The tech\n // should fire a `waiting` event in this scenario, but due to browser and tech\n // inconsistencies. Calling `techWaiting_` here allows us to simulate\n // responding to a native `waiting` event when the tech fails to emit one.\n return this.techWaiting_();\n }\n if (this.consecutiveUpdates >= 5 && currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n this.waiting_();\n } else if (currentTime === this.lastRecordedTime) {\n this.consecutiveUpdates++;\n } else {\n this.consecutiveUpdates = 0;\n this.lastRecordedTime = currentTime;\n }\n }\n /**\n * Resets the 'timeupdate' mechanism designed to detect that we are stalled\n *\n * @private\n */\n\n resetTimeUpdate_() {\n this.consecutiveUpdates = 0;\n }\n /**\n * Fixes situations where there's a bad seek\n *\n * @return {boolean} whether an action was taken to fix the seek\n * @private\n */\n\n fixesBadSeeks_() {\n const seeking = this.tech_.seeking();\n if (!seeking) {\n return false;\n } // TODO: It's possible that these seekable checks should be moved out of this function\n // and into a function that runs on seekablechange. It's also possible that we only need\n // afterSeekableWindow as the buffered check at the bottom is good enough to handle before\n // seekable range.\n\n const seekable = this.seekable();\n const currentTime = this.tech_.currentTime();\n const isAfterSeekableRange = this.afterSeekableWindow_(seekable, currentTime, this.media(), this.allowSeeksWithinUnsafeLiveWindow);\n let seekTo;\n if (isAfterSeekableRange) {\n const seekableEnd = seekable.end(seekable.length - 1); // sync to live point (if VOD, our seekable was updated and we're simply adjusting)\n\n seekTo = seekableEnd;\n }\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n const seekableStart = seekable.start(0); // sync to the beginning of the live window\n // provide a buffer of .1 seconds to handle rounding/imprecise numbers\n\n seekTo = seekableStart + (\n // if the playlist is too short and the seekable range is an exact time (can\n // happen in live with a 3 segment playlist), then don't use a time delta\n seekableStart === seekable.end(0) ? 0 : SAFE_TIME_DELTA);\n }\n if (typeof seekTo !== 'undefined') {\n this.logger_(`Trying to seek outside of seekable at time ${currentTime} with ` + `seekable range ${printableRange(seekable)}. Seeking to ` + `${seekTo}.`);\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n const sourceUpdater = this.playlistController_.sourceUpdater_;\n const buffered = this.tech_.buffered();\n const audioBuffered = sourceUpdater.audioBuffer ? sourceUpdater.audioBuffered() : null;\n const videoBuffered = sourceUpdater.videoBuffer ? sourceUpdater.videoBuffered() : null;\n const media = this.media(); // verify that at least two segment durations or one part duration have been\n // appended before checking for a gap.\n\n const minAppendedDuration = media.partTargetDuration ? media.partTargetDuration : (media.targetDuration - TIME_FUDGE_FACTOR) * 2; // verify that at least two segment durations have been\n // appended before checking for a gap.\n\n const bufferedToCheck = [audioBuffered, videoBuffered];\n for (let i = 0; i < bufferedToCheck.length; i++) {\n // skip null buffered\n if (!bufferedToCheck[i]) {\n continue;\n }\n const timeAhead = timeAheadOf(bufferedToCheck[i], currentTime); // if we are less than two video/audio segment durations or one part\n // duration behind we haven't appended enough to call this a bad seek.\n\n if (timeAhead < minAppendedDuration) {\n return false;\n }\n }\n const nextRange = findNextRange(buffered, currentTime); // we have appended enough content, but we don't have anything buffered\n // to seek over the gap\n\n if (nextRange.length === 0) {\n return false;\n }\n seekTo = nextRange.start(0) + SAFE_TIME_DELTA;\n this.logger_(`Buffered region starts (${nextRange.start(0)}) ` + ` just beyond seek point (${currentTime}). Seeking to ${seekTo}.`);\n this.tech_.setCurrentTime(seekTo);\n return true;\n }\n /**\n * Handler for situations when we determine the player is waiting.\n *\n * @private\n */\n\n waiting_() {\n if (this.techWaiting_()) {\n return;\n } // All tech waiting checks failed. Use last resort correction\n\n const currentTime = this.tech_.currentTime();\n const buffered = this.tech_.buffered();\n const currentRange = findRange(buffered, currentTime); // Sometimes the player can stall for unknown reasons within a contiguous buffered\n // region with no indication that anything is amiss (seen in Firefox). Seeking to\n // currentTime is usually enough to kickstart the player. This checks that the player\n // is currently within a buffered region before attempting a corrective seek.\n // Chrome does not appear to continue `timeupdate` events after a `waiting` event\n // until there is ~ 3 seconds of forward buffer available. PlaybackWatcher should also\n // make sure there is ~3 seconds of forward buffer before taking any corrective action\n // to avoid triggering an `unknownwaiting` event when the network is slow.\n\n if (currentRange.length && currentTime + 3 <= currentRange.end(0)) {\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(currentTime);\n this.logger_(`Stopped at ${currentTime} while inside a buffered region ` + `[${currentRange.start(0)} -> ${currentRange.end(0)}]. Attempting to resume ` + 'playback by seeking to the current time.'); // unknown waiting corrections may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-unknown-waiting'\n });\n return;\n }\n }\n /**\n * Handler for situations when the tech fires a `waiting` event\n *\n * @return {boolean}\n * True if an action (or none) was needed to correct the waiting. False if no\n * checks passed\n * @private\n */\n\n techWaiting_() {\n const seekable = this.seekable();\n const currentTime = this.tech_.currentTime();\n if (this.tech_.seeking()) {\n // Tech is seeking or already waiting on another action, no action needed\n return true;\n }\n if (this.beforeSeekableWindow_(seekable, currentTime)) {\n const livePoint = seekable.end(seekable.length - 1);\n this.logger_(`Fell out of live window at time ${currentTime}. Seeking to ` + `live point (seekable end) ${livePoint}`);\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(livePoint); // live window resyncs may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-live-resync'\n });\n return true;\n }\n const sourceUpdater = this.tech_.vhs.playlistController_.sourceUpdater_;\n const buffered = this.tech_.buffered();\n const videoUnderflow = this.videoUnderflow_({\n audioBuffered: sourceUpdater.audioBuffered(),\n videoBuffered: sourceUpdater.videoBuffered(),\n currentTime\n });\n if (videoUnderflow) {\n // Even though the video underflowed and was stuck in a gap, the audio overplayed\n // the gap, leading currentTime into a buffered range. Seeking to currentTime\n // allows the video to catch up to the audio position without losing any audio\n // (only suffering ~3 seconds of frozen video and a pause in audio playback).\n this.resetTimeUpdate_();\n this.tech_.setCurrentTime(currentTime); // video underflow may be useful for monitoring QoS\n\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-video-underflow'\n });\n return true;\n }\n const nextRange = findNextRange(buffered, currentTime); // check for gap\n\n if (nextRange.length > 0) {\n this.logger_(`Stopped at ${currentTime} and seeking to ${nextRange.start(0)}`);\n this.resetTimeUpdate_();\n this.skipTheGap_(currentTime);\n return true;\n } // All checks failed. Returning false to indicate failure to correct waiting\n\n return false;\n }\n afterSeekableWindow_(seekable, currentTime, playlist, allowSeeksWithinUnsafeLiveWindow = false) {\n if (!seekable.length) {\n // we can't make a solid case if there's no seekable, default to false\n return false;\n }\n let allowedEnd = seekable.end(seekable.length - 1) + SAFE_TIME_DELTA;\n const isLive = !playlist.endList;\n const isLLHLS = typeof playlist.partTargetDuration === 'number';\n if (isLive && (isLLHLS || allowSeeksWithinUnsafeLiveWindow)) {\n allowedEnd = seekable.end(seekable.length - 1) + playlist.targetDuration * 3;\n }\n if (currentTime > allowedEnd) {\n return true;\n }\n return false;\n }\n beforeSeekableWindow_(seekable, currentTime) {\n if (seekable.length &&\n // can't fall before 0 and 0 seekable start identifies VOD stream\n seekable.start(0) > 0 && currentTime < seekable.start(0) - this.liveRangeSafeTimeDelta) {\n return true;\n }\n return false;\n }\n videoUnderflow_({\n videoBuffered,\n audioBuffered,\n currentTime\n }) {\n // audio only content will not have video underflow :)\n if (!videoBuffered) {\n return;\n }\n let gap; // find a gap in demuxed content.\n\n if (videoBuffered.length && audioBuffered.length) {\n // in Chrome audio will continue to play for ~3s when we run out of video\n // so we have to check that the video buffer did have some buffer in the\n // past.\n const lastVideoRange = findRange(videoBuffered, currentTime - 3);\n const videoRange = findRange(videoBuffered, currentTime);\n const audioRange = findRange(audioBuffered, currentTime);\n if (audioRange.length && !videoRange.length && lastVideoRange.length) {\n gap = {\n start: lastVideoRange.end(0),\n end: audioRange.end(0)\n };\n } // find a gap in muxed content.\n } else {\n const nextRange = findNextRange(videoBuffered, currentTime); // Even if there is no available next range, there is still a possibility we are\n // stuck in a gap due to video underflow.\n\n if (!nextRange.length) {\n gap = this.gapFromVideoUnderflow_(videoBuffered, currentTime);\n }\n }\n if (gap) {\n this.logger_(`Encountered a gap in video from ${gap.start} to ${gap.end}. ` + `Seeking to current time ${currentTime}`);\n return true;\n }\n return false;\n }\n /**\n * Timer callback. If playback still has not proceeded, then we seek\n * to the start of the next buffered region.\n *\n * @private\n */\n\n skipTheGap_(scheduledCurrentTime) {\n const buffered = this.tech_.buffered();\n const currentTime = this.tech_.currentTime();\n const nextRange = findNextRange(buffered, currentTime);\n this.resetTimeUpdate_();\n if (nextRange.length === 0 || currentTime !== scheduledCurrentTime) {\n return;\n }\n this.logger_('skipTheGap_:', 'currentTime:', currentTime, 'scheduled currentTime:', scheduledCurrentTime, 'nextRange start:', nextRange.start(0)); // only seek if we still have not played\n\n this.tech_.setCurrentTime(nextRange.start(0) + TIME_FUDGE_FACTOR);\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-gap-skip'\n });\n }\n gapFromVideoUnderflow_(buffered, currentTime) {\n // At least in Chrome, if there is a gap in the video buffer, the audio will continue\n // playing for ~3 seconds after the video gap starts. This is done to account for\n // video buffer underflow/underrun (note that this is not done when there is audio\n // buffer underflow/underrun -- in that case the video will stop as soon as it\n // encounters the gap, as audio stalls are more noticeable/jarring to a user than\n // video stalls). The player's time will reflect the playthrough of audio, so the\n // time will appear as if we are in a buffered region, even if we are stuck in a\n // \"gap.\"\n //\n // Example:\n // video buffer: 0 => 10.1, 10.2 => 20\n // audio buffer: 0 => 20\n // overall buffer: 0 => 10.1, 10.2 => 20\n // current time: 13\n //\n // Chrome's video froze at 10 seconds, where the video buffer encountered the gap,\n // however, the audio continued playing until it reached ~3 seconds past the gap\n // (13 seconds), at which point it stops as well. Since current time is past the\n // gap, findNextRange will return no ranges.\n //\n // To check for this issue, we see if there is a gap that starts somewhere within\n // a 3 second range (3 seconds +/- 1 second) back from our current time.\n const gaps = findGaps(buffered);\n for (let i = 0; i < gaps.length; i++) {\n const start = gaps.start(i);\n const end = gaps.end(i); // gap is starts no more than 4 seconds back\n\n if (currentTime - start < 4 && currentTime - start > 2) {\n return {\n start,\n end\n };\n }\n }\n return null;\n }\n}\nconst defaultOptions = {\n errorInterval: 30,\n getSource(next) {\n const tech = this.tech({\n IWillNotUseThisInPlugins: true\n });\n const sourceObj = tech.currentSource_ || this.currentSource();\n return next(sourceObj);\n }\n};\n/**\n * Main entry point for the plugin\n *\n * @param {Player} player a reference to a videojs Player instance\n * @param {Object} [options] an object with plugin options\n * @private\n */\n\nconst initPlugin = function (player, options) {\n let lastCalled = 0;\n let seekTo = 0;\n const localOptions = merge(defaultOptions, options);\n player.ready(() => {\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload-initialized'\n });\n });\n /**\n * Player modifications to perform that must wait until `loadedmetadata`\n * has been triggered\n *\n * @private\n */\n\n const loadedMetadataHandler = function () {\n if (seekTo) {\n player.currentTime(seekTo);\n }\n };\n /**\n * Set the source on the player element, play, and seek if necessary\n *\n * @param {Object} sourceObj An object specifying the source url and mime-type to play\n * @private\n */\n\n const setSource = function (sourceObj) {\n if (sourceObj === null || sourceObj === undefined) {\n return;\n }\n seekTo = player.duration() !== Infinity && player.currentTime() || 0;\n player.one('loadedmetadata', loadedMetadataHandler);\n player.src(sourceObj);\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload'\n });\n player.play();\n };\n /**\n * Attempt to get a source from either the built-in getSource function\n * or a custom function provided via the options\n *\n * @private\n */\n\n const errorHandler = function () {\n // Do not attempt to reload the source if a source-reload occurred before\n // 'errorInterval' time has elapsed since the last source-reload\n if (Date.now() - lastCalled < localOptions.errorInterval * 1000) {\n player.trigger({\n type: 'usage',\n name: 'vhs-error-reload-canceled'\n });\n return;\n }\n if (!localOptions.getSource || typeof localOptions.getSource !== 'function') {\n videojs.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');\n return;\n }\n lastCalled = Date.now();\n return localOptions.getSource.call(player, setSource);\n };\n /**\n * Unbind any event handlers that were bound by the plugin\n *\n * @private\n */\n\n const cleanupEvents = function () {\n player.off('loadedmetadata', loadedMetadataHandler);\n player.off('error', errorHandler);\n player.off('dispose', cleanupEvents);\n };\n /**\n * Cleanup before re-initializing the plugin\n *\n * @param {Object} [newOptions] an object with plugin options\n * @private\n */\n\n const reinitPlugin = function (newOptions) {\n cleanupEvents();\n initPlugin(player, newOptions);\n };\n player.on('error', errorHandler);\n player.on('dispose', cleanupEvents); // Overwrite the plugin function so that we can correctly cleanup before\n // initializing the plugin\n\n player.reloadSourceOnError = reinitPlugin;\n};\n/**\n * Reload the source when an error is detected as long as there\n * wasn't an error previously within the last 30 seconds\n *\n * @param {Object} [options] an object with plugin options\n */\n\nconst reloadSourceOnError = function (options) {\n initPlugin(this, options);\n};\nvar version$4 = \"3.10.0\";\nvar version$3 = \"7.0.2\";\nvar version$2 = \"1.3.0\";\nvar version$1 = \"7.1.0\";\nvar version = \"4.0.1\";\n\n/**\n * @file videojs-http-streaming.js\n *\n * The main file for the VHS project.\n * License: https://github.com/videojs/videojs-http-streaming/blob/main/LICENSE\n */\nconst Vhs = {\n PlaylistLoader,\n Playlist,\n utils,\n STANDARD_PLAYLIST_SELECTOR: lastBandwidthSelector,\n INITIAL_PLAYLIST_SELECTOR: lowestBitrateCompatibleVariantSelector,\n lastBandwidthSelector,\n movingAverageBandwidthSelector,\n comparePlaylistBandwidth,\n comparePlaylistResolution,\n xhr: xhrFactory()\n}; // Define getter/setters for config properties\n\nObject.keys(Config).forEach(prop => {\n Object.defineProperty(Vhs, prop, {\n get() {\n videojs.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`);\n return Config[prop];\n },\n set(value) {\n videojs.log.warn(`using Vhs.${prop} is UNSAFE be sure you know what you are doing`);\n if (typeof value !== 'number' || value < 0) {\n videojs.log.warn(`value of Vhs.${prop} must be greater than or equal to 0`);\n return;\n }\n Config[prop] = value;\n }\n });\n});\nconst LOCAL_STORAGE_KEY = 'videojs-vhs';\n/**\n * Updates the selectedIndex of the QualityLevelList when a mediachange happens in vhs.\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to update.\n * @param {PlaylistLoader} playlistLoader PlaylistLoader containing the new media info.\n * @function handleVhsMediaChange\n */\n\nconst handleVhsMediaChange = function (qualityLevels, playlistLoader) {\n const newPlaylist = playlistLoader.media();\n let selectedIndex = -1;\n for (let i = 0; i < qualityLevels.length; i++) {\n if (qualityLevels[i].id === newPlaylist.id) {\n selectedIndex = i;\n break;\n }\n }\n qualityLevels.selectedIndex_ = selectedIndex;\n qualityLevels.trigger({\n selectedIndex,\n type: 'change'\n });\n};\n/**\n * Adds quality levels to list once playlist metadata is available\n *\n * @param {QualityLevelList} qualityLevels The QualityLevelList to attach events to.\n * @param {Object} vhs Vhs object to listen to for media events.\n * @function handleVhsLoadedMetadata\n */\n\nconst handleVhsLoadedMetadata = function (qualityLevels, vhs) {\n vhs.representations().forEach(rep => {\n qualityLevels.addQualityLevel(rep);\n });\n handleVhsMediaChange(qualityLevels, vhs.playlists);\n}; // VHS is a source handler, not a tech. Make sure attempts to use it\n// as one do not cause exceptions.\n\nVhs.canPlaySource = function () {\n return videojs.log.warn('VHS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\nconst emeKeySystems = (keySystemOptions, mainPlaylist, audioPlaylist) => {\n if (!keySystemOptions) {\n return keySystemOptions;\n }\n let codecs = {};\n if (mainPlaylist && mainPlaylist.attributes && mainPlaylist.attributes.CODECS) {\n codecs = unwrapCodecList(parseCodecs(mainPlaylist.attributes.CODECS));\n }\n if (audioPlaylist && audioPlaylist.attributes && audioPlaylist.attributes.CODECS) {\n codecs.audio = audioPlaylist.attributes.CODECS;\n }\n const videoContentType = getMimeForCodec(codecs.video);\n const audioContentType = getMimeForCodec(codecs.audio); // upsert the content types based on the selected playlist\n\n const keySystemContentTypes = {};\n for (const keySystem in keySystemOptions) {\n keySystemContentTypes[keySystem] = {};\n if (audioContentType) {\n keySystemContentTypes[keySystem].audioContentType = audioContentType;\n }\n if (videoContentType) {\n keySystemContentTypes[keySystem].videoContentType = videoContentType;\n } // Default to using the video playlist's PSSH even though they may be different, as\n // videojs-contrib-eme will only accept one in the options.\n //\n // This shouldn't be an issue for most cases as early intialization will handle all\n // unique PSSH values, and if they aren't, then encrypted events should have the\n // specific information needed for the unique license.\n\n if (mainPlaylist.contentProtection && mainPlaylist.contentProtection[keySystem] && mainPlaylist.contentProtection[keySystem].pssh) {\n keySystemContentTypes[keySystem].pssh = mainPlaylist.contentProtection[keySystem].pssh;\n } // videojs-contrib-eme accepts the option of specifying: 'com.some.cdm': 'url'\n // so we need to prevent overwriting the URL entirely\n\n if (typeof keySystemOptions[keySystem] === 'string') {\n keySystemContentTypes[keySystem].url = keySystemOptions[keySystem];\n }\n }\n return merge(keySystemOptions, keySystemContentTypes);\n};\n/**\n * @typedef {Object} KeySystems\n *\n * keySystems configuration for https://github.com/videojs/videojs-contrib-eme\n * Note: not all options are listed here.\n *\n * @property {Uint8Array} [pssh]\n * Protection System Specific Header\n */\n\n/**\n * Goes through all the playlists and collects an array of KeySystems options objects\n * containing each playlist's keySystems and their pssh values, if available.\n *\n * @param {Object[]} playlists\n * The playlists to look through\n * @param {string[]} keySystems\n * The keySystems to collect pssh values for\n *\n * @return {KeySystems[]}\n * An array of KeySystems objects containing available key systems and their\n * pssh values\n */\n\nconst getAllPsshKeySystemsOptions = (playlists, keySystems) => {\n return playlists.reduce((keySystemsArr, playlist) => {\n if (!playlist.contentProtection) {\n return keySystemsArr;\n }\n const keySystemsOptions = keySystems.reduce((keySystemsObj, keySystem) => {\n const keySystemOptions = playlist.contentProtection[keySystem];\n if (keySystemOptions && keySystemOptions.pssh) {\n keySystemsObj[keySystem] = {\n pssh: keySystemOptions.pssh\n };\n }\n return keySystemsObj;\n }, {});\n if (Object.keys(keySystemsOptions).length) {\n keySystemsArr.push(keySystemsOptions);\n }\n return keySystemsArr;\n }, []);\n};\n/**\n * Returns a promise that waits for the\n * [eme plugin](https://github.com/videojs/videojs-contrib-eme) to create a key session.\n *\n * Works around https://bugs.chromium.org/p/chromium/issues/detail?id=895449 in non-IE11\n * browsers.\n *\n * As per the above ticket, this is particularly important for Chrome, where, if\n * unencrypted content is appended before encrypted content and the key session has not\n * been created, a MEDIA_ERR_DECODE will be thrown once the encrypted content is reached\n * during playback.\n *\n * @param {Object} player\n * The player instance\n * @param {Object[]} sourceKeySystems\n * The key systems options from the player source\n * @param {Object} [audioMedia]\n * The active audio media playlist (optional)\n * @param {Object[]} mainPlaylists\n * The playlists found on the main playlist object\n *\n * @return {Object}\n * Promise that resolves when the key session has been created\n */\n\nconst waitForKeySessionCreation = ({\n player,\n sourceKeySystems,\n audioMedia,\n mainPlaylists\n}) => {\n if (!player.eme.initializeMediaKeys) {\n return Promise.resolve();\n } // TODO should all audio PSSH values be initialized for DRM?\n //\n // All unique video rendition pssh values are initialized for DRM, but here only\n // the initial audio playlist license is initialized. In theory, an encrypted\n // event should be fired if the user switches to an alternative audio playlist\n // where a license is required, but this case hasn't yet been tested. In addition, there\n // may be many alternate audio playlists unlikely to be used (e.g., multiple different\n // languages).\n\n const playlists = audioMedia ? mainPlaylists.concat([audioMedia]) : mainPlaylists;\n const keySystemsOptionsArr = getAllPsshKeySystemsOptions(playlists, Object.keys(sourceKeySystems));\n const initializationFinishedPromises = [];\n const keySessionCreatedPromises = []; // Since PSSH values are interpreted as initData, EME will dedupe any duplicates. The\n // only place where it should not be deduped is for ms-prefixed APIs, but\n // the existence of modern EME APIs in addition to\n // ms-prefixed APIs on Edge should prevent this from being a concern.\n // initializeMediaKeys also won't use the webkit-prefixed APIs.\n\n keySystemsOptionsArr.forEach(keySystemsOptions => {\n keySessionCreatedPromises.push(new Promise((resolve, reject) => {\n player.tech_.one('keysessioncreated', resolve);\n }));\n initializationFinishedPromises.push(new Promise((resolve, reject) => {\n player.eme.initializeMediaKeys({\n keySystems: keySystemsOptions\n }, err => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n });\n }));\n }); // The reasons Promise.race is chosen over Promise.any:\n //\n // * Promise.any is only available in Safari 14+.\n // * None of these promises are expected to reject. If they do reject, it might be\n // better here for the race to surface the rejection, rather than mask it by using\n // Promise.any.\n\n return Promise.race([\n // If a session was previously created, these will all finish resolving without\n // creating a new session, otherwise it will take until the end of all license\n // requests, which is why the key session check is used (to make setup much faster).\n Promise.all(initializationFinishedPromises),\n // Once a single session is created, the browser knows DRM will be used.\n Promise.race(keySessionCreatedPromises)]);\n};\n/**\n * If the [eme](https://github.com/videojs/videojs-contrib-eme) plugin is available, and\n * there are keySystems on the source, sets up source options to prepare the source for\n * eme.\n *\n * @param {Object} player\n * The player instance\n * @param {Object[]} sourceKeySystems\n * The key systems options from the player source\n * @param {Object} media\n * The active media playlist\n * @param {Object} [audioMedia]\n * The active audio media playlist (optional)\n *\n * @return {boolean}\n * Whether or not options were configured and EME is available\n */\n\nconst setupEmeOptions = ({\n player,\n sourceKeySystems,\n media,\n audioMedia\n}) => {\n const sourceOptions = emeKeySystems(sourceKeySystems, media, audioMedia);\n if (!sourceOptions) {\n return false;\n }\n player.currentSource().keySystems = sourceOptions; // eme handles the rest of the setup, so if it is missing\n // do nothing.\n\n if (sourceOptions && !player.eme) {\n videojs.log.warn('DRM encrypted source cannot be decrypted without a DRM plugin');\n return false;\n }\n return true;\n};\nconst getVhsLocalStorage = () => {\n if (!window$1.localStorage) {\n return null;\n }\n const storedObject = window$1.localStorage.getItem(LOCAL_STORAGE_KEY);\n if (!storedObject) {\n return null;\n }\n try {\n return JSON.parse(storedObject);\n } catch (e) {\n // someone may have tampered with the value\n return null;\n }\n};\nconst updateVhsLocalStorage = options => {\n if (!window$1.localStorage) {\n return false;\n }\n let objectToStore = getVhsLocalStorage();\n objectToStore = objectToStore ? merge(objectToStore, options) : options;\n try {\n window$1.localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(objectToStore));\n } catch (e) {\n // Throws if storage is full (e.g., always on iOS 5+ Safari private mode, where\n // storage is set to 0).\n // https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem#Exceptions\n // No need to perform any operation.\n return false;\n }\n return objectToStore;\n};\n/**\n * Parses VHS-supported media types from data URIs. See\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n * for information on data URIs.\n *\n * @param {string} dataUri\n * The data URI\n *\n * @return {string|Object}\n * The parsed object/string, or the original string if no supported media type\n * was found\n */\n\nconst expandDataUri = dataUri => {\n if (dataUri.toLowerCase().indexOf('data:application/vnd.videojs.vhs+json,') === 0) {\n return JSON.parse(dataUri.substring(dataUri.indexOf(',') + 1));\n } // no known case for this data URI, return the string as-is\n\n return dataUri;\n};\n/**\n * Adds a request hook to an xhr object\n *\n * @param {Object} xhr object to add the onRequest hook to\n * @param {function} callback hook function for an xhr request\n */\n\nconst addOnRequestHook = (xhr, callback) => {\n if (!xhr._requestCallbackSet) {\n xhr._requestCallbackSet = new Set();\n }\n xhr._requestCallbackSet.add(callback);\n};\n/**\n * Adds a response hook to an xhr object\n *\n * @param {Object} xhr object to add the onResponse hook to\n * @param {function} callback hook function for an xhr response\n */\n\nconst addOnResponseHook = (xhr, callback) => {\n if (!xhr._responseCallbackSet) {\n xhr._responseCallbackSet = new Set();\n }\n xhr._responseCallbackSet.add(callback);\n};\n/**\n * Removes a request hook on an xhr object, deletes the onRequest set if empty.\n *\n * @param {Object} xhr object to remove the onRequest hook from\n * @param {function} callback hook function to remove\n */\n\nconst removeOnRequestHook = (xhr, callback) => {\n if (!xhr._requestCallbackSet) {\n return;\n }\n xhr._requestCallbackSet.delete(callback);\n if (!xhr._requestCallbackSet.size) {\n delete xhr._requestCallbackSet;\n }\n};\n/**\n * Removes a response hook on an xhr object, deletes the onResponse set if empty.\n *\n * @param {Object} xhr object to remove the onResponse hook from\n * @param {function} callback hook function to remove\n */\n\nconst removeOnResponseHook = (xhr, callback) => {\n if (!xhr._responseCallbackSet) {\n return;\n }\n xhr._responseCallbackSet.delete(callback);\n if (!xhr._responseCallbackSet.size) {\n delete xhr._responseCallbackSet;\n }\n};\n/**\n * Whether the browser has built-in HLS support.\n */\n\nVhs.supportsNativeHls = function () {\n if (!document || !document.createElement) {\n return false;\n }\n const video = document.createElement('video'); // native HLS is definitely not supported if HTML5 video isn't\n\n if (!videojs.getTech('Html5').isSupported()) {\n return false;\n } // HLS manifests can go by many mime-types\n\n const canPlay = [\n // Apple santioned\n 'application/vnd.apple.mpegurl',\n // Apple sanctioned for backwards compatibility\n 'audio/mpegurl',\n // Very common\n 'audio/x-mpegurl',\n // Very common\n 'application/x-mpegurl',\n // Included for completeness\n 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl'];\n return canPlay.some(function (canItPlay) {\n return /maybe|probably/i.test(video.canPlayType(canItPlay));\n });\n}();\nVhs.supportsNativeDash = function () {\n if (!document || !document.createElement || !videojs.getTech('Html5').isSupported()) {\n return false;\n }\n return /maybe|probably/i.test(document.createElement('video').canPlayType('application/dash+xml'));\n}();\nVhs.supportsTypeNatively = type => {\n if (type === 'hls') {\n return Vhs.supportsNativeHls;\n }\n if (type === 'dash') {\n return Vhs.supportsNativeDash;\n }\n return false;\n};\n/**\n * VHS is a source handler, not a tech. Make sure attempts to use it\n * as one do not cause exceptions.\n */\n\nVhs.isSupported = function () {\n return videojs.log.warn('VHS is no longer a tech. Please remove it from ' + 'your player\\'s techOrder.');\n};\n/**\n * A global function for setting an onRequest hook\n *\n * @param {function} callback for request modifiction\n */\n\nVhs.xhr.onRequest = function (callback) {\n addOnRequestHook(Vhs.xhr, callback);\n};\n/**\n * A global function for setting an onResponse hook\n *\n * @param {callback} callback for response data retrieval\n */\n\nVhs.xhr.onResponse = function (callback) {\n addOnResponseHook(Vhs.xhr, callback);\n};\n/**\n * Deletes a global onRequest callback if it exists\n *\n * @param {function} callback to delete from the global set\n */\n\nVhs.xhr.offRequest = function (callback) {\n removeOnRequestHook(Vhs.xhr, callback);\n};\n/**\n * Deletes a global onResponse callback if it exists\n *\n * @param {function} callback to delete from the global set\n */\n\nVhs.xhr.offResponse = function (callback) {\n removeOnResponseHook(Vhs.xhr, callback);\n};\nconst Component = videojs.getComponent('Component');\n/**\n * The Vhs Handler object, where we orchestrate all of the parts\n * of VHS to interact with video.js\n *\n * @class VhsHandler\n * @extends videojs.Component\n * @param {Object} source the soruce object\n * @param {Tech} tech the parent tech object\n * @param {Object} options optional and required options\n */\n\nclass VhsHandler extends Component {\n constructor(source, tech, options) {\n super(tech, options.vhs); // if a tech level `initialBandwidth` option was passed\n // use that over the VHS level `bandwidth` option\n\n if (typeof options.initialBandwidth === 'number') {\n this.options_.bandwidth = options.initialBandwidth;\n }\n this.logger_ = logger('VhsHandler'); // we need access to the player in some cases,\n // so, get it from Video.js via the `playerId`\n\n if (tech.options_ && tech.options_.playerId) {\n const _player = videojs.getPlayer(tech.options_.playerId);\n this.player_ = _player;\n }\n this.tech_ = tech;\n this.source_ = source;\n this.stats = {};\n this.ignoreNextSeekingEvent_ = false;\n this.setOptions_();\n if (this.options_.overrideNative && tech.overrideNativeAudioTracks && tech.overrideNativeVideoTracks) {\n tech.overrideNativeAudioTracks(true);\n tech.overrideNativeVideoTracks(true);\n } else if (this.options_.overrideNative && (tech.featuresNativeVideoTracks || tech.featuresNativeAudioTracks)) {\n // overriding native VHS only works if audio tracks have been emulated\n // error early if we're misconfigured\n throw new Error('Overriding native VHS requires emulated tracks. ' + 'See https://git.io/vMpjB');\n } // listen for fullscreenchange events for this player so that we\n // can adjust our quality selection quickly\n\n this.on(document, ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], event => {\n const fullscreenElement = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement;\n if (fullscreenElement && fullscreenElement.contains(this.tech_.el())) {\n this.playlistController_.fastQualityChange_();\n } else {\n // When leaving fullscreen, since the in page pixel dimensions should be smaller\n // than full screen, see if there should be a rendition switch down to preserve\n // bandwidth.\n this.playlistController_.checkABR_();\n }\n });\n this.on(this.tech_, 'seeking', function () {\n if (this.ignoreNextSeekingEvent_) {\n this.ignoreNextSeekingEvent_ = false;\n return;\n }\n this.setCurrentTime(this.tech_.currentTime());\n });\n this.on(this.tech_, 'error', function () {\n // verify that the error was real and we are loaded\n // enough to have pc loaded.\n if (this.tech_.error() && this.playlistController_) {\n this.playlistController_.pauseLoading();\n }\n });\n this.on(this.tech_, 'play', this.play);\n }\n /**\n * Set VHS options based on options from configuration, as well as partial\n * options to be passed at a later time.\n *\n * @param {Object} options A partial chunk of config options\n */\n\n setOptions_(options = {}) {\n this.options_ = merge(this.options_, options); // defaults\n\n this.options_.withCredentials = this.options_.withCredentials || false;\n this.options_.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions === false ? false : true;\n this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || false;\n this.options_.useBandwidthFromLocalStorage = typeof this.source_.useBandwidthFromLocalStorage !== 'undefined' ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || false;\n this.options_.useForcedSubtitles = this.options_.useForcedSubtitles || false;\n this.options_.useNetworkInformationApi = this.options_.useNetworkInformationApi || false;\n this.options_.useDtsForTimestampOffset = this.options_.useDtsForTimestampOffset || false;\n this.options_.customTagParsers = this.options_.customTagParsers || [];\n this.options_.customTagMappers = this.options_.customTagMappers || [];\n this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || false;\n this.options_.llhls = this.options_.llhls === false ? false : true;\n this.options_.bufferBasedABR = this.options_.bufferBasedABR || false;\n if (typeof this.options_.playlistExclusionDuration !== 'number') {\n this.options_.playlistExclusionDuration = 60;\n }\n if (typeof this.options_.bandwidth !== 'number') {\n if (this.options_.useBandwidthFromLocalStorage) {\n const storedObject = getVhsLocalStorage();\n if (storedObject && storedObject.bandwidth) {\n this.options_.bandwidth = storedObject.bandwidth;\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-bandwidth-from-local-storage'\n });\n }\n if (storedObject && storedObject.throughput) {\n this.options_.throughput = storedObject.throughput;\n this.tech_.trigger({\n type: 'usage',\n name: 'vhs-throughput-from-local-storage'\n });\n }\n }\n } // if bandwidth was not set by options or pulled from local storage, start playlist\n // selection at a reasonable bandwidth\n\n if (typeof this.options_.bandwidth !== 'number') {\n this.options_.bandwidth = Config.INITIAL_BANDWIDTH;\n } // If the bandwidth number is unchanged from the initial setting\n // then this takes precedence over the enableLowInitialPlaylist option\n\n this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === Config.INITIAL_BANDWIDTH; // grab options passed to player.src\n\n ['withCredentials', 'useDevicePixelRatio', 'limitRenditionByPlayerDimensions', 'bandwidth', 'customTagParsers', 'customTagMappers', 'cacheEncryptionKeys', 'playlistSelector', 'initialPlaylistSelector', 'bufferBasedABR', 'liveRangeSafeTimeDelta', 'llhls', 'useForcedSubtitles', 'useNetworkInformationApi', 'useDtsForTimestampOffset', 'exactManifestTimings', 'leastPixelDiffSelector'].forEach(option => {\n if (typeof this.source_[option] !== 'undefined') {\n this.options_[option] = this.source_[option];\n }\n });\n this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions;\n this.useDevicePixelRatio = this.options_.useDevicePixelRatio;\n } // alias for public method to set options\n\n setOptions(options = {}) {\n this.setOptions_(options);\n }\n /**\n * called when player.src gets called, handle a new source\n *\n * @param {Object} src the source object to handle\n */\n\n src(src, type) {\n // do nothing if the src is falsey\n if (!src) {\n return;\n }\n this.setOptions_(); // add main playlist controller options\n\n this.options_.src = expandDataUri(this.source_.src);\n this.options_.tech = this.tech_;\n this.options_.externVhs = Vhs;\n this.options_.sourceType = simpleTypeFromSourceType(type); // Whenever we seek internally, we should update the tech\n\n this.options_.seekTo = time => {\n this.tech_.setCurrentTime(time);\n };\n this.playlistController_ = new PlaylistController(this.options_);\n const playbackWatcherOptions = merge({\n liveRangeSafeTimeDelta: SAFE_TIME_DELTA\n }, this.options_, {\n seekable: () => this.seekable(),\n media: () => this.playlistController_.media(),\n playlistController: this.playlistController_\n });\n this.playbackWatcher_ = new PlaybackWatcher(playbackWatcherOptions);\n this.playlistController_.on('error', () => {\n const player = videojs.players[this.tech_.options_.playerId];\n let error = this.playlistController_.error;\n if (typeof error === 'object' && !error.code) {\n error.code = 3;\n } else if (typeof error === 'string') {\n error = {\n message: error,\n code: 3\n };\n }\n player.error(error);\n });\n const defaultSelector = this.options_.bufferBasedABR ? Vhs.movingAverageBandwidthSelector(0.55) : Vhs.STANDARD_PLAYLIST_SELECTOR; // `this` in selectPlaylist should be the VhsHandler for backwards\n // compatibility with < v2\n\n this.playlistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : defaultSelector.bind(this);\n this.playlistController_.selectInitialPlaylist = Vhs.INITIAL_PLAYLIST_SELECTOR.bind(this); // re-expose some internal objects for backwards compatibility with < v2\n\n this.playlists = this.playlistController_.mainPlaylistLoader_;\n this.mediaSource = this.playlistController_.mediaSource; // Proxy assignment of some properties to the main playlist\n // controller. Using a custom property for backwards compatibility\n // with < v2\n\n Object.defineProperties(this, {\n selectPlaylist: {\n get() {\n return this.playlistController_.selectPlaylist;\n },\n set(selectPlaylist) {\n this.playlistController_.selectPlaylist = selectPlaylist.bind(this);\n }\n },\n throughput: {\n get() {\n return this.playlistController_.mainSegmentLoader_.throughput.rate;\n },\n set(throughput) {\n this.playlistController_.mainSegmentLoader_.throughput.rate = throughput; // By setting `count` to 1 the throughput value becomes the starting value\n // for the cumulative average\n\n this.playlistController_.mainSegmentLoader_.throughput.count = 1;\n }\n },\n bandwidth: {\n get() {\n let playerBandwidthEst = this.playlistController_.mainSegmentLoader_.bandwidth;\n const networkInformation = window$1.navigator.connection || window$1.navigator.mozConnection || window$1.navigator.webkitConnection;\n const tenMbpsAsBitsPerSecond = 10e6;\n if (this.options_.useNetworkInformationApi && networkInformation) {\n // downlink returns Mbps\n // https://developer.mozilla.org/en-US/docs/Web/API/NetworkInformation/downlink\n const networkInfoBandwidthEstBitsPerSec = networkInformation.downlink * 1000 * 1000; // downlink maxes out at 10 Mbps. In the event that both networkInformationApi and the player\n // estimate a bandwidth greater than 10 Mbps, use the larger of the two estimates to ensure that\n // high quality streams are not filtered out.\n\n if (networkInfoBandwidthEstBitsPerSec >= tenMbpsAsBitsPerSecond && playerBandwidthEst >= tenMbpsAsBitsPerSecond) {\n playerBandwidthEst = Math.max(playerBandwidthEst, networkInfoBandwidthEstBitsPerSec);\n } else {\n playerBandwidthEst = networkInfoBandwidthEstBitsPerSec;\n }\n }\n return playerBandwidthEst;\n },\n set(bandwidth) {\n this.playlistController_.mainSegmentLoader_.bandwidth = bandwidth; // setting the bandwidth manually resets the throughput counter\n // `count` is set to zero that current value of `rate` isn't included\n // in the cumulative average\n\n this.playlistController_.mainSegmentLoader_.throughput = {\n rate: 0,\n count: 0\n };\n }\n },\n /**\n * `systemBandwidth` is a combination of two serial processes bit-rates. The first\n * is the network bitrate provided by `bandwidth` and the second is the bitrate of\n * the entire process after that - decryption, transmuxing, and appending - provided\n * by `throughput`.\n *\n * Since the two process are serial, the overall system bandwidth is given by:\n * sysBandwidth = 1 / (1 / bandwidth + 1 / throughput)\n */\n systemBandwidth: {\n get() {\n const invBandwidth = 1 / (this.bandwidth || 1);\n let invThroughput;\n if (this.throughput > 0) {\n invThroughput = 1 / this.throughput;\n } else {\n invThroughput = 0;\n }\n const systemBitrate = Math.floor(1 / (invBandwidth + invThroughput));\n return systemBitrate;\n },\n set() {\n videojs.log.error('The \"systemBandwidth\" property is read-only');\n }\n }\n });\n if (this.options_.bandwidth) {\n this.bandwidth = this.options_.bandwidth;\n }\n if (this.options_.throughput) {\n this.throughput = this.options_.throughput;\n }\n Object.defineProperties(this.stats, {\n bandwidth: {\n get: () => this.bandwidth || 0,\n enumerable: true\n },\n mediaRequests: {\n get: () => this.playlistController_.mediaRequests_() || 0,\n enumerable: true\n },\n mediaRequestsAborted: {\n get: () => this.playlistController_.mediaRequestsAborted_() || 0,\n enumerable: true\n },\n mediaRequestsTimedout: {\n get: () => this.playlistController_.mediaRequestsTimedout_() || 0,\n enumerable: true\n },\n mediaRequestsErrored: {\n get: () => this.playlistController_.mediaRequestsErrored_() || 0,\n enumerable: true\n },\n mediaTransferDuration: {\n get: () => this.playlistController_.mediaTransferDuration_() || 0,\n enumerable: true\n },\n mediaBytesTransferred: {\n get: () => this.playlistController_.mediaBytesTransferred_() || 0,\n enumerable: true\n },\n mediaSecondsLoaded: {\n get: () => this.playlistController_.mediaSecondsLoaded_() || 0,\n enumerable: true\n },\n mediaAppends: {\n get: () => this.playlistController_.mediaAppends_() || 0,\n enumerable: true\n },\n mainAppendsToLoadedData: {\n get: () => this.playlistController_.mainAppendsToLoadedData_() || 0,\n enumerable: true\n },\n audioAppendsToLoadedData: {\n get: () => this.playlistController_.audioAppendsToLoadedData_() || 0,\n enumerable: true\n },\n appendsToLoadedData: {\n get: () => this.playlistController_.appendsToLoadedData_() || 0,\n enumerable: true\n },\n timeToLoadedData: {\n get: () => this.playlistController_.timeToLoadedData_() || 0,\n enumerable: true\n },\n buffered: {\n get: () => timeRangesToArray(this.tech_.buffered()),\n enumerable: true\n },\n currentTime: {\n get: () => this.tech_.currentTime(),\n enumerable: true\n },\n currentSource: {\n get: () => this.tech_.currentSource_,\n enumerable: true\n },\n currentTech: {\n get: () => this.tech_.name_,\n enumerable: true\n },\n duration: {\n get: () => this.tech_.duration(),\n enumerable: true\n },\n main: {\n get: () => this.playlists.main,\n enumerable: true\n },\n playerDimensions: {\n get: () => this.tech_.currentDimensions(),\n enumerable: true\n },\n seekable: {\n get: () => timeRangesToArray(this.tech_.seekable()),\n enumerable: true\n },\n timestamp: {\n get: () => Date.now(),\n enumerable: true\n },\n videoPlaybackQuality: {\n get: () => this.tech_.getVideoPlaybackQuality(),\n enumerable: true\n }\n });\n this.tech_.one('canplay', this.playlistController_.setupFirstPlay.bind(this.playlistController_));\n this.tech_.on('bandwidthupdate', () => {\n if (this.options_.useBandwidthFromLocalStorage) {\n updateVhsLocalStorage({\n bandwidth: this.bandwidth,\n throughput: Math.round(this.throughput)\n });\n }\n });\n this.playlistController_.on('selectedinitialmedia', () => {\n // Add the manual rendition mix-in to VhsHandler\n renditionSelectionMixin(this);\n });\n this.playlistController_.sourceUpdater_.on('createdsourcebuffers', () => {\n this.setupEme_();\n }); // the bandwidth of the primary segment loader is our best\n // estimate of overall bandwidth\n\n this.on(this.playlistController_, 'progress', function () {\n this.tech_.trigger('progress');\n }); // In the live case, we need to ignore the very first `seeking` event since\n // that will be the result of the seek-to-live behavior\n\n this.on(this.playlistController_, 'firstplay', function () {\n this.ignoreNextSeekingEvent_ = true;\n });\n this.setupQualityLevels_(); // do nothing if the tech has been disposed already\n // this can occur if someone sets the src in player.ready(), for instance\n\n if (!this.tech_.el()) {\n return;\n }\n this.mediaSourceUrl_ = window$1.URL.createObjectURL(this.playlistController_.mediaSource);\n this.tech_.src(this.mediaSourceUrl_);\n }\n createKeySessions_() {\n const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader;\n this.logger_('waiting for EME key session creation');\n waitForKeySessionCreation({\n player: this.player_,\n sourceKeySystems: this.source_.keySystems,\n audioMedia: audioPlaylistLoader && audioPlaylistLoader.media(),\n mainPlaylists: this.playlists.main.playlists\n }).then(() => {\n this.logger_('created EME key session');\n this.playlistController_.sourceUpdater_.initializedEme();\n }).catch(err => {\n this.logger_('error while creating EME key session', err);\n this.player_.error({\n message: 'Failed to initialize media keys for EME',\n code: 3\n });\n });\n }\n handleWaitingForKey_() {\n // If waitingforkey is fired, it's possible that the data that's necessary to retrieve\n // the key is in the manifest. While this should've happened on initial source load, it\n // may happen again in live streams where the keys change, and the manifest info\n // reflects the update.\n //\n // Because videojs-contrib-eme compares the PSSH data we send to that of PSSH data it's\n // already requested keys for, we don't have to worry about this generating extraneous\n // requests.\n this.logger_('waitingforkey fired, attempting to create any new key sessions');\n this.createKeySessions_();\n }\n /**\n * If necessary and EME is available, sets up EME options and waits for key session\n * creation.\n *\n * This function also updates the source updater so taht it can be used, as for some\n * browsers, EME must be configured before content is appended (if appending unencrypted\n * content before encrypted content).\n */\n\n setupEme_() {\n const audioPlaylistLoader = this.playlistController_.mediaTypes_.AUDIO.activePlaylistLoader;\n const didSetupEmeOptions = setupEmeOptions({\n player: this.player_,\n sourceKeySystems: this.source_.keySystems,\n media: this.playlists.media(),\n audioMedia: audioPlaylistLoader && audioPlaylistLoader.media()\n });\n this.player_.tech_.on('keystatuschange', e => {\n this.playlistController_.updatePlaylistByKeyStatus(e.keyId, e.status);\n });\n this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this);\n this.player_.tech_.on('waitingforkey', this.handleWaitingForKey_);\n if (!didSetupEmeOptions) {\n // If EME options were not set up, we've done all we could to initialize EME.\n this.playlistController_.sourceUpdater_.initializedEme();\n return;\n }\n this.createKeySessions_();\n }\n /**\n * Initializes the quality levels and sets listeners to update them.\n *\n * @method setupQualityLevels_\n * @private\n */\n\n setupQualityLevels_() {\n const player = videojs.players[this.tech_.options_.playerId]; // if there isn't a player or there isn't a qualityLevels plugin\n // or qualityLevels_ listeners have already been setup, do nothing.\n\n if (!player || !player.qualityLevels || this.qualityLevels_) {\n return;\n }\n this.qualityLevels_ = player.qualityLevels();\n this.playlistController_.on('selectedinitialmedia', () => {\n handleVhsLoadedMetadata(this.qualityLevels_, this);\n });\n this.playlists.on('mediachange', () => {\n handleVhsMediaChange(this.qualityLevels_, this.playlists);\n });\n }\n /**\n * return the version\n */\n\n static version() {\n return {\n '@videojs/http-streaming': version$4,\n 'mux.js': version$3,\n 'mpd-parser': version$2,\n 'm3u8-parser': version$1,\n 'aes-decrypter': version\n };\n }\n /**\n * return the version\n */\n\n version() {\n return this.constructor.version();\n }\n canChangeType() {\n return SourceUpdater.canChangeType();\n }\n /**\n * Begin playing the video.\n */\n\n play() {\n this.playlistController_.play();\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n setCurrentTime(currentTime) {\n this.playlistController_.setCurrentTime(currentTime);\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n duration() {\n return this.playlistController_.duration();\n }\n /**\n * a wrapper around the function in PlaylistController\n */\n\n seekable() {\n return this.playlistController_.seekable();\n }\n /**\n * Abort all outstanding work and cleanup.\n */\n\n dispose() {\n if (this.playbackWatcher_) {\n this.playbackWatcher_.dispose();\n }\n if (this.playlistController_) {\n this.playlistController_.dispose();\n }\n if (this.qualityLevels_) {\n this.qualityLevels_.dispose();\n }\n if (this.tech_ && this.tech_.vhs) {\n delete this.tech_.vhs;\n }\n if (this.mediaSourceUrl_ && window$1.URL.revokeObjectURL) {\n window$1.URL.revokeObjectURL(this.mediaSourceUrl_);\n this.mediaSourceUrl_ = null;\n }\n if (this.tech_) {\n this.tech_.off('waitingforkey', this.handleWaitingForKey_);\n }\n super.dispose();\n }\n convertToProgramTime(time, callback) {\n return getProgramTime({\n playlist: this.playlistController_.media(),\n time,\n callback\n });\n } // the player must be playing before calling this\n\n seekToProgramTime(programTime, callback, pauseAfterSeek = true, retryCount = 2) {\n return seekToProgramTime({\n programTime,\n playlist: this.playlistController_.media(),\n retryCount,\n pauseAfterSeek,\n seekTo: this.options_.seekTo,\n tech: this.options_.tech,\n callback\n });\n }\n /**\n * Adds the onRequest, onResponse, offRequest and offResponse functions\n * to the VhsHandler xhr Object.\n */\n\n setupXhrHooks_() {\n /**\n * A player function for setting an onRequest hook\n *\n * @param {function} callback for request modifiction\n */\n this.xhr.onRequest = callback => {\n addOnRequestHook(this.xhr, callback);\n };\n /**\n * A player function for setting an onResponse hook\n *\n * @param {callback} callback for response data retrieval\n */\n\n this.xhr.onResponse = callback => {\n addOnResponseHook(this.xhr, callback);\n };\n /**\n * Deletes a player onRequest callback if it exists\n *\n * @param {function} callback to delete from the player set\n */\n\n this.xhr.offRequest = callback => {\n removeOnRequestHook(this.xhr, callback);\n };\n /**\n * Deletes a player onResponse callback if it exists\n *\n * @param {function} callback to delete from the player set\n */\n\n this.xhr.offResponse = callback => {\n removeOnResponseHook(this.xhr, callback);\n }; // Trigger an event on the player to notify the user that vhs is ready to set xhr hooks.\n // This allows hooks to be set before the source is set to vhs when handleSource is called.\n\n this.player_.trigger('xhr-hooks-ready');\n }\n}\n/**\n * The Source Handler object, which informs video.js what additional\n * MIME types are supported and sets up playback. It is registered\n * automatically to the appropriate tech based on the capabilities of\n * the browser it is running in. It is not necessary to use or modify\n * this object in normal usage.\n */\n\nconst VhsSourceHandler = {\n name: 'videojs-http-streaming',\n VERSION: version$4,\n canHandleSource(srcObj, options = {}) {\n const localOptions = merge(videojs.options, options);\n return VhsSourceHandler.canPlayType(srcObj.type, localOptions);\n },\n handleSource(source, tech, options = {}) {\n const localOptions = merge(videojs.options, options);\n tech.vhs = new VhsHandler(source, tech, localOptions);\n tech.vhs.xhr = xhrFactory();\n tech.vhs.setupXhrHooks_();\n tech.vhs.src(source.src, source.type);\n return tech.vhs;\n },\n canPlayType(type, options) {\n const simpleType = simpleTypeFromSourceType(type);\n if (!simpleType) {\n return '';\n }\n const overrideNative = VhsSourceHandler.getOverrideNative(options);\n const supportsTypeNatively = Vhs.supportsTypeNatively(simpleType);\n const canUseMsePlayback = !supportsTypeNatively || overrideNative;\n return canUseMsePlayback ? 'maybe' : '';\n },\n getOverrideNative(options = {}) {\n const {\n vhs = {}\n } = options;\n const defaultOverrideNative = !(videojs.browser.IS_ANY_SAFARI || videojs.browser.IS_IOS);\n const {\n overrideNative = defaultOverrideNative\n } = vhs;\n return overrideNative;\n }\n};\n/**\n * Check to see if the native MediaSource object exists and supports\n * an MP4 container with both H.264 video and AAC-LC audio.\n *\n * @return {boolean} if native media sources are supported\n */\n\nconst supportsNativeMediaSources = () => {\n return browserSupportsCodec('avc1.4d400d,mp4a.40.2');\n}; // register source handlers with the appropriate techs\n\nif (supportsNativeMediaSources()) {\n videojs.getTech('Html5').registerSourceHandler(VhsSourceHandler, 0);\n}\nvideojs.VhsHandler = VhsHandler;\nvideojs.VhsSourceHandler = VhsSourceHandler;\nvideojs.Vhs = Vhs;\nif (!videojs.use) {\n videojs.registerComponent('Vhs', Vhs);\n}\nvideojs.options.vhs = videojs.options.vhs || {};\nif (!videojs.getPlugin || !videojs.getPlugin('reloadSourceOnError')) {\n videojs.registerPlugin('reloadSourceOnError', reloadSourceOnError);\n}\n\nexport { videojs as default };\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Default exports for Node. Export the extended versions of VTTCue and\n// VTTRegion in Node since we likely want the capability to convert back and\n// forth between JSON. If we don't then it's not that big of a deal since we're\n// off browser.\n\nvar window = require('global/window');\n\nvar vttjs = module.exports = {\n WebVTT: require(\"./vtt.js\"),\n VTTCue: require(\"./vttcue.js\"),\n VTTRegion: require(\"./vttregion.js\")\n};\n\nwindow.vttjs = vttjs;\nwindow.WebVTT = vttjs.WebVTT;\n\nvar cueShim = vttjs.VTTCue;\nvar regionShim = vttjs.VTTRegion;\nvar nativeVTTCue = window.VTTCue;\nvar nativeVTTRegion = window.VTTRegion;\n\nvttjs.shim = function() {\n window.VTTCue = cueShim;\n window.VTTRegion = regionShim;\n};\n\nvttjs.restore = function() {\n window.VTTCue = nativeVTTCue;\n window.VTTRegion = nativeVTTRegion;\n};\n\nif (!window.VTTCue) {\n vttjs.shim();\n}\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */\n/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */\nvar document = require('global/document');\n\nvar _objCreate = Object.create || (function() {\n function F() {}\n return function(o) {\n if (arguments.length !== 1) {\n throw new Error('Object.create shim only accepts one parameter.');\n }\n F.prototype = o;\n return new F();\n };\n})();\n\n// Creates a new ParserError object from an errorData object. The errorData\n// object should have default code and message properties. The default message\n// property can be overriden by passing in a message parameter.\n// See ParsingError.Errors below for acceptable errors.\nfunction ParsingError(errorData, message) {\n this.name = \"ParsingError\";\n this.code = errorData.code;\n this.message = message || errorData.message;\n}\nParsingError.prototype = _objCreate(Error.prototype);\nParsingError.prototype.constructor = ParsingError;\n\n// ParsingError metadata for acceptable ParsingErrors.\nParsingError.Errors = {\n BadSignature: {\n code: 0,\n message: \"Malformed WebVTT signature.\"\n },\n BadTimeStamp: {\n code: 1,\n message: \"Malformed time stamp.\"\n }\n};\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + (f | 0) / 1000;\n }\n\n var m = input.match(/^(\\d+):(\\d{1,2})(:\\d{1,2})?\\.(\\d{3})/);\n if (!m) {\n return null;\n }\n\n if (m[3]) {\n // Timestamp takes the form of [hours]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3].replace(\":\", \"\"), m[4]);\n } else if (m[1] > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[1], m[2], 0, m[4]);\n } else {\n // Timestamp takes the form of [minutes]:[seconds].[milliseconds]\n return computeSeconds(0, m[1], m[2], m[4]);\n }\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nfunction Settings() {\n this.values = _objCreate(null);\n}\n\nSettings.prototype = {\n // Only accept the first assignment to any key.\n set: function(k, v) {\n if (!this.get(k) && v !== \"\") {\n this.values[k] = v;\n }\n },\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get: function(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n },\n // Check whether we have a value for a key.\n has: function(k) {\n return k in this.values;\n },\n // Accept a setting if its one of the given alternatives.\n alt: function(k, v, a) {\n for (var n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n },\n // Accept a setting if its a valid (signed) integer.\n integer: function(k, v) {\n if (/^-?\\d+$/.test(v)) { // integer\n this.set(k, parseInt(v, 10));\n }\n },\n // Accept a setting if its a valid percentage.\n percent: function(k, v) {\n var m;\n if ((m = v.match(/^([\\d]{1,3})(\\.[\\d]*)?%$/))) {\n v = parseFloat(v);\n if (v >= 0 && v <= 100) {\n this.set(k, v);\n return true;\n }\n }\n return false;\n }\n};\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interprete each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n var groups = groupDelim ? input.split(groupDelim) : [input];\n for (var i in groups) {\n if (typeof groups[i] !== \"string\") {\n continue;\n }\n var kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n var k = kv[0].trim();\n var v = kv[1].trim();\n callback(k, v);\n }\n}\n\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n var oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n var ts = parseTimeStamp(input);\n if (ts === null) {\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed timestamp: \" + oInput);\n }\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, \"\");\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"region\":\n // Find the last region we parsed with the same region id.\n for (var i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case \"vertical\":\n settings.alt(k, v, [\"rl\", \"lr\"]);\n break;\n case \"line\":\n var vals = v.split(\",\"),\n vals0 = vals[0];\n settings.integer(k, vals0);\n settings.percent(k, vals0) ? settings.set(\"snapToLines\", false) : null;\n settings.alt(k, vals0, [\"auto\"]);\n if (vals.length === 2) {\n settings.alt(\"lineAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"position\":\n vals = v.split(\",\");\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt(\"positionAlign\", vals[1], [\"start\", \"center\", \"end\"]);\n }\n break;\n case \"size\":\n settings.percent(k, v);\n break;\n case \"align\":\n settings.alt(k, v, [\"start\", \"center\", \"end\", \"left\", \"right\"]);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get(\"region\", null);\n cue.vertical = settings.get(\"vertical\", \"\");\n try {\n cue.line = settings.get(\"line\", \"auto\");\n } catch (e) {}\n cue.lineAlign = settings.get(\"lineAlign\", \"start\");\n cue.snapToLines = settings.get(\"snapToLines\", true);\n cue.size = settings.get(\"size\", 100);\n // Safari still uses the old middle value and won't accept center\n try {\n cue.align = settings.get(\"align\", \"center\");\n } catch (e) {\n cue.align = settings.get(\"align\", \"middle\");\n }\n try {\n cue.position = settings.get(\"position\", \"auto\");\n } catch (e) {\n cue.position = settings.get(\"position\", {\n start: 0,\n left: 0,\n center: 50,\n middle: 50,\n end: 100,\n right: 100\n }, cue.align);\n }\n\n\n cue.positionAlign = settings.get(\"positionAlign\", {\n start: \"start\",\n left: \"start\",\n center: \"center\",\n middle: \"center\",\n end: \"end\",\n right: \"end\"\n }, cue.align);\n }\n\n function skipWhitespace() {\n input = input.replace(/^\\s+/, \"\");\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.substr(0, 3) !== \"-->\") { // (3) next characters must match \"-->\"\n throw new ParsingError(ParsingError.Errors.BadTimeStamp,\n \"Malformed time stamp (time stamps must be separated by '-->'): \" +\n oInput);\n }\n input = input.substr(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\n\n// When evaluating this file as part of a Webpack bundle for server\n// side rendering, `document` is an empty object.\nvar TEXTAREA_ELEMENT = document.createElement && document.createElement(\"textarea\");\n\nvar TAG_NAME = {\n c: \"span\",\n i: \"i\",\n b: \"b\",\n u: \"u\",\n ruby: \"ruby\",\n rt: \"rt\",\n v: \"span\",\n lang: \"span\"\n};\n\n// 5.1 default text color\n// 5.2 default text background color is equivalent to text color with bg_ prefix\nvar DEFAULT_COLOR_CLASS = {\n white: 'rgba(255,255,255,1)',\n lime: 'rgba(0,255,0,1)',\n cyan: 'rgba(0,255,255,1)',\n red: 'rgba(255,0,0,1)',\n yellow: 'rgba(255,255,0,1)',\n magenta: 'rgba(255,0,255,1)',\n blue: 'rgba(0,0,255,1)',\n black: 'rgba(0,0,0,1)'\n};\n\nvar TAG_ANNOTATION = {\n v: \"title\",\n lang: \"lang\"\n};\n\nvar NEEDS_PARENT = {\n rt: \"ruby\"\n};\n\n// Parse content into a document fragment.\nfunction parseContent(window, input) {\n function nextToken() {\n // Check for end-of-string.\n if (!input) {\n return null;\n }\n\n // Consume 'n' characters from the input.\n function consume(result) {\n input = input.substr(result.length);\n return result;\n }\n\n var m = input.match(/^([^<]*)(<[^>]*>?)?/);\n // If there is some text before the next tag, return it, otherwise return\n // the tag.\n return consume(m[1] ? m[1] : m[2]);\n }\n\n function unescape(s) {\n TEXTAREA_ELEMENT.innerHTML = s;\n s = TEXTAREA_ELEMENT.textContent;\n TEXTAREA_ELEMENT.textContent = \"\";\n return s;\n }\n\n function shouldAdd(current, element) {\n return !NEEDS_PARENT[element.localName] ||\n NEEDS_PARENT[element.localName] === current.localName;\n }\n\n // Create an element for this tag.\n function createElement(type, annotation) {\n var tagName = TAG_NAME[type];\n if (!tagName) {\n return null;\n }\n var element = window.document.createElement(tagName);\n var name = TAG_ANNOTATION[type];\n if (name && annotation) {\n element[name] = annotation.trim();\n }\n return element;\n }\n\n var rootDiv = window.document.createElement(\"div\"),\n current = rootDiv,\n t,\n tagStack = [];\n\n while ((t = nextToken()) !== null) {\n if (t[0] === '<') {\n if (t[1] === \"/\") {\n // If the closing tag matches, move back up to the parent node.\n if (tagStack.length &&\n tagStack[tagStack.length - 1] === t.substr(2).replace(\">\", \"\")) {\n tagStack.pop();\n current = current.parentNode;\n }\n // Otherwise just ignore the end tag.\n continue;\n }\n var ts = parseTimeStamp(t.substr(1, t.length - 2));\n var node;\n if (ts) {\n // Timestamps are lead nodes as well.\n node = window.document.createProcessingInstruction(\"timestamp\", ts);\n current.appendChild(node);\n continue;\n }\n var m = t.match(/^<([^.\\s/0-9>]+)(\\.[^\\s\\\\>]+)?([^>\\\\]+)?(\\\\?)>?$/);\n // If we can't parse the tag, skip to the next tag.\n if (!m) {\n continue;\n }\n // Try to construct an element, and ignore the tag if we couldn't.\n node = createElement(m[1], m[3]);\n if (!node) {\n continue;\n }\n // Determine if the tag should be added based on the context of where it\n // is placed in the cuetext.\n if (!shouldAdd(current, node)) {\n continue;\n }\n // Set the class list (as a list of classes, separated by space).\n if (m[2]) {\n var classes = m[2].split('.');\n\n classes.forEach(function(cl) {\n var bgColor = /^bg_/.test(cl);\n // slice out `bg_` if it's a background color\n var colorName = bgColor ? cl.slice(3) : cl;\n\n if (DEFAULT_COLOR_CLASS.hasOwnProperty(colorName)) {\n var propName = bgColor ? 'background-color' : 'color';\n var propValue = DEFAULT_COLOR_CLASS[colorName];\n\n node.style[propName] = propValue;\n }\n });\n\n node.className = classes.join(' ');\n }\n // Append the node to the current node, and enter the scope of the new\n // node.\n tagStack.push(m[1]);\n current.appendChild(node);\n current = node;\n continue;\n }\n\n // Text nodes are leaf nodes.\n current.appendChild(window.document.createTextNode(unescape(t)));\n }\n\n return rootDiv;\n}\n\n// This is a list of all the Unicode characters that have a strong\n// right-to-left category. What this means is that these characters are\n// written right-to-left for sure. It was generated by pulling all the strong\n// right-to-left characters out of the Unicode data table. That table can\n// found at: http://www.unicode.org/Public/UNIDATA/UnicodeData.txt\nvar strongRTLRanges = [[0x5be, 0x5be], [0x5c0, 0x5c0], [0x5c3, 0x5c3], [0x5c6, 0x5c6],\n [0x5d0, 0x5ea], [0x5f0, 0x5f4], [0x608, 0x608], [0x60b, 0x60b], [0x60d, 0x60d],\n [0x61b, 0x61b], [0x61e, 0x64a], [0x66d, 0x66f], [0x671, 0x6d5], [0x6e5, 0x6e6],\n [0x6ee, 0x6ef], [0x6fa, 0x70d], [0x70f, 0x710], [0x712, 0x72f], [0x74d, 0x7a5],\n [0x7b1, 0x7b1], [0x7c0, 0x7ea], [0x7f4, 0x7f5], [0x7fa, 0x7fa], [0x800, 0x815],\n [0x81a, 0x81a], [0x824, 0x824], [0x828, 0x828], [0x830, 0x83e], [0x840, 0x858],\n [0x85e, 0x85e], [0x8a0, 0x8a0], [0x8a2, 0x8ac], [0x200f, 0x200f],\n [0xfb1d, 0xfb1d], [0xfb1f, 0xfb28], [0xfb2a, 0xfb36], [0xfb38, 0xfb3c],\n [0xfb3e, 0xfb3e], [0xfb40, 0xfb41], [0xfb43, 0xfb44], [0xfb46, 0xfbc1],\n [0xfbd3, 0xfd3d], [0xfd50, 0xfd8f], [0xfd92, 0xfdc7], [0xfdf0, 0xfdfc],\n [0xfe70, 0xfe74], [0xfe76, 0xfefc], [0x10800, 0x10805], [0x10808, 0x10808],\n [0x1080a, 0x10835], [0x10837, 0x10838], [0x1083c, 0x1083c], [0x1083f, 0x10855],\n [0x10857, 0x1085f], [0x10900, 0x1091b], [0x10920, 0x10939], [0x1093f, 0x1093f],\n [0x10980, 0x109b7], [0x109be, 0x109bf], [0x10a00, 0x10a00], [0x10a10, 0x10a13],\n [0x10a15, 0x10a17], [0x10a19, 0x10a33], [0x10a40, 0x10a47], [0x10a50, 0x10a58],\n [0x10a60, 0x10a7f], [0x10b00, 0x10b35], [0x10b40, 0x10b55], [0x10b58, 0x10b72],\n [0x10b78, 0x10b7f], [0x10c00, 0x10c48], [0x1ee00, 0x1ee03], [0x1ee05, 0x1ee1f],\n [0x1ee21, 0x1ee22], [0x1ee24, 0x1ee24], [0x1ee27, 0x1ee27], [0x1ee29, 0x1ee32],\n [0x1ee34, 0x1ee37], [0x1ee39, 0x1ee39], [0x1ee3b, 0x1ee3b], [0x1ee42, 0x1ee42],\n [0x1ee47, 0x1ee47], [0x1ee49, 0x1ee49], [0x1ee4b, 0x1ee4b], [0x1ee4d, 0x1ee4f],\n [0x1ee51, 0x1ee52], [0x1ee54, 0x1ee54], [0x1ee57, 0x1ee57], [0x1ee59, 0x1ee59],\n [0x1ee5b, 0x1ee5b], [0x1ee5d, 0x1ee5d], [0x1ee5f, 0x1ee5f], [0x1ee61, 0x1ee62],\n [0x1ee64, 0x1ee64], [0x1ee67, 0x1ee6a], [0x1ee6c, 0x1ee72], [0x1ee74, 0x1ee77],\n [0x1ee79, 0x1ee7c], [0x1ee7e, 0x1ee7e], [0x1ee80, 0x1ee89], [0x1ee8b, 0x1ee9b],\n [0x1eea1, 0x1eea3], [0x1eea5, 0x1eea9], [0x1eeab, 0x1eebb], [0x10fffd, 0x10fffd]];\n\nfunction isStrongRTLChar(charCode) {\n for (var i = 0; i < strongRTLRanges.length; i++) {\n var currentRange = strongRTLRanges[i];\n if (charCode >= currentRange[0] && charCode <= currentRange[1]) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction determineBidi(cueDiv) {\n var nodeStack = [],\n text = \"\",\n charCode;\n\n if (!cueDiv || !cueDiv.childNodes) {\n return \"ltr\";\n }\n\n function pushNodes(nodeStack, node) {\n for (var i = node.childNodes.length - 1; i >= 0; i--) {\n nodeStack.push(node.childNodes[i]);\n }\n }\n\n function nextTextNode(nodeStack) {\n if (!nodeStack || !nodeStack.length) {\n return null;\n }\n\n var node = nodeStack.pop(),\n text = node.textContent || node.innerText;\n if (text) {\n // TODO: This should match all unicode type B characters (paragraph\n // separator characters). See issue #115.\n var m = text.match(/^.*(\\n|\\r)/);\n if (m) {\n nodeStack.length = 0;\n return m[0];\n }\n return text;\n }\n if (node.tagName === \"ruby\") {\n return nextTextNode(nodeStack);\n }\n if (node.childNodes) {\n pushNodes(nodeStack, node);\n return nextTextNode(nodeStack);\n }\n }\n\n pushNodes(nodeStack, cueDiv);\n while ((text = nextTextNode(nodeStack))) {\n for (var i = 0; i < text.length; i++) {\n charCode = text.charCodeAt(i);\n if (isStrongRTLChar(charCode)) {\n return \"rtl\";\n }\n }\n }\n return \"ltr\";\n}\n\nfunction computeLinePos(cue) {\n if (typeof cue.line === \"number\" &&\n (cue.snapToLines || (cue.line >= 0 && cue.line <= 100))) {\n return cue.line;\n }\n if (!cue.track || !cue.track.textTrackList ||\n !cue.track.textTrackList.mediaElement) {\n return -1;\n }\n var track = cue.track,\n trackList = track.textTrackList,\n count = 0;\n for (var i = 0; i < trackList.length && trackList[i] !== track; i++) {\n if (trackList[i].mode === \"showing\") {\n count++;\n }\n }\n return ++count * -1;\n}\n\nfunction StyleBox() {\n}\n\n// Apply styles to a div. If there is no div passed then it defaults to the\n// div on 'this'.\nStyleBox.prototype.applyStyles = function(styles, div) {\n div = div || this.div;\n for (var prop in styles) {\n if (styles.hasOwnProperty(prop)) {\n div.style[prop] = styles[prop];\n }\n }\n};\n\nStyleBox.prototype.formatStyle = function(val, unit) {\n return val === 0 ? 0 : val + unit;\n};\n\n// Constructs the computed display state of the cue (a div). Places the div\n// into the overlay which should be a block level element (usually a div).\nfunction CueStyleBox(window, cue, styleOptions) {\n StyleBox.call(this);\n this.cue = cue;\n\n // Parse our cue's text into a DOM tree rooted at 'cueDiv'. This div will\n // have inline positioning and will function as the cue background box.\n this.cueDiv = parseContent(window, cue.text);\n var styles = {\n color: \"rgba(255, 255, 255, 1)\",\n backgroundColor: \"rgba(0, 0, 0, 0.8)\",\n position: \"relative\",\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n display: \"inline\",\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\"\n };\n\n this.applyStyles(styles, this.cueDiv);\n\n // Create an absolutely positioned div that will be used to position the cue\n // div. Note, all WebVTT cue-setting alignments are equivalent to the CSS\n // mirrors of them except middle instead of center on Safari.\n this.div = window.document.createElement(\"div\");\n styles = {\n direction: determineBidi(this.cueDiv),\n writingMode: cue.vertical === \"\" ? \"horizontal-tb\"\n : cue.vertical === \"lr\" ? \"vertical-lr\"\n : \"vertical-rl\",\n unicodeBidi: \"plaintext\",\n textAlign: cue.align === \"middle\" ? \"center\" : cue.align,\n font: styleOptions.font,\n whiteSpace: \"pre-line\",\n position: \"absolute\"\n };\n\n this.applyStyles(styles);\n this.div.appendChild(this.cueDiv);\n\n // Calculate the distance from the reference edge of the viewport to the text\n // position of the cue box. The reference edge will be resolved later when\n // the box orientation styles are applied.\n var textPos = 0;\n switch (cue.positionAlign) {\n case \"start\":\n case \"line-left\":\n textPos = cue.position;\n break;\n case \"center\":\n textPos = cue.position - (cue.size / 2);\n break;\n case \"end\":\n case \"line-right\":\n textPos = cue.position - cue.size;\n break;\n }\n\n // Horizontal box orientation; textPos is the distance from the left edge of the\n // area to the left edge of the box and cue.size is the distance extending to\n // the right from there.\n if (cue.vertical === \"\") {\n this.applyStyles({\n left: this.formatStyle(textPos, \"%\"),\n width: this.formatStyle(cue.size, \"%\")\n });\n // Vertical box orientation; textPos is the distance from the top edge of the\n // area to the top edge of the box and cue.size is the height extending\n // downwards from there.\n } else {\n this.applyStyles({\n top: this.formatStyle(textPos, \"%\"),\n height: this.formatStyle(cue.size, \"%\")\n });\n }\n\n this.move = function(box) {\n this.applyStyles({\n top: this.formatStyle(box.top, \"px\"),\n bottom: this.formatStyle(box.bottom, \"px\"),\n left: this.formatStyle(box.left, \"px\"),\n right: this.formatStyle(box.right, \"px\"),\n height: this.formatStyle(box.height, \"px\"),\n width: this.formatStyle(box.width, \"px\")\n });\n };\n}\nCueStyleBox.prototype = _objCreate(StyleBox.prototype);\nCueStyleBox.prototype.constructor = CueStyleBox;\n\n// Represents the co-ordinates of an Element in a way that we can easily\n// compute things with such as if it overlaps or intersects with another Element.\n// Can initialize it with either a StyleBox or another BoxPosition.\nfunction BoxPosition(obj) {\n // Either a BoxPosition was passed in and we need to copy it, or a StyleBox\n // was passed in and we need to copy the results of 'getBoundingClientRect'\n // as the object returned is readonly. All co-ordinate values are in reference\n // to the viewport origin (top left).\n var lh, height, width, top;\n if (obj.div) {\n height = obj.div.offsetHeight;\n width = obj.div.offsetWidth;\n top = obj.div.offsetTop;\n\n var rects = (rects = obj.div.childNodes) && (rects = rects[0]) &&\n rects.getClientRects && rects.getClientRects();\n obj = obj.div.getBoundingClientRect();\n // In certain cases the outter div will be slightly larger then the sum of\n // the inner div's lines. This could be due to bold text, etc, on some platforms.\n // In this case we should get the average line height and use that. This will\n // result in the desired behaviour.\n lh = rects ? Math.max((rects[0] && rects[0].height) || 0, obj.height / rects.length)\n : 0;\n\n }\n this.left = obj.left;\n this.right = obj.right;\n this.top = obj.top || top;\n this.height = obj.height || height;\n this.bottom = obj.bottom || (top + (obj.height || height));\n this.width = obj.width || width;\n this.lineHeight = lh !== undefined ? lh : obj.lineHeight;\n}\n\n// Move the box along a particular axis. Optionally pass in an amount to move\n// the box. If no amount is passed then the default is the line height of the\n// box.\nBoxPosition.prototype.move = function(axis, toMove) {\n toMove = toMove !== undefined ? toMove : this.lineHeight;\n switch (axis) {\n case \"+x\":\n this.left += toMove;\n this.right += toMove;\n break;\n case \"-x\":\n this.left -= toMove;\n this.right -= toMove;\n break;\n case \"+y\":\n this.top += toMove;\n this.bottom += toMove;\n break;\n case \"-y\":\n this.top -= toMove;\n this.bottom -= toMove;\n break;\n }\n};\n\n// Check if this box overlaps another box, b2.\nBoxPosition.prototype.overlaps = function(b2) {\n return this.left < b2.right &&\n this.right > b2.left &&\n this.top < b2.bottom &&\n this.bottom > b2.top;\n};\n\n// Check if this box overlaps any other boxes in boxes.\nBoxPosition.prototype.overlapsAny = function(boxes) {\n for (var i = 0; i < boxes.length; i++) {\n if (this.overlaps(boxes[i])) {\n return true;\n }\n }\n return false;\n};\n\n// Check if this box is within another box.\nBoxPosition.prototype.within = function(container) {\n return this.top >= container.top &&\n this.bottom <= container.bottom &&\n this.left >= container.left &&\n this.right <= container.right;\n};\n\n// Check if this box is entirely within the container or it is overlapping\n// on the edge opposite of the axis direction passed. For example, if \"+x\" is\n// passed and the box is overlapping on the left edge of the container, then\n// return true.\nBoxPosition.prototype.overlapsOppositeAxis = function(container, axis) {\n switch (axis) {\n case \"+x\":\n return this.left < container.left;\n case \"-x\":\n return this.right > container.right;\n case \"+y\":\n return this.top < container.top;\n case \"-y\":\n return this.bottom > container.bottom;\n }\n};\n\n// Find the percentage of the area that this box is overlapping with another\n// box.\nBoxPosition.prototype.intersectPercentage = function(b2) {\n var x = Math.max(0, Math.min(this.right, b2.right) - Math.max(this.left, b2.left)),\n y = Math.max(0, Math.min(this.bottom, b2.bottom) - Math.max(this.top, b2.top)),\n intersectArea = x * y;\n return intersectArea / (this.height * this.width);\n};\n\n// Convert the positions from this box to CSS compatible positions using\n// the reference container's positions. This has to be done because this\n// box's positions are in reference to the viewport origin, whereas, CSS\n// values are in referecne to their respective edges.\nBoxPosition.prototype.toCSSCompatValues = function(reference) {\n return {\n top: this.top - reference.top,\n bottom: reference.bottom - this.bottom,\n left: this.left - reference.left,\n right: reference.right - this.right,\n height: this.height,\n width: this.width\n };\n};\n\n// Get an object that represents the box's position without anything extra.\n// Can pass a StyleBox, HTMLElement, or another BoxPositon.\nBoxPosition.getSimpleBoxPosition = function(obj) {\n var height = obj.div ? obj.div.offsetHeight : obj.tagName ? obj.offsetHeight : 0;\n var width = obj.div ? obj.div.offsetWidth : obj.tagName ? obj.offsetWidth : 0;\n var top = obj.div ? obj.div.offsetTop : obj.tagName ? obj.offsetTop : 0;\n\n obj = obj.div ? obj.div.getBoundingClientRect() :\n obj.tagName ? obj.getBoundingClientRect() : obj;\n var ret = {\n left: obj.left,\n right: obj.right,\n top: obj.top || top,\n height: obj.height || height,\n bottom: obj.bottom || (top + (obj.height || height)),\n width: obj.width || width\n };\n return ret;\n};\n\n// Move a StyleBox to its specified, or next best, position. The containerBox\n// is the box that contains the StyleBox, such as a div. boxPositions are\n// a list of other boxes that the styleBox can't overlap with.\nfunction moveBoxToLinePosition(window, styleBox, containerBox, boxPositions) {\n\n // Find the best position for a cue box, b, on the video. The axis parameter\n // is a list of axis, the order of which, it will move the box along. For example:\n // Passing [\"+x\", \"-x\"] will move the box first along the x axis in the positive\n // direction. If it doesn't find a good position for it there it will then move\n // it along the x axis in the negative direction.\n function findBestPosition(b, axis) {\n var bestPosition,\n specifiedPosition = new BoxPosition(b),\n percentage = 1; // Highest possible so the first thing we get is better.\n\n for (var i = 0; i < axis.length; i++) {\n while (b.overlapsOppositeAxis(containerBox, axis[i]) ||\n (b.within(containerBox) && b.overlapsAny(boxPositions))) {\n b.move(axis[i]);\n }\n // We found a spot where we aren't overlapping anything. This is our\n // best position.\n if (b.within(containerBox)) {\n return b;\n }\n var p = b.intersectPercentage(containerBox);\n // If we're outside the container box less then we were on our last try\n // then remember this position as the best position.\n if (percentage > p) {\n bestPosition = new BoxPosition(b);\n percentage = p;\n }\n // Reset the box position to the specified position.\n b = new BoxPosition(specifiedPosition);\n }\n return bestPosition || specifiedPosition;\n }\n\n var boxPosition = new BoxPosition(styleBox),\n cue = styleBox.cue,\n linePos = computeLinePos(cue),\n axis = [];\n\n // If we have a line number to align the cue to.\n if (cue.snapToLines) {\n var size;\n switch (cue.vertical) {\n case \"\":\n axis = [ \"+y\", \"-y\" ];\n size = \"height\";\n break;\n case \"rl\":\n axis = [ \"+x\", \"-x\" ];\n size = \"width\";\n break;\n case \"lr\":\n axis = [ \"-x\", \"+x\" ];\n size = \"width\";\n break;\n }\n\n var step = boxPosition.lineHeight,\n position = step * Math.round(linePos),\n maxPosition = containerBox[size] + step,\n initialAxis = axis[0];\n\n // If the specified intial position is greater then the max position then\n // clamp the box to the amount of steps it would take for the box to\n // reach the max position.\n if (Math.abs(position) > maxPosition) {\n position = position < 0 ? -1 : 1;\n position *= Math.ceil(maxPosition / step) * step;\n }\n\n // If computed line position returns negative then line numbers are\n // relative to the bottom of the video instead of the top. Therefore, we\n // need to increase our initial position by the length or width of the\n // video, depending on the writing direction, and reverse our axis directions.\n if (linePos < 0) {\n position += cue.vertical === \"\" ? containerBox.height : containerBox.width;\n axis = axis.reverse();\n }\n\n // Move the box to the specified position. This may not be its best\n // position.\n boxPosition.move(initialAxis, position);\n\n } else {\n // If we have a percentage line value for the cue.\n var calculatedPercentage = (boxPosition.lineHeight / containerBox.height) * 100;\n\n switch (cue.lineAlign) {\n case \"center\":\n linePos -= (calculatedPercentage / 2);\n break;\n case \"end\":\n linePos -= calculatedPercentage;\n break;\n }\n\n // Apply initial line position to the cue box.\n switch (cue.vertical) {\n case \"\":\n styleBox.applyStyles({\n top: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"rl\":\n styleBox.applyStyles({\n left: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n case \"lr\":\n styleBox.applyStyles({\n right: styleBox.formatStyle(linePos, \"%\")\n });\n break;\n }\n\n axis = [ \"+y\", \"-x\", \"+x\", \"-y\" ];\n\n // Get the box position again after we've applied the specified positioning\n // to it.\n boxPosition = new BoxPosition(styleBox);\n }\n\n var bestPosition = findBestPosition(boxPosition, axis);\n styleBox.move(bestPosition.toCSSCompatValues(containerBox));\n}\n\nfunction WebVTT() {\n // Nothing\n}\n\n// Helper to allow strings to be decoded instead of the default binary utf8 data.\nWebVTT.StringDecoder = function() {\n return {\n decode: function(data) {\n if (!data) {\n return \"\";\n }\n if (typeof data !== \"string\") {\n throw new Error(\"Error - expected string data.\");\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n };\n};\n\nWebVTT.convertCueToDOMTree = function(window, cuetext) {\n if (!window || !cuetext) {\n return null;\n }\n return parseContent(window, cuetext);\n};\n\nvar FONT_SIZE_PERCENT = 0.05;\nvar FONT_STYLE = \"sans-serif\";\nvar CUE_BACKGROUND_PADDING = \"1.5%\";\n\n// Runs the processing model over the cues and regions passed to it.\n// @param overlay A block level element (usually a div) that the computed cues\n// and regions will be placed into.\nWebVTT.processCues = function(window, cues, overlay) {\n if (!window || !cues || !overlay) {\n return null;\n }\n\n // Remove all previous children.\n while (overlay.firstChild) {\n overlay.removeChild(overlay.firstChild);\n }\n\n var paddedOverlay = window.document.createElement(\"div\");\n paddedOverlay.style.position = \"absolute\";\n paddedOverlay.style.left = \"0\";\n paddedOverlay.style.right = \"0\";\n paddedOverlay.style.top = \"0\";\n paddedOverlay.style.bottom = \"0\";\n paddedOverlay.style.margin = CUE_BACKGROUND_PADDING;\n overlay.appendChild(paddedOverlay);\n\n // Determine if we need to compute the display states of the cues. This could\n // be the case if a cue's state has been changed since the last computation or\n // if it has not been computed yet.\n function shouldCompute(cues) {\n for (var i = 0; i < cues.length; i++) {\n if (cues[i].hasBeenReset || !cues[i].displayState) {\n return true;\n }\n }\n return false;\n }\n\n // We don't need to recompute the cues' display states. Just reuse them.\n if (!shouldCompute(cues)) {\n for (var i = 0; i < cues.length; i++) {\n paddedOverlay.appendChild(cues[i].displayState);\n }\n return;\n }\n\n var boxPositions = [],\n containerBox = BoxPosition.getSimpleBoxPosition(paddedOverlay),\n fontSize = Math.round(containerBox.height * FONT_SIZE_PERCENT * 100) / 100;\n var styleOptions = {\n font: fontSize + \"px \" + FONT_STYLE\n };\n\n (function() {\n var styleBox, cue;\n\n for (var i = 0; i < cues.length; i++) {\n cue = cues[i];\n\n // Compute the intial position and styles of the cue div.\n styleBox = new CueStyleBox(window, cue, styleOptions);\n paddedOverlay.appendChild(styleBox.div);\n\n // Move the cue div to it's correct line position.\n moveBoxToLinePosition(window, styleBox, containerBox, boxPositions);\n\n // Remember the computed div so that we don't have to recompute it later\n // if we don't have too.\n cue.displayState = styleBox.div;\n\n boxPositions.push(BoxPosition.getSimpleBoxPosition(styleBox));\n }\n })();\n};\n\nWebVTT.Parser = function(window, vttjs, decoder) {\n if (!decoder) {\n decoder = vttjs;\n vttjs = {};\n }\n if (!vttjs) {\n vttjs = {};\n }\n\n this.window = window;\n this.vttjs = vttjs;\n this.state = \"INITIAL\";\n this.buffer = \"\";\n this.decoder = decoder || new TextDecoder(\"utf8\");\n this.regionList = [];\n};\n\nWebVTT.Parser.prototype = {\n // If the error is a ParsingError then report it to the consumer if\n // possible. If it's not a ParsingError then throw it like normal.\n reportOrThrowError: function(e) {\n if (e instanceof ParsingError) {\n this.onparsingerror && this.onparsingerror(e);\n } else {\n throw e;\n }\n },\n parse: function (data) {\n var self = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n self.buffer += self.decoder.decode(data, {stream: true});\n }\n\n function collectNextLine() {\n var buffer = self.buffer;\n var pos = 0;\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n var line = buffer.substr(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n self.buffer = buffer.substr(pos);\n return line;\n }\n\n // 3.4 WebVTT region and WebVTT region settings syntax\n function parseRegion(input) {\n var settings = new Settings();\n\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"id\":\n settings.set(k, v);\n break;\n case \"width\":\n settings.percent(k, v);\n break;\n case \"lines\":\n settings.integer(k, v);\n break;\n case \"regionanchor\":\n case \"viewportanchor\":\n var xy = v.split(',');\n if (xy.length !== 2) {\n break;\n }\n // We have to make sure both x and y parse, so use a temporary\n // settings object here.\n var anchor = new Settings();\n anchor.percent(\"x\", xy[0]);\n anchor.percent(\"y\", xy[1]);\n if (!anchor.has(\"x\") || !anchor.has(\"y\")) {\n break;\n }\n settings.set(k + \"X\", anchor.get(\"x\"));\n settings.set(k + \"Y\", anchor.get(\"y\"));\n break;\n case \"scroll\":\n settings.alt(k, v, [\"up\"]);\n break;\n }\n }, /=/, /\\s/);\n\n // Create the region, using default values for any values that were not\n // specified.\n if (settings.has(\"id\")) {\n var region = new (self.vttjs.VTTRegion || self.window.VTTRegion)();\n region.width = settings.get(\"width\", 100);\n region.lines = settings.get(\"lines\", 3);\n region.regionAnchorX = settings.get(\"regionanchorX\", 0);\n region.regionAnchorY = settings.get(\"regionanchorY\", 100);\n region.viewportAnchorX = settings.get(\"viewportanchorX\", 0);\n region.viewportAnchorY = settings.get(\"viewportanchorY\", 100);\n region.scroll = settings.get(\"scroll\", \"\");\n // Register the region.\n self.onregion && self.onregion(region);\n // Remember the VTTRegion for later in case we parse any VTTCues that\n // reference it.\n self.regionList.push({\n id: settings.get(\"id\"),\n region: region\n });\n }\n }\n\n // draft-pantos-http-live-streaming-20\n // https://tools.ietf.org/html/draft-pantos-http-live-streaming-20#section-3.5\n // 3.5 WebVTT\n function parseTimestampMap(input) {\n var settings = new Settings();\n\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"MPEGT\":\n settings.integer(k + 'S', v);\n break;\n case \"LOCA\":\n settings.set(k + 'L', parseTimeStamp(v));\n break;\n }\n }, /[^\\d]:/, /,/);\n\n self.ontimestampmap && self.ontimestampmap({\n \"MPEGTS\": settings.get(\"MPEGTS\"),\n \"LOCAL\": settings.get(\"LOCAL\")\n });\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n if (input.match(/X-TIMESTAMP-MAP/)) {\n // This line contains HLS X-TIMESTAMP-MAP metadata\n parseOptions(input, function(k, v) {\n switch(k) {\n case \"X-TIMESTAMP-MAP\":\n parseTimestampMap(v);\n break;\n }\n }, /=/);\n } else {\n parseOptions(input, function (k, v) {\n switch (k) {\n case \"Region\":\n // 3.3 WebVTT region metadata header syntax\n parseRegion(v);\n break;\n }\n }, /:/);\n }\n\n }\n\n // 5.1 WebVTT file parsing.\n try {\n var line;\n if (self.state === \"INITIAL\") {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n line = collectNextLine();\n\n var m = line.match(/^WEBVTT([ \\t].*)?$/);\n if (!m || !m[0]) {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n\n self.state = \"HEADER\";\n }\n\n var alreadyCollectedLine = false;\n while (self.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(self.buffer)) {\n return this;\n }\n\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n\n switch (self.state) {\n case \"HEADER\":\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n self.state = \"ID\";\n }\n continue;\n case \"NOTE\":\n // Ignore NOTE blocks.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n case \"ID\":\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n self.state = \"NOTE\";\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n self.cue = new (self.vttjs.VTTCue || self.window.VTTCue)(0, 0, \"\");\n // Safari still uses the old middle value and won't accept center\n try {\n self.cue.align = \"center\";\n } catch (e) {\n self.cue.align = \"middle\";\n }\n self.state = \"CUE\";\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf(\"-->\") === -1) {\n self.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /*falls through*/\n case \"CUE\":\n // 40 - Collect cue timings and settings.\n try {\n parseCue(line, self.cue, self.regionList);\n } catch (e) {\n self.reportOrThrowError(e);\n // In case of an error ignore rest of the cue.\n self.cue = null;\n self.state = \"BADCUE\";\n continue;\n }\n self.state = \"CUETEXT\";\n continue;\n case \"CUETEXT\":\n var hasSubstring = line.indexOf(\"-->\") !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n self.oncue && self.oncue(self.cue);\n self.cue = null;\n self.state = \"ID\";\n continue;\n }\n if (self.cue.text) {\n self.cue.text += \"\\n\";\n }\n self.cue.text += line.replace(/\\u2028/g, '\\n').replace(/u2029/g, '\\n');\n continue;\n case \"BADCUE\": // BADCUE\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n self.state = \"ID\";\n }\n continue;\n }\n }\n } catch (e) {\n self.reportOrThrowError(e);\n\n // If we are currently parsing a cue, report what we have.\n if (self.state === \"CUETEXT\" && self.cue && self.oncue) {\n self.oncue(self.cue);\n }\n self.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n self.state = self.state === \"INITIAL\" ? \"BADWEBVTT\" : \"BADCUE\";\n }\n return this;\n },\n flush: function () {\n var self = this;\n try {\n // Finish decoding the stream.\n self.buffer += self.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (self.cue || self.state === \"HEADER\") {\n self.buffer += \"\\n\\n\";\n self.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (self.state === \"INITIAL\") {\n throw new ParsingError(ParsingError.Errors.BadSignature);\n }\n } catch(e) {\n self.reportOrThrowError(e);\n }\n self.onflush && self.onflush();\n return this;\n }\n};\n\nmodule.exports = WebVTT;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar autoKeyword = \"auto\";\nvar directionSetting = {\n \"\": 1,\n \"lr\": 1,\n \"rl\": 1\n};\nvar alignSetting = {\n \"start\": 1,\n \"center\": 1,\n \"end\": 1,\n \"left\": 1,\n \"right\": 1,\n \"auto\": 1,\n \"line-left\": 1,\n \"line-right\": 1\n};\n\nfunction findDirectionSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var dir = directionSetting[value.toLowerCase()];\n return dir ? value.toLowerCase() : false;\n}\n\nfunction findAlignSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var align = alignSetting[value.toLowerCase()];\n return align ? value.toLowerCase() : false;\n}\n\nfunction VTTCue(startTime, endTime, text) {\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n this.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n var _id = \"\";\n var _pauseOnExit = false;\n var _startTime = startTime;\n var _endTime = endTime;\n var _text = text;\n var _region = null;\n var _vertical = \"\";\n var _snapToLines = true;\n var _line = \"auto\";\n var _lineAlign = \"start\";\n var _position = \"auto\";\n var _positionAlign = \"auto\";\n var _size = 100;\n var _align = \"center\";\n\n Object.defineProperties(this, {\n \"id\": {\n enumerable: true,\n get: function() {\n return _id;\n },\n set: function(value) {\n _id = \"\" + value;\n }\n },\n\n \"pauseOnExit\": {\n enumerable: true,\n get: function() {\n return _pauseOnExit;\n },\n set: function(value) {\n _pauseOnExit = !!value;\n }\n },\n\n \"startTime\": {\n enumerable: true,\n get: function() {\n return _startTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Start time must be set to a number.\");\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"endTime\": {\n enumerable: true,\n get: function() {\n return _endTime;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"End time must be set to a number.\");\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n },\n\n \"text\": {\n enumerable: true,\n get: function() {\n return _text;\n },\n set: function(value) {\n _text = \"\" + value;\n this.hasBeenReset = true;\n }\n },\n\n \"region\": {\n enumerable: true,\n get: function() {\n return _region;\n },\n set: function(value) {\n _region = value;\n this.hasBeenReset = true;\n }\n },\n\n \"vertical\": {\n enumerable: true,\n get: function() {\n return _vertical;\n },\n set: function(value) {\n var setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError(\"Vertical: an invalid or illegal direction string was specified.\");\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n },\n\n \"snapToLines\": {\n enumerable: true,\n get: function() {\n return _snapToLines;\n },\n set: function(value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n },\n\n \"line\": {\n enumerable: true,\n get: function() {\n return _line;\n },\n set: function(value) {\n if (typeof value !== \"number\" && value !== autoKeyword) {\n throw new SyntaxError(\"Line: an invalid number or illegal string was specified.\");\n }\n _line = value;\n this.hasBeenReset = true;\n }\n },\n\n \"lineAlign\": {\n enumerable: true,\n get: function() {\n return _lineAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"lineAlign: an invalid or illegal string was specified.\");\n } else {\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"position\": {\n enumerable: true,\n get: function() {\n return _position;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Position must be between 0 and 100.\");\n }\n _position = value;\n this.hasBeenReset = true;\n }\n },\n\n \"positionAlign\": {\n enumerable: true,\n get: function() {\n return _positionAlign;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n console.warn(\"positionAlign: an invalid or illegal string was specified.\");\n } else {\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }\n },\n\n \"size\": {\n enumerable: true,\n get: function() {\n return _size;\n },\n set: function(value) {\n if (value < 0 || value > 100) {\n throw new Error(\"Size must be between 0 and 100.\");\n }\n _size = value;\n this.hasBeenReset = true;\n }\n },\n\n \"align\": {\n enumerable: true,\n get: function() {\n return _align;\n },\n set: function(value) {\n var setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError(\"align: an invalid or illegal alignment string was specified.\");\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }\n });\n\n /**\n * Other spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n this.displayState = undefined;\n}\n\n/**\n * VTTCue methods\n */\n\nVTTCue.prototype.getCueAsHTML = function() {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n return WebVTT.convertCueToDOMTree(window, this.text);\n};\n\nmodule.exports = VTTCue;\n","/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar scrollSetting = {\n \"\": true,\n \"up\": true\n};\n\nfunction findScrollSetting(value) {\n if (typeof value !== \"string\") {\n return false;\n }\n var scroll = scrollSetting[value.toLowerCase()];\n return scroll ? value.toLowerCase() : false;\n}\n\nfunction isValidPercentValue(value) {\n return typeof value === \"number\" && (value >= 0 && value <= 100);\n}\n\n// VTTRegion shim http://dev.w3.org/html5/webvtt/#vttregion-interface\nfunction VTTRegion() {\n var _width = 100;\n var _lines = 3;\n var _regionAnchorX = 0;\n var _regionAnchorY = 100;\n var _viewportAnchorX = 0;\n var _viewportAnchorY = 100;\n var _scroll = \"\";\n\n Object.defineProperties(this, {\n \"width\": {\n enumerable: true,\n get: function() {\n return _width;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"Width must be between 0 and 100.\");\n }\n _width = value;\n }\n },\n \"lines\": {\n enumerable: true,\n get: function() {\n return _lines;\n },\n set: function(value) {\n if (typeof value !== \"number\") {\n throw new TypeError(\"Lines must be set to a number.\");\n }\n _lines = value;\n }\n },\n \"regionAnchorY\": {\n enumerable: true,\n get: function() {\n return _regionAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorX must be between 0 and 100.\");\n }\n _regionAnchorY = value;\n }\n },\n \"regionAnchorX\": {\n enumerable: true,\n get: function() {\n return _regionAnchorX;\n },\n set: function(value) {\n if(!isValidPercentValue(value)) {\n throw new Error(\"RegionAnchorY must be between 0 and 100.\");\n }\n _regionAnchorX = value;\n }\n },\n \"viewportAnchorY\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorY;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorY must be between 0 and 100.\");\n }\n _viewportAnchorY = value;\n }\n },\n \"viewportAnchorX\": {\n enumerable: true,\n get: function() {\n return _viewportAnchorX;\n },\n set: function(value) {\n if (!isValidPercentValue(value)) {\n throw new Error(\"ViewportAnchorX must be between 0 and 100.\");\n }\n _viewportAnchorX = value;\n }\n },\n \"scroll\": {\n enumerable: true,\n get: function() {\n return _scroll;\n },\n set: function(value) {\n var setting = findScrollSetting(value);\n // Have to check for false as an empty string is a legal value.\n if (setting === false) {\n console.warn(\"Scroll: an invalid or illegal string was specified.\");\n } else {\n _scroll = setting;\n }\n }\n }\n });\n}\n\nmodule.exports = VTTRegion;\n","function _extends() {\n module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _extends.apply(this, arguments);\n}\nmodule.exports = _extends, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;"],"names":["window","module","exports","callback","decodeResponseBody","err","response","responseBody","statusCode","cause","TextDecoder","charset","contentTypeHeader","toLowerCase","split","reduce","contentType","_contentType$split","type","value","trim","getCharset","headers","decode","e","String","fromCharCode","apply","Uint8Array","_extends","isFunction","createXHR","httpHandler","parseHeaders","result","forEach","row","index","indexOf","key","slice","Array","isArray","push","initParams","uri","options","params","_createXHR","Error","called","body","getBody","undefined","xhr","responseText","responseType","responseXML","firefoxBugTakenEffect","documentElement","nodeName","getXml","isJson","JSON","parse","errorFunc","evt","clearTimeout","timeoutTimer","failureResponse","loadFunc","aborted","status","useXDR","method","url","rawRequest","getAllResponseHeaders","cors","XDomainRequest","XMLHttpRequest","data","sync","json","stringify","onreadystatechange","readyState","setTimeout","onload","onerror","onprogress","onabort","ontimeout","open","username","password","withCredentials","timeout","abort","code","setRequestHeader","hasOwnProperty","obj","i","isEmpty","beforeSend","send","array","iterator","length","forEachArray","toUpperCase","freeze","object","oc","Object","MIME_TYPE","HTML","isHTML","XML_APPLICATION","XML_TEXT","XML_XHTML_APPLICATION","XML_SVG_IMAGE","NAMESPACE","SVG","XML","XMLNS","assign","target","source","TypeError","prototype","call","find","list","predicate","ac","item","conventions","dom","entities","sax","DOMImplementation","ParseError","XMLReader","normalizeLineEndings","input","replace","DOMParser","this","locator","DOMHandler","cdata","position","node","lineNumber","columnNumber","_locator","l","systemId","_toString","chars","start","substr","java","lang","appendElement","hander","currentElement","appendChild","doc","parseFromString","mimeType","domBuilder","errorHandler","defaultNSMap","xmlns","test","entityMap","HTML_ENTITIES","XML_ENTITIES","setDocumentLocator","errorImpl","isCallback","Function","build","fn","msg","buildErrorHandler","xml","normalize","error","startDocument","createDocument","documentURI","startElement","namespaceURI","localName","qName","attrs","el","createElementNS","len","getURI","getValue","attr","getQName","createAttributeNS","getLocator","nodeValue","setAttributeNode","endElement","current","tagName","parentNode","startPrefixMapping","prefix","endPrefixMapping","processingInstruction","ins","createProcessingInstruction","ignorableWhitespace","ch","characters","arguments","charNode","createCDATASection","createTextNode","skippedEntity","name","endDocument","comment","comm","createComment","startCDATA","endCDATA","startDTD","publicId","impl","implementation","createDocumentType","dt","doctype","warning","console","warn","fatalError","notEmptyString","orderedSetReducer","element","toOrderedSet","filter","splitOnASCIIWhitespace","keys","copy","src","dest","p","Class","Super","pt","t","constructor","NodeType","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","ExceptionCode","ExceptionMessage","HIERARCHY_REQUEST_ERR","INDEX_SIZE_ERR","DOMSTRING_SIZE_ERR","NOT_FOUND_ERR","WRONG_DOCUMENT_ERR","INVALID_CHARACTER_ERR","NO_DATA_ALLOWED_ERR","NO_MODIFICATION_ALLOWED_ERR","INUSE_ATTRIBUTE_ERR","NOT_SUPPORTED_ERR","INVALID_STATE_ERR","SYNTAX_ERR","INVALID_MODIFICATION_ERR","NAMESPACE_ERR","INVALID_ACCESS_ERR","DOMException","message","captureStackTrace","NodeList","LiveNodeList","refresh","_node","_refresh","_updateLiveList","inc","_inc","ownerDocument","ls","__set__","$$length","NamedNodeMap","_findNodeIndex","_addNamedNode","newAttr","oldAttr","ownerElement","_onRemoveAttribute","ns","_nsMap","_onAddAttribute","_removeNamedNode","lastIndex","Node","_xmlEncoder","c","charCodeAt","_visitNode","firstChild","nextSibling","Document","remove","_onUpdateChild","newChild","cs","childNodes","child","_removeChild","previous","previousSibling","next","lastChild","isDocTypeNode","nodeType","isElementNode","isTextNode","isElementInsertionPossible","parentChildNodes","docTypeNode","isElementReplacementPossible","assertPreInsertionValidity1to5","parent","hasValidParentNodeType","hasInsertableNodeType","assertPreInsertionValidityInDocument","nodeChildNodes","nodeChildElements","parentElementChild","assertPreReplacementValidityInDocument","_insertBefore","_inDocumentAssertion","cp","removeChild","newFirst","newLast","pre","Element","Attr","CharacterData","Text","Comment","CDATASection","DocumentType","Notation","Entity","EntityReference","DocumentFragment","ProcessingInstruction","XMLSerializer","nodeSerializeToString","isHtml","nodeFilter","buf","refNode","lookupPrefix","visibleNamespaces","namespace","serializeToString","join","needNamespaceDefine","addSerializedAttribute","qualifiedName","attributes","prefixedNodeName","defaultNS","ai","nsi","pubid","sysid","sub","internalSubset","importNode","deep","node2","cloneNode","n","v","attrs2","_ownerElement","toString","getNamedItem","setNamedItem","setNamedItemNS","getNamedItemNS","removeNamedItem","removeNamedItemNS","hasFeature","feature","version","root","insertBefore","refChild","replaceChild","oldChild","hasChildNodes","appendData","isSupported","hasAttributes","map","lookupNamespaceURI","isDefaultNamespace","importedNode","getElementById","id","rtv","getAttribute","getElementsByClassName","classNames","classNamesSet","base","nodeClassNames","matches","nodeClassNamesSet","every","createElement","createDocumentFragment","createAttribute","specified","createEntityReference","pl","hasAttribute","getAttributeNode","setAttribute","removeAttribute","removeAttributeNode","_appendSingleChild","setAttributeNodeNS","removeAttributeNS","old","getAttributeNodeNS","hasAttributeNS","getAttributeNS","setAttributeNS","getElementsByTagName","getElementsByTagNameNS","substringData","offset","count","substring","text","insertData","replaceData","deleteData","splitText","newText","newNode","defineProperty","getTextContent","get","set","amp","apos","gt","lt","quot","Aacute","aacute","Abreve","abreve","acd","acE","Acirc","acirc","acute","Acy","acy","AElig","aelig","af","Afr","afr","Agrave","agrave","alefsym","aleph","Alpha","alpha","Amacr","amacr","amalg","AMP","And","and","andand","andd","andslope","andv","ang","ange","angle","angmsd","angmsdaa","angmsdab","angmsdac","angmsdad","angmsdae","angmsdaf","angmsdag","angmsdah","angrt","angrtvb","angrtvbd","angsph","angst","angzarr","Aogon","aogon","Aopf","aopf","ap","apacir","apE","ape","apid","ApplyFunction","approx","approxeq","Aring","aring","Ascr","ascr","Assign","ast","asymp","asympeq","Atilde","atilde","Auml","auml","awconint","awint","backcong","backepsilon","backprime","backsim","backsimeq","Backslash","Barv","barvee","Barwed","barwed","barwedge","bbrk","bbrktbrk","bcong","Bcy","bcy","bdquo","becaus","Because","because","bemptyv","bepsi","bernou","Bernoullis","Beta","beta","beth","between","Bfr","bfr","bigcap","bigcirc","bigcup","bigodot","bigoplus","bigotimes","bigsqcup","bigstar","bigtriangledown","bigtriangleup","biguplus","bigvee","bigwedge","bkarow","blacklozenge","blacksquare","blacktriangle","blacktriangledown","blacktriangleleft","blacktriangleright","blank","blk12","blk14","blk34","block","bne","bnequiv","bNot","bnot","Bopf","bopf","bot","bottom","bowtie","boxbox","boxDL","boxDl","boxdL","boxdl","boxDR","boxDr","boxdR","boxdr","boxH","boxh","boxHD","boxHd","boxhD","boxhd","boxHU","boxHu","boxhU","boxhu","boxminus","boxplus","boxtimes","boxUL","boxUl","boxuL","boxul","boxUR","boxUr","boxuR","boxur","boxV","boxv","boxVH","boxVh","boxvH","boxvh","boxVL","boxVl","boxvL","boxvl","boxVR","boxVr","boxvR","boxvr","bprime","Breve","breve","brvbar","Bscr","bscr","bsemi","bsim","bsime","bsol","bsolb","bsolhsub","bull","bullet","bump","bumpE","bumpe","Bumpeq","bumpeq","Cacute","cacute","Cap","cap","capand","capbrcup","capcap","capcup","capdot","CapitalDifferentialD","caps","caret","caron","Cayleys","ccaps","Ccaron","ccaron","Ccedil","ccedil","Ccirc","ccirc","Cconint","ccups","ccupssm","Cdot","cdot","cedil","Cedilla","cemptyv","cent","CenterDot","centerdot","Cfr","cfr","CHcy","chcy","check","checkmark","Chi","chi","cir","circ","circeq","circlearrowleft","circlearrowright","circledast","circledcirc","circleddash","CircleDot","circledR","circledS","CircleMinus","CirclePlus","CircleTimes","cirE","cire","cirfnint","cirmid","cirscir","ClockwiseContourIntegral","CloseCurlyDoubleQuote","CloseCurlyQuote","clubs","clubsuit","Colon","colon","Colone","colone","coloneq","comma","commat","comp","compfn","complement","complexes","cong","congdot","Congruent","Conint","conint","ContourIntegral","Copf","copf","coprod","Coproduct","COPY","copysr","CounterClockwiseContourIntegral","crarr","Cross","cross","Cscr","cscr","csub","csube","csup","csupe","ctdot","cudarrl","cudarrr","cuepr","cuesc","cularr","cularrp","Cup","cup","cupbrcap","CupCap","cupcap","cupcup","cupdot","cupor","cups","curarr","curarrm","curlyeqprec","curlyeqsucc","curlyvee","curlywedge","curren","curvearrowleft","curvearrowright","cuvee","cuwed","cwconint","cwint","cylcty","Dagger","dagger","daleth","Darr","dArr","darr","dash","Dashv","dashv","dbkarow","dblac","Dcaron","dcaron","Dcy","dcy","DD","dd","ddagger","ddarr","DDotrahd","ddotseq","deg","Del","Delta","delta","demptyv","dfisht","Dfr","dfr","dHar","dharl","dharr","DiacriticalAcute","DiacriticalDot","DiacriticalDoubleAcute","DiacriticalGrave","DiacriticalTilde","diam","Diamond","diamond","diamondsuit","diams","die","DifferentialD","digamma","disin","div","divide","divideontimes","divonx","DJcy","djcy","dlcorn","dlcrop","dollar","Dopf","dopf","Dot","dot","DotDot","doteq","doteqdot","DotEqual","dotminus","dotplus","dotsquare","doublebarwedge","DoubleContourIntegral","DoubleDot","DoubleDownArrow","DoubleLeftArrow","DoubleLeftRightArrow","DoubleLeftTee","DoubleLongLeftArrow","DoubleLongLeftRightArrow","DoubleLongRightArrow","DoubleRightArrow","DoubleRightTee","DoubleUpArrow","DoubleUpDownArrow","DoubleVerticalBar","DownArrow","Downarrow","downarrow","DownArrowBar","DownArrowUpArrow","DownBreve","downdownarrows","downharpoonleft","downharpoonright","DownLeftRightVector","DownLeftTeeVector","DownLeftVector","DownLeftVectorBar","DownRightTeeVector","DownRightVector","DownRightVectorBar","DownTee","DownTeeArrow","drbkarow","drcorn","drcrop","Dscr","dscr","DScy","dscy","dsol","Dstrok","dstrok","dtdot","dtri","dtrif","duarr","duhar","dwangle","DZcy","dzcy","dzigrarr","Eacute","eacute","easter","Ecaron","ecaron","ecir","Ecirc","ecirc","ecolon","Ecy","ecy","eDDot","Edot","eDot","edot","ee","efDot","Efr","efr","eg","Egrave","egrave","egs","egsdot","elinters","ell","els","elsdot","Emacr","emacr","empty","emptyset","EmptySmallSquare","emptyv","EmptyVerySmallSquare","emsp","emsp13","emsp14","ENG","eng","ensp","Eogon","eogon","Eopf","eopf","epar","eparsl","eplus","epsi","Epsilon","epsilon","epsiv","eqcirc","eqcolon","eqsim","eqslantgtr","eqslantless","Equal","equals","EqualTilde","equest","Equilibrium","equiv","equivDD","eqvparsl","erarr","erDot","Escr","escr","esdot","Esim","esim","Eta","eta","ETH","eth","Euml","euml","euro","excl","exist","Exists","expectation","ExponentialE","exponentiale","fallingdotseq","Fcy","fcy","female","ffilig","fflig","ffllig","Ffr","ffr","filig","FilledSmallSquare","FilledVerySmallSquare","fjlig","flat","fllig","fltns","fnof","Fopf","fopf","ForAll","forall","fork","forkv","Fouriertrf","fpartint","frac12","frac13","frac14","frac15","frac16","frac18","frac23","frac25","frac34","frac35","frac38","frac45","frac56","frac58","frac78","frasl","frown","Fscr","fscr","gacute","Gamma","gamma","Gammad","gammad","gap","Gbreve","gbreve","Gcedil","Gcirc","gcirc","Gcy","gcy","Gdot","gdot","gE","ge","gEl","gel","geq","geqq","geqslant","ges","gescc","gesdot","gesdoto","gesdotol","gesl","gesles","Gfr","gfr","Gg","gg","ggg","gimel","GJcy","gjcy","gl","gla","glE","glj","gnap","gnapprox","gnE","gne","gneq","gneqq","gnsim","Gopf","gopf","grave","GreaterEqual","GreaterEqualLess","GreaterFullEqual","GreaterGreater","GreaterLess","GreaterSlantEqual","GreaterTilde","Gscr","gscr","gsim","gsime","gsiml","Gt","GT","gtcc","gtcir","gtdot","gtlPar","gtquest","gtrapprox","gtrarr","gtrdot","gtreqless","gtreqqless","gtrless","gtrsim","gvertneqq","gvnE","Hacek","hairsp","half","hamilt","HARDcy","hardcy","hArr","harr","harrcir","harrw","Hat","hbar","Hcirc","hcirc","hearts","heartsuit","hellip","hercon","Hfr","hfr","HilbertSpace","hksearow","hkswarow","hoarr","homtht","hookleftarrow","hookrightarrow","Hopf","hopf","horbar","HorizontalLine","Hscr","hscr","hslash","Hstrok","hstrok","HumpDownHump","HumpEqual","hybull","hyphen","Iacute","iacute","ic","Icirc","icirc","Icy","icy","Idot","IEcy","iecy","iexcl","iff","Ifr","ifr","Igrave","igrave","ii","iiiint","iiint","iinfin","iiota","IJlig","ijlig","Im","Imacr","imacr","image","ImaginaryI","imagline","imagpart","imath","imof","imped","Implies","in","incare","infin","infintie","inodot","Int","int","intcal","integers","Integral","intercal","Intersection","intlarhk","intprod","InvisibleComma","InvisibleTimes","IOcy","iocy","Iogon","iogon","Iopf","iopf","Iota","iota","iprod","iquest","Iscr","iscr","isin","isindot","isinE","isins","isinsv","isinv","it","Itilde","itilde","Iukcy","iukcy","Iuml","iuml","Jcirc","jcirc","Jcy","jcy","Jfr","jfr","jmath","Jopf","jopf","Jscr","jscr","Jsercy","jsercy","Jukcy","jukcy","Kappa","kappa","kappav","Kcedil","kcedil","Kcy","kcy","Kfr","kfr","kgreen","KHcy","khcy","KJcy","kjcy","Kopf","kopf","Kscr","kscr","lAarr","Lacute","lacute","laemptyv","lagran","Lambda","lambda","Lang","langd","langle","lap","Laplacetrf","laquo","Larr","lArr","larr","larrb","larrbfs","larrfs","larrhk","larrlp","larrpl","larrsim","larrtl","lat","lAtail","latail","late","lates","lBarr","lbarr","lbbrk","lbrace","lbrack","lbrke","lbrksld","lbrkslu","Lcaron","lcaron","Lcedil","lcedil","lceil","lcub","Lcy","lcy","ldca","ldquo","ldquor","ldrdhar","ldrushar","ldsh","lE","le","LeftAngleBracket","LeftArrow","Leftarrow","leftarrow","LeftArrowBar","LeftArrowRightArrow","leftarrowtail","LeftCeiling","LeftDoubleBracket","LeftDownTeeVector","LeftDownVector","LeftDownVectorBar","LeftFloor","leftharpoondown","leftharpoonup","leftleftarrows","LeftRightArrow","Leftrightarrow","leftrightarrow","leftrightarrows","leftrightharpoons","leftrightsquigarrow","LeftRightVector","LeftTee","LeftTeeArrow","LeftTeeVector","leftthreetimes","LeftTriangle","LeftTriangleBar","LeftTriangleEqual","LeftUpDownVector","LeftUpTeeVector","LeftUpVector","LeftUpVectorBar","LeftVector","LeftVectorBar","lEg","leg","leq","leqq","leqslant","les","lescc","lesdot","lesdoto","lesdotor","lesg","lesges","lessapprox","lessdot","lesseqgtr","lesseqqgtr","LessEqualGreater","LessFullEqual","LessGreater","lessgtr","LessLess","lesssim","LessSlantEqual","LessTilde","lfisht","lfloor","Lfr","lfr","lg","lgE","lHar","lhard","lharu","lharul","lhblk","LJcy","ljcy","Ll","ll","llarr","llcorner","Lleftarrow","llhard","lltri","Lmidot","lmidot","lmoust","lmoustache","lnap","lnapprox","lnE","lne","lneq","lneqq","lnsim","loang","loarr","lobrk","LongLeftArrow","Longleftarrow","longleftarrow","LongLeftRightArrow","Longleftrightarrow","longleftrightarrow","longmapsto","LongRightArrow","Longrightarrow","longrightarrow","looparrowleft","looparrowright","lopar","Lopf","lopf","loplus","lotimes","lowast","lowbar","LowerLeftArrow","LowerRightArrow","loz","lozenge","lozf","lpar","lparlt","lrarr","lrcorner","lrhar","lrhard","lrm","lrtri","lsaquo","Lscr","lscr","Lsh","lsh","lsim","lsime","lsimg","lsqb","lsquo","lsquor","Lstrok","lstrok","Lt","LT","ltcc","ltcir","ltdot","lthree","ltimes","ltlarr","ltquest","ltri","ltrie","ltrif","ltrPar","lurdshar","luruhar","lvertneqq","lvnE","macr","male","malt","maltese","Map","mapsto","mapstodown","mapstoleft","mapstoup","marker","mcomma","Mcy","mcy","mdash","mDDot","measuredangle","MediumSpace","Mellintrf","Mfr","mfr","mho","micro","mid","midast","midcir","middot","minus","minusb","minusd","minusdu","MinusPlus","mlcp","mldr","mnplus","models","Mopf","mopf","mp","Mscr","mscr","mstpos","Mu","mu","multimap","mumap","nabla","Nacute","nacute","nang","nap","napE","napid","napos","napprox","natur","natural","naturals","nbsp","nbump","nbumpe","ncap","Ncaron","ncaron","Ncedil","ncedil","ncong","ncongdot","ncup","Ncy","ncy","ndash","ne","nearhk","neArr","nearr","nearrow","nedot","NegativeMediumSpace","NegativeThickSpace","NegativeThinSpace","NegativeVeryThinSpace","nequiv","nesear","nesim","NestedGreaterGreater","NestedLessLess","NewLine","nexist","nexists","Nfr","nfr","ngE","nge","ngeq","ngeqq","ngeqslant","nges","nGg","ngsim","nGt","ngt","ngtr","nGtv","nhArr","nharr","nhpar","ni","nis","nisd","niv","NJcy","njcy","nlArr","nlarr","nldr","nlE","nle","nLeftarrow","nleftarrow","nLeftrightarrow","nleftrightarrow","nleq","nleqq","nleqslant","nles","nless","nLl","nlsim","nLt","nlt","nltri","nltrie","nLtv","nmid","NoBreak","NonBreakingSpace","Nopf","nopf","Not","not","NotCongruent","NotCupCap","NotDoubleVerticalBar","NotElement","NotEqual","NotEqualTilde","NotExists","NotGreater","NotGreaterEqual","NotGreaterFullEqual","NotGreaterGreater","NotGreaterLess","NotGreaterSlantEqual","NotGreaterTilde","NotHumpDownHump","NotHumpEqual","notin","notindot","notinE","notinva","notinvb","notinvc","NotLeftTriangle","NotLeftTriangleBar","NotLeftTriangleEqual","NotLess","NotLessEqual","NotLessGreater","NotLessLess","NotLessSlantEqual","NotLessTilde","NotNestedGreaterGreater","NotNestedLessLess","notni","notniva","notnivb","notnivc","NotPrecedes","NotPrecedesEqual","NotPrecedesSlantEqual","NotReverseElement","NotRightTriangle","NotRightTriangleBar","NotRightTriangleEqual","NotSquareSubset","NotSquareSubsetEqual","NotSquareSuperset","NotSquareSupersetEqual","NotSubset","NotSubsetEqual","NotSucceeds","NotSucceedsEqual","NotSucceedsSlantEqual","NotSucceedsTilde","NotSuperset","NotSupersetEqual","NotTilde","NotTildeEqual","NotTildeFullEqual","NotTildeTilde","NotVerticalBar","npar","nparallel","nparsl","npart","npolint","npr","nprcue","npre","nprec","npreceq","nrArr","nrarr","nrarrc","nrarrw","nRightarrow","nrightarrow","nrtri","nrtrie","nsc","nsccue","nsce","Nscr","nscr","nshortmid","nshortparallel","nsim","nsime","nsimeq","nsmid","nspar","nsqsube","nsqsupe","nsub","nsubE","nsube","nsubset","nsubseteq","nsubseteqq","nsucc","nsucceq","nsup","nsupE","nsupe","nsupset","nsupseteq","nsupseteqq","ntgl","Ntilde","ntilde","ntlg","ntriangleleft","ntrianglelefteq","ntriangleright","ntrianglerighteq","Nu","nu","num","numero","numsp","nvap","nVDash","nVdash","nvDash","nvdash","nvge","nvgt","nvHarr","nvinfin","nvlArr","nvle","nvlt","nvltrie","nvrArr","nvrtrie","nvsim","nwarhk","nwArr","nwarr","nwarrow","nwnear","Oacute","oacute","oast","ocir","Ocirc","ocirc","Ocy","ocy","odash","Odblac","odblac","odiv","odot","odsold","OElig","oelig","ofcir","Ofr","ofr","ogon","Ograve","ograve","ogt","ohbar","ohm","oint","olarr","olcir","olcross","oline","olt","Omacr","omacr","Omega","omega","Omicron","omicron","omid","ominus","Oopf","oopf","opar","OpenCurlyDoubleQuote","OpenCurlyQuote","operp","oplus","Or","or","orarr","ord","order","orderof","ordf","ordm","origof","oror","orslope","orv","oS","Oscr","oscr","Oslash","oslash","osol","Otilde","otilde","Otimes","otimes","otimesas","Ouml","ouml","ovbar","OverBar","OverBrace","OverBracket","OverParenthesis","par","para","parallel","parsim","parsl","part","PartialD","Pcy","pcy","percnt","period","permil","perp","pertenk","Pfr","pfr","Phi","phi","phiv","phmmat","phone","Pi","pi","pitchfork","piv","planck","planckh","plankv","plus","plusacir","plusb","pluscir","plusdo","plusdu","pluse","PlusMinus","plusmn","plussim","plustwo","pm","Poincareplane","pointint","Popf","popf","pound","Pr","pr","prap","prcue","prE","prec","precapprox","preccurlyeq","Precedes","PrecedesEqual","PrecedesSlantEqual","PrecedesTilde","preceq","precnapprox","precneqq","precnsim","precsim","Prime","prime","primes","prnap","prnE","prnsim","prod","Product","profalar","profline","profsurf","prop","Proportion","Proportional","propto","prsim","prurel","Pscr","pscr","Psi","psi","puncsp","Qfr","qfr","qint","Qopf","qopf","qprime","Qscr","qscr","quaternions","quatint","quest","questeq","QUOT","rAarr","race","Racute","racute","radic","raemptyv","Rang","rang","rangd","range","rangle","raquo","Rarr","rArr","rarr","rarrap","rarrb","rarrbfs","rarrc","rarrfs","rarrhk","rarrlp","rarrpl","rarrsim","Rarrtl","rarrtl","rarrw","rAtail","ratail","ratio","rationals","RBarr","rBarr","rbarr","rbbrk","rbrace","rbrack","rbrke","rbrksld","rbrkslu","Rcaron","rcaron","Rcedil","rcedil","rceil","rcub","Rcy","rcy","rdca","rdldhar","rdquo","rdquor","rdsh","Re","real","realine","realpart","reals","rect","REG","reg","ReverseElement","ReverseEquilibrium","ReverseUpEquilibrium","rfisht","rfloor","Rfr","rfr","rHar","rhard","rharu","rharul","Rho","rho","rhov","RightAngleBracket","RightArrow","Rightarrow","rightarrow","RightArrowBar","RightArrowLeftArrow","rightarrowtail","RightCeiling","RightDoubleBracket","RightDownTeeVector","RightDownVector","RightDownVectorBar","RightFloor","rightharpoondown","rightharpoonup","rightleftarrows","rightleftharpoons","rightrightarrows","rightsquigarrow","RightTee","RightTeeArrow","RightTeeVector","rightthreetimes","RightTriangle","RightTriangleBar","RightTriangleEqual","RightUpDownVector","RightUpTeeVector","RightUpVector","RightUpVectorBar","RightVector","RightVectorBar","ring","risingdotseq","rlarr","rlhar","rlm","rmoust","rmoustache","rnmid","roang","roarr","robrk","ropar","Ropf","ropf","roplus","rotimes","RoundImplies","rpar","rpargt","rppolint","rrarr","Rrightarrow","rsaquo","Rscr","rscr","Rsh","rsh","rsqb","rsquo","rsquor","rthree","rtimes","rtri","rtrie","rtrif","rtriltri","RuleDelayed","ruluhar","rx","Sacute","sacute","sbquo","Sc","sc","scap","Scaron","scaron","sccue","scE","sce","Scedil","scedil","Scirc","scirc","scnap","scnE","scnsim","scpolint","scsim","Scy","scy","sdot","sdotb","sdote","searhk","seArr","searr","searrow","sect","semi","seswar","setminus","setmn","sext","Sfr","sfr","sfrown","sharp","SHCHcy","shchcy","SHcy","shcy","ShortDownArrow","ShortLeftArrow","shortmid","shortparallel","ShortRightArrow","ShortUpArrow","shy","Sigma","sigma","sigmaf","sigmav","sim","simdot","sime","simeq","simg","simgE","siml","simlE","simne","simplus","simrarr","slarr","SmallCircle","smallsetminus","smashp","smeparsl","smid","smile","smt","smte","smtes","SOFTcy","softcy","sol","solb","solbar","Sopf","sopf","spades","spadesuit","spar","sqcap","sqcaps","sqcup","sqcups","Sqrt","sqsub","sqsube","sqsubset","sqsubseteq","sqsup","sqsupe","sqsupset","sqsupseteq","squ","Square","square","SquareIntersection","SquareSubset","SquareSubsetEqual","SquareSuperset","SquareSupersetEqual","SquareUnion","squarf","squf","srarr","Sscr","sscr","ssetmn","ssmile","sstarf","Star","star","starf","straightepsilon","straightphi","strns","Sub","subdot","subE","sube","subedot","submult","subnE","subne","subplus","subrarr","Subset","subset","subseteq","subseteqq","SubsetEqual","subsetneq","subsetneqq","subsim","subsub","subsup","succ","succapprox","succcurlyeq","Succeeds","SucceedsEqual","SucceedsSlantEqual","SucceedsTilde","succeq","succnapprox","succneqq","succnsim","succsim","SuchThat","Sum","sum","sung","Sup","sup","sup1","sup2","sup3","supdot","supdsub","supE","supe","supedot","Superset","SupersetEqual","suphsol","suphsub","suplarr","supmult","supnE","supne","supplus","Supset","supset","supseteq","supseteqq","supsetneq","supsetneqq","supsim","supsub","supsup","swarhk","swArr","swarr","swarrow","swnwar","szlig","Tab","Tau","tau","tbrk","Tcaron","tcaron","Tcedil","tcedil","Tcy","tcy","tdot","telrec","Tfr","tfr","there4","Therefore","therefore","Theta","theta","thetasym","thetav","thickapprox","thicksim","ThickSpace","thinsp","ThinSpace","thkap","thksim","THORN","thorn","Tilde","tilde","TildeEqual","TildeFullEqual","TildeTilde","times","timesb","timesbar","timesd","tint","toea","top","topbot","topcir","Topf","topf","topfork","tosa","tprime","TRADE","trade","triangle","triangledown","triangleleft","trianglelefteq","triangleq","triangleright","trianglerighteq","tridot","trie","triminus","TripleDot","triplus","trisb","tritime","trpezium","Tscr","tscr","TScy","tscy","TSHcy","tshcy","Tstrok","tstrok","twixt","twoheadleftarrow","twoheadrightarrow","Uacute","uacute","Uarr","uArr","uarr","Uarrocir","Ubrcy","ubrcy","Ubreve","ubreve","Ucirc","ucirc","Ucy","ucy","udarr","Udblac","udblac","udhar","ufisht","Ufr","ufr","Ugrave","ugrave","uHar","uharl","uharr","uhblk","ulcorn","ulcorner","ulcrop","ultri","Umacr","umacr","uml","UnderBar","UnderBrace","UnderBracket","UnderParenthesis","Union","UnionPlus","Uogon","uogon","Uopf","uopf","UpArrow","Uparrow","uparrow","UpArrowBar","UpArrowDownArrow","UpDownArrow","Updownarrow","updownarrow","UpEquilibrium","upharpoonleft","upharpoonright","uplus","UpperLeftArrow","UpperRightArrow","Upsi","upsi","upsih","Upsilon","upsilon","UpTee","UpTeeArrow","upuparrows","urcorn","urcorner","urcrop","Uring","uring","urtri","Uscr","uscr","utdot","Utilde","utilde","utri","utrif","uuarr","Uuml","uuml","uwangle","vangrt","varepsilon","varkappa","varnothing","varphi","varpi","varpropto","vArr","varr","varrho","varsigma","varsubsetneq","varsubsetneqq","varsupsetneq","varsupsetneqq","vartheta","vartriangleleft","vartriangleright","Vbar","vBar","vBarv","Vcy","vcy","VDash","Vdash","vDash","vdash","Vdashl","Vee","vee","veebar","veeeq","vellip","Verbar","verbar","Vert","vert","VerticalBar","VerticalLine","VerticalSeparator","VerticalTilde","VeryThinSpace","Vfr","vfr","vltri","vnsub","vnsup","Vopf","vopf","vprop","vrtri","Vscr","vscr","vsubnE","vsubne","vsupnE","vsupne","Vvdash","vzigzag","Wcirc","wcirc","wedbar","Wedge","wedge","wedgeq","weierp","Wfr","wfr","Wopf","wopf","wp","wr","wreath","Wscr","wscr","xcap","xcirc","xcup","xdtri","Xfr","xfr","xhArr","xharr","Xi","xi","xlArr","xlarr","xmap","xnis","xodot","Xopf","xopf","xoplus","xotime","xrArr","xrarr","Xscr","xscr","xsqcup","xuplus","xutri","xvee","xwedge","Yacute","yacute","YAcy","yacy","Ycirc","ycirc","Ycy","ycy","yen","Yfr","yfr","YIcy","yicy","Yopf","yopf","Yscr","yscr","YUcy","yucy","Yuml","yuml","Zacute","zacute","Zcaron","zcaron","Zcy","zcy","Zdot","zdot","zeetrf","ZeroWidthSpace","Zeta","zeta","Zfr","zfr","ZHcy","zhcy","zigrarr","Zopf","zopf","Zscr","zscr","zwj","zwnj","nameStartChar","nameChar","RegExp","tagNamePattern","S_TAG","S_ATTR","S_ATTR_SPACE","S_EQ","S_ATTR_NOQUOT_VALUE","S_ATTR_END","S_TAG_SPACE","S_TAG_CLOSE","copyLocator","f","parseElementStartPart","currentNSMap","entityReplacer","addAttribute","qname","startIndex","attributeNames","addValue","attrName","s","charAt","setTagName","closed","match","localNSMap","a","nsp","nsPrefix","_copy","parseHtmlSpecialContent","elStartEnd","elEndStart","fixSelfClosed","closeMap","pos","lastIndexOf","parseDCC","end","matchs","exec","lastMatch","endDTD","parseInstruction","ElementAttributes","defaultNSMapCopy","fixedFromCharCode","surrogate1","surrogate2","k","parseInt","appendText","xt","m","lineEnd","linePattern","lineStart","parseStack","tagStart","config","pop","endMatch","locator2","Math","max","getLocalName","doccy","topLevel","g","minDoc","document","win","self","string","alert","confirm","prompt","keyCode","searchInput","hasKeyCode","which","charCode","names","foundNamedKey","search","codes","aliases","isEventKey","event","nameOrCode","title","alias","getUint64","view","DataView","buffer","byteOffset","byteLength","flags","subarray","references","referenceId","getUint32","timescale","earliestPresentationTime","firstOffset","referenceCount","getUint16","referenceType","referencedSize","subsegmentDuration","startsWithSap","sapType","sapDeltaTime","secondsToVideoTs","secondsToAudioTs","videoTsToSeconds","audioTsToSeconds","audioTsToVideoTs","videoTsToAudioTs","metadataTsToSeconds","ONE_SECOND_IN_TS","seconds","sampleRate","timestamp","timelineStartPts","keepOriginalTimestamps","MAX_UINT32","pow","uint8","dv","getBigUint64","Number","MAX_SAFE_INTEGER","reviver","URL_REGEX","FIRST_SEGMENT_REGEX","SLASH_DOT_REGEX","SLASH_DOT_DOT_REGEX","URLToolkit","buildAbsoluteURL","baseURL","relativeURL","opts","alwaysNormalize","basePartsForNormalise","parseURL","path","normalizePath","buildURLFromParts","relativeParts","scheme","baseParts","netLoc","pathParts","builtParts","query","fragment","baseURLPath","newPath","parts","reverse","bind","DEFAULT_LOCATION","baseUrl","relativeUrl","href","nativeURL","protocolLess","removeLocation","newUrl","URL","protocol","Stream","listeners","_proto","on","listener","off","splice","trigger","callbacks","args","_length","_i","dispose","pipe","destination","decodeB64ToUint8Array","b64Text","decodedString","Buffer","from","LineStream","super","nextNewline","TAB","parseByterange","byterangeString","parseAttributes","ParseStream","customParsers","tagMappers","line","acc","mapper","mappedLine","concat","newLine","tagType","duration","parseFloat","number","playlistType","allowed","URI","BYTERANGE","byterange","RESOLUTION","resolution","width","height","BANDWIDTH","dateTimeString","dateTimeObject","Date","IV","Uint32Array","PRECISE","subkey","clientAttributePattern","isHexaDecimal","isDecimalFloating","addParser","expression","customType","dataParser","segment","addTagMapper","camelCaseKeys","str","setHoldBack","manifest","serverControl","targetDuration","partTargetDuration","tag","hb","phb","minTargetDuration","minPartDuration","Parser","lineStream","parseStream","lastProgramDateTime","uris","currentMap","currentUri","hasParts","noop","defaultMediaGroups","currentTimeline","allowCache","discontinuityStarts","dateRanges","segments","lastByterangeEnd","lastPartByterangeEnd","dateRangeTags","preloadHints","timeline","preloadSegment","entry","mediaGroup","rendition","endlist","endList","inf","mediaSequence","discontinuitySequence","METHOD","KEYFORMAT","contentProtection","KEYID","schemeIdUri","keyId","pssh","iv","isFinite","playlist","playlists","mediaGroups","media","TYPE","NAME","mediaGroupType","default","DEFAULT","autoselect","AUTOSELECT","LANGUAGE","language","instreamId","CHARACTERISTICS","characteristics","FORCED","forced","discontinuity","getTime","reduceRight","programDateTime","targetduration","isNaN","timeOffset","precise","cueOut","cueOutCont","cueIn","skip","warnOnMissingAttributes_","segmentIndex","partIndex","renditionReports","r","canBlockReload","canSkipDateranges","hint","isPart","otherHint","report","required","partInf","partTarget","dateRange","endDate","startDate","plannedDuration","endOnNextYes","endOnNext","class","newDateInSeconds","attribute","dateRangeWithSameId","findIndex","dateRangeToFind","independentSegments","contentSteering","custom","identifier","missing","chunk","b","regexs","mp4","webm","ogg","video","audio","muxerVideo","muxerAudio","muxerText","mediaTypes","upperMediaTypes","translateLegacyCodec","codec","orig","profile","avcLevel","parseCodecs","codecString","codecs","codecType","details","mediaType","isAudioCodec","getMimeForCodec","container","browserSupportsCodec","isTypeSupported","muxerSupportsCodec","DEFAULT_AUDIO_CODEC","MPEGURL_REGEX","DASH_REGEX","simpleTypeFromSourceType","isArrayBufferView","ArrayBuffer","isView","bytes","BigInt","BYTE_TABLE","Uint16Array","_temp","_ref","_ref$signed","signed","_ref$le","total","byte","exponent","abs","numberToBytes","_temp2","_ref2$le","x","byteCount","ceil","countBits","byteIndex","stringToBytes","stringIsBytes","unescape","encodeURIComponent","_temp3","_ref3","_ref3$offset","_ref3$mask","mask","bByte","isObject","merge","objects","values","o","flatten","lists","y","errors","urlTypeToSegment","indexRange","resolvedUri","ranges","startRange","endRange","parseEndNumber","endNumber","segmentRange","static","sourceDuration","periodDuration","segmentDuration","dynamic","NOW","clientOffset","availabilityStartTime","periodStart","minimumUpdatePeriod","timeShiftBufferDepth","Infinity","now","periodStartWC","segmentCount","availableStart","floor","availableEnd","min","parseByDuration","startNumber","time","toSegments","sectionDuration","segmentsFromBase","initialization","presentationTime","initSegment","sourceURL","segmentTimeInfo","addSidxSegmentsToPlaylist$1","sidx","sidxByteRange","sidxEnd","mediaReferences","reference","size","endIndex","SUPPORTED_MEDIA_TYPES","getUniqueTimelineStarts","timelineStarts","keyFunction","sort","getMediaGroupPlaylists","mediaGroupPlaylists","master","properties","group","label","groupKey","labelKey","mediaProperties","updateMediaSequenceForPlaylist","positionManifestOnTimeline","oldManifest","newManifest","oldPlaylists","newPlaylists","oldPlaylist","findPlaylistWithName","firstNewSegment","oldMatchingSegmentIndex","oldSegment","unshift","updateSequenceNumbers","generateSidxKey","byteRangeToString","mergeDiscontiguousPlaylists","playlistsByBaseUrl","cur","allPlaylists","playlistGroup","mergedPlaylists","addSidxSegmentsToPlaylist","sidxMapping","sidxKey","sidxMatch","addSidxSegmentsToPlaylists","formatVideoPlaylist","AUDIO","SUBTITLES","CODECS","bandwidth","frameRate","serviceLocation","videoOnly","audioOnly","vttOnly","flattenMediaGroupPlaylists","mediaGroupObject","labelContents","toM3u8","dashPlaylists","locations","previousManifest","eventStream","suggestedPresentationDelay","videoPlaylists","audioPlaylists","vttPlaylists","captions","captionServices","Boolean","VIDEO","isAudioOnly","organizedAudioGroup","mainPlaylist","formattedPlaylists","role","roleLabel","formatted","formatAudioPlaylist","organizeAudioPlaylists","organizedVttGroup","m3u8Attributes","vttPlaylist","formatVttPlaylist","organizeVttPlaylists","playlistTimelineStarts","subs","cc","svcObj","svc","service","channel","aspectRatio","easyReader","getLiveRValue","parseByTimeline","segmentTimeline","sIndex","S","d","repeat","segmentTime","nextS","identifierPattern","constructTemplateUrl","format","identifierReplacement","segmentsFromTemplate","templateValues","RepresentationID","Bandwidth","mapSegment","parseTemplateInfo","Time","presentationTimeOffset","segmentsFromList","segmentUrls","segmentUrlMap","segmentUrlObject","segmentUrl","mediaRange","SegmentURLToSegmentObject","generateSegments","segmentInfo","segmentAttributes","segmentsFn","template","segmentsInfo","findChildren","getContent","textContent","parseDuration","year","month","day","hour","minute","second","parsers","mediaPresentationDuration","prev","parseDivisionValue","parsedValue","parseFn","keySystemsMap","buildBaseUrls","baseUrlElements","baseUrlElement","initialBaseUrl","resolvedBaseUrl","finalBaseUrl","getSegmentInformation","adaptationSet","segmentTemplate","segmentList","segmentBase","segmentTimelineParentNode","segmentInitializationParentNode","segmentInitialization","toEventStream","eventStreamAttributes","eventAttributes","messageData","contentEncoding","toRepresentations","periodAttributes","periodBaseUrls","periodSegmentInfo","adaptationSetAttributes","adaptationSetBaseUrls","roleAttributes","accessibility","opt","val","parseCaptionServiceMetadata","labelVal","keySystem","psshNode","representations","adaptationSetSegmentInfo","representation","repBaseUrlElements","repBaseUrls","representationSegmentInfo","inheritBaseUrls","toAdaptationSets","mpdAttributes","mpdBaseUrls","adaptationSets","generateContentSteeringInformation","contentSteeringNodes","eventHandler","infoFromContentSteeringTag","serverURL","queryBeforeStart","stringToMpdXml","manifestString","parser","mpd","parsedManifestInfo","manifestUri","periodNodes","periods","priorPeriod","priorPeriodAttributes","mpdType","getPeriodStart","contentSteeringInfo","representationInfo","inheritAttributes","parseUTCTiming","UTCTimingNode","parseUTCTimingScheme","DESCRIPTORS","ID3","getId3Offset","returnSize","getId3Size","parseDescriptors","results","headerSize","z","_DESCRIPTORS$z","desc","dependsOnEsId","ocrEsId","descriptors","decodeURIComponent","escape","oti","streamType","bufferSize","maxBitrate","avgBitrate","findBox","paths","complete","normalizePaths","EBML_TAGS","EBML","DocType","Segment","SegmentInfo","Tracks","Track","TrackNumber","DefaultDuration","TrackEntry","TrackType","FlagDefault","CodecID","CodecPrivate","VideoTrack","AudioTrack","Cluster","Timestamp","TimestampScale","BlockGroup","BlockDuration","Block","SimpleBlock","LENGTH_TABLE","getvint","removeLength","getLength","valueBytes","getInfinityDataSize","innerid","dataHeader","findEbml","dataStart","dataEnd","NAL_TYPE_ONE","NAL_TYPE_TWO","EMULATION_PREVENTION","discardEmulationPreventionBytes","positions","newLength","newData","sourceIndex","shift","findNal","dataType","types","nalLimit","nalStart","nalsFound","nalOffset","nalType","CONSTANTS","_isLikely","aac","mp3","docType","mkv","matroska","mov","fmp4","moof","moov","ac3","ts","flac","avi","riff","wav","findH264Nal","findH265Nal","isLikelyTypes","isLikelyFn","isLikely","detectContainerForBytes","version$6","hooks_","hooks","removeHook","FullscreenApi","prefixed","apiMap","specApi","browserApi","log$1","createLogger$1","delimiter","styles","logByType","level","log","lvl","levels","lvlRegExp","resultName","info","LogByTypeFactory","createLogger","subName","subDelimiter","subStyles","resultDelimiter","createNewLogger","newName","newDelimiter","newStyles","all","debug","history","fname","historyItem","clear","disable","enable","each","initial","accum","isPlain","merge$1","sources","defineLazyProperty","setter","enumerable","writable","configurable","Obj","__proto__","ANDROID_VERSION","IS_IPOD","IOS_VERSION","IS_ANDROID","IS_FIREFOX","IS_EDGE","IS_CHROMIUM","IS_CHROME","CHROMIUM_VERSION","CHROME_VERSION","IE_VERSION","IS_SAFARI","IS_WINDOWS","IS_IPAD","IS_IPHONE","TOUCH_ENABLED","isReal","maxTouchPoints","UAD","userAgentData","platform","brands","brand","USER_AGENT","userAgent","major","minor","IS_IOS","IS_ANY_SAFARI","browser","isNonBlankString","isEl","isInFrame","createQuerier","selector","context","ctx","createEl","content","getOwnPropertyNames","propName","appendContent","innerText","prependTo","hasClass","classToCheck","throwIfWhitespace","classList","contains","addClass","classesToAdd","add","removeClass","classesToRemove","toggleClass","classToToggle","className","toggle","setAttributes","attrValue","getAttributes","knownBooleans","attrVal","includes","blockTextSelection","focus","unblockTextSelection","getBoundingClientRect","computedStyle","findPosition","offsetParent","left","offsetWidth","offsetHeight","fullscreenElement","offsetLeft","offsetTop","getPointerPosition","translated","transform","boxTarget","box","boxW","offsetY","offsetX","changedTouches","pageX","pageY","emptyEl","normalizeContent","insertContent","isSingleLeftClick","button","buttons","$","$$","computedStyleValue","getPropertyValue","copyStyleSheetsToWindow","styleSheet","cssRules","rule","cssText","style","head","link","rel","mediaText","Dom","videojs$1","_windowLoaded","autoSetup","vids","audios","divs","mediaEls","mediaEl","autoSetupTimeout","player","wait","vjs","setWindowLoaded","createStyleElement","setTextContent","DomData","WeakMap","_supportsPassive","_guid","newGUID","_cleanUpEvents","elem","has","handlers","removeEventListener","dispatcher","detachEvent","disabled","delete","_handleMultipleEvents","fixEvent","fixed_","returnTrue","returnFalse","isPropagationStopped","isImmediatePropagationStopped","preventDefault","srcElement","relatedTarget","fromElement","toElement","returnValue","defaultPrevented","stopPropagation","cancelBubble","stopImmediatePropagation","clientX","scrollLeft","clientLeft","clientY","scrollTop","clientTop","supportsPassive","passiveEvents","guid","hash","handlersCopy","addEventListener","passive","attachEvent","removeType","elemData","bubbles","targetData","one","func","any","Events","UPDATE_REFRESH_INTERVAL","bind_","uid","bound","throttle","last","debounce","immediate","debounced","later","cancel","Fn","EVENT_MAP","EventTarget$2","ael","allowedEvents_","queueTrigger","oldTimeout","dispatchEvent","objName","name_","isEvented","eventBusEl_","isValidEventType","validateTarget","fnName","validateEventType","validateListener","normalizeListenArgs","isTargetingSelf","listen","EventedMixin","removeListenerOnDispose","removeRemoverOnTargetDispose","wrapper","largs","targetOrType","typeOrListener","evented","eventBusKey","eventedCallbacks","el_","StatefulMixin","state","setState","stateUpdates","changes","to","stateful","defaultState","handleStateChanged","w","toTitleCase$1","titleCaseEquals","str1","str2","Str","toTitleCase","Component$1","ready","play","player_","isDisposed_","parentComponent_","options_","id_","handleLanguagechange","children_","childIndex_","childNameIndex_","setTimeoutIds_","Set","setIntervalIds_","rafIds_","namedRafs_","clearingTimersOnDispose_","initChildren","reportTouchActivity","enableTouchActivity","readyQueue_","restoreEl","isDisposed","localize","tokens","defaultValue","languages","primaryCode","primaryLang","localizedString","ret","contentEl","contentEl_","children","getChildById","getChild","getDescendant","currentChild","setIcon","iconName","experimentalSvgIcons","xmlnsURL","iconContainer","svgEl","useEl","iconIsSet_","querySelector","addChild","component","componentName","componentClassName","componentClass","ComponentClass","getComponent","childFound","compEl","parentOptions","handleAdd","playerOptions","workingChildren","Tech","some","wchild","isTech","buildCSSClass","isReady_","triggerReady","readyQueue","show","hide","lockShowing","unlockShowing","skipListeners","dimension","dimensions","widthOrHeight","pxIndex","currentDimension","computedWidthOrHeight","currentDimensions","currentWidth","currentHeight","blur","handleKeyDown","handleKeyPress","emitTapEvents","touchStart","firstTouch","couldBeTap","touches","xdiff","ydiff","sqrt","noTap","reportUserActivity","touchHolding","clearInterval","setInterval","touchEnd","timeoutId","clearTimersOnDispose_","interval","intervalId","requestAnimationFrame","requestNamedAnimationFrame","cancelNamedAnimationFrame","cancelAnimationFrame","idName","cancelName","registerComponent","ComponentToRegister","isComp","isPrototypeOf","reason","components_","Player","players","playerNames","pname","getRange","valueIndex","rangeIndex","maxIndex","rangeCheck","createTimeRangesObj","timeRangesObj","createTimeRanges$1","defaultImplementation","guide","h","gm","gh","setFormatTime","customImplementation","resetFormatTime","formatTime","createTimeRanges","createTimeRange","bufferedPercent","buffered","bufferedDuration","MediaError","defaultMessages","errorTypes","errNum","isPromise","then","silencePromise","trackToJson_","track","cues","cue","startTime","endTime","textTrackConverter","tech","trackEls","trackObjs","trackEl","textTracks","addedTrack","addRemoteTextTrack","addCue","MODAL_CLASS_NAME","ModalDialog","handleKeyDown_","close_","close","opened_","hasBeenOpened_","hasBeenFilled_","closeable","uncloseable","descEl_","description","tabIndex","previouslyActiveEl_","fillAlways","fill","wasPlaying_","paused","pauseOnOpen","pause","hadControls_","controls","conditionalFocus_","opened","conditionalBlur_","temporary","closeable_","temp","controlText","fillWith","parentEl","nextSiblingEl","closeButton","content_","activeEl","playerEl","focusableEls","focusableEls_","focusIndex","shiftKey","allChildren","querySelectorAll","TrackList","tracks","tracks_","addTrack","labelchange_","removeTrack","rtrack","getTrackById","change","addtrack","removetrack","labelchange","disableOthers$1","enabled","disableOthers","selected","TextTrackList","queueChange_","triggerSelectedlanguagechange","triggerSelectedlanguagechange_","kind","selectedlanguagechange_","TextTrackCueList","setCues_","length_","oldLength","cues_","defineProp","getCueById","VideoTrackKind","alternative","main","sign","subtitles","commentary","AudioTrackKind","TextTrackKind","descriptions","chapters","metadata","TextTrackMode","hidden","showing","trackProps","newLabel","parseUrl","props","host","getAbsoluteURL","getFileExtension","isCrossOrigin","winLoc","urlInfo","Url","parseCues","srcContent","StringDecoder","oncue","onparsingerror","onflush","groupCollapsed","groupEnd","flush","loadTrack","crossOrigin","tech_","loaded_","TextTrack","settings","srclang","mode","default_","activeCues_","preload_","preloadTextTracks","activeCues","changed","timeupdateHandler","rvf_","requestVideoFrameCallback","stopTracking","startTracking","defineProperties","newMode","ct","currentTime","active","cancelVideoFrameCallback","originalCue","VTTCue","originalCue_","removeCue","cuechange","newEnabled","newSelected","HTMLTrackElement","NONE","LOADED","load","LOADING","ERROR","NORMAL","ListClass","changing_","enabledChange_","TrackClass","capitalName","selectedChange_","getterName","privateName","REMOTE","remoteText","remoteTextEl","trackElements","trackElements_","addTrackElement_","trackElement","getTrackElementByTrack_","trackElement_","removeTrackElement_","ALL","onDurationChange_","onDurationChange","trackProgress_","trackProgress","trackCurrentTime_","trackCurrentTime","stopTrackingCurrentTime_","stopTrackingCurrentTime","disposeSourceHandler_","disposeSourceHandler","queuedHanders_","hasStarted_","featuresProgressEvents","manualProgressOn","featuresTimeupdateEvents","manualTimeUpdatesOn","nativeCaptions","nativeTextTracks","featuresNativeTextTracks","emulateTextTracks","autoRemoteTextTracks_","initTrackListeners","nativeControlsForTouch","triggerSourceset","manualProgress","manualProgressOff","stopTrackingProgress","progressInterval","numBufferedPercent","bufferedPercent_","duration_","manualTimeUpdates","manualTimeUpdatesOff","currentTimeInterval","manuallyTriggered","clearTracks","removeRemoteTextTrack","cleanupAutoTextTracks","reset","setCrossOrigin","error_","played","setScrubbing","_isScrubbing","scrubbing","setCurrentTime","_seconds","trackListChanges","addWebVttScript_","script","remoteTracks","remoteTextTracks","handleAddTrack","handleRemoveTrack","updateDisplay","textTracksChanges","addTextTrack","createTrackHelper","createRemoteTextTrack","manualCleanup","htmlTrackElement","remoteTextTrackEls","getVideoPlaybackQuality","requestPictureInPicture","Promise","reject","disablePictureInPicture","setDisablePictureInPicture","cb","setPoster","playsinline","setPlaysinline","overrideNativeAudioTracks","override","overrideNativeVideoTracks","canPlayType","_type","canPlaySource","srcObj","registerTech","techs_","defaultTechOrder_","getTech","featuresVolumeControl","featuresMuteControl","featuresFullscreenResize","featuresPlaybackRate","featuresSourceset","featuresVideoFrameCallback","withSourceHandlers","_Tech","registerSourceHandler","handler","sourceHandlers","can","selectSourceHandler","canHandleSource","sh","originalFn","sourceHandler_","setSource","nativeSourceHandler","currentSource_","handleSource","middlewares","middlewareInstances","TERMINATOR","setSourceHelper","mediate","middleware","arg","callMethod","middlewareValue","middlewareIterator","terminated","mws","mw","executeRight","allowedGetters","muted","seekable","volume","ended","allowedSetters","setMuted","setVolume","allowedMediators","lastRun","mwFactory","mwrest","mwf","mwi","getOrCreateFactory","_src","MimetypesKind","opus","ogv","m4v","m4a","caf","oga","m3u8","jpg","jpeg","gif","png","svg","webp","getMimetype","ext","filterSource","newsrc","srcobj","fixSource","mimetype","j","techOrder","techName","loadTech_","ClickableComponent","handleMouseOver_","handleMouseOver","handleMouseOut_","handleMouseOut","handleClick_","handleClick","tabIndex_","createControlTextEl","controlTextEl_","controlText_","localizedText","nonIconControl","noUITitleAttributes","enabled_","clickHandler","PosterImage","update","update_","crossorigin","poster","setSrc","loading","alt","darkGray","lightGray","fontMap","monospace","sansSerif","serif","monospaceSansSerif","monospaceSerif","proportionalSansSerif","proportionalSerif","casual","smallcaps","constructColor","color","opacity","hex","tryUpdateStyle","getCSSPositionValue","updateDisplayHandler","updateDisplayOverlay","toggleDisplay","preselectTrack","screenOrientation","orientation","changeOrientationEvent","modes","trackList","userPref","cache_","selectedLanguage","firstDesc","firstCaptions","preferredTrack","clearDisplay","processCues","allowMultipleShowingTracks","showingTracks","updateForTrack","descriptionsTrack","captionsSubtitlesTrack","videoHeight","supports","playerWidth","playerHeight","playerAspectRatio","videoAspectRatio","videoWidth","insetInlineMatch","insetBlockMatch","round","updateDisplayState","overrides","textTrackSettings","getValues","cueDiv","displayState","textOpacity","backgroundColor","backgroundOpacity","windowColor","windowOpacity","edgeStyle","textShadow","fontPercent","fontSize","fontFamily","fontVariant","cueEl","isAudio","playerType","dir","Button","BigPlayButton","mouseused_","handleMouseDown","playPromise","playToggle","playFocus","PlayToggle","replay","handlePlay","handlePause","handleEnded","handleSeeked","TimeDisplay","updateTextNode_","span","labelText_","textNode_","enableSmoothSeeking","updateContent","formattedTime_","oldNode","CurrentTimeDisplay","getCache","DurationDisplay","RemainingTimeDisplay","displayNegative","remainingTimeDisplay","remainingTime","updateShowing","SeekToLive","updateLiveEdgeStatus","liveTracker","updateLiveEdgeStatusHandler_","textEl_","atLiveEdge","seekToLiveEdge","clamp","Num","Slider","handleMouseDown_","handleMouseUp_","handleMouseUp","handleMouseMove_","handleMouseMove","bar","barName","vertical","playerEvent","progress","getProgress","progress_","sizeKey","toFixed","getPercent","calculateDistance","stepBack","stepForward","bool","vertical_","percentify","partEls_","loadedText","separator","percentageEl_","isLive","seekableEnd","bufferedEnd","percent","percent_","dataset","seekBarRect","seekBarPoint","tooltipRect","playerRect","seekBarPointPx","spaceLeftOfPoint","spaceRightOfPoint","right","pullTooltipBy","write","updateTime","liveWindow","secondsBehind","PlayProgressBar","timeTooltip","MouseTimeDisplay","SeekBar","setEventHandlers_","updateInterval","enableIntervalHandler_","enableInterval_","disableIntervalHandler_","disableInterval_","toggleVisibility_","getCurrentTime_","liveCurrentTime","currentTime_","userSeek_","nextSeekedFromUser","seekableStart","videoWasPlaying","mouseDown","newTime","distance","mouseTimeDisplay","handleAction","gotoFraction","STEP_SECONDS","ProgressControl","throttledHandleMouseSeek","handleMouseSeek","handleMouseUpHandler_","handleMouseDownHandler_","seekBar","playProgressBar","seekBarEl","removeListenersAddedOnMousedownAndTouchstart","PictureInPictureToggle","handlePictureInPictureChange","handlePictureInPictureEnabledChange","handlePictureInPictureAudioModeChange","currentType","audioPosterMode","audioOnlyMode","isInPictureInPicture","exitPictureInPicture","enableDocumentPictureInPicture","FullscreenToggle","handleFullscreenChange","fsApi_","fullscreenEnabled","isFullscreen","exitFullscreen","requestFullscreen","rangeBarRect","rangeBarPoint","volumeBarPointPx","updateVolume","MouseVolumeLevelDisplay","VolumeBar","updateLastVolume_","updateARIAAttributes","mouseVolumeLevelDisplay","volumeBarEl","volumeBarRect","volumeBarPoint","checkMuted","ariaValue","volumeAsPercentage_","volumeBeforeDrag","lastVolume_","VolumeControl","volumeBar","checkVolumeSupport","throttledHandleMouseMove","orientationClass","MuteToggle","checkMuteSupport","vol","lastVolume","volumeToSet","updateIcon_","updateControlText_","VolumePanel","inline","volumeControl","handleKeyPressHandler_","volumePanelState_","muteToggle","handleVolumeControlKeyUp","sliderActive_","sliderInactive_","SkipForward","validOptions","skipTime","getSkipForwardTime","controlBar","skipButtons","forward","currentVideoTime","SkipBackward","getSkipBackwardTime","backward","Menu","menuButton_","menuButton","focusedChild_","boundHandleBlur_","handleBlur","boundHandleTapClick_","handleTapClick","addEventListenerForItem","removeEventListenerForItem","addItem","childComponent","contentElType","append","btn","buttonPressed_","unpressButton","childComponents","foundComponent","stepChild","MenuButton","buttonClass","handleMenuKeyUp_","handleMenuKeyUp","menu","handleMouseLeave","handleSubmenuKeyDown","createMenu","items","hideThreshold_","titleEl","titleComponent","createItems","buildWrapperCSSClass","menuButtonClass","pressButton","handleSubmenuKeyPress","TrackButton","updateHandler","MenuKeys","MenuItem","selectable","isSelected_","multiSelectable","menuItemEl","TextTrackMenuItem","kinds","changeHandler","handleTracksChange","selectedLanguageChangeHandler","handleSelectedLanguageChange","onchange","initEvent","referenceTrack","shouldBeSelected","OffTextTrackMenuItem","allHidden","TextTrackButton","TrackMenuItem","label_","kinds_","kind_","ChaptersTrackMenuItem","ChaptersButton","selectCurrentItem_","track_","findChaptersTrack","setTrack","updateHandler_","remoteTextTrackEl","getMenuCaption","mi","DescriptionsButton","SubtitlesButton","CaptionSettingsMenuItem","CaptionsButton","SubsCapsMenuItem","parentSpan","SubsCapsButton","language_","AudioTrackMenuItem","audioTracks","featuresNativeAudioTracks","AudioTrackButton","PlaybackRateMenuItem","rate","playbackRate","PlaybackRateMenuButton","labelElId_","updateVisibility","updateLabel","handlePlaybackRateschange","labelEl_","rates","playbackRates","playbackRateSupported","Spacer","ControlBar","ErrorDisplay","LOCAL_STORAGE_KEY$1","COLOR_BLACK","COLOR_BLUE","COLOR_CYAN","COLOR_GREEN","COLOR_MAGENTA","COLOR_RED","COLOR_WHITE","COLOR_YELLOW","OPACITY_OPAQUE","OPACITY_SEMI","OPACITY_TRANS","selectConfigs","parseOptionValue","endDialog","setDefaults","persistTextTrackSettings","saveSettings","restoreSettings","createElSelect_","legendId","selectLabelledbyIds","optionId","createElFgColor_","createElBgColor_","createElWinColor_","createElColors_","innerHTML","createElFont_","createElControls_","defaultsDescription","selectedIndex","setValues","setSelectedOption","getItem","setItem","removeItem","ttDisplay","subsCapsBtn","subsCapsButton","ccBtn","captionsButton","RESIZE_OBSERVER_AVAILABLE","ResizeObserver","loadListener_","resizeObserver_","debouncedHandler_","resizeHandler","observe","contentWindow","unloadListener_","unobserve","disconnect","resizeObserver","defaults","trackingThreshold","liveTolerance","trackLiveHandler_","trackLive_","handlePlay_","handleFirstTimeupdate_","handleFirstTimeupdate","handleSeeked_","seekToLiveEdge_","reset_","handleDurationchange","toggleTracking","deltaTime","lastTime_","pastSeekEnd_","pastSeekEnd","isBehind","seekedBehindLive_","timeupdateSeen_","behindLiveEdge_","liveui","isTracking","hasStarted","trackingInterval_","timeDiff","nextSeekedFromUser_","lastSeekEnd_","seekableEnds","seekableStarts","behindLiveEdge","updateDom_","techEl","techAriaAttrs","techAriaAttr","sourcesetLoad","srcUrls","innerHTMLDescriptorPolyfill","dummy","docFrag","getDescriptor","priority","descriptor","getOwnPropertyDescriptor","firstSourceWatch","resetSourceWatch_","innerDescriptor","getInnerHTMLDescriptor","appendWrapper","appendFn","retval","srcDescriptorPolyfill","setupSourceset","resetSourceset_","srcDescriptor","getSrcDescriptor","oldSetAttribute","oldLoad","currentSrc","Html5","crossoriginTracks","initNetworkState_","handleLateInit_","enableSourceset","setupSourcesetHandling_","isScrubbing_","nodes","nodesLength","removeNodes","proxyNativeTracks_","restoreMetadataTracksInIOSNativePlayer_","setControls","proxyWebkitFullscreen_","disposeMediaElement","metadataTracksPreFullscreenState","takeMetadataTrackSnapshot","storedMode","restoreTrackMode","storedTrack","overrideNative_","lowerCaseType","eventName","proxyNativeTracksForType_","elTracks","techTracks","currentTarget","removeOldTracks","removeTracks","found","playerElIngest","movingMediaElementInDOM","clone","techId","playerId","preload","settingsAttrs","networkState","loadstartFired","setLoadstartFired","triggerLoadstart","eventsToTrigger","isScrubbing","fastSeek","checkProgress","NaN","endFn","beginFn","webkitPresentationMode","nativeIOSFullscreen","supportsFullScreen","webkitEnterFullScreen","enterFullScreen","HAVE_METADATA","exitFullScreen","webkitDisplayingFullscreen","webkitExitFullScreen","webkitKeys","resetMediaElement","videoPlaybackQuality","webkitDroppedFrameCount","webkitDecodedFrameCount","droppedVideoFrames","totalVideoFrames","creationTime","TEST_VID","canControlVolume","canControl","canMuteVolume","canControlPlaybackRate","canOverrideAttributes","supportsNativeTextTracks","supportsNativeVideoTracks","videoTracks","supportsNativeAudioTracks","TECH_EVENTS_RETRIGGER","TECH_EVENTS_QUEUE","canplay","canplaythrough","playing","seeked","BREAKPOINT_ORDER","BREAKPOINT_CLASSES","DEFAULT_BREAKPOINTS","tiny","xsmall","small","medium","large","xlarge","huge","getTagSettings","closest","boundDocumentFullscreenChange_","documentFullscreenChange_","boundFullWindowOnEscKey_","fullWindowOnEscKey","boundUpdateStyleEl_","updateStyleEl_","boundApplyInitTime_","applyInitTime_","boundUpdateCurrentBreakpoint_","updateCurrentBreakpoint_","boundHandleTechClick_","handleTechClick_","boundHandleTechDoubleClick_","handleTechDoubleClick_","boundHandleTechTouchStart_","handleTechTouchStart_","boundHandleTechTouchMove_","handleTechTouchMove_","boundHandleTechTouchEnd_","handleTechTouchEnd_","boundHandleTechTap_","handleTechTap_","isFullscreen_","isPosterFromTech_","queuedCallbacks_","userActive_","debugEnabled_","audioOnlyMode_","audioPosterMode_","audioOnlyCache_","hiddenChildren","tagAttributes","languagesToLower","languages_","resetCache_","poster_","controls_","changingSrc_","playCallbacks_","playTerminatedQueue_","autoplay","plugins","scrubbing_","fullscreenchange","fluid_","playerOptionsCopy","middleware_","parsedSVG","sprite","display","majorVersion","userActive","listenForUserActivity_","breakpoints","responsive","styleEl_","playerElIngest_","divEmbed","tabindex","defaultsStyleEl","fill_","fluid","links","linkEl","techGet_","techCall_","posterImage","privDimension","parsedVal","aspectRatio_","width_","height_","idClass","ratioParts","ratioMultiplier","unloadTech_","titleTechName","camelTechName","techName_","normalizeAutoplay","techOptions","loop","techCanOverridePoster","TechClass","handleTechReady_","textTracksJson_","eventObj","seeking","handleTechLoadStart_","handleTechSourceset_","handleTechWaiting_","handleTechEnded_","handleTechSeeking_","handleTechPlay_","handleTechPause_","handleTechDurationChange_","handleTechFullscreenChange_","handleTechFullscreenError_","handleTechEnterPictureInPicture_","handleTechLeavePictureInPicture_","handleTechError_","handleTechPosterChange_","handleTechTextData_","handleTechRateChange_","usingNativeControls","addTechControlsListeners_","safety","removeTechControlsListeners_","manualAutoplay_","resolveMuted","previouslyMuted","restoreMuted","mutedPromise","catch","promise","updateSourceCaches_","matchingSources","findMimetype","sourceElSources","sourceEls","matchingSourceEls","sourceObj","updateSourceCaches","playerSrc","currentSource","eventSrc","lastSource_","techSrc","request","lastPlaybackRate","queued","timeWhenWaiting","timeUpdateListener","handleTechCanPlay_","handleTechCanPlayThrough_","handleTechPlaying_","handleTechSeeked_","userActions","click","doubleClick","userWasActive","cancelable","toggleFullscreenClass_","targetPlayer","isFs","fullscreen","togglePictureInPictureClass_","initTime","inactivityTimeout","defaultPlaybackRate","resolve","play_","isSrcReady","isSafariOrIOS","waitToPlay_","resetProgressBar_","runPlayTerminatedQueue_","runPlayCallbacks_","queue","q","percentAsDecimal","defaultMuted","isFS","oldValue","fullscreenOptions","offHandler","requestFullscreenHelper_","fsOptions","preferFullWindow","enterFullWindow","exitFullscreenHelper_","exitFullWindow","isFullWindow","docOrigOverflow","overflow","isPiP","isInPictureInPicture_","pipContainer","titleBar","requestWindow","pipWindow","pipVideo","hotkeys","isContentEditable","excludeElement","activeElement","handleHotkeys","fullscreenKey","keydownEvent","muteKey","playPauseKey","FSToggle","selectSource","techs","findFirstPassingTechSourcePair","outerArray","innerArray","tester","outerChoice","innerChoice","foundSourceAndTech","finder","sourceOrder","handleSrc_","isRetry","resetRetryOnError_","middlewareSource","src_","notSupportedMessage","setTech","retry","stopListeningForErrors","sourceTech","vhs","doReset_","resetControlBarUI_","resetPlaybackRate_","resetVolumeBar_","currentTimeDisplay","durationDisplay","progressControl","loadProgressBar","currentSources","techAutoplay","newPoster","usingNativeControls_","hookFunction","newErr","suppressNotSupportedError","triggerSuppressedError","errorDisplay","userActivity_","mouseInProgress","lastMoveX","lastMoveY","handleActivity","handleMouseUpAndMouseLeave","screenX","screenY","isAudio_","enableAudioOnlyUI_","playerChildren","controlBarHeight","disableAudioOnlyUI_","exitPromises","enablePosterModeUI_","disablePosterModeUI_","toJSON","createModal","modal","currentBreakpoint","candidateBreakpoint","breakpoints_","breakpoint_","removeCurrentBreakpoint_","currentBreakpointClass","responsive_","loadMedia","artist","artwork","tt","getMedia","baseOptions","tagOptions","dataSetup","childName","previousLogLevel_","newRates","html5","userLanguage","navigationUI","BASE_PLUGIN_NAME","PLUGIN_CACHE_KEY","pluginStorage","pluginExists","getPlugin","markPluginAsActive","triggerSetupEvent","before","createPluginFactory","PluginSubClass","plugin","instance","getEventHash","Plugin","VERSION","isBasic","registerPlugin","basicPluginWrapper","createBasicPlugin","deregisterPlugin","getPlugins","getPluginVersion","deprecateForMajor","oldName","warned","deprecate","usingPlugin","hasPlugin","normalizeId","videojs","getPlayer","rootNode","getRootNode","defaultView","PlayerComponent","hook","hookOnce","original","getPlayers","nId","getAllPlayers","use","writeable","mergeOptions","addLanguage","EventTarget","QualityLevel","bitrate","QualityLevelList","levels_","selectedIndex_","Symbol","addQualityLevel","qualityLevel","getQualityLevelById","removeQualityLevel","removed","addqualitylevel","removequalitylevel","version$5","qualityLevels","originalPluginFn","qualityLevelList","disposeHandler","initPlugin$1","resolveManifestRedirect","req","responseURL","logger","TIME_FUDGE_FACTOR","SAFE_TIME_DELTA","filterRanges","timeRanges","findRange","findNextRange","printableRange","strArr","timeRangesToArray","timeRangesList","lastBufferedEnd","timeAheadOf","segmentDurationWithParts","getPartsAndSegments","si","getLastParts","lastSegment","getKnownPartCount","partCount","liveEdgeDelay","partHoldBack","holdBack","intervalDuration","endSequence","expired","backwardDuration","forwardDuration","totalDuration","sumDurations","defaultDuration","durationList","durations","playlistEnd","useSafeLiveEnd","liveEdgePadding","lastSegmentEndTime","isExcluded","excludeUntil","isIncompatible","isEnabled","excluded","isLowestEnabledRendition","currentBandwidth","MAX_VALUE","playlistMatch","someAudioVariant","groupName","variant","Playlist","getMediaInfoForTime","startingSegmentIndex","startingPartIndex","exactManifestTimings","partsAndSegments","partAndSegment","canUseFudgeFactor","isDisabled","isAes","estimateSegmentRequestTime","bytesReceived","createPlaylistID","groupID","setupMediaPlaylist","playlistErrors_","addPropertiesToMain","createGroupID","phonyUri","audioOnlyMain","groupId","setupMediaPlaylists","resolveMediaGroupUris","DateRangesStorage","offset_","pendingDateRanges_","processedDateRanges_","setOffset","firstSegment","setPendingDateRanges","trimProcessedDateRanges_","pendingDateRange","processDateRange","getDateRangesToProcess","dateRangeClasses","dateRangesToProcess","classListIndex","EventTarget$1","updateSegment","skipped","resolveSegmentUris","baseUri","getAllSegments","isPlaylistUnchanged","updateMain$1","newMedia","unchangedCheck","oldMedia","mergedPlaylist","skippedSegments","oldSegments","newSegments","newIndex","newSegment","updateSegments","refreshDelay","lastPart","lastDuration","PlaylistLoader","logger_","vhs_","addDateRangesToTextTrack_","addDateRangesToTextTrack","vhsOptions","customTagParsers","customTagMappers","llhls","dateRangesStorage_","handleMediaupdatetimeout_","handleLoadedPlaylist_","mediaPlaylist","availableDateRanges","parameters","nextMSN","nextPart","_HLS_part","_HLS_msn","canSkipUntil","_HLS_skip","parsedUri","searchParams","addLLHLSQueryDirectives","playlistRequestError","haveMetadata","playlistString","startingState","parseManifest_","onwarn","oninfo","customParser","parseManifest","playlistObject","lastRequest","pendingMedia_","media_","updateMediaUpdateTimeout_","stopRequest","mediaUpdateTimeout","finalRenditionTimeout","oldRequest","shouldDelay","delay","mediaChange","mainPlaylistRef","started","setupInitialPlaylist","srcUri","mainForMedia","updateOrDeleteClone","isUpdate","pathway","ID","oldPlaylistUri","oldPlaylistId","newPlaylistUri","createCloneURI_","newPlaylistId","createCloneAttributes_","updatedPlaylist","createClonePlaylist_","updateOrDeleteCloneMedia","oldMediaPlaylist","createClonedMediaGroups_","addClonePathway","basePlaylist","playlistId","baseID","newUri","newPlaylistID","newMediaPlaylist","newProps","baseURI","hostname","HOST","PARAMS","oldAttributes","getKeyIdSet","keyIds","keysystem","videojsXHR","callbackWrapper","reqResponse","responseTime","roundTripTime","requestTime","responseHeaders","timedout","xhrFactory","XhrFunction","beforeRequest","Vhs","_requestCallbackSet","_responseCallbackSet","xhrMethod","beforeRequestOptions","requestSet","newOptions","requestCallback","callAllRequestHooks","responseSet","responseCallback","callAllResponseHooks","originalAbort","segmentXhrHeaders","Range","byterangeEnd","byterangeStart","byterangeStr","textRange","formatHexString","formatAsciiString","createTransferableMessage","transferable","initSegmentId","segmentKeyId","hexDump","step","ascii","utils","tagDump","textRanges","getProgramTime","matchedSegment","segmentEnd","videoTimingInfo","transmuxedPresentationEnd","estimatedStart","transmuxedPresentationStart","findSegmentForPlayerTime","seekTime","programTimeObject","mediaSeconds","programTime","playerTime","transmuxerPrependedSeconds","offsetFromSegmentStart","playerTimeToProgramTime","toISOString","seekToProgramTime","retryCount","seekTo","pauseAfterSeek","verifyProgramDateTimeTags","lastSegmentStart","lastSegmentDuration","findSegmentForProgramTime","mediaOffset","comparisonTimeStamp","segmentDateTime","segmentTimeEpoch","getOffsetFromTimestamp","seekToTime","callbackOnCompleted","containerRequest","id3Offset","finished","endRequestAndCallback","_bytes","progressListener","newPart","_len","buffers","_key","totalLen","tempBuffer","concatTypedArrays","overrideMimeType","loaded","dashPlaylistUnchanged","aSegment","bSegment","aByterange","bByterange","dashGroupId","updateMain","oldMain","newMain","noChanges","playlistUpdate","removeOldMediaGroupLabels","equivalentSidx","compareSidxEntry","oldSidxMapping","newSidxMapping","currentSidxInfo","savedSidxInfo","sidxInfo","DashPlaylistLoader","srcUrlOrPlaylist","mainPlaylistLoader","mainPlaylistLoader_","isMain_","addMetadataToTextTrack","refreshXml_","refreshMedia_","loadedPlaylists_","srcUrl","sidxMapping_","childPlaylist_","requestErrored_","addSidxSegments_","mediaRequest_","fin","internal","playlistExclusionDuration","minimumUpdatePeriodTimeout_","createMupOnMedia_","hasPendingRequest","sidxChanged","isFinalRendition","updateMinimumUpdatePeriodTimeout_","requestMain_","mainChanged","haveMain_","mainXml_","date","mainLoaded_","handleMain_","syncClientServerClock_","done","utcTiming","clientOffset_","serverTime","mainXml","parseMainXml","location","addEventStreamToMetadataTrack_","mpl","mup","createMUPTimeout_","mediaGroupSidx","filterChangedSidxMappings","mediaID","mediaChanged","createMediaUpdateTimeout","metadataArray","eventStreamNode","cueTime","frames","defaultKID","Config","GOAL_BUFFER_LENGTH","MAX_GOAL_BUFFER_LENGTH","BACK_BUFFER_LENGTH","GOAL_BUFFER_LENGTH_RATE","INITIAL_BANDWIDTH","BANDWIDTH_VARIANCE","BUFFER_LOW_WATER_LINE","MAX_BUFFER_LOW_WATER_LINE","EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE","BUFFER_LOW_WATER_LINE_RATE","BUFFER_HIGH_WATER_LINE","browserWorkerPolyFill","workerObj","factory","objectUrl","createObjectURL","Blob","blob","BlobBuilder","getBlob","worker","Worker","objURL","terminate","revokeObjectURL","getWorkerString","workerCode$1","commonjsGlobal","globalThis","Stream$8","init","flushSource","partialFlush","endTimeline","dinf","esds","ftyp","mfhd","minf","mvex","mvhd","trak","tkhd","mdia","mdhd","hdlr","sdtp","stbl","stsd","traf","trex","trun$1","MAJOR_BRAND","MINOR_VERSION","AVC1_BRAND","VIDEO_HDLR","AUDIO_HDLR","HDLR_TYPES","VMHD","SMHD","DREF","STCO","STSC","STSZ","STTS","videoSample","audioSample","audioTrun","videoTrun","trunHeader","stream","MAX_UINT32$1","numbers","avc1","avcC","btrt","dref","mdat","mp4a","pasp","smhd","stco","stsc","stsz","stts","styp","tfdt","tfhd","trun","vmhd","payload","setUint32","audioobjecttype","samplingfrequencyindex","channelcount","samplerate","sequenceNumber","trackFragments","boxes","samples","dependsOn","isDependedOn","hasRedundancy","avc1Box","sps","pps","sequenceParameterSets","pictureParameterSets","profileIdc","profileCompatibility","levelIdc","sarRatio","hSpacing","vSpacing","samplesize","trackFragmentHeader","trackFragmentDecodeTime","trackFragmentRun","sampleDependencyTable","upperWordBaseMediaDecodeTime","lowerWordBaseMediaDecodeTime","baseMediaDecodeTime","durationPresent","sizePresent","flagsPresent","compositionTimeOffset","bytesOffest","header","sample","isLeading","paddingValue","isNonSyncSample","degradationPriority","silence","mp4Generator","fileType","movie","sampleForFrame","frame","dataOffset","pts","dts","keyFrame","frameUtils$1","groupNalsIntoFrames","nalUnits","currentNal","currentFrame","nalCount","nalUnitType","groupFramesIntoGops","currentGop","gops","extendFirstKeyFrame","generateSampleTable","baseDataOffset","concatenateNalData","nalsByteLength","numberOfNals","generateSampleTableForFrame","concatenateNalDataForFrame","highPrefix","lowPrefix","zeroFill","ONE_SECOND_IN_TS$4","clock$2","coneOfSilence","metaTable","arr","clock$1","audioFrameUtils$1","prefixWithSilence","audioAppendStartTs","videoBaseMediaDecodeTime","baseMediaDecodeTimeTs","frameDuration","silentFrame","firstFrame","audioGapDuration","audioFillFrameCount","audioFillDuration","trimAdtsFramesByEarliestDts","adtsFrames","earliestAllowedDts","minSegmentDts","minSegmentPts","concatenateFrameData","sumFrameByteLengths","ONE_SECOND_IN_TS$3","trackDecodeInfo$1","clearDtsInfo","maxSegmentDts","maxSegmentPts","calculateTrackBaseMediaDecodeTime","timelineStartInfo","collectDtsInfo","captionPacketParser","parseSei","payloadType","payloadSize","parseUserData","sei","parseCaptionPackets","userData","ccData","emulationPreventionBytesPositions","USER_DATA_REGISTERED_ITU_T_T35","Stream$7","cea708Parser","CaptionStream$2","parse708captions_","parse708captions","captionPackets_","ccStreams_","Cea608Stream","cc708Stream_","Cea708Stream","newCaptionPackets","escapedRBSP","latestDts_","ignoreNextEqualDts_","numSameDts_","flushCCStreams","flushType","flushStream","idx","presortIndex","packet","dispatchCea608Packet","dispatchCea708Packet","activeCea608Channel_","ccStream","setsTextOrXDSActive","setsChannel1Active","setsChannel2Active","CHARACTER_TRANSLATION_708","within708TextBlock","Cea708Window","windowNum","clearText","pendingNewLine","winAttr","penAttr","penLoc","penColor","visible","rowLock","columnLock","relativePositioning","anchorVertical","anchorHorizontal","anchorPoint","rowCount","virtualRowCount","columnCount","windowStyle","penStyle","getText","rows","rowIdx","beforeRowOverflow","addText","backspace","Cea708Service","serviceNum","encoding","currentWindow","windows","createTextDecoder","startPts","setCurrentWindow","textDecoder_","serviceProps","captionServiceEncodings","serviceName","serviceEncodings","current708Packet","services","new708Packet","add708Bytes","push708Packet","ptsVals","byte0","byte1","packet708","packetData","blockSize","seq","sizeCode","pushServiceBlock","initService","handleText","multiByteCharacter","extendedCommands","defineWindow","clearWindows","deleteWindows","displayWindows","hideWindows","toggleWindows","setWindowAttributes","setPenAttributes","setPenColor","setPenLocation","isExtended","getPts","flushDisplayed","char","charCodeArray","newCode","isMultiByte","extended","currentByte","nextByte","unicode","firstByte","secondByte","fillOpacity","fillRed","fillGreen","fillBlue","borderType","borderRed","borderGreen","borderBlue","wordWrap","printDirection","scrollDirection","justify","effectSpeed","effectDirection","displayEffect","displayedText","winId","endPts","pushCaption","textTag","penSize","italics","underline","edgeType","fontStyle","fgOpacity","fgRed","fgGreen","fgBlue","bgOpacity","bgRed","bgGreen","bgBlue","edgeRed","edgeGreen","edgeBlue","column","CHARACTER_TRANSLATION","getCharFromCode","ROWS","createDisplayBuffer","BOTTOM_ROW","indent","field","dataChannel","field_","dataChannel_","setConstants","swap","char0","char1","lastControlCode_","PADDING_","RESUME_CAPTION_LOADING_","mode_","END_OF_CAPTION_","clearFormatting","displayed_","nonDisplayed_","startPts_","ROLL_UP_2_ROWS_","rollUpRows_","setRollUp","ROLL_UP_3_ROWS_","ROLL_UP_4_ROWS_","CARRIAGE_RETURN_","shiftRowsUp_","BACKSPACE_","row_","ERASE_DISPLAYED_MEMORY_","ERASE_NON_DISPLAYED_MEMORY_","RESUME_DIRECT_CAPTIONING_","isSpecialCharacter","column_","isExtCharacter","isMidRowCode","addFormatting","isOffsetControlCode","isPAC","formatting_","indentations","isColorPAC","isNormalChar","logWarning","topRow_","BASE_","EXT_","CONTROL_","OFFSET_","newBaseRow","popOn","baseRow","rollUp","paintOn","captionStream","CaptionStream","streamTypes","H264_STREAM_TYPE","ADTS_STREAM_TYPE","METADATA_STREAM_TYPE","Stream$6","TYPE_SHARED","handleRollover$1","direction","TimestampRolloverStream$1","lastDTS","referenceDTS","type_","MetadataStream","timestampRolloverStream","TimestampRolloverStream","handleRollover","typedArray","fromIndex","currentIndex","typedArrayIndexOf","textEncodingDescriptionByte","percentEncode$1","parseUtf8","parseIso88591$1","parseSyncSafeInteger$1","frameParsers","mimeTypeEndIndex","descriptionEndIndex","pictureType","pictureData","owner","privateData","parseId3","parseId3Frames","frameSize","frameStart","tagSize","parseSyncSafeInteger","StreamTypes$3","id3","dispatchType","dataAlignmentIndicator","timeStamp","TransportPacketStream","TransportParseStream","ElementaryStream","metadataStream","Stream$4","CaptionStream$1","StreamTypes$2","MP2T_PACKET_LENGTH$1","bytesInBuffer","everything","parsePsi","parsePat","parsePmt","packetsWaitingForPmt","programMapTable","payloadUnitStartIndicator","pat","section_number","last_section_number","pmtPid","pmt","tableEnd","pid","processPes_","STREAM_TYPES","h264","adts","segmentHadPmt","timedMetadata","forceFlush","packetFlushable","trackId","pes","ptsDtsFlags","startPrefix","packetLength","parsePes","flushStreams_","m2ts$1","PAT_PID","MP2T_PACKET_LENGTH","AdtsStream$1","m2ts_1","ONE_SECOND_IN_TS$2","ADTS_SAMPLING_FREQUENCIES$1","handlePartialSegments","frameNum","skipWarn_","frameLength","protectionSkipBytes","oldBuffer","sampleCount","adtsFrameDuration","H264Stream$1","NalByteStream","PROFILES_WITH_OPTIONAL_SPS_DATA","Stream$2","ExpGolomb","workingData","workingBytesAvailable","workingWord","workingBitsAvailable","bitsAvailable","loadWord","workingBytes","availableBytes","skipBits","skipBytes","readBits","bits","valu","skipLeadingZeros","leadingZeroCount","skipUnsignedExpGolomb","skipExpGolomb","readUnsignedExpGolomb","clz","readExpGolomb","readBoolean","readUnsignedByte","syncPoint","swapBuffer","currentPts","currentDts","readSequenceParameterSet","skipScalingList","nalByteStream","nalUnitTypeCode","expGolombDecoder","lastScale","nextScale","chromaFormatIdc","picOrderCntType","numRefFramesInPicOrderCntCycle","picWidthInMbsMinus1","picHeightInMapUnitsMinus1","frameMbsOnlyFlag","scalingListCount","frameCropLeftOffset","frameCropRightOffset","frameCropTopOffset","frameCropBottomOffset","AacStream$1","H264Stream","ADTS_SAMPLING_FREQUENCIES","parseId3TagSize","isLikelyAacData","parseAdtsSize","lowThree","middle","parseType","parseSampleRate","parseAacTimestamp","percentEncode","aacUtils","setTimestamp","bytesLeft","tempLength","VideoSegmentStream","AudioSegmentStream","Transmuxer","CoalesceStream","frameUtils","audioFrameUtils","trackDecodeInfo","m2ts","clock","AdtsStream","AacStream","ONE_SECOND_IN_TS$1","AUDIO_PROPERTIES","VIDEO_PROPERTIES","retriggerForStream","addPipelineLogRetriggers","transmuxer","pipeline","arrayEquals","generateSegmentTimingInfo","startDts","endDts","prependedContentDuration","firstSequenceNumber","setEarliestDts","earliestDts","setVideoBaseMediaDecodeTime","setAudioAppendStart","videoClockCyclesOfSilencePrefixed","gopsToAlignWith","minPTS","gopCache_","nalUnit","gopForFusion","firstGop","lastGop","resetStream_","getGopForFusion_","alignedGops","alignGopsAtEnd","alignGopsAtEnd_","alignGopsAtStart_","gop","dtsDistance","nearestGopObj","currentGopObj","nearestDistance","alignIndex","gopIndex","align","alignEndIndex","matchFound","trimIndex","alignGopsWith","newGopsToAlignWith","numberOfTracks","remux","remuxTracks","pendingTracks","videoTrack","pendingBoxes","pendingCaptions","pendingMetadata","pendingBytes","emittedTracks","output","audioTrack","caption","captionStreams","setRemux","hasFlushed","transmuxPipeline_","setupAacPipeline","aacStream","audioTimestampRolloverStream","timedMetadataTimestampRolloverStream","adtsStream","coalesceStream","headOfPipeline","audioSegmentStream","getLogTrigger_","hasAudio","hasVideo","setupTsPipeline","packetStream","elementaryStream","h264Stream","videoSegmentStream","id3Frame","setBaseMediaDecodeTime","isAac","resetCaptions","getTracks","getTimescaleFromMediaHeader","getEmsgID3","bin","parseType_1","toUnsigned$2","parseType$2","findBox$2","subresults","toUnsigned$1","getUint64$2","parseTfdt$2","parseSampleFlags","parseTrun$2","dataOffsetPresent","firstSampleFlagsPresent","sampleDurationPresent","sampleSizePresent","sampleFlagsPresent","sampleCompositionTimeOffsetPresent","getInt32","parseTfhd$2","baseDataOffsetPresent","sampleDescriptionIndexPresent","defaultSampleDurationPresent","defaultSampleSizePresent","defaultSampleFlagsPresent","durationIsEmpty","defaultBaseIsMoof","sampleDescriptionIndex","defaultSampleDuration","defaultSampleSize","defaultSampleFlags","baseDataOffsetIsMoof","findBox$1","parseTfdt$1","parseTrun$1","parseTfhd$1","window$2","mapToSample","approximateOffset","parseCaptionNals","videoTrackId","trafs","mdats","captionNals","mdatTrafPairs","matchingTraf","pair","headerInfo","truns","allSamples","parseSamples","avcStream","seiNal","lastMatchedSample","avcView","logs","seiNals","matchingSample","findSeiNals","captionParser","segmentCache","parsedCaptions","parsingPartial","isInitialized","isPartial","isNewInit","videoTrackIds","timescales","parsedData","cachedSegment","trackNals","parseEmbeddedCaptions","pushNals","nals","nal","clearParsedCaptions","resetCaptionStream","clearAllCaptions","uint8ToCString","curChar","retString","getUint64$1","isValidEmsgBox","emsg","hasScheme","scheme_id_uri","isValidV0Box","isDefined","presentation_time_delta","isValidV1Box","presentation_time","emsg$1","parseEmsgBox","boxData","event_duration","emsgBox","message_data","scaleTime","timeDelta","toUnsigned","toHexString","parseType$1","parseTfhd","parseTrun","parseTfdt","window$1","lowestTime","baseTime","scale","traks","tkhdVersion","getUint8","sampleDescriptions","codecConfig","codecBox","segmentData","parsedBox","parsedId3Frames","probe$2","StreamTypes$1","parsePid","parsePayloadUnitStartIndicator","parseAdaptionField","parseNalUnitType","probe$1","pusi","payloadOffset","parsePesType","parsePesTime","videoPacketContainsKeyFrame","frameBuffer","frameI","frameSyncPoint","foundKeyFrame","StreamTypes","probe","SYNC_BYTE","parseAudioPes_","pesType","parsed","endLoop","table","parseVideoPes_","firstKeyFrame","inspectTs_","parsePsi_","tsInspector","baseTimestamp","audioCount","audioTimescale","inspectAac_","audioBaseTimestamp","dtsTime","ptsTime","videoBaseTimestamp","adjustTimestamp_","MessageHandlers","initArray","postMessage","action","gopInfo","timingInfo","videoSegmentTimingInfo","presentation","audioSegmentTimingInfo","trackInfo","audioTimingInfo","wireTransmuxerEvents","pushMp4Captions","trackIds","probeMp4StartTime","probeMp4Tracks","probeEmsgID3","id3Frames","emsgData","probeTs","baseStartTime","tsStartTime","timeInfo","videoStart","audioStart","clearAllMp4Captions","clearParsedMp4Captions","setTimestampOffset","timestampOffset","appendStart","onmessage","messageHandlers","TransmuxWorker","processTransmux","audioAppendStart","onData","onTrackInfo","onAudioTimingInfo","onVideoTimingInfo","onVideoSegmentTimingInfo","onAudioSegmentTimingInfo","onId3","onCaptions","onDone","onEndedTimeline","onTransmuxerLog","isEndOfTimeline","transmuxedData","waitForEndedTimelineEvent","currentTransmux","videoFrameDtsTime","videoFramePtsTime","handleData_","handleGopInfo_","handleDone_","dequeue","transmuxQueue","processAction","enqueueAction","transmux","segmentTransmuxer","term","workerCallback","endAction","listenForEndEvent","isArrayBuffer","transfers","REQUEST_ERRORS","abortAll","activeXhrs","handleErrors","handleKeyResponse","finishProcessingFn","errorObj","parseInitSegment","handleSegmentResponse","newBytes","stringToArrayBuffer","lastReachedChar","stats","getRequestStats","encryptedBytes","transmuxAndNotify","trackInfoFn","timingInfoFn","videoSegmentTimingInfoFn","audioSegmentTimingInfoFn","id3Fn","captionsFn","endedTimelineFn","dataFn","doneFn","fmp4Tracks","isMuxed","audioStartFn","audioEndFn","videoStartFn","videoEndFn","probeResult","handleSegmentBytes","bytesAsUint8Array","isLikelyFmp4MediaSegment","isFmp4","audioCodec","videoCodec","finishLoading","decrypt","decryptionWorker","decryptionHandler","decrypted","keyBytes","encrypted","waitForCompletion","didError","segmentFinish","requestId","decryptedBytes","decryptSegment","endOfAllRequests","parseError","handleProgress","progressFn","progressEvent","getProgressStats","firstBytesReceivedAt","mediaSegmentRequest","xhrOptions","abortFn","keyXhr","mapKeyXhr","initSegmentOptions","initSegmentRequestCallback","handleInitSegmentResponse","initSegmentXhr","segmentRequestOptions","segmentXhr","loadendState","activeXhr","calledAbortFn","handleLoadEnd","logFn$1","isMaat","mediaAttributes","unwrapCodecList","codecList","codecCount","codecObj","codecsForPlaylist","codecInfo","getCodecs","audioGroup","defaultCodecs","audioGroupId","audioType","codecsFromDefault","logFn","representationToString","safeGetComputedStyle","property","stableSort","sortFn","newArray","cmp","comparePlaylistBandwidth","leftBandwidth","rightBandwidth","simpleSelector","playerBandwidth","limitRenditionByPlayerDimensions","playlistController","getAudioTrackPlaylists_","sortedPlaylistReps","rep","enabledPlaylistReps","bandwidthPlaylistReps","highestRemainingBandwidthRep","bandwidthBestRep","chosenRep","haveResolution","resolutionBestRepList","resolutionBestRep","resolutionPlusOneList","resolutionPlusOneSmallest","resolutionPlusOneRep","leastPixelDiffRep","leastPixelDiffSelector","leastPixelDiffList","pixelDiff","lastBandwidthSelector","pixelRatio","useDevicePixelRatio","systemBandwidth","playlistController_","addMetadata","inbandTextTracks","videoDuration","Cue","metadataTrack","metadataTrack_","deprecateOldCue","cuesArray","cuesGroupedByStartTime","timeSlot","sortedStartTimes","cueGroup","finiteDuration","nextTime","dateRangeAttr","scte35Out","scte35In","dateRangeKeysToOmit","createMetadataTrackIfNotExists","inBandMetadataTrackDispatchType","removeCuesFromTrack","finite","MIN_SEGMENT_DURATION_TO_SAVE_STATS","segmentInfoString","startOfSegment","mediaIndex","segmentLen","selection","isSyncRequest","independent","hasPartIndex","zeroBasedPartCount","timingInfoPropertyForMedia","shouldWaitForTimelineChange","timelineChangeController","loaderType","audioDisabled","lastMainTimelineChange","lastTimelineChange","pendingAudioTimelineChange","pendingTimelineChange","segmentTooLong","maxDuration","getTroublesomeSegmentDurationMessage","sourceType","timingInfos","typeTimingInfo","mediaDuration","isSegmentWayTooLong","isSegmentSlightlyTooLong","segmentTooLongMessage","severity","SegmentLoader","mediaSource","throughput","roundTrip","resetStats_","hasPlayed_","hasPlayed","seekable_","seeking_","mediaSource_","loaderType_","currentMediaInfo_","startingMediaInfo_","segmentMetadataTrack_","segmentMetadataTrack","goalBufferLength_","goalBufferLength","sourceType_","sourceUpdater_","sourceUpdater","inbandTextTracks_","state_","timelineChangeController_","shouldSaveSegmentTimingInfo_","useDtsForTimestampOffset_","useDtsForTimestampOffset","captionServices_","checkBufferTimeout_","currentTimeline_","shouldForceTimestampOffsetAfterResync_","pendingSegment_","xhrOptions_","pendingSegments_","audioDisabled_","isPendingTimestampOffset_","gopBuffer_","timeMapping_","safeAppend_","appendInitSegment_","playlistOfLastInitSegment_","callQueue_","loadQueue_","metadataQueue_","waitingOnRemove_","quotaExceededErrorRetryTimeout_","activeInitSegmentId_","initSegments_","cacheEncryptionKeys_","cacheEncryptionKeys","keyCache_","decrypter_","decrypter","syncController_","syncController","syncPoint_","transmuxer_","createTransmuxer_","triggerSyncInfoUpdate_","isEndOfStream_","ended_","fetchAtBuffer_","newState","hasEnoughInfoToAppend_","processCallQueue_","hasEnoughInfoToLoad_","processLoadQueue_","mediaBytesTransferred","mediaRequests","mediaRequestsAborted","mediaRequestsTimedout","mediaRequestsErrored","mediaTransferDuration","mediaSecondsLoaded","mediaAppends","abort_","setAudio","removeAudio","monitorBuffer_","abortRequests","clearPendingTimelineChange","checkForAbort_","endOfStream","buffered_","getMediaInfo_","videoBuffered","audioBuffered","initSegmentForMap","storedMap","segmentKey","storedKey","couldBeginLoading_","playlist_","init_","resetEverything","newPlaylist","syncInfo","setDateTimeMappingForStart","oldId","updateMediaSequenceMap","resetLoader","resyncLoader","mediaSequenceDiff","saveExpiredSegmentInfo","force","removesRemaining","removeFinished","mapping","updatedBuffer","removeGopBuffer","removeVideo","monitorBufferTick_","fillBuffer_","updating","chooseNextRequest_","loadSegment_","appendedLastSegment","appendedLastPart","bufferedTime","preloaded","haveEnoughBuffer","getSyncPoint","targetTime","timelineSegments","getSyncSegmentCandidate","nextSegment","hasIndependentSegments","lastSegmentLastPart","forceTimestampOffset","generateSegmentInfo_","random","overrideCheck","timestampOffsetForSegment_","audioBufferedEnd","audioTimestampOffset","currentTimePts","gopsSafeToAlignWith","videoTimestampOffset","timestampOffsetForSegment","earlyAbortWhenNeeded_","measuredBandwidth","requestTimeRemaining","timeUntilRebuffer$1","timeUntilRebuffer","switchCandidate","compatiblePlaylists","enabledPlaylists","rebufferingEstimates","numRequests","rebufferingImpact","noRebufferingPlaylists","estimate","minRebufferMaxBandwidthSelector","timeSavedBySwitching","minimumTimeSaving","handleAbort_","handleProgress_","simpleSegment","handleTrackInfo_","checkForIllegalMediaSwitch","akeys","bkeys","shallowEqual","handleTimingInfo_","timeType","timingInfoProperty","handleCaptions_","captionData","hasAppendedData_","captionTracks","captionTrack","trackName","def","captionService","createCaptionsTrackIfNotExists","captionArray","positionAlign","addCaptionData","handleId3_","processMetadataQueue_","callQueue","fun","loadQueue","getCurrentMediaInfo_","getPendingSegmentPlaylist","setTimeMapping_","updateMediaSecondsLoaded_","useVideoTimingInfo","firstVideoFrameTimeForData","trueSegmentStart_","currentStart","currentVideoTimestampOffset","updateAppendInitSegmentStatus","updateSourceBufferTimestampOffset_","updateTimingInfoEnd_","saveSegmentTimingInfo","shouldSaveTimelineMapping","appendData_","changedTimestampOffset","getInitSegmentAndUpdateState_","handleQuotaExceededError_","audioBufferStart","audioBufferEnd","videoBufferStart","videoBufferEnd","appendToSourceBuffer_","timeToRemoveUntil","MIN_BACK_BUFFER","handleAppendError_","segmentObj","concatSegments","appendBuffer","handleSegmentTimingInfo_","segmentTimingInfo","transmuxedDecodeStart","transmuxedDecodeEnd","trimBackBuffer_","updateTransmuxerAndRequestSegment_","shouldUpdateTransmuxerTimestampOffset_","createSimplifiedSegmentObj_","isEndOfStream","isWalkingForward","isDiscontinuity","segmentRequestFinished_","removeToTime","trimTime","maxTrimTime","safeBackBufferTrimTime","previousSegment","saveTransferStats_","saveBandwidthRelatedStats_","handleTimeout_","updateGopBuffer","waitForAppendsToComplete_","timelineMapping","mappingForTimeline","waitForVideo","waitForAudio","waitingOnAppends","checkAppendsDone_","videoQueueCallback","audioQueueCallback","handleAppendsDone_","illegalMediaSwitchError","startingMedia","illegalMediaSwitch","didChange","getSegmentStartTimeForTimestampOffsetCalculation_","prioritizedTimingInfo","segmentDurationMessage","recordThroughput_","addSegmentMetadataCue_","badSegmentGuess","badPartGuess","segmentProcessingTime","segmentProcessingThroughput","bufferTypes","sourceBuffer","queuePending","shiftQueue","queueIndex","queueEntry","nextQueueIndexOfType","cleanupBuffer","titleType","inSourceBuffers","sourceBuffers","actions","onError","mime","addSourceBuffer","removeSourceBuffer","changeType","pushQueue","onUpdateend","SourceUpdater","sourceopenListener_","audioTimestampOffset_","videoTimestampOffset_","delayedAudioAppendQueue_","videoAppendQueued_","onVideoUpdateEnd_","onAudioUpdateEnd_","onVideoError_","videoError_","onAudioError_","audioError_","createdSourceBuffers_","initializedEme_","triggeredReady_","initializedEme","hasCreatedSourceBuffers","hasInitializedAnyEme","createSourceBuffers","addOrChangeSourceBuffers","canRemoveSourceBuffer","canChangeType","processedAppend_","videoBuffer","que","audioBuffer","bufferA","bufferB","arity","extents","bufferIntersection","setDuration","uint8ToUtf8","uintArray","VTT_LINE_TERMINATORS","NoVttJsError","VTTSegmentLoader","subtitlesTrack_","featuresNativeTextTracks_","loadVttJs","combinedByteLength","combinedSegment","timestampOffsetForTimeline","checkTimestampOffset","skipEmptySegments_","stopForError","requested","parseVTTCues_","updateTimeMapping_","timelines","uniqueCues","cueKey","removeDuplicateCuesFromTrack","decoder","decodeBytesToString","timestampmap","MPEGTS","LOCAL","ontimestampmap","mapData","mappingObj","diff","handleRollover_","firstStart","lastStart","valueIn90khz","referenceIn90khz","findAdCue","mediaTime","adStartTime","adEndTime","syncPointStrategies","run","mediaSequenceMap","getMediaSequenceMap","currentMediaSequence","currentPartStart","timelineToDatetimeMappings","lastDistance","datetimeMapping","discontinuitySync","discontinuities","SyncController","mediaSequenceStorage_","currentBaseTime","syncPoints","runStrategies_","syncPointInfo","strategy","selectSyncPoint_","getExpiredTime","bestSyncPoint","bestDistance","bestStrategy","newDistance","lastRemovedSegment","playlistTimestamp","didCalculateSegmentTimeMapping","calculateSegmentTimeMapping_","saveDiscontinuitySyncInfo_","dateTime","accuracy","mediaIndexDiff","TimelineChangeController","pendingTimelineChanges_","lastTimelineChanges_","workerCode","aesTables","AES","tmp","tables","encTable","decTable","sbox","sboxInv","xInv","th","x2","x4","x8","tEnc","tDec","precompute","_tables","keyLen","rcon","encKey","decKey","encrypted0","encrypted1","encrypted2","encrypted3","out","a2","b2","c2","nInnerRounds","kIndex","table0","table1","table2","table3","AsyncStream","jobs","timeout_","processJob_","job","ntoh","word","Decrypter","initVector","STEP","encrypted32","Int32Array","asyncStream_","decryptChunk_","padded","decipher","decrypted32","init0","init1","init2","init3","wordIx","audioTrackKind_","stopLoaders","segmentLoader","activePlaylistLoader","startLoaders","playlistLoader","excludePlaylist","activeTrack","activeGroup","defaultTrack","onTrackChanged","setupListeners","requestOptions","segmentLoaders","initialize","groups","variantLabel","isMainPlaylist","useForcedSubtitles","groupMatch","setupMediaGroups","audioSegmentLoader","mainSegmentLoader","variants","groupKeys","groupPropertyList","onGroupChanged","getActiveGroup","previousActiveLoader","lastGroup","lastGroup_","lastTrack_","onGroupChanging","lastTrack","pc","selectPlaylist","fastQualityChange_","activeTrack_","onAudioTrackChanged","SteeringManifest","priority_","pathwayClones_","version_","ttl","ttl_","reloadUri","reloadUri_","pathwayClones","ContentSteeringController","currentPathway","defaultPathway","availablePathways_","steeringManifest","proxyServerUrl_","manifestType_","ttlTimeout_","request_","currentPathwayClones","nextPathwayClones","excludedSteeringManifestURLs","xhr_","getBandwidth_","assignTagProperties","steeringTag","serverUri","steeringUri","startsWith","decodeDataUriManifest_","pathwayId","defaultServiceLocation","proxyServerURL","requestSteeringManifest","getRequestURI","errorInfo","retrySeconds","startTTLTimeout_","steeringManifestJson","assignSteeringProperties_","setProxyServerUrl_","steeringUrl","steeringUrlObject","proxyServerUrlObject","encodeURI","setSteeringParams_","dataUri","urlObject","getPathway","networkThroughput","pathwayKey","throughputKey","steeringJson","TTL","nextPathway","pathwaysByPriority","chooseNextPathway","proxyURI","steeringURI","ttlMS","clearTTLTimeout_","addAvailablePathway","clearAvailablePathways","excludePathway","didDASHTagChange","newTag","getAvailablePathways","Vhs$1","loaderStats","sumLoaderStat","stat","audioSegmentLoader_","mainSegmentLoader_","PlaylistController","externVhs","useCueTags","enableLowInitialPlaylist","bufferBasedABR","maxPlaylistRetries","useCueTags_","cueTagsTrack_","requestOptions_","pauseLoading","mediaTypes_","createMediaTypes","handleDurationChange_","handleSourceOpen_","handleSourceEnded_","keyStatusMap_","segmentLoaderSettings","setupMainPlaylistLoaderListeners_","subtitleSegmentLoader_","onLoad","contentSteeringController_","setupSegmentLoaderListeners_","startABRTimer_","stopABRTimer_","triggeredFmp4Usage","loadOnPlay_","timeToLoadedData__","mainAppendsToLoadedData__","audioAppendsToLoadedData__","timeToLoadedDataStart","mainAppendsToLoadedData_","audioAppendsToLoadedData_","appendsToLoadedData_","timeToLoadedData_","checkABR_","nextPlaylist","shouldSwitchToMedia_","switchMedia_","newId","switchMediaForDASHContentSteering_","dashMediaPlaylists","abrTimer_","defaultPlaylists","defaultGroup","requestTimeout","triggerPresenceUsage_","setupFirstPlay","selectedMedia","attachContentSteeringListeners_","initContentSteeringController_","excludeUnsupportedVariants_","selectInitialPlaylist","initialMedia_","handleUpdatedMediaPlaylist","playlistToExclude","waitingForFastQualityPlaylistReceived_","runFastQualitySwitch_","lastExcludeReason_","stuckAtPlaylistEnd_","updateAdCues_","updateDuration","defaultDemuxed","audioGroupKeys","currentPlaylist","bufferLowWaterLine","bufferHighWaterLine","sharedLogLine","isBuffered","forwardBuffer","maxBufferLowWaterLine","nextBandwidth","currBandwidth","logLine","shouldSwitchToMedia","onSyncInfoUpdate_","onEndOfStream","delegateLoaders_","updateCodecs","tryToCreateSourceBuffers_","getCodecsOrExclude_","mediaSecondsLoaded_","startPoint","mainMediaInfo","absolutePlaylistEnd","pathwayAttribute_","reIncludeDelay","excludeThenChangePathway_","reincluded","errorMessage","delayDuration","fnNames","loaders","dontFilterPlaylist","loader","audioSeekable","mainSeekable","oldEnd","oldStart","updateDuration_","areMediaTypesKnown_","usingAudioLoader","hasMainMediaInfo","hasAudioMediaInfo","playlistCodecs","unsupportedCodecs","unsupportedAudio","supporter","switchMessages","newCodec","oldCodec","excludeIncompatibleVariants_","ids","unsupported","codecCount_","videoDetails","audioDetails","exclusionReasons","variantCodecs","variantCodecCount","variantVideoDetails","variantAudioDetails","adOffset","adTotal","updateAdCues","newMax","addDateRangeMetadata","resetContentSteeringController_","availablePathways","newPathways","didPathwaysChange","handlePathwayClones_","didEnablePlaylists","differentPathwayId","noExcludeUntil","changeSegmentPathway_","entries","oldClone","equalPathwayClones_","aParams","bParams","excludeNonUsablePlaylistsByKeyId_","nonUsableKeyStatusCount","NON_USABLE","keyIdSet","USABLE","hasUsableKeyStatus","nonUsableExclusion","isNonHD","excludedForNonUsableKey","addKeyStatus_","formattedKeyIdString","uInt8Buffer","padStart","bufferToHexString","updatePlaylistByKeyStatus","excludeNonUsableThenChangePlaylist_","Representation","vhsHandler","qualityChangeFunction","playlistID","changePlaylistFn","incompatible","currentlyEnabled","timerCancelEvents","PlaybackWatcher","allowSeeksWithinUnsafeLiveWindow","liveRangeSafeTimeDelta","consecutiveUpdates","lastRecordedTime","checkCurrentTimeTimeout_","playHandler","monitorCurrentTime_","canPlayHandler","waitingHandler","techWaiting_","cancelTimerHandler","resetTimeUpdate_","loaderTypes","loaderChecks","resetSegmentDownloads_","updateend","checkSegmentDownloads_","setSeekingHandlers","seekingAppendCheck_","fixesBadSeeks_","clearSeekingAppendCheck_","watchForBadSeeking_","checkCurrentTime_","isBufferedDifferent","isRangeDifferent","waiting_","afterSeekableWindow_","beforeSeekableWindow_","minAppendedDuration","bufferedToCheck","nextRange","currentRange","livePoint","videoUnderflow_","skipTheGap_","allowedEnd","isLLHLS","lastVideoRange","videoRange","audioRange","gapFromVideoUnderflow_","scheduledCurrentTime","gaps","findGaps","defaultOptions","errorInterval","getSource","IWillNotUseThisInPlugins","initPlugin","lastCalled","localOptions","loadedMetadataHandler","cleanupEvents","reloadSourceOnError","version$4","STANDARD_PLAYLIST_SELECTOR","INITIAL_PLAYLIST_SELECTOR","movingAverageBandwidthSelector","decay","average","lastSystemBandwidth","comparePlaylistResolution","leftWidth","rightWidth","LOCAL_STORAGE_KEY","handleVhsMediaChange","waitForKeySessionCreation","sourceKeySystems","audioMedia","mainPlaylists","eme","initializeMediaKeys","keySystemsOptionsArr","keySystems","keySystemsArr","keySystemsOptions","keySystemsObj","keySystemOptions","getAllPsshKeySystemsOptions","initializationFinishedPromises","keySessionCreatedPromises","setupEmeOptions","sourceOptions","audioPlaylist","videoContentType","audioContentType","keySystemContentTypes","emeKeySystems","getVhsLocalStorage","storedObject","addOnRequestHook","addOnResponseHook","removeOnRequestHook","removeOnResponseHook","supportsNativeHls","canItPlay","supportsNativeDash","supportsTypeNatively","onRequest","onResponse","offRequest","offResponse","Component","VhsHandler","initialBandwidth","_player","source_","ignoreNextSeekingEvent_","setOptions_","overrideNative","featuresNativeVideoTracks","useBandwidthFromLocalStorage","useNetworkInformationApi","option","setOptions","playbackWatcherOptions","playbackWatcher_","defaultSelector","playerBandwidthEst","networkInformation","connection","mozConnection","webkitConnection","tenMbpsAsBitsPerSecond","networkInfoBandwidthEstBitsPerSec","downlink","invBandwidth","invThroughput","mediaRequests_","mediaRequestsAborted_","mediaRequestsTimedout_","mediaRequestsErrored_","mediaTransferDuration_","mediaBytesTransferred_","mediaAppends_","mainAppendsToLoadedData","audioAppendsToLoadedData","appendsToLoadedData","timeToLoadedData","currentTech","playerDimensions","objectToStore","updateVhsLocalStorage","setupEme_","setupQualityLevels_","mediaSourceUrl_","createKeySessions_","audioPlaylistLoader","handleWaitingForKey_","didSetupEmeOptions","qualityLevels_","handleVhsLoadedMetadata","convertToProgramTime","setupXhrHooks_","VhsSourceHandler","simpleType","getOverrideNative","defaultOverrideNative","vttjs","WebVTT","VTTRegion","cueShim","regionShim","nativeVTTCue","nativeVTTRegion","shim","restore","_objCreate","create","F","ParsingError","errorData","parseTimeStamp","computeSeconds","Settings","parseOptions","keyValueDelim","groupDelim","kv","parseCue","regionList","oInput","consumeTimeStamp","Errors","BadTimeStamp","skipWhitespace","region","vals","vals0","integer","lineAlign","snapToLines","center","consumeCueSettings","BadSignature","dflt","defaultKey","TEXTAREA_ELEMENT","TAG_NAME","u","ruby","rt","DEFAULT_COLOR_CLASS","white","lime","cyan","red","yellow","magenta","blue","black","TAG_ANNOTATION","NEEDS_PARENT","parseContent","nextToken","shouldAdd","annotation","rootDiv","tagStack","classes","cl","bgColor","colorName","propValue","strongRTLRanges","isStrongRTLChar","determineBidi","nodeStack","pushNodes","nextTextNode","StyleBox","CueStyleBox","styleOptions","writingMode","unicodeBidi","applyStyles","textAlign","font","whiteSpace","textPos","formatStyle","move","BoxPosition","lh","rects","getClientRects","lineHeight","moveBoxToLinePosition","styleBox","containerBox","boxPositions","boxPosition","linePos","textTrackList","mediaElement","computeLinePos","axis","maxPosition","initialAxis","calculatedPercentage","bestPosition","specifiedPosition","percentage","overlapsOppositeAxis","within","overlapsAny","intersectPercentage","findBestPosition","toCSSCompatValues","unit","toMove","overlaps","getSimpleBoxPosition","convertCueToDOMTree","cuetext","overlay","paddedOverlay","margin","hasBeenReset","shouldCompute","reportOrThrowError","collectNextLine","parseHeader","parseTimestampMap","xy","anchor","lines","regionAnchorX","regionAnchorY","viewportAnchorX","viewportAnchorY","scroll","onregion","parseRegion","alreadyCollectedLine","hasSubstring","directionSetting","alignSetting","findAlignSetting","_id","_pauseOnExit","_startTime","_endTime","_text","_region","_vertical","_snapToLines","_line","_lineAlign","_position","_positionAlign","_size","_align","setting","findDirectionSetting","SyntaxError","getCueAsHTML","scrollSetting","isValidPercentValue","_width","_lines","_regionAnchorX","_regionAnchorY","_viewportAnchorX","_viewportAnchorY","_scroll","findScrollSetting","__esModule"],"sourceRoot":""}