diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index b22e704622..b73b753fb7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -14,12 +14,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.230", - "_release": "1.4.230", + "version": "1.4.232", + "_release": "1.4.232", "_resolution": { "type": "version", - "tag": "1.4.230", - "commit": "d7cf0c71da21ae2be3cdda68017c0e4c654275a5" + "tag": "1.4.232", + "commit": "dd2fb833aae5eca5981718286c39ed32d37b1a21" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js index 717bf4e54f..a49f3e5db7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js +++ b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js @@ -237,8 +237,6 @@ }); } - document.body.appendChild(dlg); - // Seeing an issue in some non-chrome browsers where this is requiring a double click //var eventName = browser.firefox ? 'mousedown' : 'click'; var selectedId; @@ -262,6 +260,7 @@ selectedId = actionSheetMenuItem.getAttribute('data-id'); if (options.resolveOnClick) { + resolve(selectedId); isResolved = true; } @@ -297,7 +296,7 @@ dialogHelper.open(dlg); - var pos = options.positionTo ? getPosition(options, dlg) : null; + var pos = options.positionTo && dialogOptions.size !== 'fullscreen' ? getPosition(options, dlg) : null; if (pos) { dlg.style.position = 'fixed'; diff --git a/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js b/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js index 840bcf6a5b..4eb5827cbb 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/collectioneditor/collectioneditor.js @@ -262,7 +262,6 @@ html += getEditorHtml(); dlg.innerHTML = html; - document.body.appendChild(dlg); initEditor(dlg, items); @@ -282,6 +281,7 @@ } dlg.addEventListener('close', resolve); + dialogHelper.open(dlg); }); }; diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.js b/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.js index 0aaa2d34d9..4865d57e33 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.js +++ b/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.js @@ -1,4 +1,4 @@ -define(['layoutManager', 'globalize', 'css!./dialog'], function (layoutManager, globalize) { +define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle'], function (dialogHelper, layoutManager, scrollHelper, globalize, require) { function showTvDialog(options) { return new Promise(function (resolve, reject) { @@ -16,59 +16,49 @@ define(['layoutManager', 'globalize', 'css!./dialog'], function (layoutManager, }); } - function showDialogInternal(options, dialogHelper, resolve, reject) { + function showDialog(options, template) { var dialogOptions = { - removeOnClose: true + removeOnClose: true, + scrollY: false }; - var backButton = false; - if (layoutManager.tv) { dialogOptions.size = 'fullscreen'; - backButton = true; - dialogOptions.autoFocus = true; } else { - - dialogOptions.modal = false; - dialogOptions.entryAnimationDuration = 160; - dialogOptions.exitAnimationDuration = 160; - dialogOptions.autoFocus = true; + //dialogOptions.size = 'mini'; } var dlg = dialogHelper.createDialog(dialogOptions); - dlg.classList.add('promptDialog'); + dlg.classList.add('formDialog'); - var html = ''; + dlg.innerHTML = globalize.translateHtml(template, 'sharedcomponents'); - html += '
'; - - if (options.title) { - html += '

' + options.title + '

'; + if (layoutManager.tv) { + scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false); + } else { + dlg.querySelector('.dialogContentInner').classList.add('dialogContentInner-mini'); } - var text = options.html || options.text; + //dlg.querySelector('.btnCancel').addEventListener('click', function (e) { + // dialogHelper.close(dlg); + //}); - if (text) { - html += '
' + text + '
'; - } + dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.title || ''; - html += '
'; + dlg.querySelector('.text').innerHTML = options.html || options.text || ''; var i, length; + var html = ''; for (i = 0, length = options.buttons.length; i < length; i++) { var item = options.buttons[i]; var autoFocus = i == 0 ? ' autofocus' : ''; - html += ''; + html += ''; } - html += '
'; - html += '
'; - - dlg.innerHTML = html; - document.body.appendChild(dlg); + dlg.querySelector('.formDialogFooter').innerHTML = html; var dialogResult; function onButtonClick() { @@ -77,29 +67,24 @@ define(['layoutManager', 'globalize', 'css!./dialog'], function (layoutManager, } var buttons = dlg.querySelectorAll('.btnOption'); - for (i = 0, length = options.buttons.length; i < length; i++) { + for (i = 0, length = buttons.length; i < length; i++) { buttons[i].addEventListener('click', onButtonClick); } - dialogHelper.open(dlg).then(function () { + return dialogHelper.open(dlg).then(function () { + + if (layoutManager.tv) { + scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); + } if (dialogResult) { - resolve(dialogResult); + return dialogResult; } else { - reject(); + return Promise.reject(); } }); } - function showDialog(options) { - return new Promise(function (resolve, reject) { - - require(['dialogHelper', 'emby-button'], function (dialogHelper) { - showDialogInternal(options, dialogHelper, resolve, reject); - }); - }); - } - return function (text, title) { var options; @@ -116,6 +101,10 @@ define(['layoutManager', 'globalize', 'css!./dialog'], function (layoutManager, return showTvDialog(options); } - return showDialog(options); + return new Promise(function (resolve, reject) { + require(['text!./dialog.template.html'], function (template) { + showDialog(options, template).then(resolve, reject); + }); + }); }; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.template.html b/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.template.html new file mode 100644 index 0000000000..995fd4967b --- /dev/null +++ b/dashboard-ui/bower_components/emby-webcomponents/dialog/dialog.template.html @@ -0,0 +1,15 @@ +
+

+
+ +
+
+ +
+ +
+ +
+
+
+
\ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css index 5406e3d585..a8f1d00c00 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css +++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.css @@ -1,82 +1,64 @@ +.dialogContainer { + display: flex; + align-items: center; + justify-content: center; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 999999 !important; + contain: strict; +} + .dialog { margin: 0; border-radius: 1px; - z-index: 999999 !important; - position: fixed; -webkit-font-smoothing: antialiased; box-shadow: 0 16px 24px 2px rgba(0, 0, 0, 0.14), 0 6px 30px 5px rgba(0, 0, 0, 0.12), 0 8px 10px -5px rgba(0, 0, 0, 0.4); - height: auto; border: 0; padding: 0; will-change: transform; + /* Strict does not work well with actionsheet */ contain: style; } .dialog-fixedSize { - position: fixed !important; - top: 0 !important; - bottom: 0 !important; - left: 0 !important; - right: 0 !important; - margin: 0 !important; - border-radius: 0 !important; - max-height: none !important; - max-width: none !important; - width: auto; -} - -.centeredDialog { - top: 50%; - left: 50%; - max-width: 70%; - max-height: 84%; -} - -@media all and (min-width: 800px) and (min-height: 600px) { - - .dialog-mini { - top: 20% !important; - bottom: 20% !important; - left: 25% !important; - right: 25% !important; - } + position: fixed; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: 0; + border-radius: 0; + max-height: none; + max-width: none; } @media all and (min-width: 1280px) and (min-height: 720px) { .dialog-medium { - top: 10% !important; - bottom: 10% !important; - left: 10% !important; - right: 10% !important; + position: static; + width: 80%; + height: 80%; } .dialog-medium-tall { - top: 5% !important; - bottom: 5% !important; - left: 10% !important; - right: 10% !important; + position: static; + width: 80%; + height: 90%; } .dialog-small { - top: 10% !important; - bottom: 10% !important; - left: 20% !important; - right: 20% !important; - } - - .dialog-mini { - top: 20% !important; - bottom: 20% !important; - left: 30% !important; - right: 30% !important; + position: static; + width: 60%; + height: 80%; } .dialog-fullscreen-border { - top: 5% !important; - bottom: 5% !important; - left: 5% !important; - right: 5% !important; + position: static; + width: 90%; + height: 90%; } } diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js index 4e338bac73..8e3c0d7ebf 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js @@ -81,9 +81,16 @@ activeElement.focus(); - if (dlg.getAttribute('data-removeonclose') == 'true') { + if (dlg.getAttribute('data-removeonclose') != 'false') { removeCenterFocus(dlg); - dlg.parentNode.removeChild(dlg); + + var dialogContainer = dlg.dialogContainer; + if (dialogContainer) { + dialogContainer.parentNode.removeChild(dialogContainer); + dlg.dialogContainer = null; + } else { + dlg.parentNode.removeChild(dlg); + } } //resolve(); @@ -105,26 +112,10 @@ dlg.classList.remove('hide'); - // Use native methods if available - if (dlg.showModal) { - if (dlg.getAttribute('modal')) { - dlg.showModal(); - } else { - closeOnBackdropClick(dlg); - dlg.showModal(); - } - // Undo the auto-focus applied by the native dialog element - safeBlur(document.activeElement); - } else { - addBackdropOverlay(dlg); - } + addBackdropOverlay(dlg); dlg.classList.add('opened'); - if (center) { - centerDialog(dlg); - } - if (dlg.getAttribute('data-lockscroll') == 'true' && !document.body.classList.contains('noScroll')) { document.body.classList.add('noScroll'); removeScrollLockOnClose = true; @@ -141,45 +132,13 @@ } } - function closeOnBackdropClick(dlg) { - - dlg.addEventListener('click', function (event) { - var rect = dlg.getBoundingClientRect(); - var isInDialog = (rect.top <= event.clientY && event.clientY <= (rect.top + rect.height) - && rect.left <= event.clientX && event.clientX <= (rect.left + rect.width)); - - if (!isInDialog) { - if (dom.parentWithTag(event.target, 'SELECT')) { - isInDialog = true; - } - } - - if (!isInDialog) { - close(dlg); - } - }); - } - - function autoFocus(dlg) { - - // The dialog may have just been created and webComponents may not have completed initialiazation yet. - // Without this, seeing some script errors in Firefox - // Also for some reason it won't auto-focus without a delay here, still investigating that - - focusManager.autoFocus(dlg); - } - - function safeBlur(el) { - if (el && el.blur && el != document.body) { - el.blur(); - } - } - function addBackdropOverlay(dlg) { var backdrop = document.createElement('div'); backdrop.classList.add('dialogBackdrop'); - dlg.parentNode.insertBefore(backdrop, dlg); + + var backdropParent = dlg.dialogContainer || dlg; + backdropParent.parentNode.insertBefore(backdrop, backdropParent); dlg.backdrop = backdrop; // Doing this immediately causes the opacity to jump immediately without animating @@ -187,11 +146,29 @@ backdrop.classList.add('dialogBackdropOpened'); }, 0); - backdrop.addEventListener('click', function () { - close(dlg); + dom.addEventListener((dlg.dialogContainer || backdrop), 'click', function (e) { + if (!isParent(dlg, e.target)) { + close(dlg); + } + }, { + passive: true }); } + function isParent(parent, child) { + + while (child) { + + if (child == parent) { + return true; + } + + child = child.parentNode; + } + + return false; + } + function isHistoryEnabled(dlg) { return dlg.getAttribute('data-history') == 'true'; } @@ -202,6 +179,17 @@ globalOnOpenCallback(dlg); } + var parent = dlg.parentNode; + if (parent) { + parent.removeChild(dlg); + } + + var dialogContainer = document.createElement('div'); + dialogContainer.classList.add('dialogContainer'); + dialogContainer.appendChild(dlg); + dlg.dialogContainer = dialogContainer; + document.body.appendChild(dialogContainer); + return new Promise(function (resolve, reject) { new dialogHashHandler(dlg, 'dlg' + new Date().getTime(), resolve); @@ -328,7 +316,7 @@ var onAnimationFinish = function () { focusManager.pushScope(dlg); if (dlg.getAttribute('data-autofocus') == 'true') { - autoFocus(dlg); + focusManager.autoFocus(dlg); } }; @@ -362,12 +350,6 @@ return browser.touch; } - function centerDialog(dlg) { - - dlg.style.marginLeft = (-(dlg.offsetWidth / 2)) + 'px'; - dlg.style.marginTop = (-(dlg.offsetHeight / 2)) + 'px'; - } - function removeBackdrop(dlg) { var backdrop = dlg.backdrop; @@ -428,8 +410,8 @@ var exitAnimation = options.exitAnimation || defaultExitAnimation; // If it's not fullscreen then lower the default animation speed to make it open really fast - var entryAnimationDuration = options.entryAnimationDuration || (options.size ? 180 : 280); - var exitAnimationDuration = options.exitAnimationDuration || (options.size ? 180 : 280); + var entryAnimationDuration = options.entryAnimationDuration || (options.size !== 'fullscreen' ? 180 : 280); + var exitAnimationDuration = options.exitAnimationDuration || (options.size !== 'fullscreen' ? 180 : 280); dlg.animationConfig = { // scale up diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css index 513d7edd66..5a7aa1ac88 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.css @@ -186,10 +186,14 @@ opacity: 0; } - .paper-icon-button-light:focus:after { - opacity: .2; + .paper-icon-button-light:focus { + color: #52B54B; } + .paper-icon-button-light:focus:after { + opacity: .2; + } + .emby-button-ripple-effect, .paper-icon-button-light-ripple-effect { position: absolute; border-radius: 50%; diff --git a/dashboard-ui/bower_components/emby-webcomponents/formdialog.css b/dashboard-ui/bower_components/emby-webcomponents/formdialog.css index b2eea9539a..9931c68674 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/formdialog.css +++ b/dashboard-ui/bower_components/emby-webcomponents/formdialog.css @@ -11,7 +11,7 @@ } .formDialogHeader, .formDialogFooter { - background-color: #222326; + background-color: #1D1E21; } .formDialogHeaderTitle { @@ -23,7 +23,11 @@ } .dialogContentInner { - padding: .5em 1.5em 30vh 1.5em; + padding: .5em 1.5em 20em 1.5em; +} + +.dialogContentInner-mini { + padding-bottom: 10em; } .dialog-content-centered { diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide-settings.js b/dashboard-ui/bower_components/emby-webcomponents/guide/guide-settings.js index 8cf8535c4f..6b64a325e7 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide-settings.js +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide-settings.js @@ -54,9 +54,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); - - currentDialog = dlg; dlg.addEventListener('change', function () { diff --git a/dashboard-ui/bower_components/emby-webcomponents/imageeditor/imageeditor.js b/dashboard-ui/bower_components/emby-webcomponents/imageeditor/imageeditor.js index 155804d68b..6677cc4e43 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/imageeditor/imageeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/imageeditor/imageeditor.js @@ -432,8 +432,6 @@ dlg.innerHTML = globalize.translateDocument(template, 'sharedcomponents'); - document.body.appendChild(dlg); - if (layoutManager.tv) { scrollHelper.centerFocus.on(dlg, false); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemidentifier/itemidentifier.js b/dashboard-ui/bower_components/emby-webcomponents/itemidentifier/itemidentifier.js index 1b0c40b85f..f8c5027a7e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/itemidentifier/itemidentifier.js +++ b/dashboard-ui/bower_components/emby-webcomponents/itemidentifier/itemidentifier.js @@ -345,7 +345,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); // Has to be assigned a z-index after the call to .open() dlg.addEventListener('close', onDialogClosed); @@ -419,7 +418,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); if (layoutManager.tv) { scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false); diff --git a/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js b/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js index b94c561ebf..f3b20cf626 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/metadataeditor.js @@ -1168,7 +1168,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); if (layoutManager.tv) { centerFocus(dlg.querySelector('.formDialogContent'), false, true); diff --git a/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/personeditor.js b/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/personeditor.js index 76c235b66d..6bbfa24eea 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/personeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/metadataeditor/personeditor.js @@ -33,7 +33,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); dlg.querySelector('.txtPersonName', dlg).value = person.Name || ''; dlg.querySelector('.selectPersonType', dlg).value = person.Type || ''; diff --git a/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js b/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js index d0a4aef4d5..5994d90937 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/playlisteditor/playlisteditor.js @@ -241,7 +241,6 @@ html += getEditorHtml(); dlg.innerHTML = html; - document.body.appendChild(dlg); initEditor(dlg, items); diff --git a/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js b/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js index fe532644a8..c13ad2597d 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js +++ b/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js @@ -1,4 +1,4 @@ -define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'emby-input', 'formDialogStyle'], function (dialogHelper, layoutManager, scrollHelper, globalize, require) { +define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle'], function (dialogHelper, layoutManager, scrollHelper, globalize, require) { function setInputProperties(dlg, options) { var txtInput = dlg.querySelector('#txtInput'); @@ -6,7 +6,7 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', txtInput.label(options.label || ''); } - function showPrompt(options, template) { + function showDialog(options, template) { var dialogOptions = { removeOnClose: true, @@ -16,7 +16,7 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', if (layoutManager.tv) { dialogOptions.size = 'fullscreen'; } else { - dialogOptions.size = 'mini'; + //dialogOptions.size = 'mini'; } var dlg = dialogHelper.createDialog(dialogOptions); @@ -27,6 +27,8 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', if (layoutManager.tv) { scrollHelper.centerFocus.on(dlg.querySelector('.formDialogContent'), false); + } else { + dlg.querySelector('.dialogContentInner').classList.add('dialogContentInner-mini'); } dlg.querySelector('.btnCancel').addEventListener('click', function (e) { @@ -43,8 +45,6 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', setInputProperties(dlg, options); - document.body.appendChild(dlg); - var submitValue; dlg.querySelector('form').addEventListener('submit', function (e) { @@ -62,6 +62,11 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', }); return dialogHelper.open(dlg).then(function () { + + if (layoutManager.tv) { + scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false); + } + var value = submitValue; if (value) { @@ -83,7 +88,7 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'require', text: options }; } - showPrompt(options, template).then(resolve, reject); + showDialog(options, template).then(resolve, reject); }); }); }; diff --git a/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.template.html b/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.template.html index c5219a7005..a12e81c3ee 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.template.html +++ b/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.template.html @@ -1,5 +1,7 @@ 
+
+
@@ -9,7 +11,7 @@
- +
diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js index b2456a22ec..eaa9716418 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js @@ -378,7 +378,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); currentDialog = dlg; diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js index 26e074d984..e680dbd1c1 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingeditor.js @@ -121,7 +121,6 @@ html += globalize.translateDocument(template, 'sharedcomponents'); dlg.innerHTML = html; - document.body.appendChild(dlg); currentDialog = dlg; diff --git a/dashboard-ui/bower_components/emby-webcomponents/refreshdialog/refreshdialog.js b/dashboard-ui/bower_components/emby-webcomponents/refreshdialog/refreshdialog.js index e3152d3b0a..837a5cdd0e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/refreshdialog/refreshdialog.js +++ b/dashboard-ui/bower_components/emby-webcomponents/refreshdialog/refreshdialog.js @@ -132,7 +132,6 @@ html += getEditorHtml(); dlg.innerHTML = html; - document.body.appendChild(dlg); initEditor(dlg); diff --git a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js index 0753d9c896..882fa46501 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js +++ b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js @@ -27,8 +27,6 @@ dlg.innerHTML = html; - document.body.appendChild(dlg); - var isShared = false; var shareInfo = options.share; diff --git a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js index a077beb8da..e66473631e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js +++ b/dashboard-ui/bower_components/emby-webcomponents/slideshow/slideshow.js @@ -91,7 +91,8 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f size: 'fullscreen', autoFocus: false, scrollY: false, - exitAnimation: 'fadeout' + exitAnimation: 'fadeout', + removeOnClose: true }); dlg.classList.add('slideshowDialog'); @@ -166,12 +167,9 @@ define(['dialogHelper', 'inputManager', 'connectionManager', 'layoutManager', 'f } } - document.body.appendChild(dlg); - dialogHelper.open(dlg).then(function () { stopInterval(); - dlg.parentNode.removeChild(dlg); }); inputmanager.on(window, onInputCommand); diff --git a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json index 17f36769cc..ea5797548c 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json +++ b/dashboard-ui/bower_components/emby-webcomponents/strings/en-US.json @@ -47,7 +47,7 @@ "HeaderBecomeProjectSupporter": "Get Emby Premiere", "MessageActiveSubscriptionRequiredSeriesRecordings": "An active Emby Premiere subscription is required in order to create automated series recordings.", "OptionConvertRecordingsToStreamingFormat": "Automatically convert recordings to a streaming friendly format", - "OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 for easy playback on your devices.", + "OptionConvertRecordingsToStreamingFormatHelp": "Recordings will be converted on the fly to MP4 or MKV, based on Emby server settings.", "FeatureRequiresEmbyPremiere": "This feature requires an active Emby Premiere subscription.", "Record": "Record", "Save": "Save", diff --git a/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js b/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js index 899981232e..b6aedc45b5 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js +++ b/dashboard-ui/bower_components/emby-webcomponents/subtitleeditor/subtitleeditor.js @@ -429,7 +429,6 @@ dlg.classList.add('subtitleEditorDialog'); dlg.innerHTML = globalize.translateDocument(template, 'sharedcomponents'); - document.body.appendChild(dlg); dlg.querySelector('.originalSubtitleFileLabel').innerHTML = globalize.translate('sharedcomponents#File'); diff --git a/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js b/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js index 2ddf9d779c..2a706ad61e 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js +++ b/dashboard-ui/bower_components/emby-webcomponents/sync/sync.js @@ -421,7 +421,6 @@ dlg.querySelector('.lnkHelp').addEventListener('click', onHelpLinkClick); - document.body.appendChild(dlg); var submitted = false; dlg.querySelector('form').addEventListener('submit', function (e) { diff --git a/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js b/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js index 3f258076d5..e7a8624f98 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js +++ b/dashboard-ui/bower_components/emby-webcomponents/voice/voicedialog.js @@ -157,7 +157,6 @@ define(['dialogHelper', 'voiceReceiver', 'voiceProcessor', 'globalize', 'emby-bu html += '
'; dlg.innerHTML = html; - document.body.appendChild(dlg); dialogHelper.open(dlg); currentDialog = dlg; diff --git a/dashboard-ui/bower_components/hls.js/.bower.json b/dashboard-ui/bower_components/hls.js/.bower.json index 637efc8215..bb16d9ac02 100644 --- a/dashboard-ui/bower_components/hls.js/.bower.json +++ b/dashboard-ui/bower_components/hls.js/.bower.json @@ -1,6 +1,6 @@ { "name": "hls.js", - "version": "0.5.46", + "version": "0.5.47", "license": "Apache-2.0", "description": "Media Source Extension - HLS library, by/for Dailymotion", "homepage": "https://github.com/dailymotion/hls.js", @@ -16,11 +16,11 @@ "test", "tests" ], - "_release": "0.5.46", + "_release": "0.5.47", "_resolution": { "type": "version", - "tag": "v0.5.46", - "commit": "27578acdf24ae3a6d6dcccb49765ac2b835f84dd" + "tag": "v0.5.47", + "commit": "21becc9db79debff24e818fee2d961ed655e744b" }, "_source": "git://github.com/dailymotion/hls.js.git", "_target": "~0.5.7", diff --git a/dashboard-ui/bower_components/hls.js/API.md b/dashboard-ui/bower_components/hls.js/API.md index 825325a4bd..0065eb774f 100644 --- a/dashboard-ui/bower_components/hls.js/API.md +++ b/dashboard-ui/bower_components/hls.js/API.md @@ -279,6 +279,12 @@ in case playback is stalled, and a buffered range is available upfront, less tha hls.js will jump over this buffer hole to reach the beginning of this following buffered range. ```maxSeekHole``` allows to configure this jumpable threshold. +#### ```maxStarvationDelay``` +(default 2s) + +ABR algorithm will always try to choose a quality level that should avoid rebuffering. +In case no quality level with this criteria can be found (lets say for example that buffer length is 1s, but fetching a fragment at lowest quality is predicted to take around 2s ... ie we can forecast around 1s of rebuffering ...) then ABR algorithm will try to find a level that should guarantee less than ```maxStarvationDelay``` of buffering. +this max delay is also used in automatic start level selection : in that mode ABR controller will ensure that video loading time (ie the time to fetch the first fragment at lowest quality level + the time to fetch the fragment at the appropriate quality level is less than ```maxStarvationDelay``` ) #### ```seekHoleNudgeDuration``` (default 0.01s) diff --git a/dashboard-ui/bower_components/hls.js/bower.json b/dashboard-ui/bower_components/hls.js/bower.json index 9140f9b17f..2edfe2f88f 100644 --- a/dashboard-ui/bower_components/hls.js/bower.json +++ b/dashboard-ui/bower_components/hls.js/bower.json @@ -1,6 +1,6 @@ { "name": "hls.js", - "version": "0.5.46", + "version": "0.5.47", "license": "Apache-2.0", "description": "Media Source Extension - HLS library, by/for Dailymotion", "homepage": "https://github.com/dailymotion/hls.js", diff --git a/dashboard-ui/bower_components/hls.js/dist/hls.min.js b/dashboard-ui/bower_components/hls.js/dist/hls.min.js index dde1f7f710..168b0f41dd 100644 --- a/dashboard-ui/bower_components/hls.js/dist/hls.min.js +++ b/dashboard-ui/bower_components/hls.js/dist/hls.min.js @@ -1,5 +1,5 @@ -!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){return function s(e,t,r){function a(i,d){if(!t[i]){if(!e[i]){var l="function"==typeof require&&require;if(!d&&l)return l(i,!0);if(n)return n(i,!0);var u=new Error("Cannot find module '"+i+"'");throw u.code="MODULE_NOT_FOUND",u}var o=t[i]={exports:{}};e[i][0].call(o.exports,function(t){var r=e[i][1][t];return a(r?r:t)},o,o.exports,s,e,t,r)}return t[i].exports}for(var n="function"==typeof require&&require,i=0;ie||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},e.prototype.emit=function(l){var s,e,u,i,n,o;if(this._events||(this._events={}),"error"===l&&(!this._events.error||r(this._events.error)&&!this._events.error.length)){if(s=arguments[1],s instanceof Error)throw s;throw TypeError('Uncaught, unspecified "error" event.')}if(e=this._events[l],a(e))return!1;if(t(e))switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:i=Array.prototype.slice.call(arguments,1),e.apply(this,i)}else if(r(e))for(i=Array.prototype.slice.call(arguments,1),o=e.slice(),u=o.length,n=0;u>n;n++)o[n].apply(this,i);return!0},e.prototype.addListener=function(i,n){var s;if(!t(n))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",i,t(n.listener)?n.listener:n),this._events[i]?r(this._events[i])?this._events[i].push(n):this._events[i]=[this._events[i],n]:this._events[i]=n,r(this._events[i])&&!this._events[i].warned&&(s=a(this._maxListeners)?e.defaultMaxListeners:this._maxListeners,s&&s>0&&this._events[i].length>s&&(this._events[i].warned=!0,"function"==typeof console.trace)),this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(a,e){function r(){this.removeListener(a,r),i||(i=!0,e.apply(this,arguments))}if(!t(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(a,r),this},e.prototype.removeListener=function(i,a){var e,s,o,n;if(!t(a))throw TypeError("listener must be a function");if(!this._events||!this._events[i])return this;if(e=this._events[i],o=e.length,s=-1,e===a||t(e.listener)&&e.listener===a)delete this._events[i],this._events.removeListener&&this.emit("removeListener",i,a);else if(r(e)){for(n=o;n-- >0;)if(e[n]===a||e[n].listener&&e[n].listener===a){s=n;break}if(0>s)return this;1===e.length?(e.length=0,delete this._events[i]):e.splice(s,1),this._events.removeListener&&this.emit("removeListener",i,a)}return this},e.prototype.removeAllListeners=function(r){var a,e;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[r]&&delete this._events[r],this;if(0===arguments.length){for(a in this._events)"removeListener"!==a&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events={},this}if(e=this._events[r],t(e))this.removeListener(r,e);else if(e)for(;e.length;)this.removeListener(r,e[e.length-1]);return delete this._events[r],this},e.prototype.listeners=function(e){var r;return r=this._events&&this._events[e]?t(this._events[e])?[this._events[e]]:this._events[e].slice():[]},e.prototype.listenerCount=function(r){if(this._events){var e=this._events[r];if(t(e))return 1;if(e)return e.length}return 0},e.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(n,a,s){var i=arguments[3],e=arguments[4],r=arguments[5],t=JSON.stringify;a.exports=function(l){for(var a,s=Object.keys(r),n=0,d=s.length;d>n;n++){var o=s[n],u=r[o].exports;if(u===l||u.default===l){a=o;break}}if(!a){a=Math.floor(Math.pow(16,8)*Math.random()).toString(16);for(var f={},n=0,d=s.length;d>n;n++){var o=s[n];f[o]=o}e[a]=[Function(["require","module","exports"],"("+l+")(self)"),f]}var h=Math.floor(Math.pow(16,8)*Math.random()).toString(16),c={};c[a]=a,e[h]=[Function(["require"],"var f = require("+t(a)+");(f.default ? f.default : f)(self);"),c];var v="("+i+")({"+Object.keys(e).map(function(r){return t(r)+":["+e[r][0]+","+t(e[r][1])+"]"}).join(",")+"},{},["+t(h)+"])",g=window.URL||window.webkitURL||window.mozURL||window.msURL;return new Worker(g.createObjectURL(new Blob([v],{type:"text/javascript"})))}},{}],3:[function(e,m,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function g(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function v(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(n,"__esModule",{value:!0});var l=function(){function e(a,r){for(var t=0;t500*e.duration){var f=i.levels,h=Math.max(1,1e3*e.loaded/u),v=Math.max(e.loaded,Math.round(e.duration*f[e.level].bitrate/8)),c=n.currentTime,d=(v-e.loaded)/h,s=o.default.bufferInfo(n,c,i.config.maxBufferHole).end-c;if(s<2*e.duration&&d>s){var l=void 0,r=void 0;for(r=e.level-1;r>=0&&(l=e.duration*f[r].bitrate/(6.4*h),a.logger.log("fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay["+r+"] :"+d.toFixed(1)+"/"+s.toFixed(1)+"/"+l.toFixed(1)),!(s>l));r--);d>l&&(r=Math.max(0,r),i.nextLoadLevel=r,this.bwEstimator.sample(u,e.loaded),a.logger.warn("loading too slow, abort fragment loading and switch to level "+r),e.loader.abort(),this.clearTimer(),i.trigger(t.default.FRAG_LOAD_EMERGENCY_ABORTED,{frag:e}))}}}}},{key:"onFragLoaded",value:function(e){var t=e.stats;void 0===t.aborted&&1===e.frag.loadCounter&&this.bwEstimator.sample(performance.now()-t.trequest,t.loaded),this.clearTimer(),this.lastLoadedFragLevel=e.frag.level,this._nextAutoLevel=-1}},{key:"onError",value:function(e){switch(e.details){case s.ErrorDetails.FRAG_LOAD_ERROR:case s.ErrorDetails.FRAG_LOAD_TIMEOUT:this.clearTimer()}}},{key:"clearTimer",value:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){this._autoLevelCapping=e}},{key:"nextAutoLevel",get:function(){var e,r,i=this.hls,t=i.levels,a=i.config;if(r=-1===this._autoLevelCapping&&t&&t.length?t.length-1:this._autoLevelCapping,-1!==this._nextAutoLevel)return Math.min(this._nextAutoLevel,r);var n=this.bwEstimator?this.bwEstimator.getEstimate():a.abrEwmaDefaultEstimate,s=void 0;for(e=0;r>=e;e++)if(s=e<=this.lastLoadedFragLevel?a.abrBandWidthFactor*n:a.abrBandWidthUpFactor*n,sthis._msDuration&&(t.logger.log("Updating mediasource duration to "+this._levelDuration),e.duration=this._levelDuration,this._msDuration=this._levelDuration)}}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var r=this.flushRange[0];if(!this.flushBuffer(r.start,r.end))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var a=0,t=this.sourceBuffer;if(t)for(var i in t)a+=t[i].buffered.length;this.appended=a,this.hls.trigger(e.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var i=this.hls,s=this.sourceBuffer,n=this.segments;if(s){if(this.media.error)return n=[],void t.logger.error("trying to append although a media error occured, flush segment and abort");for(var l in s)if(s[l].updating)return;if(n.length){var o=n.shift();try{s[o.type].appendBuffer(o.data),this.appendError=0,this.appended++}catch(s){t.logger.error("error while trying to append buffer:"+s.message),n.unshift(o);var a={type:r.ErrorTypes.MEDIA_ERROR};if(22===s.code)return this.segments=[],a.details=r.ErrorDetails.BUFFER_FULL_ERROR,void i.trigger(e.default.ERROR,a);if(this.appendError?this.appendError++:this.appendError=1,a.details=r.ErrorDetails.BUFFER_APPEND_ERROR,a.frag=this.fragCurrent,this.appendError>i.config.appendErrorMaxRetry)return t.logger.log("fail "+i.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),n=[],a.fatal=!0,void i.trigger(e.default.ERROR,a);a.fatal=!1,i.trigger(e.default.ERROR,a)}}}}},{key:"flushBuffer",value:function(l,s){var e,r,o,n,a,i;if(this.flushBufferCounter.5)return this.flushBufferCounter++,t.logger.log("flush "+u+" ["+a+","+i+"], of ["+o+","+n+"], pos:"+this.media.currentTime),e.remove(a,i),!1}else t.logger.warn("abort flushing too many retries");return t.logger.log("buffer flushed"),!0}}]),a}(s.default);i.default=o},{"../errors":21,"../event-handler":22,"../events":23,"../utils/logger":38}],5:[function(e,h,t){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function f(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(a,r){for(var t=0;tthis.autoLevelCapping&&this.hls.streamController.nextLevelSwitch(),this.autoLevelCapping=this.hls.autoLevelCapping)}}},{key:"getMaxLevel",value:function(n){var r=void 0,e=void 0,t=void 0,s=this.mediaWidth,o=this.mediaHeight,a=0,i=0;for(e=0;n>=e&&(t=this.levels[e],r=e,a=t.width,i=t.height,!(a>=s||i>=o));e++);return r}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0;return this.media&&(e=this.media.width||this.media.clientWidth||this.media.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0;return this.media&&(e=this.media.height||this.media.clientHeight||this.media.offsetHeight,e*=this.contentScaleFactor),e}}]),e}(s.default);t.default=u},{"../event-handler":22,"../events":23}],6:[function(r,l,e){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(a,r){for(var t=0;t=0&&a1e3){r.logger.log("(re)loading playlist for level "+a);var o=i.urlId;this.hls.trigger(t.default.LEVEL_LOADING,{url:i.url[o],level:a,id:o})}}else this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.OTHER_ERROR,details:e.ErrorDetails.LEVEL_SWITCH_ERROR,level:a,fatal:!1,reason:"invalid level idx"})}},{key:"onError",value:function(n){if(!n.fatal){var i=n.details,o=this.hls,s=void 0,a=void 0,l=!1;switch(i){case e.ErrorDetails.FRAG_LOAD_ERROR:case e.ErrorDetails.FRAG_LOAD_TIMEOUT:case e.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case e.ErrorDetails.KEY_LOAD_ERROR:case e.ErrorDetails.KEY_LOAD_TIMEOUT:s=n.frag.level;break;case e.ErrorDetails.LEVEL_LOAD_ERROR:case e.ErrorDetails.LEVEL_LOAD_TIMEOUT:s=n.level,l=!0}if(void 0!==s)if(a=this._levels[s],a.urlIde&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),-1!==e&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){return void 0===this._startLevel?this._firstLevel:this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return-1!==this._manualLevel?this._manualLevel:this.hls.abrController.nextAutoLevel},set:function(e){this.level=e,-1===this._manualLevel&&(this.hls.abrController.nextAutoLevel=e)}}]),a}(f.default);i.default=o},{"../errors":21,"../event-handler":22,"../events":23,"../utils/logger":38}],8:[function(i,A,o){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function v(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(o,"__esModule",{value:!0});var m=function(){function e(a,r){for(var t=0;t0?(t.logger.log("configure startPosition @"+a),this.lastPaused||(t.logger.log("resuming video"),r.play()),this.state=e.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:i,this.state=e.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else t.logger.warn("cannot start loading as manifest not parsed yet"),this.state=e.STOPPED}},{key:"stopLoad",value:function(){var t=this.fragCurrent;t&&(t.loader&&t.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=e.STOPPED}},{key:"tick",value:function(){this.ticks++,1===this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var R,l,n,c=this.hls,o=c.config,h=this.media,b=h&&h.seeking;switch(this.state){case e.ERROR:case e.PAUSED:break;case e.STARTING:var _=c.startLevel;-1===_&&(_=0,this.fragBitrateTest=!0),this.level=c.nextLoadLevel=_,this.state=e.WAITING_LEVEL,this.loadedmetadata=!1;break;case e.IDLE:if(!h&&(this.startFragRequested||!o.startFragPrefetch))break;R=this.loadedmetadata?h.currentTime:this.nextLoadPosition,l=c.nextLoadLevel;var v,L=s.default.bufferInfo(h,R,o.maxBufferHole),P=L.len,f=L.end,u=this.fragPrevious;if(this.levels[l].hasOwnProperty("bitrate")?(v=Math.max(8*o.maxBufferSize/this.levels[l].bitrate,o.maxBufferLength),v=Math.min(v,o.maxMaxBufferLength)):v=o.maxBufferLength,v>P){if(c.nextLoadLevel=l,this.level=l,n=this.levels[l].details,"undefined"==typeof n||n.live&&this.levelLastLoaded!==l){this.state=e.WAITING_LEVEL;break}if(!n.live&&u&&u.sn===n.endSN&&(!b||h.duration-fy&&(h.currentTime=y)}if(n.PTSKnown&&f>E)break;if(this.startFragRequested&&!n.PTSKnown){if(u){var A=u.sn+1;A>=n.startSN&&A<=n.endSN&&(i=d[A-n.startSN],t.logger.log("live playlist, switching playlist, load frag with next SN: "+i.sn))}i||(i=d[Math.min(g-1,Math.round(g/2))],t.logger.log("live playlist, switching playlist, unknown, load middle frag : "+i.sn))}}else m>f&&(i=d[0]);if(i||!function(){var e=o.maxFragLookUpTolerance;E>f?((f>E-e||b)&&(e=0),i=p.default.search(d,function(t){return t.start+t.duration-e<=f?1:t.start-e>f?-1:0})):i=d[g-1]}(),i){if(m=i.start,u&&i.level===u.level&&i.sn===u.sn){if(!(i.sno.maxBufferHole&&u.dropped?(i=d[k-1], -t.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),u.loadCounter--):(i=d[k+1],t.logger.log("SN just loaded, load next one: "+i.sn)),!i)break}if(null!=i.decryptdata.uri&&null==i.decryptdata.key)t.logger.log("Loading key for "+i.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+l),this.state=e.KEY_LOADING,c.trigger(r.default.KEY_LOADING,{frag:i});else{if(t.logger.log("Loading "+i.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+l+", currentTime:"+R+",bufferEnd:"+f.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,i.loadCounter){i.loadCounter++;var S=o.fragLoadingLoopThreshold;if(i.loadCounter>S&&Math.abs(this.fragLoadIdx-i.loadIdx)=w||b)&&(t.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=e.IDLE);break;case e.STOPPED:case e.FRAG_LOADING:case e.PARSING:case e.PARSED:case e.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"getBufferRange",value:function(a){var e,t,r=this.bufferRange;if(r)for(e=r.length-1;e>=0;e--)if(t=r[e],a>=t.start&&a<=t.end)return t;return null}},{key:"followingBufferRange",value:function(e){return e?this.getBufferRange(e.end+.5):null}},{key:"isBuffered",value:function(r){var a=this.media;if(a)for(var t=a.buffered,e=0;e=t.start(e)&&r<=t.end(e))return!0;return!1}},{key:"_checkFragmentChanged",value:function(){var t,e,a=this.media;if(a&&a.seeking===!1&&(e=a.currentTime,e>a.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=e),this.isBuffered(e)?t=this.getBufferRange(e):this.isBuffered(e+.1)&&(t=this.getBufferRange(e+.1)),t)){var i=t.frag;i!==this.fragPlaying&&(this.fragPlaying=i,this.hls.trigger(r.default.FRAG_CHANGED,{frag:i}))}}},{key:"immediateLevelSwitch",value:function(){if(t.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var a=this.media,i=void 0;a?(i=a.paused,a.pause()):i=!0,this.previouslyPaused=i}var n=this.fragCurrent;n&&n.loader&&n.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.state=e.PAUSED,this.hls.trigger(r.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY})}},{key:"immediateLevelSwitchEnd",value:function(){this.immediateSwitch=!1;var e=this.media;e&&e.readyState&&(e.currentTime-=1e-4,this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var t=this.media;if(t&&t.readyState){var n=void 0,i=void 0,a=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,i=this.getBufferRange(t.currentTime),i&&i.start>1&&(this.state=e.PAUSED,this.hls.trigger(r.default.BUFFER_FLUSHING,{startOffset:0,endOffset:i.start-1})),t.paused)n=0;else{var l=this.hls.nextLoadLevel,u=this.levels[l],o=this.fragLastKbps;n=o&&this.fragCurrent?this.fragCurrent.duration*u.bitrate/(1e3*o)+1:0}if(a=this.getBufferRange(t.currentTime+n),a&&(a=this.followingBufferRange(a))){var s=this.fragCurrent;s&&s.loader&&s.loader.abort(),this.fragCurrent=null,this.state=e.PAUSED,this.hls.trigger(r.default.BUFFER_FLUSHING,{startOffset:a.start,endOffset:Number.POSITIVE_INFINITY})}}}},{key:"onMediaAttached",value:function(r){var e=this.media=r.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),e.addEventListener("seeking",this.onvseeking),e.addEventListener("seeked",this.onvseeked),e.addEventListener("ended",this.onvended);var t=this.config;this.levels&&t.autoStartLoad&&this.hls.startLoad(t.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(t.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var r=this.levels;r&&r.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){if(this.state===e.FRAG_LOADING){if(0===s.default.bufferInfo(this.media,this.media.currentTime,this.config.maxBufferHole).len){t.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load");var r=this.fragCurrent;r&&(r.loader&&r.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.state=e.IDLE}}else this.state===e.ENDED&&(this.state=e.IDLE);this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaSeeked",value:function(){this.tick()}},{key:"onMediaEnded",value:function(){t.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){t.logger.log("trigger BUFFER_RESET"),this.hls.trigger(r.default.BUFFER_RESET),this.bufferRange=[],this.stalled=!1}},{key:"onManifestParsed",value:function(r){var e,a=!1,i=!1;r.levels.forEach(function(t){e=t.audioCodec,e&&(-1!==e.indexOf("mp4a.40.2")&&(a=!0),-1!==e.indexOf("mp4a.40.5")&&(i=!0))}),this.audioCodecSwitch=a&&i,this.audioCodecSwitch&&t.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=r.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var n=this.config;n.autoStartLoad&&this.hls.startLoad(n.startPosition)}},{key:"onLevelLoaded",value:function(o){var a=o.details,i=o.level,l=this.levels[i],d=a.totalduration,n=0;if(t.logger.log("level "+i+" loaded ["+a.startSN+","+a.endSN+"],duration:"+d),this.levelLastLoaded=i,a.live){var f=l.details;f?(u.default.mergeDetails(f,a),n=a.fragments[0].start,a.PTSKnown?t.logger.log("live playlist sliding:"+n.toFixed(3)):t.logger.log("live playlist - outdated PTS, unknown sliding")):(a.PTSKnown=!1,t.logger.log("live playlist - first load, unknown sliding"))}else a.PTSKnown=!1;if(l.details=a,this.hls.trigger(r.default.LEVEL_UPDATED,{details:a,level:i}),this.startFragRequested===!1){if(-1===this.startPosition){var s=a.startTimeOffset;if(isNaN(s))if(a.live){var h=void 0!==this.config.liveSyncDuration?this.config.liveSyncDuration:this.config.liveSyncDurationCount*a.targetduration;this.startPosition=Math.max(0,n+d-h)}else this.startPosition=0;else t.logger.log("start time offset found in playlist, adjust startPosition to "+s),this.startPosition=s}this.nextLoadPosition=this.startPosition}this.state===e.WAITING_LEVEL&&(this.state=e.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===e.KEY_LOADING&&(this.state=e.IDLE,this.tick())}},{key:"onFragLoaded",value:function(i){var a=this.fragCurrent;if(this.state===e.FRAG_LOADING&&a&&i.frag.level===a.level&&i.frag.sn===a.sn)if(t.logger.log("Loaded "+a.sn+" of level "+a.level),this.fragBitrateTest===!0)this.state=e.IDLE,this.fragBitrateTest=!1,this.startFragRequested=!1,i.stats.tparsed=i.stats.tbuffered=performance.now(),this.hls.trigger(r.default.FRAG_BUFFERED,{stats:i.stats,frag:a});else{this.state=e.PARSING,this.stats=i.stats;var s=this.levels[this.level],o=s.details,f=o.totalduration,h=void 0===a.startDTS||isNaN(a.startDTS)?a.start:a.startDTS,l=a.level,u=a.sn,n=s.audioCodec||this.config.defaultAudioCodec;this.audioCodecSwap&&(t.logger.log("swapping playlist audio codec"),void 0===n&&(n=this.lastAudioCodec),n&&(n=-1!==n.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5")),this.pendingAppending=0,t.logger.log("Demuxing "+u+" of ["+o.startSN+" ,"+o.endSN+"],level "+l+", cc "+a.cc);var d=this.demuxer;d&&d.push(i.payload,n,s.videoCodec,h,a.cc,l,u,f,a.decryptdata)}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(l){if(this.state===e.PARSING){var o,a,i=l.tracks;if(a=i.audio){var n=this.levels[this.level].audioCodec,u=navigator.userAgent.toLowerCase();n&&this.audioCodecSwap&&(t.logger.log("swapping playlist audio codec"),n=-1!==n.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&-1===u.indexOf("firefox")&&(n="mp4a.40.5"),-1!==u.indexOf("android")&&(n="mp4a.40.2",t.logger.log("Android: force audio codec to"+n)),a.levelCodec=n}if(a=i.video,a&&(a.levelCodec=this.levels[this.level].videoCodec),l.unique){var s={codec:"",levelCodec:""};for(o in l.tracks)a=i[o],s.container=a.container,s.codec&&(s.codec+=",",s.levelCodec+=","),a.codec&&(s.codec+=a.codec),a.levelCodec&&(s.levelCodec+=a.levelCodec);i={audiovideo:s}}this.hls.trigger(r.default.BUFFER_CODECS,i);for(o in i){a=i[o],t.logger.log("track:"+o+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var d=a.initSegment;d&&(this.pendingAppending++,this.hls.trigger(r.default.BUFFER_APPENDING,{type:o,data:d}))}this.tick()}}},{key:"onFragParsingData",value:function(a){var o=this;if(this.state===e.PARSING){this.tparse2=Date.now();var n=this.levels[this.level],i=this.fragCurrent;t.logger.log("parsed "+a.type+",PTS:["+a.startPTS.toFixed(3)+","+a.endPTS.toFixed(3)+"],DTS:["+a.startDTS.toFixed(3)+"/"+a.endDTS.toFixed(3)+"],nb:"+a.nb+",dropped:"+(a.dropped||0));var l=u.default.updateFragPTSDTS(n.details,i.sn,a.startPTS,a.endPTS,a.startDTS,a.endDTS),s=this.hls;s.trigger(r.default.LEVEL_PTS_UPDATED,{details:n.details,level:this.level,drift:l}),"video"===a.type&&(i.dropped=a.dropped),[a.data1,a.data2].forEach(function(e){e&&(o.pendingAppending++,s.trigger(r.default.BUFFER_APPENDING,{type:a.type,data:e}))}),this.nextLoadPosition=a.endPTS,this.bufferRange.push({type:a.type,start:a.startPTS,end:a.endPTS,frag:i}),this.tick()}else t.logger.warn("not in PARSING state but "+this.state+", ignoring FRAG_PARSING_DATA event")}},{key:"onFragParsed",value:function(){this.state===e.PARSING&&(this.stats.tparsed=performance.now(),this.state=e.PARSED,this._checkAppendedParsed())}},{key:"onBufferAppended",value:function(){switch(this.state){case e.PARSING:case e.PARSED:this.pendingAppending--,this._checkAppendedParsed()}}},{key:"_checkAppendedParsed",value:function(){if(this.state===e.PARSED&&0===this.pendingAppending){var i=this.fragCurrent,a=this.stats;i&&(this.fragPrevious=i,a.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*a.length/(a.tbuffered-a.tfirst)),this.hls.trigger(r.default.FRAG_BUFFERED,{stats:a,frag:i}),t.logger.log("media buffered : "+this.timeRangesToString(this.media.buffered)),this.state=e.IDLE),this.tick()}}},{key:"onError",value:function(i){switch(i.details){case a.ErrorDetails.FRAG_LOAD_ERROR:case a.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!i.fatal){var n=this.fragLoadError;if(n?n++:n=1,n<=this.config.fragLoadingMaxRetry||this.media&&this.isBuffered(this.media.currentTime)){this.fragLoadError=n,i.frag.loadCounter=0;var s=Math.min(Math.pow(2,n-1)*this.config.fragLoadingRetryDelay,64e3);t.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.state=e.FRAG_LOADING_WAITING_RETRY}else t.logger.error("mediaController: "+i.details+" reaches max retry, redispatch as fatal ..."),i.fatal=!0,this.hls.trigger(r.default.ERROR,i),this.state=e.ERROR}break;case a.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case a.ErrorDetails.LEVEL_LOAD_ERROR:case a.ErrorDetails.LEVEL_LOAD_TIMEOUT:case a.ErrorDetails.KEY_LOAD_ERROR:case a.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==e.ERROR&&(this.state=i.fatal?e.ERROR:e.IDLE,t.logger.warn("mediaController: "+i.details+" while loading frag,switch to "+this.state+" state ..."));break;case a.ErrorDetails.BUFFER_FULL_ERROR:this.state!==e.PARSING&&this.state!==e.PARSED||(this.config.maxMaxBufferLength/=2,t.logger.warn("reduce max buffer length to "+this.config.maxMaxBufferLength+"s and switch to IDLE state"),this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.state=e.IDLE)}}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var n=e.currentTime,u=e.buffered;if(!this.loadedmetadata&&u.length){this.loadedmetadata=!0;var i=this.startPosition;if(!n&&n!==i&&i){t.logger.log("target start position:"+i);var l=u.start(0),g=u.end(0);(l>i||i>g)&&(i=l,t.logger.log("target start position not buffered, seek to buffered.start(0) "+l)),t.logger.log("adjust currentTime from "+n+" to "+i),e.currentTime=i}}else{var d=s.default.bufferInfo(e,n,0),v=!(e.paused||e.ended||0===e.buffered.length),f=.4,h=n>e.playbackRate*this.lastCurrentTime;if(this.stalled&&h&&(this.stalled=!1,t.logger.log("playback not stuck anymore @"+n)),v&&d.len<=f&&(h?(f=0,this.seekHoleNudgeDuration=0):this.stalled?this.seekHoleNudgeDuration+=this.config.seekHoleNudgeDuration:(this.seekHoleNudgeDuration=0,t.logger.log("playback seems stuck @"+n),this.hls.trigger(r.default.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1}),this.stalled=!0),d.len<=f)){var o=d.nextStart,c=o-n;if(o&&c0){t.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+o+" + nudge "+this.seekHoleNudgeDuration);var p=o+this.seekHoleNudgeDuration-e.currentTime;e.currentTime=o+this.seekHoleNudgeDuration,this.hls.trigger(r.default.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:p})}}}}}},{key:"onFragLoadEmergencyAborted",value:function(){this.state=e.IDLE,this.tick()}},{key:"onBufferFlushed",value:function(){var t,r,a=[];for(r=0;re;e++)r+="["+t.start(e)+","+t.end(e)+"]";return r}},{key:"currentLevel",get:function(){if(this.media){var e=this.getBufferRange(this.media.currentTime);if(e)return e.frag.level}return-1}},{key:"nextBufferRange",get:function(){return this.media?this.followingBufferRange(this.getBufferRange(this.media.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferRange;return e?e.frag.level:-1}}]),i}(l.default);o.default=f},{"../demux/demuxer":17,"../errors":21,"../event-handler":22,"../events":23,"../helper/buffer-helper":24,"../helper/level-helper":25,"../utils/binary-search":35,"../utils/logger":38}],9:[function(t,v,a){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(a,"__esModule",{value:!0});var c=function(){function e(a,r){for(var t=0;te;e++)c[(i[e]=e<<1^283*(e>>7))^e]=e;for(a=r=0;!h[a];a^=u||1,r=c[r]||1)for(t=r^r<<1^r<<2^r<<3^r<<4,t=t>>8^255&t^99,h[a]=t,v[t]=a,d=i[f=i[u=i[a]]],l=16843009*d^65537*f^257*u^16843008*a,s=257*i[t]^16843008*t,e=0;4>e;e++)n[e][a]=s=s<<24^s>>>8,o[e][t]=l=l<<24^l>>>8;for(e=0;5>e;e++)n[e]=n[e].slice(0),o[e]=o[e].slice(0)}},{key:"decrypt",value:function(R,p,_,b,E,m){var h,g,v,n,e=this._key[1],t=R^e[0],a=b^e[1],i=_^e[2],r=p^e[3],y=e.length/4-2,s=4,o=this._tables[1],f=o[0],d=o[1],u=o[2],l=o[3],c=o[4];for(n=0;y>n;n++)h=f[t>>>24]^d[a>>16&255]^u[i>>8&255]^l[255&r]^e[s],g=f[a>>>24]^d[i>>16&255]^u[r>>8&255]^l[255&t]^e[s+1],v=f[i>>>24]^d[r>>16&255]^u[t>>8&255]^l[255&a]^e[s+2],r=f[r>>>24]^d[t>>16&255]^u[a>>8&255]^l[255&i]^e[s+3],s+=4,t=h,a=g,i=v;for(n=0;4>n;n++)E[(3&-n)+m]=c[t>>>24]<<24^c[a>>16&255]<<16^c[i>>8&255]<<8^c[255&r]^e[s++],h=t,t=a,a=i,i=r,r=h}}]),e}();e.default=a},{}],11:[function(t,l,e){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;t>8|e>>>24}},{key:"doDecrypt",value:function(a,g,i){var u,h,o,f,l,c,d,n,e,r=new Int32Array(a.buffer,a.byteOffset,a.byteLength>>2),p=new s.default(Array.prototype.slice.call(g)),v=new Uint8Array(a.byteLength),t=new Int32Array(v.buffer);for(u=~~i[0],h=~~i[1],o=~~i[2],f=~~i[3],e=0;ee&&(255!==t[e]||240!==(240&t[e+1]));e++);for(r.audiosamplerate||(i=o.default.getAudioConfig(this.observer,t,e,p),r.config=i.config,r.audiosamplerate=i.samplerate,r.channelCount=i.channelCount,r.codec=i.codec,r.duration=y,l.logger.log("parsed codec:"+r.codec+",rate:"+i.samplerate+",nb channel:"+i.channelCount)),c=0,g=9216e4/r.audiosamplerate;u>e+5&&(s=1&t[e+1]?7:9,n=(3&t[e+3])<<11|t[e+4]<<3|(224&t[e+5])>>>5,n-=s,n>0&&u>=e+s+n);)for(f=h+c*g,v={unit:t.subarray(e+s,e+s+n),pts:f,dts:f},r.samples.push(v),r.len+=n,e+=n+s,c++;u-1>e&&(255!==t[e]||240!==(240&t[e+1]));e++);this.remuxer.remux(this._aacTrack,{samples:[]},{samples:[{pts:h,dts:h,unit:d.payload}]},{samples:[]},m)}},{key:"destroy",value:function(){}}],[{key:"probe",value:function(t){var e,r,i=new a.default(t);if(i.hasTimeStamp)for(e=i.length,r=t.length;r-1>e;e++)if(255===t[e]&&240===(240&t[e+1]))return!0;return!1}}]),e}();t.default=s},{"../demux/id3":19,"../utils/logger":38,"./adts":14}],14:[function(e,o,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;t>>6)+1,e=(60&u[l+2])>>>2,e>d.length-1?void h.trigger(Event.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+e}):(o=(1&u[l+2])<<2,o|=(192&u[l+3])>>>6,n.logger.log("manifest codec:"+i+",ADTS data:type:"+a+",sampleingIndex:"+e+"["+d[e]+"Hz],channelConfig:"+o),-1!==f.indexOf("firefox")?e>=6?(a=5,t=new Array(4),s=e-3):(a=2,t=new Array(2),s=e):-1!==f.indexOf("android")?(a=2,t=new Array(2),s=e):(a=5,t=new Array(4),i&&(-1!==i.indexOf("mp4a.40.29")||-1!==i.indexOf("mp4a.40.5"))||!i&&e>=6?s=e-3:((i&&-1!==i.indexOf("mp4a.40.2")&&e>=6&&1===o||!i&&1===o)&&(a=2,t=new Array(2)),s=e)),t[0]=a<<3,t[0]|=(14&e)>>1,t[1]|=(1&e)<<7,t[1]|=o<<3,5===a&&(t[1]|=(14&s)>>1,t[2]=(1&s)<<7,t[2]|=8,t[3]=0),{config:t,samplerate:d[e],channelCount:o,codec:"mp4a.40."+a})}}]),e}();t.default=s},{"../errors":21,"../utils/logger":38}],15:[function(e,y,a){"use strict";function t(e){return e&&e.__esModule?e:{default:e}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var h=function(){function e(a,r){for(var t=0;t1?r-1:0),e=1;r>e;e++)i[e-1]=arguments[e];t.emit.apply(t,[a,a].concat(i))},t.off=function(i){for(var r=arguments.length,a=Array(r>1?r-1:0),e=1;r>e;e++)a[e-1]=arguments[e];t.removeListener.apply(t,[i].concat(a))},r.addEventListener("message",function(a){var e=a.data;switch(e.cmd){case"init":r.demuxer=new u.default(t,e.typeSupported);break;case"demux":r.demuxer.push(new Uint8Array(e.data),e.audioCodec,e.videoCodec,e.timeOffset,e.cc,e.level,e.sn,e.duration)}}),t.on(e.default.FRAG_PARSING_INIT_SEGMENT,function(t,e){r.postMessage({event:t,tracks:e.tracks,unique:e.unique})}),t.on(e.default.FRAG_PARSING_DATA,function(a,e){var t={event:a,type:e.type,startPTS:e.startPTS,endPTS:e.endPTS,startDTS:e.startDTS,endDTS:e.endDTS,data1:e.data1.buffer,data2:e.data2.buffer,nb:e.nb,dropped:e.dropped};r.postMessage(t,[t.data1,t.data2])}),t.on(e.default.FRAG_PARSED,function(e){r.postMessage({event:e})}),t.on(e.default.ERROR,function(e,t){r.postMessage({event:e,data:t})}),t.on(e.default.FRAG_PARSING_METADATA,function(e,t){var a={event:e,samples:t.samples};r.postMessage(a)}),t.on(e.default.FRAG_PARSING_USERDATA,function(e,t){var a={event:e,samples:t.samples};r.postMessage(a)})};a.default=o},{"../demux/demuxer-inline":15,"../events":23,events:1}],17:[function(t,p,a){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(a,r){for(var t=0;t0&&null!=e&&null!=e.key&&"AES-128"===e.method){null==this.decrypter&&(this.decrypter=new v.default(this.hls));var u=this;this.decrypter.decrypt(t,e.key,e.iv,function(e){u.pushDecrypted(e,r,a,i,n,s,o,l)})}else this.pushDecrypted(t,r,a,i,n,s,o,l)}},{key:"onWorkerMessage",value:function(a){var t=a.data;switch(t.event){case e.default.FRAG_PARSING_INIT_SEGMENT:var r={};r.tracks=t.tracks,r.unique=t.unique,this.hls.trigger(e.default.FRAG_PARSING_INIT_SEGMENT,r);break;case e.default.FRAG_PARSING_DATA:this.hls.trigger(e.default.FRAG_PARSING_DATA,{data1:new Uint8Array(t.data1),data2:new Uint8Array(t.data2),startPTS:t.startPTS,endPTS:t.endPTS,startDTS:t.startDTS,endDTS:t.endDTS,type:t.type,nb:t.nb,dropped:t.dropped});break;case e.default.FRAG_PARSING_METADATA:this.hls.trigger(e.default.FRAG_PARSING_METADATA,{ -samples:t.samples});break;case e.default.FRAG_PARSING_USERDATA:this.hls.trigger(e.default.FRAG_PARSING_USERDATA,{samples:t.samples});break;default:this.hls.trigger(t.event,t.data)}}}]),r}();a.default=o},{"../crypt/decrypter":12,"../demux/demuxer-inline":15,"../demux/demuxer-worker":16,"../errors":21,"../events":23,"../utils/logger":38,webworkify:2}],18:[function(t,s,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function e(a,r){for(var t=0;te?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(t){var e=Math.min(this.bitsAvailable,t),r=this.word>>>32-e;return t>32&&i.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=e,this.bitsAvailable>0?this.word<<=e:this.bytesAvailable>0&&this.loadWord(),e=t-e,e>0?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(i){var t,a,r=8,e=8;for(t=0;i>t;t++)0!==e&&(a=this.readEG(),e=(r+a+256)%256),r=0===e?r:e}},{key:"readSPS",value:function(){var t,g,p,l,i,n,a,o,r,s=0,d=0,f=0,h=0,c=1;if(this.readUByte(),t=this.readUByte(),g=this.readBits(5),this.skipBits(3),p=this.readUByte(),this.skipUEG(),100===t||110===t||122===t||244===t||44===t||83===t||86===t||118===t||128===t){var v=this.readUEG();if(3===v&&this.skipBits(1),this.skipUEG(),this.skipUEG(),this.skipBits(1),this.readBoolean())for(o=3!==v?8:12,r=0;o>r;r++)this.readBoolean()&&(6>r?this.skipScalingList(16):this.skipScalingList(64))}this.skipUEG();var u=this.readUEG();if(0===u)this.readUEG();else if(1===u)for(this.skipBits(1),this.skipEG(),this.skipEG(),l=this.readUEG(),r=0;l>r;r++)this.skipEG();if(this.skipUEG(),this.skipBits(1),i=this.readUEG(),n=this.readUEG(),a=this.readBits(1),0===a&&this.skipBits(1),this.skipBits(1),this.readBoolean()&&(s=this.readUEG(),d=this.readUEG(),f=this.readUEG(),h=this.readUEG()),this.readBoolean()&&this.readBoolean()){var e=void 0,y=this.readUByte();switch(y){case 1:e=[1,1];break;case 2:e=[12,11];break;case 3:e=[10,11];break;case 4:e=[16,11];break;case 5:e=[40,33];break;case 6:e=[24,11];break;case 7:e=[20,11];break;case 8:e=[32,11];break;case 9:e=[80,33];break;case 10:e=[18,11];break;case 11:e=[15,11];break;case 12:e=[64,33];break;case 13:e=[160,99];break;case 14:e=[4,3];break;case 15:e=[3,2];break;case 16:e=[2,1];break;case 255:e=[this.readUByte()<<8|this.readUByte(),this.readUByte()<<8|this.readUByte()]}e&&(c=e[0]/e[1])}return{width:Math.ceil((16*(i+1)-2*s-2*d)*c),height:(2-a)*(n+1)*16-(a?2:4)*(f+h)}}},{key:"readSliceType",value:function(){return this.readUByte(),this.readUEG(),this.readUEG()}}]),e}();e.default=n},{"../utils/logger":38}],19:[function(r,s,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;tr);return t}},{key:"_parseID3Frames",value:function(r,t,n){for(var i,s,o,l,a;n>=t+8;)switch(i=this.readUTF(r,t,4),t+=4,s=r[t++]<<24+r[t++]<<16+r[t++]<<8+r[t++],l=r[t++]<<8+r[t++],o=t,i){case"PRIV":if("com.apple.streaming.transportStreamTimestamp"===this.readUTF(r,t,44)){t+=44,t+=4;var u=1&r[t++];this._hasTimeStamp=!0,a=((r[t++]<<23)+(r[t++]<<15)+(r[t++]<<7)+r[t++])/45,u&&(a+=47721858.84),a=Math.round(a),e.logger.trace("ID3 timestamp found: "+a),this._timeStamp=a}}}},{key:"hasTimeStamp",get:function(){return this._hasTimeStamp}},{key:"timeStamp",get:function(){return this._timeStamp}},{key:"length",get:function(){return this._length}},{key:"payload",get:function(){return this._payload}}]),t}();t.default=n},{"../utils/logger":38}],20:[function(t,v,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var f=function(){function e(a,r){for(var t=0;tt;t+=188)if(71===a[t]){if(d=!!(64&a[t+1]),u=((31&a[t+1])<<8)+a[t+2],y=(48&a[t+3])>>4,y>1){if(i=t+5+a[t+4],i===t+188)continue}else i=t+4;if(g)if(u===h){if(d){if(s&&(this._parseAVCPES(this._parsePES(s)),b&&this._avcTrack.codec&&(-1===f||this._aacTrack.codec)))return void this.remux(a);s={data:[],size:0}}s&&(s.data.push(a.subarray(i,t+188)),s.size+=t+188-i)}else if(u===f){if(d){if(o&&(this._parseAACPES(this._parsePES(o)),b&&this._aacTrack.codec&&(-1===h||this._avcTrack.codec)))return void this.remux(a);o={data:[],size:0}}o&&(o.data.push(a.subarray(i,t+188)),o.size+=t+188-i)}else u===_&&(d&&(l&&this._parseID3PES(this._parsePES(l)),l={data:[],size:0}),l&&(l.data.push(a.subarray(i,t+188)),l.size+=t+188-i));else d&&(i+=a[i]+1),0===u?this._parsePAT(a,i):u===this._pmtId?(this._parsePMT(a,i),g=this.pmtParsed=!0,h=this._avcTrack.id,f=this._aacTrack.id,_=this._id3Track.id,v&&(e.logger.log("reparse from beginning"),v=!1,t=-188)):(e.logger.log("unknown PID found before PAT/PMT"),v=!0)}else this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});s&&this._parseAVCPES(this._parsePES(s)),o&&this._parseAACPES(this._parsePES(o)),l&&this._parseID3PES(this._parsePES(l)),this.remux(null)}},{key:"remux",value:function(e){this.remuxer.remux(this._aacTrack,this._avcTrack,this._id3Track,this._txtTrack,this.timeOffset,this.contiguous,e)}},{key:"destroy",value:function(){this.switchLevel(),this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){this._pmtId=(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(r,t){var i,n,s,a;for(i=(15&r[t+1])<<8|r[t+2],n=t+3+i-4,s=(15&r[t+10])<<8|r[t+11],t+=12+s;n>t;){switch(a=(31&r[t+1])<<8|r[t+2],r[t]){case 15:this._aacTrack.id=a;break;case 21:this._id3Track.id=a;break;case 27:this._avcTrack.id=a;break;default:e.logger.log("unkown stream type:"+r[t])}t+=((15&r[t+3])<<8|r[t+4])+5}}},{key:"_parsePES",value:function(o){var e,n,h,d,u,l,a,r,t,f=0,s=o.data;if(e=s[0],h=(e[0]<<16)+(e[1]<<8)+e[2],1===h){for(d=(e[4]<<8)+e[5],n=e[7],192&n&&(a=536870912*(14&e[9])+4194304*(255&e[10])+16384*(254&e[11])+128*(255&e[12])+(254&e[13])/2,a>4294967295&&(a-=8589934592),64&n?(r=536870912*(14&e[14])+4194304*(255&e[15])+16384*(254&e[16])+128*(255&e[17])+(254&e[18])/2,r>4294967295&&(r-=8589934592)):r=a),u=e[8],t=u+9,o.size-=t,l=new Uint8Array(o.size);s.length;){e=s.shift();var i=e.byteLength;if(t){if(t>i){t-=i;continue}e=e.subarray(t),i-=t,t=0}l.set(e,f),f+=i}return{data:l,pts:a,dts:r,len:d}}return null}},{key:"_parseAVCPES",value:function(a){var t,m,n,o,y=this,r=this._avcTrack,u=r.samples,p=this._parseAVCNALu(a.data),d=[],l=!1,c=!1,f=0;if(0===p.length&&u.length>0){var v=u[u.length-1],h=v.units.units[v.units.units.length-1],g=new Uint8Array(h.data.byteLength+a.data.byteLength);g.set(h.data,0),g.set(a.data,h.data.byteLength),h.data=g,v.units.length+=a.data.byteLength,r.len+=a.data.byteLength}a.data=null;var i="",E=function(){d.length&&(c===!0||r.sps&&(u.length||this.contiguous)?(m={units:{units:d,length:f},pts:a.pts,dts:a.dts,key:c},u.push(m),r.len+=f,r.nbNalu+=d.length):r.dropped++,d=[],f=0)}.bind(this);p.forEach(function(e){switch(e.type){case 1:n=!0,l&&(i+="NDR ");break;case 5:n=!0,l&&(i+="IDR "),c=!0;break;case 6:n=!0,l&&(i+="SEI "),t=new s.default(e.data),t.readUByte();var b=t.readUByte();if(4===b){var g=0;do g=t.readUByte();while(255===g);var A=t.readUByte();if(181===A){var R=t.readUShort();if(49===R){var L=t.readUInt();if(1195456820===L){var k=t.readUByte();if(3===k){var v=t.readUByte(),_=t.readUByte(),S=31&v,h=[v,_];for(o=0;S>o;o++)h.push(t.readUByte()),h.push(t.readUByte()),h.push(t.readUByte());y._txtTrack.samples.push({type:3,pts:a.pts,bytes:h})}}}}}break;case 7:if(n=!0,l&&(i+="SPS "),!r.sps){t=new s.default(e.data);var p=t.readSPS();r.width=p.width,r.height=p.height,r.sps=[e.data],r.duration=y._duration;var T=e.data.subarray(1,4),m="avc1.";for(o=0;3>o;o++){var u=T[o].toString(16);u.length<2&&(u="0"+u),m+=u}r.codec=m}break;case 8:n=!0,l&&(i+="PPS "),r.pps||(r.pps=[e.data]);break;case 9:n=!1,l&&(i+="AUD "),E();break;default:n=!1,i+="unknown NAL "+e.type+" "}n&&(d.push(e),f+=e.data.byteLength)}),(l||i.length)&&e.logger.log(i),E()}},{key:"_parseAVCNALu",value:function(r){for(var s,a,l,_,n,d,t=0,g=r.byteLength,e=this.avcNaluState,v=[];g>t;)switch(s=r[t++],e){case 0:0===s&&(e=1);break;case 1:e=0===s?2:0;break;case 2:case 3:if(0===s)e=3;else if(1===s&&g>t){if(_=31&r[t],n)l={data:r.subarray(n,t-e-1),type:d},v.push(l);else{var i=this.avcNaluState;if(i&&4-i>=t){var m=this._avcTrack,c=m.samples;if(c.length){var p=c[c.length-1],R=p.units.units,u=R[R.length-1];u.state&&(u.data=u.data.subarray(0,u.data.byteLength-i),p.units.length-=i,m.len-=i)}}if(a=t-e-1,a>0){var y=this._avcTrack,h=y.samples;if(h.length){var E=h[h.length-1],b=E.units.units,o=b[b.length-1],f=new Uint8Array(o.data.byteLength+a);f.set(o.data,0),f.set(r.subarray(0,a),o.data.byteLength),o.data=f,E.units.length+=a,y.len+=a}}}n=t,d=_,e=0}else e=0}return n&&(l={data:r.subarray(n,g),type:d,state:e},v.push(l),this.avcNaluState=e),v}},{key:"_parseAACPES",value:function(R){var l,o,p,E,t,d,f,s,_,i=this._aacTrack,a=R.data,v=R.pts,T=0,L=this._duration,A=this.audioCodec,u=this.aacOverFlow,b=this.aacLastPTS;if(u){var m=new Uint8Array(u.byteLength+a.byteLength);m.set(u,0),m.set(a,u.byteLength),a=m}for(t=T,s=a.length;s-1>t&&(255!==a[t]||240!==(240&a[t+1]));t++);if(t){var y,h;if(s-1>t?(y="AAC PES did not start with ADTS header,offset:"+t,h=!1):(y="no ADTS header found in AAC PES",h=!0),this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:h,reason:y}),h)return}if(i.audiosamplerate||(l=c.default.getAudioConfig(this.observer,a,t,A),i.config=l.config,i.audiosamplerate=l.samplerate,i.channelCount=l.channelCount,i.codec=l.codec,i.duration=L,e.logger.log("parsed codec:"+i.codec+",rate:"+l.samplerate+",nb channel:"+l.channelCount)),E=0,p=9216e4/i.audiosamplerate,u&&b){var g=b+p;Math.abs(g-v)>1&&(e.logger.log("AAC: align PTS for overlapping frames by "+Math.round((g-v)/90)),v=g)}for(;s>t+5&&(d=1&a[t+1]?7:9,o=(3&a[t+3])<<11|a[t+4]<<3|(224&a[t+5])>>>5,o-=d,o>0&&s>=t+d+o);)for(f=v+E*p,_={unit:a.subarray(t+d,t+d+o),pts:f,dts:f},i.samples.push(_),i.len+=o,t+=o+d,E++;s-1>t&&(255!==a[t]||240!==(240&a[t+1]));t++);u=s>t?a.subarray(t,s):null,this.aacOverFlow=u,this.aacLastPTS=f}},{key:"_parseID3PES",value:function(e){this._id3Track.samples.push(e)}}],[{key:"probe",value:function(e){return e.length>=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),t}();i.default=o},{"../errors":21,"../events":23,"../utils/logger":38,"./adts":14,"./exp-golomb":18}],21:[function(t,r,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",OTHER_ERROR:"otherError"},e.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",INTERNAL_EXCEPTION:"internalException"}},{}],22:[function(e,f,t){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},d=function(){function e(a,r){for(var t=0;t1?r-1:0),t=1;r>t;t++)a[t-1]=arguments[t];this.handledEvents=a,this.useGenericHandler=!0,this.registerListeners()}return d(e,[{key:"destroy",value:function(){this.unregisterListeners()}},{key:"isEventHandler",value:function(){return"object"===n(this.handledEvents)&&this.handledEvents.length&&"function"==typeof this.onEvent}},{key:"registerListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){if("hlsEventGeneric"===e)throw new Error("Forbidden event name: "+e);this.hls.on(e,this.onEvent)}.bind(this))}},{key:"unregisterListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){this.hls.off(e,this.onEvent)}.bind(this))}},{key:"onEvent",value:function(e,t){this.onEventGeneric(e,t)}},{key:"onEventGeneric",value:function(e,t){var a=function(t,r){var e="on"+t.replace("hls","");if("function"!=typeof this[e])throw new Error("Event "+t+" has no generic handler in this "+this.constructor.name+" class (tried "+e+")");return this[e].bind(this,r)};try{a.call(this,e,t).call()}catch(t){o.logger.error("internal error happened while processing "+e+":"+t.message),this.hls.trigger(s.default.ERROR,{type:r.ErrorTypes.OTHER_ERROR,details:r.ErrorDetails.INTERNAL_EXCEPTION,fatal:!1,event:e,err:t})}}}]),e}();t.default=l},{"./errors":21,"./events":23,"./utils/logger":38}],23:[function(t,e,r){"use strict";e.exports={MEDIA_ATTACHING:"hlsMediaAttaching",MEDIA_ATTACHED:"hlsMediaAttached",MEDIA_DETACHING:"hlsMediaDetaching",MEDIA_DETACHED:"hlsMediaDetached",BUFFER_RESET:"hlsBufferReset",BUFFER_CODECS:"hlsBufferCodecs",BUFFER_APPENDING:"hlsBufferAppending",BUFFER_APPENDED:"hlsBufferAppended",BUFFER_EOS:"hlsBufferEos",BUFFER_FLUSHING:"hlsBufferFlushing",BUFFER_FLUSHED:"hlsBufferFlushed",MANIFEST_LOADING:"hlsManifestLoading",MANIFEST_LOADED:"hlsManifestLoaded",MANIFEST_PARSED:"hlsManifestParsed",LEVEL_LOADING:"hlsLevelLoading",LEVEL_LOADED:"hlsLevelLoaded",LEVEL_UPDATED:"hlsLevelUpdated",LEVEL_PTS_UPDATED:"hlsLevelPtsUpdated",LEVEL_SWITCH:"hlsLevelSwitch",FRAG_LOADING:"hlsFragLoading",FRAG_LOAD_PROGRESS:"hlsFragLoadProgress",FRAG_LOAD_EMERGENCY_ABORTED:"hlsFragLoadEmergencyAborted",FRAG_LOADED:"hlsFragLoaded",FRAG_PARSING_INIT_SEGMENT:"hlsFragParsingInitSegment",FRAG_PARSING_USERDATA:"hlsFragParsingUserdata",FRAG_PARSING_METADATA:"hlsFragParsingMetadata",FRAG_PARSING_DATA:"hlsFragParsingData",FRAG_PARSED:"hlsFragParsed",FRAG_BUFFERED:"hlsFragBuffered",FRAG_CHANGED:"hlsFragChanged",FPS_DROP:"hlsFpsDrop",ERROR:"hlsError",DESTROYING:"hlsDestroying",KEY_LOADING:"hlsKeyLoading",KEY_LOADED:"hlsKeyLoaded"}},{}],24:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;td&&(t[u-1].end=r[e].end):t.push(r[e])}else t.push(r[e])}for(e=0,o=0,l=i=a;e=n&&f>a)l=n,i=f,o=i-a;else if(n>a+s){h=n;break}}return{len:o,start:l,end:i,nextStart:h}}}]),e}();e.default=a},{}],25:[function(r,s,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;th)return void(a.PTSKnown=!1);for(var r=c;h>=r;r++){var s=f[u+r],n=l[r];n&&s&&(d=s.cc-n.cc,isNaN(s.startPTS)||(n.start=n.startPTS=s.startPTS,n.endPTS=s.endPTS,n.duration=s.duration,i=n))}if(d)for(e.logger.log("discontinuity sliding from playlist, take drift into account"),r=0;r=0&&ui.endSN)return 0;if(o=l-i.startSN,n=i.fragments,e=n[o],!isNaN(e.startPTS)){var f=Math.abs(e.startPTS-a);isNaN(e.deltaPTS)?e.deltaPTS=f:e.deltaPTS=Math.max(f,e.deltaPTS),a=Math.min(a,e.startPTS),s=Math.max(s,e.endPTS),d=Math.min(d,e.startDTS),u=Math.max(u,e.endDTS)}var h=a-e.start;for(e.start=e.startPTS=a,e.endPTS=s,e.startDTS=d,e.endDTS=u,e.duration=s-a,r=o;r>0;r--)t.updatePTS(n,r,r-1);for(r=o;ra?r.start=t.start+t.duration:r.start=t.start-r.duration:i>a?(t.duration=n-t.start,t.duration<0&&e.logger.error("negative duration computed for frag "+t.sn+",level "+t.level+", there should be some duration drift between playlist and fragment!")):(r.duration=t.start-n,r.duration<0&&e.logger.error("negative duration computed for frag "+r.sn+",level "+r.level+", there should be some duration drift between playlist and fragment!"))}}]),t}();t.default=n},{"../utils/logger":38}],26:[function(t,I,i){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var n=function(){function e(a,r){for(var t=0;t1?t-1:0),e=1;t>e;e++)i[e-1]=arguments[e];a.emit.apply(a,[r,r].concat(i))},a.off=function(i){for(var t=arguments.length,r=Array(t>1?t-1:0),e=1;t>e;e++)r[e-1]=arguments[e];a.removeListener.apply(a,[i].concat(r))},this.on=a.on.bind(a),this.off=a.off.bind(a),this.trigger=a.trigger.bind(a),this.playlistLoader=new d.default(this),this.fragmentLoader=new h.default(this),this.levelController=new R.default(this),this.abrController=new r.abrController(this),this.bufferController=new r.bufferController(this),this.capLevelController=new r.capLevelController(this),this.streamController=new r.streamController(this),this.timelineController=new r.timelineController(this),this.keyLoader=new p.default(this)}return n(t,null,[{key:"isSupported",value:function(){return window.MediaSource&&"function"==typeof window.MediaSource.isTypeSupported&&window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')}},{key:"Events",get:function(){return a.default}},{key:"ErrorTypes",get:function(){return s.ErrorTypes}},{key:"ErrorDetails",get:function(){return s.ErrorDetails}},{key:"DefaultConfig",get:function(){return t.defaultConfig||(t.defaultConfig={autoStartLoad:!0,startPosition:-1,debug:!1,capLevelToPlayerSize:!1,maxBufferLength:30,maxBufferSize:6e7,maxBufferHole:.5,maxSeekHole:2,seekHoleNudgeDuration:.01,stalledInBufferedNudgeThreshold:10,maxFragLookUpTolerance:.2,liveSyncDurationCount:3,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,maxMaxBufferLength:600,enableWorker:!0,enableSoftwareAES:!0,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingLoopThreshold:3,startFragPrefetch:!1,appendErrorMaxRetry:3,loader:S.default,fLoader:void 0,pLoader:void 0,abrController:v.default,bufferController:P.default,capLevelController:m.default,streamController:b.default,timelineController:L.default,enableCEA708Captions:!0,enableMP2TPassThrough:!1,abrEwmaFastLive:5,abrEwmaSlowLive:9,abrEwmaFastVoD:4,abrEwmaSlowVoD:15,abrEwmaDefaultEstimate:5e5,abrBandWidthFactor:.8,abrBandWidthUpFactor:.7}),t.defaultConfig},set:function(e){t.defaultConfig=e}}]),n(t,[{key:"destroy",value:function(){e.logger.log("destroy"),this.trigger(a.default.DESTROYING),this.detachMedia(),this.playlistLoader.destroy(),this.fragmentLoader.destroy(),this.levelController.destroy(),this.abrController.destroy(),this.bufferController.destroy(),this.capLevelController.destroy(),this.streamController.destroy(),this.timelineController.destroy(),this.keyLoader.destroy(),this.url=null,this.observer.removeAllListeners()}},{key:"attachMedia",value:function(t){e.logger.log("attachMedia"),this.media=t,this.trigger(a.default.MEDIA_ATTACHING,{media:t})}},{key:"detachMedia",value:function(){e.logger.log("detachMedia"),this.trigger(a.default.MEDIA_DETACHING),this.media=null}},{key:"loadSource",value:function(t){e.logger.log("loadSource:"+t),this.url=t,this.trigger(a.default.MANIFEST_LOADING,{url:t})}},{key:"startLoad",value:function(){var t=arguments.length<=0||void 0===arguments[0]?-1:arguments[0];e.logger.log("startLoad"),this.levelController.startLoad(),this.streamController.startLoad(t)}},{key:"stopLoad",value:function(){e.logger.log("stopLoad"),this.levelController.stopLoad(),this.streamController.stopLoad()}},{key:"swapAudioCodec",value:function(){e.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){e.logger.log("recoverMediaError");var t=this.media;this.detachMedia(),this.attachMedia(t)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(t){e.logger.log("set currentLevel:"+t),this.loadLevel=t,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(t){e.logger.log("set nextLevel:"+t),this.levelController.manualLevel=t,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(t){e.logger.log("set loadLevel:"+t),this.levelController.manualLevel=t}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return this.levelController.firstLevel},set:function(t){e.logger.log("set firstLevel:"+t),this.levelController.firstLevel=t}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(t){e.logger.log("set startLevel:"+t),this.levelController.startLevel=t}},{key:"autoLevelCapping",get:function(){return this.abrController.autoLevelCapping},set:function(t){e.logger.log("set autoLevelCapping:"+t),this.abrController.autoLevelCapping=t}},{key:"autoLevelEnabled",get:function(){return-1===this.levelController.manualLevel}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}}]),t}();i.default=l},{"./controller/abr-controller":3,"./controller/buffer-controller":4,"./controller/cap-level-controller":5,"./controller/level-controller":7,"./controller/stream-controller":8,"./controller/timeline-controller":9,"./errors":21,"./events":23,"./loader/fragment-loader":28,"./loader/key-loader":29,"./loader/playlist-loader":30,"./utils/logger":38,"./utils/xhr-loader":40,events:1}],27:[function(e,t,r){"use strict";t.exports=e("./hls.js").default},{"./hls.js":26}],28:[function(r,c,a){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(a,"__esModule",{value:!0});var h=function(){function e(a,r){for(var t=0;te;e++)t[e]=r>>8*(15-e)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,r){var t=e;return e&&e.method&&e.uri&&!e.iv&&(t=this.cloneObj(e),t.iv=this.createInitializationVector(r)),t}},{key:"avc1toavcoti",value:function(r){var e,t=r.split(".");return t.length>2?(e=t.shift()+".",e+=parseInt(t.shift()).toString(16),e+=("000"+parseInt(t.shift()).toString(16)).substr(-4)):e=r,e}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"parseLevelPlaylist",value:function(D,f,T){var E,e,R,l=0,o=0,t={version:null,type:null,url:f,fragments:[],live:!0,startSN:0},a={method:null,key:null,iv:null,uri:null},y=0,c=null,r=null,n=null,d=null,h=null,s=null;for(R=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE):(\d+))|(?:#EXT-X-(TARGETDURATION):(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT(INF):(\d+(?:\.\d+)?)(?:,(.*))?)|(?:(?!#)()(\S.+))|(?:#EXT-X-(BYTERANGE):(\d+(?:@\d+(?:\.\d+)?))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(PROGRAM-DATE-TIME):(.+))|(?:#EXT-X-(VERSION):(\d+))|(?:(#)(.*):(.*))|(?:(#)(.*)))(?:.*)\r?\n?/g;null!==(e=R.exec(D));)switch(e.shift(),e=e.filter(function(e){return void 0!==e}),e[0]){case"VERSION":t.version=parseInt(e[1]);break;case"PLAYLIST-TYPE":t.type=e[1].toUpperCase();break;case"MEDIA-SEQUENCE":l=t.startSN=parseInt(e[1]);break;case"TARGETDURATION":t.targetduration=parseFloat(e[1]);break;case"EXTM3U":break;case"ENDLIST":t.live=!1;break;case"DIS":y++;break;case"BYTERANGE":var v=e[1].split("@");s=1===v.length?h:parseInt(v[1]),h=parseInt(v[0])+s;break;case"INF":n=parseFloat(e[1]),d=e[2]?e[2]:null;break;case"":if(!isNaN(n)){var b=l++;E=this.fragmentDecryptdataFromLevelkey(a,b);var L=e[1]?this.resolve(e[1],f):null;r={url:L,duration:n,title:d,start:o,sn:b,level:T,cc:y,decryptdata:E,programDateTime:c},null!==s&&(r.byteRangeStartOffset=s,r.byteRangeEndOffset=h),t.fragments.push(r),o+=n,n=null,d=null,s=null,c=null}break;case"KEY":var A=e[1],p=new i.default(A),g=p.enumeratedString("METHOD"),m=p.URI,k=p.hexadecimalInteger("IV");g&&(a={method:null,key:null,iv:null,uri:null},m&&"AES-128"===g&&(a.method=g,a.uri=this.resolve(m,f),a.key=null,a.iv=k));break;case"START":var S=e[1],w=new i.default(S),_=w.decimalFloatingPoint("TIME-OFFSET");_&&(t.startTimeOffset=_);break;case"PROGRAM-DATE-TIME":c=new Date(Date.parse(e[1]));break;case"#":e.shift();break;default:u.logger.warn("line parsed but not handled: "+e)}return r&&!r.url&&(t.fragments.pop(),o-=r.duration),t.totalduration=o,t.endSN=l-1,t}},{key:"loadsuccess",value:function(d,a){var s,o=d.currentTarget,n=o.responseText,r=o.responseURL,l=this.id,f=this.id2,i=this.hls;if(this.loading=!1,void 0===r&&(r=this.url),a.tload=performance.now(),a.mtime=new Date(o.getResponseHeader("Last-Modified")),0===n.indexOf("#EXTM3U"))if(n.indexOf("#EXTINF:")>0){var u=this.parseLevelPlaylist(n,r,l||0);u.tload=a.tload,null===l&&i.trigger(t.default.MANIFEST_LOADED,{levels:[{url:r,details:u}],url:r,stats:a}),a.tparsed=performance.now(),i.trigger(t.default.LEVEL_LOADED,{details:u,level:l||0,id:f,stats:a})}else s=this.parseMasterPlaylist(n,r),s.length?i.trigger(t.default.MANIFEST_LOADED,{levels:s,url:r,stats:a}):i.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no level found in manifest"});else i.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(i){var r,a;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_ERROR,a=!0):(r=e.ErrorDetails.LEVEL_LOAD_ERROR,a=!1),this.loader&&this.loader.abort(),this.loading=!1,this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:a,url:this.url,loader:this.loader,response:i.currentTarget,level:this.id,id:this.id2})}},{key:"loadtimeout",value:function(){var r,a;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_TIMEOUT,a=!0):(r=e.ErrorDetails.LEVEL_LOAD_TIMEOUT,a=!1),this.loader&&this.loader.abort(),this.loading=!1,this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:a,url:this.url,loader:this.loader,level:this.id,id:this.id2})}}]),r}(n.default);s.default=y},{"../errors":21,"../event-handler":22,"../events":23,"../utils/attr-list":34,"../utils/logger":38,"../utils/url":39}],31:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;t>24&255,t[1]=e>>16&255,t[2]=e>>8&255,t[3]=255&e,t.set(i,4),r=0,e=8;n>r;r++)t.set(a[r],e),e+=a[r].byteLength;return t}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}},{key:"mdhd",value:function(t,r){return r*=t,e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24,r>>16&255,r>>8&255,255&r,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,a){return e.box(e.types.moof,e.mfhd(t),e.traf(a,r))}},{key:"moov",value:function(t){for(var r=t.length,a=[];r--;)a[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(a).concat(e.mvex(t)))}},{key:"mvex",value:function(r){for(var t=r.length,a=[];t--;)a[t]=e.trex(r[t]);return e.box.apply(null,[e.types.mvex].concat(a))}},{key:"mvhd",value:function(t,r){r*=t;var a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24&255,r>>16&255,r>>8&255,255&r,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,a)}},{key:"sdtp",value:function(n){var r,t,a=n.samples||[],i=new Uint8Array(4+a.length);for(t=0;t>>8&255),a.push(255&n),a=a.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&n),s=s.concat(Array.prototype.slice.call(i));var u=e.box(e.types.avcC,new Uint8Array([1,a[3],a[4],a[5],255,224|t.sps.length].concat(a).concat([t.pps.length]).concat(s))),o=t.width,l=t.height;return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,o>>8&255,255&o,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))}},{key:"esds",value:function(t){var e=t.config.length;return new Uint8Array([0,0,0,0,3,23+e,0,1,0,4,15+e,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([e]).concat(t.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.audiosamplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"stsd",value:function(t){return"audio"===t.type?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,a=t.duration*t.timescale,i=t.width,n=t.height;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,i>>8&255,255&i,0,0,n>>8&255,255&n,0,0]))}},{key:"traf",value:function(a,t){var i=e.sdtp(a),r=a.id;return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r])),e.box(e.types.tfdt,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t])),e.trun(a,i.length+16+16+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(r){var t=r.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(h,o){var a,i,n,s,t,l,d=h.samples||[],r=d.length,f=12+16*r,u=new Uint8Array(f);for(o+=8+f,u.set([0,0,15,1,r>>>24&255,r>>>16&255,r>>>8&255,255&r,o>>>24&255,o>>>16&255,o>>>8&255,255&o],0),a=0;r>a;a++)i=d[a],n=i.duration,s=i.size,t=i.flags,l=i.cts,u.set([n>>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,t.isLeading<<2|t.dependsOn,t.isDependedOn<<6|t.hasRedundancy<<4|t.paddingValue<<1|t.isNonSync,61440&t.degradPrio,15&t.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*a);return e.box(e.types.trun,u)}},{key:"initSegment",value:function(a){e.types||e.init();var t,r=e.moov(a);return t=new Uint8Array(e.FTYP.byteLength+r.byteLength),t.set(e.FTYP),t.set(r,e.FTYP.byteLength),t}}]),e}();e.default=a},{}],32:[function(a,h,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var l=function(){function e(a,r){for(var t=0;tMath.pow(2,32)&&!function(){var e=function r(t,e){return e?r(e,t%e):t};a.timescale=a.audiosamplerate/e(a.audiosamplerate,1024)}(),e.logger.log("audio mp4 timescale :"+a.timescale),l.audio={container:"audio/mp4",codec:a.codec,initSegment:r.default.initSegment([a]),metadata:{channelCount:a.channelCount}},u&&(n=o=v[0].pts-f*h)),i.sps&&i.pps&&d.length&&(i.timescale=this.MP4_TIMESCALE,l.video={container:"video/mp4",codec:i.codec,initSegment:r.default.initSegment([i]),metadata:{width:i.width,height:i.height}},u&&(n=Math.min(n,d[0].pts-f*h),o=Math.min(o,d[0].dts-f*h))),Object.keys(l).length?(c.trigger(t.default.FRAG_PARSING_INIT_SEGMENT,g),this.ISGenerated=!0,u&&(this._initPTS=n,this._initDTS=o)):c.trigger(t.default.ERROR,{type:s.ErrorTypes.MEDIA_ERROR,details:s.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(a,D,w){var L,s,v,T,y,d,k,S,R,g,m,f,u,i,l,b=8,c=this.PES_TIMESCALE,h=this.PES2MP4SCALEFACTOR,o=[],A=a.samples.reduce(function(t,e){return Math.max(Math.min(t,e.pts-e.dts),-18e3)},0);for(0>A&&e.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(A/90)+" ms to overcome this issue"),d=new Uint8Array(a.len+4*a.nbNalu+8),L=new DataView(d.buffer),L.setUint32(0,d.byteLength),d.set(r.default.types.mdat,4);a.samples.length;){for(s=a.samples.shift(),T=0;s.units.units.length;)y=s.units.units.shift(),L.setUint32(b,y.data.byteLength),b+=4,d.set(y.data,b),b+=y.data.byteLength,T+=4+y.data.byteLength;if(m=s.pts-this._initDTS,f=s.dts-this._initDTS+A,f=Math.min(m,f),void 0!==g){u=this._PTSNormalize(m,g),i=this._PTSNormalize(f,g);var _=(i-g)/h;0>=_&&(e.logger.log("invalid sample duration at PTS/DTS: "+s.pts+"/"+s.dts+":"+_),_=1),v.duration=_}else{var p=void 0,n=void 0;p=w?this.nextAvcDts:D*c,u=this._PTSNormalize(m,p),i=this._PTSNormalize(f,p),n=Math.round((i-p)/90),w&&n&&(n>1?e.logger.log("AVC:"+n+" ms hole between fragments detected,filling it"):-1>n&&e.logger.log("AVC:"+-n+" ms overlapping between fragments detected"),i=p,u=Math.max(u-n,i),e.logger.log("Video/PTS/DTS adjusted: "+u+"/"+i+",delta:"+n)),S=Math.max(0,u),R=Math.max(0,i)}v={size:T,duration:0,cts:(u-i)/h,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0}},l=v.flags,s.key===!0?(l.dependsOn=2,l.isNonSync=0):(l.dependsOn=1,l.isNonSync=1),o.push(v),g=i}var E=0;o.length>=2&&(E=o[o.length-2].duration,v.duration=E),this.nextAvcDts=i+E*h;var O=a.dropped;a.len=0,a.nbNalu=0,a.dropped=0,o.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&(l=o[0].flags,l.dependsOn=2,l.isNonSync=0),a.samples=o,k=r.default.moof(a.sequenceNumber++,R/h,a),a.samples=[],this.observer.trigger(t.default.FRAG_PARSING_DATA,{data1:k,data2:d,startPTS:S/c,endPTS:(u+h*E)/c,startDTS:R/c,endDTS:this.nextAvcDts/c,type:"video",nb:o.length,dropped:O})}},{key:"remuxAudio",value:function(a,D,S){var k,p,n,h,d,T,L,b,u,g,R,o,i,A=8,s=this.PES_TIMESCALE,w=a.timescale,f=s/w,E=1024*a.timescale/a.audiosamplerate,m=[],_=[];for(a.samples.sort(function(e,t){return e.pts-t.pts}),_=a.samples;_.length;){if(p=_.shift(),h=p.unit,g=p.pts-this._initDTS,R=p.dts-this._initDTS,void 0!==u)o=this._PTSNormalize(g,u),i=this._PTSNormalize(R,u),n.duration=(i-u)/f,Math.abs(n.duration-E)>E/10&&e.logger.log("invalid AAC sample duration at PTS "+Math.round(g/90)+",should be 1024,found :"+Math.round(n.duration*a.audiosamplerate/a.timescale)),n.duration=E,o=i=E*f+u;else{var c=void 0,l=void 0;if(c=S?this.nextAacPts:D*s,o=this._PTSNormalize(g,c),i=this._PTSNormalize(R,c),l=Math.round(1e3*(o-c)/s),S&&l){if(l>0)e.logger.log(l+" ms hole between AAC samples detected,filling it");else if(-12>l){e.logger.log(-l+" ms overlapping between AAC samples detected, drop frame"),a.len-=h.byteLength;continue}o=i=c}if(L=Math.max(0,o),b=Math.max(0,i),!(a.len>0))return;d=new Uint8Array(a.len+8),k=new DataView(d.buffer),k.setUint32(0,d.byteLength),d.set(r.default.types.mdat,4)}d.set(h,A),A+=h.byteLength,n={size:h.byteLength,cts:0,duration:0,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:1}},m.push(n),u=i}var y=0,v=m.length;v>=2&&(y=m[v-2].duration,n.duration=y),v&&(this.nextAacPts=o+f*y,a.len=0,a.samples=m,T=r.default.moof(a.sequenceNumber++,b/f,a),a.samples=[],this.observer.trigger(t.default.FRAG_PARSING_DATA,{data1:T,data2:d,startPTS:L/s,endPTS:this.nextAacPts/s,startDTS:b/s,endDTS:(i+f*y)/s,type:"audio",nb:v}))}},{key:"remuxID3",value:function(r,i){var e,n=r.samples.length;if(n){for(var a=0;n>a;a++)e=r.samples[a],e.pts=(e.pts-this._initPTS)/this.PES_TIMESCALE,e.dts=(e.dts-this._initDTS)/this.PES_TIMESCALE;this.observer.trigger(t.default.FRAG_PARSING_METADATA,{samples:r.samples})}r.samples=[],i=i}},{key:"remuxText",value:function(e,i){e.samples.sort(function(e,t){return e.pts-t.pts});var r,n=e.samples.length;if(n){for(var a=0;n>a;a++)r=e.samples[a],r.pts=(r.pts-this._initPTS)/this.PES_TIMESCALE;this.observer.trigger(t.default.FRAG_PARSING_USERDATA,{samples:e.samples})}e.samples=[],i=i}},{key:"_PTSNormalize",value:function(e,t){var r;if(void 0===t)return e;for(r=e>t?-8589934592:8589934592;Math.abs(e-t)>4294967296;)e+=r;return e}},{key:"passthrough",get:function(){return!1}}]),a}();i.default=d},{"../errors":21,"../events":23,"../remux/mp4-generator":31,"../utils/logger":38}],33:[function(r,l,e){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(a,r){for(var t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"hexadecimalInteger",value:function(r){if(this[r]){var e=(this[r]||"0x").slice(2);e=(1&e.length?"0":"")+e;for(var a=new Uint8Array(e.length/2),t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(t){var e=/^(\d+)x(\d+)$/.exec(this[t]);if(null!==e)return{width:parseInt(e[1],10),height:parseInt(e[2],10)}}}],[{key:"parseAttrList",value:function(i){for(var t,n=/\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g,r={};null!==(t=n.exec(i));){var e=t[2],a='"';0===e.indexOf(a)&&e.lastIndexOf(a)===e.length-1&&(e=e.slice(1,-1)),r[t[1]]=e}return r}}]),e}();e.default=a},{}],35:[function(r,e,a){"use strict";var t={search:function(i,s){for(var t=0,r=i.length-1,e=null,a=null;r>=t;){e=(t+r)/2|0,a=i[e];var n=s(a);if(n>0)t=e+1;else{if(!(0>n))return a;r=e-1}}return null}};e.exports=t},{}],36:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;t0;)e.removeCue(e.cues[0])}},{key:"push",value:function(r,a){this.cue||this._createCue();for(var i,t,e,s,o,u=31&a[0],n=2,l=0;u>l;l++)if(i=a[n++],t=127&a[n++],e=127&a[n++],s=0!==(4&i),o=3&i,(0!==t||0!==e)&&s&&0===o){if(32&t||64&t)this.cue.text+=this._fromCharCode(t)+this._fromCharCode(e);else if((17===t||25===t)&&e>=48&&63>=e)switch(e){case 48:this.cue.text+="®";break;case 49:this.cue.text+="°";break;case 50:this.cue.text+="½";break;case 51:this.cue.text+="¿";break;case 52:this.cue.text+="™";break;case 53:this.cue.text+="¢";break;case 54:this.cue.text+="";break;case 55:this.cue.text+="£";break;case 56:this.cue.text+="♪";break;case 57:this.cue.text+=" ";break;case 58:this.cue.text+="è";break;case 59:this.cue.text+="â";break;case 60:this.cue.text+="ê";break;case 61:this.cue.text+="î";break;case 62:this.cue.text+="ô";break;case 63:this.cue.text+="û"}if((17===t||25===t)&&e>=32&&47>=e)switch(e){case 32:break;case 33:break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:break;case 42:break;case 43:break;case 44:break;case 45:break;case 46:break;case 47:}if((20===t||28===t)&&e>=32&&47>=e)switch(e){case 32:this._clearActiveCues(r);break;case 33:this.cue.text=this.cue.text.substr(0,this.cue.text.length-1);break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:this._clearActiveCues(r);break;case 42:break;case 43:break;case 44:this._clearActiveCues(r);break;case 45:break;case 46:this._text="";break;case 47:this._flipMemory(r)}if((23===t||31===t)&&e>=33&&35>=e)switch(e){case 33:break;case 34:break;case 35:}}}},{key:"_fromCharCode",value:function(e){switch(e){case 42:return"á";case 2:return"á";case 2:return"é";case 4:return"í";case 5:return"ó";case 6:return"ú";case 3:return"ç";case 4:return"÷";case 5:return"Ñ";case 6:return"ñ";case 7:return"█";default:return String.fromCharCode(e)}}},{key:"_flipMemory",value:function(e){this._clearActiveCues(e),this._flushCaptions(e)}},{key:"_flushCaptions",value:function(s){this._has708||(this._textTrack=this.media.addTextTrack("captions","English","en"),this._has708=!0);var e=!0,a=!1,i=void 0;try{for(var n,t=this.memory[Symbol.iterator]();!(e=(n=t.next()).done);e=!0){var r=n.value;r.startTime=s,this._textTrack.addCue(r),this.display.push(r)}}catch(e){a=!0,i=e}finally{try{!e&&t.return&&t.return()}finally{if(a)throw i}}this.memory=[],this.cue=null}},{key:"_clearActiveCues",value:function(n){var e=!0,r=!1,a=void 0;try{for(var i,t=this.display[Symbol.iterator]();!(e=(i=t.next()).done);e=!0){var s=i.value;s.endTime=n}}catch(e){r=!0,a=e}finally{try{!e&&t.return&&t.return()}finally{if(r)throw a}}this.display=[]}},{key:"_clearBufferedCues",value:function(){}}]),e}();e.default=a},{}],37:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;t "+e}function n(t){var r=window.console[t];return r?function(){for(var n=arguments.length,e=Array(n),a=0;n>a;a++)e[a]=arguments[a];e[0]&&(e[0]=i(t,e[0])),r.apply(window.console,e)}:e}function s(r){for(var a=arguments.length,i=Array(a>1?a-1:0),e=1;a>e;e++)i[e-1]=arguments[e];i.forEach(function(e){t[e]=r[e]?r[e].bind(r):n(e)})}Object.defineProperty(r,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){ -return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},a={trace:e,debug:e,log:e,warn:e,info:e,error:e},t=a;r.enableLogs=function(e){if(e===!0||"object"===("undefined"==typeof e?"undefined":o(e))){s(e,"debug","log","info","warn","error");try{t.log()}catch(e){t=a}}else t=a},r.logger=t},{}],39:[function(r,t,a){"use strict";var e={buildAbsoluteURL:function(r,t){if(t=t.trim(),/^[a-z]+:/i.test(t))return t;var l=null,o=null,n=/^([^#]*)(.*)$/.exec(t);n&&(o=n[2],t=n[1]);var s=/^([^\?]*)(.*)$/.exec(t);s&&(l=s[2],t=s[1]);var f=/^([^#]*)(.*)$/.exec(r);f&&(r=f[1]);var u=/^([^\?]*)(.*)$/.exec(r);u&&(r=u[1]);var a=/^(([a-z]+:)?\/\/[a-z0-9\.\-_~]+(:[0-9]+)?)?(\/.*)$/i.exec(r);if(!a)throw new Error("Error trying to parse base URL.");var h=a[2]||"",d=a[1]||"",c=a[4],i=null;return i=/^\/\//.test(t)?h+"//"+e.buildAbsolutePath("",t.substring(2)):/^\//.test(t)?d+"/"+e.buildAbsolutePath("",t.substring(1)):e.buildAbsolutePath(d+c,t),l&&(i+=l),o&&(i+=o),i},buildAbsolutePath:function(n,s){for(var a,e,o=s,i="",t=n.replace(/[^\/]*$/,o.replace(/(\/|^)(?:\.?\/+)+/g,"$1")),r=0;e=t.indexOf("/../",r),e>-1;r=e+a)a=/^\/(?:\.\.\/)*/.exec(t.slice(e))[0].length,i=(i+t.substring(r,e)).replace(new RegExp("(?:\\/+[^\\/]*){0,"+(a-1)/3+"}$"),"/");return i+t.substr(r)}};t.exports=e},{}],40:[function(r,s,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;t=200&&300>t?(window.clearTimeout(this.timeoutHandle),r.tload=Math.max(r.tfirst,performance.now()),this.onSuccess(a,r)):r.retry>=this.maxRetry||t>=400&&499>t?(window.clearTimeout(this.timeoutHandle),e.logger.error(t+" while loading "+this.url),this.onError(a)):(e.logger.warn(t+" while loading "+this.url+", retrying in "+this.retryDelay+"..."),this.destroy(),window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,64e3),r.retry++))}},{key:"loadtimeout",value:function(t){e.logger.warn("timeout while loading "+this.url),this.onTimeout(t,this.stats)}},{key:"loadprogress",value:function(t){var e=this.stats;0===e.tfirst&&(e.tfirst=Math.max(performance.now(),e.trequest)),e.loaded=t.loaded,this.onProgress&&this.onProgress(t,e)}}]),t}();t.default=n},{"../utils/logger":38}]},{},[27])(27)}); +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Hls=e()}}(function(){return function s(e,t,r){function a(i,d){if(!t[i]){if(!e[i]){var l="function"==typeof require&&require;if(!d&&l)return l(i,!0);if(n)return n(i,!0);var u=new Error("Cannot find module '"+i+"'");throw u.code="MODULE_NOT_FOUND",u}var o=t[i]={exports:{}};e[i][0].call(o.exports,function(t){var r=e[i][1][t];return a(r?r:t)},o,o.exports,s,e,t,r)}return t[i].exports}for(var n="function"==typeof require&&require,i=0;ie||isNaN(e))throw TypeError("n must be a positive number");return this._maxListeners=e,this},e.prototype.emit=function(l){var s,e,u,i,n,o;if(this._events||(this._events={}),"error"===l&&(!this._events.error||r(this._events.error)&&!this._events.error.length)){if(s=arguments[1],s instanceof Error)throw s;throw TypeError('Uncaught, unspecified "error" event.')}if(e=this._events[l],a(e))return!1;if(t(e))switch(arguments.length){case 1:e.call(this);break;case 2:e.call(this,arguments[1]);break;case 3:e.call(this,arguments[1],arguments[2]);break;default:i=Array.prototype.slice.call(arguments,1),e.apply(this,i)}else if(r(e))for(i=Array.prototype.slice.call(arguments,1),o=e.slice(),u=o.length,n=0;u>n;n++)o[n].apply(this,i);return!0},e.prototype.addListener=function(i,n){var s;if(!t(n))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",i,t(n.listener)?n.listener:n),this._events[i]?r(this._events[i])?this._events[i].push(n):this._events[i]=[this._events[i],n]:this._events[i]=n,r(this._events[i])&&!this._events[i].warned&&(s=a(this._maxListeners)?e.defaultMaxListeners:this._maxListeners,s&&s>0&&this._events[i].length>s&&(this._events[i].warned=!0,"function"==typeof console.trace)),this},e.prototype.on=e.prototype.addListener,e.prototype.once=function(a,e){function r(){this.removeListener(a,r),i||(i=!0,e.apply(this,arguments))}if(!t(e))throw TypeError("listener must be a function");var i=!1;return r.listener=e,this.on(a,r),this},e.prototype.removeListener=function(i,a){var e,s,o,n;if(!t(a))throw TypeError("listener must be a function");if(!this._events||!this._events[i])return this;if(e=this._events[i],o=e.length,s=-1,e===a||t(e.listener)&&e.listener===a)delete this._events[i],this._events.removeListener&&this.emit("removeListener",i,a);else if(r(e)){for(n=o;n-- >0;)if(e[n]===a||e[n].listener&&e[n].listener===a){s=n;break}if(0>s)return this;1===e.length?(e.length=0,delete this._events[i]):e.splice(s,1),this._events.removeListener&&this.emit("removeListener",i,a)}return this},e.prototype.removeAllListeners=function(r){var a,e;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[r]&&delete this._events[r],this;if(0===arguments.length){for(a in this._events)"removeListener"!==a&&this.removeAllListeners(a);return this.removeAllListeners("removeListener"),this._events={},this}if(e=this._events[r],t(e))this.removeListener(r,e);else if(e)for(;e.length;)this.removeListener(r,e[e.length-1]);return delete this._events[r],this},e.prototype.listeners=function(e){var r;return r=this._events&&this._events[e]?t(this._events[e])?[this._events[e]]:this._events[e].slice():[]},e.prototype.listenerCount=function(r){if(this._events){var e=this._events[r];if(t(e))return 1;if(e)return e.length}return 0},e.listenerCount=function(e,t){return e.listenerCount(t)}},{}],2:[function(n,a,s){var i=arguments[3],e=arguments[4],r=arguments[5],t=JSON.stringify;a.exports=function(l){for(var a,s=Object.keys(r),n=0,d=s.length;d>n;n++){var o=s[n],u=r[o].exports;if(u===l||u.default===l){a=o;break}}if(!a){a=Math.floor(Math.pow(16,8)*Math.random()).toString(16);for(var f={},n=0,d=s.length;d>n;n++){var o=s[n];f[o]=o}e[a]=[Function(["require","module","exports"],"("+l+")(self)"),f]}var h=Math.floor(Math.pow(16,8)*Math.random()).toString(16),c={};c[a]=a,e[h]=[Function(["require"],"var f = require("+t(a)+");(f.default ? f.default : f)(self);"),c];var v="("+i+")({"+Object.keys(e).map(function(r){return t(r)+":["+e[r][0]+","+t(e[r][1])+"]"}).join(",")+"},{},["+t(h)+"])",g=window.URL||window.webkitURL||window.mozURL||window.msURL;return new Worker(g.createObjectURL(new Blob([v],{type:"text/javascript"})))}},{}],3:[function(e,m,o){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function c(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function v(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(o,"__esModule",{value:!0});var g=function(){function e(a,r){for(var t=0;t500*e.duration){var f=i.levels,h=Math.max(1,1e3*e.loaded/u),v=Math.max(e.loaded,Math.round(e.duration*f[e.level].bitrate/8)),c=s.currentTime,d=(v-e.loaded)/h,o=n.default.bufferInfo(s,c,i.config.maxBufferHole).end-c;if(o<2*e.duration&&d>o){var l=void 0,a=void 0;for(a=e.level-1;a>=0&&(l=e.duration*f[a].bitrate/(6.4*h),t.logger.log("fragLoadedDelay/bufferStarvationDelay/fragLevelNextLoadedDelay["+a+"] :"+d.toFixed(1)+"/"+o.toFixed(1)+"/"+l.toFixed(1)),!(o>l));a--);d>l&&(a=Math.max(0,a),i.nextLoadLevel=a,this.bwEstimator.sample(u,e.loaded),t.logger.warn("loading too slow, abort fragment loading and switch to level "+a),e.loader.abort(),this.clearTimer(),i.trigger(r.default.FRAG_LOAD_EMERGENCY_ABORTED,{frag:e}))}}}}},{key:"onFragLoaded",value:function(t){var e=t.stats,r=t.frag;if(void 0===e.aborted&&1===r.loadCounter){var a=e.tload-e.trequest;this.bwEstimator.sample(a,e.loaded),r.bitrateTest?this.bitrateTestDelay=a/1e3:this.bitrateTestDelay=0}this.clearTimer(),this.lastLoadedFragLevel=t.frag.level,this._nextAutoLevel=-1}},{key:"onError",value:function(e){switch(e.details){case s.ErrorDetails.FRAG_LOAD_ERROR:case s.ErrorDetails.FRAG_LOAD_TIMEOUT:this.clearTimer()}}},{key:"clearTimer",value:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}},{key:"findBestLevel",value:function(g,f,s,v,u,c,h,l){for(var e=v;e>=0;e--){var d=l[e],n=d.details,o=n?n.totalduration/n.fragments.length:f,r=void 0;r=g>=e?c*s:h*s;var i=l[e].bitrate,a=i*o/r;if(t.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: "+e+"/"+Math.round(r)+"/"+i+"/"+o+"/"+u+"/"+a),r>i&&(!a||u>a))return e}return 0}},{key:"autoLevelCapping",get:function(){return this._autoLevelCapping},set:function(e){this._autoLevelCapping=e}},{key:"nextAutoLevel",get:function(){var i,u=this.hls,a=u.levels,e=u.config;if(i=-1===this._autoLevelCapping&&a&&a.length?a.length-1:this._autoLevelCapping,-1!==this._nextAutoLevel)return Math.min(this._nextAutoLevel,i);var r=u.media,c=this.lastLoadedFragLevel,f=this.fragCurrent?this.fragCurrent.duration:0,v=r?r.currentTime:0,g=r&&0!==r.playbackRate?Math.abs(r.playbackRate):1,d=this.bwEstimator?this.bwEstimator.getEstimate():e.abrEwmaDefaultEstimate,l=(n.default.bufferInfo(r,v,e.maxBufferHole).end-v)/g,h=this.findBestLevel(c,f,d,i,l,e.abrBandWidthFactor,e.abrBandWidthUpFactor,a);if(h)return h;t.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");var o=e.maxStarvationDelay;if(0===l){var s=this.bitrateTestDelay;s&&(o-=s,t.logger.trace("bitrate test took "+Math.round(1e3*s)+"ms, set first fragment max fetchDuration to "+Math.round(1e3*o)+" ms"))}return this.findBestLevel(c,f,d,i,l+o,e.abrBandWidthFactor,e.abrBandWidthUpFactor,a)},set:function(e){this._nextAutoLevel=e}}]),e}(i.default);o.default=y},{"../errors":21,"../event-handler":22,"../events":23,"../helper/buffer-helper":24,"../utils/logger":38,"./ewma-bandwidth-estimator":6}],4:[function(a,v,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function h(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(i,"__esModule",{value:!0});var c=function(){function e(a,r){for(var t=0;tthis._msDuration&&(t.logger.log("Updating mediasource duration to "+this._levelDuration),e.duration=this._levelDuration,this._msDuration=this._levelDuration)}}}},{key:"doFlush",value:function(){for(;this.flushRange.length;){var r=this.flushRange[0];if(!this.flushBuffer(r.start,r.end))return void(this._needsFlush=!0);this.flushRange.shift(),this.flushBufferCounter=0}if(0===this.flushRange.length){this._needsFlush=!1;var a=0,t=this.sourceBuffer;if(t)for(var i in t)a+=t[i].buffered.length;this.appended=a,this.hls.trigger(e.default.BUFFER_FLUSHED)}}},{key:"doAppending",value:function(){var i=this.hls,s=this.sourceBuffer,n=this.segments;if(s){if(this.media.error)return n=[],void t.logger.error("trying to append although a media error occured, flush segment and abort");for(var l in s)if(s[l].updating)return;if(n.length){var o=n.shift();try{s[o.type].appendBuffer(o.data),this.appendError=0,this.appended++}catch(s){t.logger.error("error while trying to append buffer:"+s.message),n.unshift(o);var a={type:r.ErrorTypes.MEDIA_ERROR};if(22===s.code)return this.segments=[],a.details=r.ErrorDetails.BUFFER_FULL_ERROR,void i.trigger(e.default.ERROR,a);if(this.appendError?this.appendError++:this.appendError=1,a.details=r.ErrorDetails.BUFFER_APPEND_ERROR,a.frag=this.fragCurrent,this.appendError>i.config.appendErrorMaxRetry)return t.logger.log("fail "+i.config.appendErrorMaxRetry+" times to append segment in sourceBuffer"),n=[],a.fatal=!0,void i.trigger(e.default.ERROR,a);a.fatal=!1,i.trigger(e.default.ERROR,a)}}}}},{key:"flushBuffer",value:function(l,s){var e,r,o,n,a,i;if(this.flushBufferCounter.5)return this.flushBufferCounter++,t.logger.log("flush "+u+" ["+a+","+i+"], of ["+o+","+n+"], pos:"+this.media.currentTime),e.remove(a,i),!1}else t.logger.warn("abort flushing too many retries");return t.logger.log("buffer flushed"),!0}}]),a}(s.default);i.default=o},{"../errors":21,"../event-handler":22,"../events":23,"../utils/logger":38}],5:[function(e,h,t){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function f(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(t,"__esModule",{value:!0});var o=function(){function e(a,r){for(var t=0;tthis.autoLevelCapping&&this.hls.streamController.nextLevelSwitch(),this.autoLevelCapping=this.hls.autoLevelCapping)}}},{key:"getMaxLevel",value:function(n){var r=void 0,e=void 0,t=void 0,s=this.mediaWidth,o=this.mediaHeight,a=0,i=0;for(e=0;n>=e&&(t=this.levels[e],r=e,a=t.width,i=t.height,!(a>=s||i>=o));e++);return r}},{key:"contentScaleFactor",get:function(){var e=1;try{e=window.devicePixelRatio}catch(e){}return e}},{key:"mediaWidth",get:function(){var e=void 0;return this.media&&(e=this.media.width||this.media.clientWidth||this.media.offsetWidth,e*=this.contentScaleFactor),e}},{key:"mediaHeight",get:function(){var e=void 0;return this.media&&(e=this.media.height||this.media.clientHeight||this.media.offsetHeight,e*=this.contentScaleFactor),e}}]),e}(s.default);t.default=u},{"../event-handler":22,"../events":23}],6:[function(r,l,e){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(a,r){for(var t=0;t=0&&a1e3){r.logger.log("(re)loading playlist for level "+a);var o=i.urlId;this.hls.trigger(t.default.LEVEL_LOADING,{url:i.url[o],level:a,id:o})}}else this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.OTHER_ERROR,details:e.ErrorDetails.LEVEL_SWITCH_ERROR,level:a,fatal:!1,reason:"invalid level idx"})}},{key:"onError",value:function(n){if(!n.fatal){var i=n.details,o=this.hls,s=void 0,a=void 0,l=!1;switch(i){case e.ErrorDetails.FRAG_LOAD_ERROR:case e.ErrorDetails.FRAG_LOAD_TIMEOUT:case e.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case e.ErrorDetails.KEY_LOAD_ERROR:case e.ErrorDetails.KEY_LOAD_TIMEOUT:s=n.frag.level;break;case e.ErrorDetails.LEVEL_LOAD_ERROR:case e.ErrorDetails.LEVEL_LOAD_TIMEOUT:s=n.level,l=!0}if(void 0!==s)if(a=this._levels[s],a.urlIde&&(this._level===e&&void 0!==t[e].details||this.setLevelInternal(e))}},{key:"manualLevel",get:function(){return this._manualLevel},set:function(e){this._manualLevel=e,void 0===this._startLevel&&(this._startLevel=e),-1!==e&&(this.level=e)}},{key:"firstLevel",get:function(){return this._firstLevel},set:function(e){this._firstLevel=e}},{key:"startLevel",get:function(){return void 0===this._startLevel?this._firstLevel:this._startLevel},set:function(e){this._startLevel=e}},{key:"nextLoadLevel",get:function(){return-1!==this._manualLevel?this._manualLevel:this.hls.abrController.nextAutoLevel},set:function(e){this.level=e,-1===this._manualLevel&&(this.hls.abrController.nextAutoLevel=e)}}]),a}(f.default);i.default=o},{"../errors":21,"../event-handler":22,"../events":23,"../utils/logger":38}],8:[function(i,A,o){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function h(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function c(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function v(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(o,"__esModule",{value:!0});var m=function(){function e(a,r){for(var t=0;t0?(t.logger.log("configure startPosition @"+a),this.lastPaused||(t.logger.log("resuming video"),r.play()),this.state=e.IDLE):(this.lastCurrentTime=this.startPosition?this.startPosition:i,this.state=e.STARTING),this.nextLoadPosition=this.startPosition=this.lastCurrentTime,this.tick()}else t.logger.warn("cannot start loading as manifest not parsed yet"),this.state=e.STOPPED}},{key:"stopLoad",value:function(){var t=this.fragCurrent;t&&(t.loader&&t.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.demuxer&&(this.demuxer.destroy(),this.demuxer=null),this.state=e.STOPPED}},{key:"tick",value:function(){this.ticks++,1===this.ticks&&(this.doTick(),this.ticks>1&&setTimeout(this.tick,1),this.ticks=0)}},{key:"doTick",value:function(){var R,l,n,c=this.hls,o=c.config,h=this.media,b=h&&h.seeking;switch(this.state){case e.ERROR:case e.PAUSED:break;case e.STARTING:var _=c.startLevel;-1===_&&(_=0,this.fragBitrateTest=!0),this.level=c.nextLoadLevel=_,this.state=e.WAITING_LEVEL,this.loadedmetadata=!1;break;case e.IDLE:if(!h&&(this.startFragRequested||!o.startFragPrefetch))break;R=this.loadedmetadata?h.currentTime:this.nextLoadPosition,l=c.nextLoadLevel;var v,T=s.default.bufferInfo(h,R,o.maxBufferHole),P=T.len,f=T.end,u=this.fragPrevious;if(this.levels[l].hasOwnProperty("bitrate")?(v=Math.max(8*o.maxBufferSize/this.levels[l].bitrate,o.maxBufferLength),v=Math.min(v,o.maxMaxBufferLength)):v=o.maxBufferLength,v>P){if(c.nextLoadLevel=l,this.level=l,n=this.levels[l].details,"undefined"==typeof n||n.live&&this.levelLastLoaded!==l){this.state=e.WAITING_LEVEL;break}if(!n.live&&u&&u.sn===n.endSN&&(!b||h.duration-f<=u.duration/2)){this.hls.trigger(r.default.BUFFER_EOS),this.state=e.ENDED;break}var d=n.fragments,g=d.length,m=d[0].start,E=d[g-1].start+d[g-1].duration,i=void 0;if(n.live){var D=void 0!==o.liveMaxLatencyDuration?o.liveMaxLatencyDuration:o.liveMaxLatencyDurationCount*n.targetduration;if(fy&&(h.currentTime=y)}if(n.PTSKnown&&f>E)break;if(this.startFragRequested&&!n.PTSKnown){if(u){var A=u.sn+1;A>=n.startSN&&A<=n.endSN&&(i=d[A-n.startSN],t.logger.log("live playlist, switching playlist, load frag with next SN: "+i.sn))}i||(i=d[Math.min(g-1,Math.round(g/2))],t.logger.log("live playlist, switching playlist, unknown, load middle frag : "+i.sn))}}else m>f&&(i=d[0]);if(i||!function(){var e=o.maxFragLookUpTolerance;E>f?((f>E-e||b)&&(e=0),i=p.default.search(d,function(t){return t.start+t.duration-e<=f?1:t.start-e>f?-1:0})):i=d[g-1]}(),i){if(m=i.start,u&&i.level===u.level&&i.sn===u.sn){if(!(i.sno.maxBufferHole&&u.dropped?(i=d[k-1],t.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this"),u.loadCounter--):(i=d[k+1],t.logger.log("SN just loaded, load next one: "+i.sn)),!i)break}if(null!=i.decryptdata.uri&&null==i.decryptdata.key)t.logger.log("Loading key for "+i.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+l),this.state=e.KEY_LOADING,c.trigger(r.default.KEY_LOADING,{frag:i});else{if(t.logger.log("Loading "+i.sn+" of ["+n.startSN+" ,"+n.endSN+"],level "+l+", currentTime:"+R+",bufferEnd:"+f.toFixed(3)),void 0!==this.fragLoadIdx?this.fragLoadIdx++:this.fragLoadIdx=0,i.loadCounter){i.loadCounter++;var S=o.fragLoadingLoopThreshold;if(i.loadCounter>S&&Math.abs(this.fragLoadIdx-i.loadIdx)=w||b)&&(t.logger.log("mediaController: retryDate reached, switch back to IDLE state"),this.state=e.IDLE);break;case e.STOPPED:case e.FRAG_LOADING:case e.PARSING:case e.PARSED:case e.ENDED:}this._checkBuffer(),this._checkFragmentChanged()}},{key:"getBufferRange",value:function(a){var e,t,r=this.bufferRange;if(r)for(e=r.length-1;e>=0;e--)if(t=r[e],a>=t.start&&a<=t.end)return t;return null}},{key:"followingBufferRange",value:function(e){return e?this.getBufferRange(e.end+.5):null}},{key:"isBuffered",value:function(r){var a=this.media;if(a)for(var t=a.buffered,e=0;e=t.start(e)&&r<=t.end(e))return!0;return!1}},{key:"_checkFragmentChanged",value:function(){var t,e,a=this.media;if(a&&a.seeking===!1&&(e=a.currentTime,e>a.playbackRate*this.lastCurrentTime&&(this.lastCurrentTime=e),this.isBuffered(e)?t=this.getBufferRange(e):this.isBuffered(e+.1)&&(t=this.getBufferRange(e+.1)),t)){var i=t.frag;i!==this.fragPlaying&&(this.fragPlaying=i,this.hls.trigger(r.default.FRAG_CHANGED,{frag:i}))}}},{key:"immediateLevelSwitch",value:function(){if(t.logger.log("immediateLevelSwitch"),!this.immediateSwitch){this.immediateSwitch=!0;var a=this.media,i=void 0;a?(i=a.paused,a.pause()):i=!0,this.previouslyPaused=i}var n=this.fragCurrent;n&&n.loader&&n.loader.abort(),this.fragCurrent=null,this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.state=e.PAUSED,this.hls.trigger(r.default.BUFFER_FLUSHING,{startOffset:0,endOffset:Number.POSITIVE_INFINITY})}},{key:"immediateLevelSwitchEnd",value:function(){this.immediateSwitch=!1;var e=this.media;e&&e.readyState&&(e.currentTime-=1e-4,this.previouslyPaused||e.play())}},{key:"nextLevelSwitch",value:function(){var t=this.media;if(t&&t.readyState){var n=void 0,i=void 0,a=void 0;if(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,i=this.getBufferRange(t.currentTime),i&&i.start>1&&(this.state=e.PAUSED,this.hls.trigger(r.default.BUFFER_FLUSHING,{startOffset:0,endOffset:i.start-1})),t.paused)n=0;else{var l=this.hls.nextLoadLevel,u=this.levels[l],o=this.fragLastKbps;n=o&&this.fragCurrent?this.fragCurrent.duration*u.bitrate/(1e3*o)+1:0}if(a=this.getBufferRange(t.currentTime+n),a&&(a=this.followingBufferRange(a))){var s=this.fragCurrent;s&&s.loader&&s.loader.abort(),this.fragCurrent=null,this.state=e.PAUSED,this.hls.trigger(r.default.BUFFER_FLUSHING,{startOffset:a.start,endOffset:Number.POSITIVE_INFINITY})}}}},{key:"onMediaAttached",value:function(r){var e=this.media=r.media;this.onvseeking=this.onMediaSeeking.bind(this),this.onvseeked=this.onMediaSeeked.bind(this),this.onvended=this.onMediaEnded.bind(this),e.addEventListener("seeking",this.onvseeking),e.addEventListener("seeked",this.onvseeked),e.addEventListener("ended",this.onvended);var t=this.config;this.levels&&t.autoStartLoad&&this.hls.startLoad(t.startPosition)}},{key:"onMediaDetaching",value:function(){var e=this.media;e&&e.ended&&(t.logger.log("MSE detaching and video ended, reset startPosition"),this.startPosition=this.lastCurrentTime=0);var r=this.levels;r&&r.forEach(function(e){e.details&&e.details.fragments.forEach(function(e){e.loadCounter=void 0})}),e&&(e.removeEventListener("seeking",this.onvseeking),e.removeEventListener("seeked",this.onvseeked),e.removeEventListener("ended",this.onvended),this.onvseeking=this.onvseeked=this.onvended=null),this.media=null,this.loadedmetadata=!1,this.stopLoad()}},{key:"onMediaSeeking",value:function(){if(this.state===e.FRAG_LOADING){if(0===s.default.bufferInfo(this.media,this.media.currentTime,this.config.maxBufferHole).len){t.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load");var r=this.fragCurrent;r&&(r.loader&&r.loader.abort(),this.fragCurrent=null),this.fragPrevious=null,this.state=e.IDLE}}else this.state===e.ENDED&&(this.state=e.IDLE);this.media&&(this.lastCurrentTime=this.media.currentTime),void 0!==this.fragLoadIdx&&(this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold),this.tick()}},{key:"onMediaSeeked",value:function(){this.tick()}},{key:"onMediaEnded",value:function(){t.logger.log("media ended"),this.startPosition=this.lastCurrentTime=0}},{key:"onManifestLoading",value:function(){t.logger.log("trigger BUFFER_RESET"),this.hls.trigger(r.default.BUFFER_RESET),this.bufferRange=[],this.stalled=!1}},{key:"onManifestParsed",value:function(r){var e,a=!1,i=!1;r.levels.forEach(function(t){e=t.audioCodec,e&&(-1!==e.indexOf("mp4a.40.2")&&(a=!0),-1!==e.indexOf("mp4a.40.5")&&(i=!0))}),this.audioCodecSwitch=a&&i,this.audioCodecSwitch&&t.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),this.levels=r.levels,this.startLevelLoaded=!1,this.startFragRequested=!1;var n=this.config;n.autoStartLoad&&this.hls.startLoad(n.startPosition)}},{key:"onLevelLoaded",value:function(o){var a=o.details,i=o.level,l=this.levels[i],d=a.totalduration,n=0;if(t.logger.log("level "+i+" loaded ["+a.startSN+","+a.endSN+"],duration:"+d),this.levelLastLoaded=i,a.live){var f=l.details;f?(u.default.mergeDetails(f,a),n=a.fragments[0].start,a.PTSKnown?t.logger.log("live playlist sliding:"+n.toFixed(3)):t.logger.log("live playlist - outdated PTS, unknown sliding")):(a.PTSKnown=!1,t.logger.log("live playlist - first load, unknown sliding"))}else a.PTSKnown=!1;if(l.details=a,this.hls.trigger(r.default.LEVEL_UPDATED,{details:a,level:i}),this.startFragRequested===!1){if(-1===this.startPosition){var s=a.startTimeOffset;if(isNaN(s))if(a.live){var h=void 0!==this.config.liveSyncDuration?this.config.liveSyncDuration:this.config.liveSyncDurationCount*a.targetduration;this.startPosition=Math.max(0,n+d-h)}else this.startPosition=0;else t.logger.log("start time offset found in playlist, adjust startPosition to "+s),this.startPosition=s}this.nextLoadPosition=this.startPosition}this.state===e.WAITING_LEVEL&&(this.state=e.IDLE),this.tick()}},{key:"onKeyLoaded",value:function(){this.state===e.KEY_LOADING&&(this.state=e.IDLE,this.tick())}},{key:"onFragLoaded",value:function(n){var a=this.fragCurrent,s=n.frag;if(this.state===e.FRAG_LOADING&&a&&s.level===a.level&&s.sn===a.sn){var o=n.stats;if(t.logger.log("Loaded "+a.sn+" of level "+a.level),this.fragBitrateTest=!1,s.bitrateTest===!0&&this.hls.nextLoadLevel)this.state=e.IDLE,this.startFragRequested=!1,o.tparsed=o.tbuffered=performance.now(),this.hls.trigger(r.default.FRAG_BUFFERED,{stats:n.stats,frag:a}),this.tick();else{this.state=e.PARSING,this.stats=o;var l=this.levels[this.level],u=l.details,v=u.totalduration,c=void 0===a.startDTS||isNaN(a.startDTS)?a.start:a.startDTS,f=a.level,h=a.sn,i=l.audioCodec||this.config.defaultAudioCodec;this.audioCodecSwap&&(t.logger.log("swapping playlist audio codec"),void 0===i&&(i=this.lastAudioCodec),i&&(i=-1!==i.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5")),this.pendingAppending=0,t.logger.log("Demuxing "+h+" of ["+u.startSN+" ,"+u.endSN+"],level "+f+", cc "+a.cc);var d=this.demuxer;d&&d.push(n.payload,i,l.videoCodec,c,a.cc,f,h,v,a.decryptdata)}}this.fragLoadError=0}},{key:"onFragParsingInitSegment",value:function(l){if(this.state===e.PARSING){var o,a,i=l.tracks;if(a=i.audio){var n=this.levels[this.level].audioCodec,u=navigator.userAgent.toLowerCase();n&&this.audioCodecSwap&&(t.logger.log("swapping playlist audio codec"),n=-1!==n.indexOf("mp4a.40.5")?"mp4a.40.2":"mp4a.40.5"),this.audioCodecSwitch&&1!==a.metadata.channelCount&&-1===u.indexOf("firefox")&&(n="mp4a.40.5"),-1!==u.indexOf("android")&&(n="mp4a.40.2",t.logger.log("Android: force audio codec to"+n)),a.levelCodec=n}if(a=i.video,a&&(a.levelCodec=this.levels[this.level].videoCodec),l.unique){var s={codec:"",levelCodec:""};for(o in l.tracks)a=i[o],s.container=a.container,s.codec&&(s.codec+=",",s.levelCodec+=","),a.codec&&(s.codec+=a.codec),a.levelCodec&&(s.levelCodec+=a.levelCodec);i={audiovideo:s}}this.hls.trigger(r.default.BUFFER_CODECS,i);for(o in i){a=i[o],t.logger.log("track:"+o+",container:"+a.container+",codecs[level/parsed]=["+a.levelCodec+"/"+a.codec+"]");var d=a.initSegment;d&&(this.pendingAppending++,this.hls.trigger(r.default.BUFFER_APPENDING,{type:o,data:d}))}this.tick()}}},{key:"onFragParsingData",value:function(a){var o=this;if(this.state===e.PARSING){this.tparse2=Date.now();var n=this.levels[this.level],i=this.fragCurrent;t.logger.log("parsed "+a.type+",PTS:["+a.startPTS.toFixed(3)+","+a.endPTS.toFixed(3)+"],DTS:["+a.startDTS.toFixed(3)+"/"+a.endDTS.toFixed(3)+"],nb:"+a.nb+",dropped:"+(a.dropped||0));var l=u.default.updateFragPTSDTS(n.details,i.sn,a.startPTS,a.endPTS,a.startDTS,a.endDTS),s=this.hls;s.trigger(r.default.LEVEL_PTS_UPDATED,{details:n.details,level:this.level,drift:l}),"video"===a.type&&(i.dropped=a.dropped),[a.data1,a.data2].forEach(function(e){e&&(o.pendingAppending++,s.trigger(r.default.BUFFER_APPENDING,{type:a.type,data:e}))}),this.nextLoadPosition=a.endPTS,this.bufferRange.push({type:a.type,start:a.startPTS,end:a.endPTS,frag:i}),this.tick()}else t.logger.warn("not in PARSING state but "+this.state+", ignoring FRAG_PARSING_DATA event")}},{key:"onFragParsed",value:function(){this.state===e.PARSING&&(this.stats.tparsed=performance.now(),this.state=e.PARSED,this._checkAppendedParsed())}},{key:"onBufferAppended",value:function(){switch(this.state){case e.PARSING:case e.PARSED:this.pendingAppending--,this._checkAppendedParsed()}}},{key:"_checkAppendedParsed",value:function(){if(this.state===e.PARSED&&0===this.pendingAppending){var i=this.fragCurrent,a=this.stats;i&&(this.fragPrevious=i,a.tbuffered=performance.now(),this.fragLastKbps=Math.round(8*a.length/(a.tbuffered-a.tfirst)),this.hls.trigger(r.default.FRAG_BUFFERED,{stats:a,frag:i}),t.logger.log("media buffered : "+this.timeRangesToString(this.media.buffered)),this.state=e.IDLE),this.tick()}}},{key:"onError",value:function(i){switch(i.details){case a.ErrorDetails.FRAG_LOAD_ERROR:case a.ErrorDetails.FRAG_LOAD_TIMEOUT:if(!i.fatal){var n=this.fragLoadError;if(n?n++:n=1,n<=this.config.fragLoadingMaxRetry||this.media&&this.isBuffered(this.media.currentTime)){this.fragLoadError=n,i.frag.loadCounter=0;var s=Math.min(Math.pow(2,n-1)*this.config.fragLoadingRetryDelay,64e3);t.logger.warn("mediaController: frag loading failed, retry in "+s+" ms"),this.retryDate=performance.now()+s,this.state=e.FRAG_LOADING_WAITING_RETRY}else t.logger.error("mediaController: "+i.details+" reaches max retry, redispatch as fatal ..."),i.fatal=!0,this.hls.trigger(r.default.ERROR,i),this.state=e.ERROR}break;case a.ErrorDetails.FRAG_LOOP_LOADING_ERROR:case a.ErrorDetails.LEVEL_LOAD_ERROR:case a.ErrorDetails.LEVEL_LOAD_TIMEOUT:case a.ErrorDetails.KEY_LOAD_ERROR:case a.ErrorDetails.KEY_LOAD_TIMEOUT:this.state!==e.ERROR&&(this.state=i.fatal?e.ERROR:e.IDLE,t.logger.warn("mediaController: "+i.details+" while loading frag,switch to "+this.state+" state ..."));break;case a.ErrorDetails.BUFFER_FULL_ERROR:this.state!==e.PARSING&&this.state!==e.PARSED||(this.config.maxMaxBufferLength/=2,t.logger.warn("reduce max buffer length to "+this.config.maxMaxBufferLength+"s and switch to IDLE state"),this.fragLoadIdx+=2*this.config.fragLoadingLoopThreshold,this.state=e.IDLE)}}},{key:"_checkBuffer",value:function(){var e=this.media;if(e&&e.readyState){var n=e.currentTime,u=e.buffered;if(!this.loadedmetadata&&u.length){this.loadedmetadata=!0;var i=this.startPosition;if(!n&&n!==i&&i){t.logger.log("target start position:"+i);var l=u.start(0),g=u.end(0);(l>i||i>g)&&(i=l,t.logger.log("target start position not buffered, seek to buffered.start(0) "+l)),t.logger.log("adjust currentTime from "+n+" to "+i),e.currentTime=i}}else{var d=s.default.bufferInfo(e,n,0),v=!(e.paused||e.ended||0===e.buffered.length),f=.4,h=n>e.playbackRate*this.lastCurrentTime;if(this.stalled&&h&&(this.stalled=!1,t.logger.log("playback not stuck anymore @"+n)),v&&d.len<=f&&(h?(f=0,this.seekHoleNudgeDuration=0):this.stalled?this.seekHoleNudgeDuration+=this.config.seekHoleNudgeDuration:(this.seekHoleNudgeDuration=0,t.logger.log("playback seems stuck @"+n),this.hls.trigger(r.default.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.BUFFER_STALLED_ERROR,fatal:!1}),this.stalled=!0),d.len<=f)){var o=d.nextStart,c=o-n;if(o&&c0){t.logger.log("adjust currentTime from "+e.currentTime+" to next buffered @ "+o+" + nudge "+this.seekHoleNudgeDuration);var p=o+this.seekHoleNudgeDuration-e.currentTime;e.currentTime=o+this.seekHoleNudgeDuration,this.hls.trigger(r.default.ERROR,{type:a.ErrorTypes.MEDIA_ERROR,details:a.ErrorDetails.BUFFER_SEEK_OVER_HOLE,fatal:!1,hole:p})}}}}}},{key:"onFragLoadEmergencyAborted",value:function(){this.state=e.IDLE,this.tick()}},{key:"onBufferFlushed",value:function(){var t,r,a=[];for(r=0;re;e++)r+="["+t.start(e)+","+t.end(e)+"]";return r}},{key:"currentLevel",get:function(){if(this.media){var e=this.getBufferRange(this.media.currentTime);if(e)return e.frag.level}return-1}},{key:"nextBufferRange",get:function(){return this.media?this.followingBufferRange(this.getBufferRange(this.media.currentTime)):null}},{key:"nextLevel",get:function(){var e=this.nextBufferRange;return e?e.frag.level:-1}}]),i}(l.default);o.default=f},{"../demux/demuxer":17,"../errors":21,"../event-handler":22,"../events":23,"../helper/buffer-helper":24,"../helper/level-helper":25,"../utils/binary-search":35,"../utils/logger":38}],9:[function(t,v,a){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function f(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(a,"__esModule",{value:!0});var c=function(){function e(a,r){for(var t=0;te;e++)c[(i[e]=e<<1^283*(e>>7))^e]=e;for(a=r=0;!h[a];a^=u||1,r=c[r]||1)for(t=r^r<<1^r<<2^r<<3^r<<4,t=t>>8^255&t^99,h[a]=t,v[t]=a,d=i[f=i[u=i[a]]],l=16843009*d^65537*f^257*u^16843008*a,s=257*i[t]^16843008*t,e=0;4>e;e++)n[e][a]=s=s<<24^s>>>8,o[e][t]=l=l<<24^l>>>8;for(e=0;5>e;e++)n[e]=n[e].slice(0),o[e]=o[e].slice(0)}},{key:"decrypt",value:function(R,p,_,b,E,m){var h,g,v,n,e=this._key[1],t=R^e[0],a=b^e[1],i=_^e[2],r=p^e[3],y=e.length/4-2,s=4,o=this._tables[1],f=o[0],d=o[1],u=o[2],l=o[3],c=o[4];for(n=0;y>n;n++)h=f[t>>>24]^d[a>>16&255]^u[i>>8&255]^l[255&r]^e[s],g=f[a>>>24]^d[i>>16&255]^u[r>>8&255]^l[255&t]^e[s+1],v=f[i>>>24]^d[r>>16&255]^u[t>>8&255]^l[255&a]^e[s+2],r=f[r>>>24]^d[t>>16&255]^u[a>>8&255]^l[255&i]^e[s+3],s+=4,t=h,a=g,i=v;for(n=0;4>n;n++)E[(3&-n)+m]=c[t>>>24]<<24^c[a>>16&255]<<16^c[i>>8&255]<<8^c[255&r]^e[s++],h=t,t=a,a=i,i=r,r=h}}]),e}();e.default=a},{}],11:[function(t,l,e){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;t>8|e>>>24}},{key:"doDecrypt",value:function(a,g,i){var u,h,o,f,l,c,d,n,e,r=new Int32Array(a.buffer,a.byteOffset,a.byteLength>>2),p=new s.default(Array.prototype.slice.call(g)),v=new Uint8Array(a.byteLength),t=new Int32Array(v.buffer);for(u=~~i[0],h=~~i[1],o=~~i[2],f=~~i[3],e=0;ee&&(255!==t[e]||240!==(240&t[e+1]));e++);for(r.audiosamplerate||(i=o.default.getAudioConfig(this.observer,t,e,p),r.config=i.config,r.audiosamplerate=i.samplerate,r.channelCount=i.channelCount,r.codec=i.codec,r.duration=y,l.logger.log("parsed codec:"+r.codec+",rate:"+i.samplerate+",nb channel:"+i.channelCount)),c=0,g=9216e4/r.audiosamplerate;u>e+5&&(s=1&t[e+1]?7:9,n=(3&t[e+3])<<11|t[e+4]<<3|(224&t[e+5])>>>5,n-=s,n>0&&u>=e+s+n);)for(f=h+c*g,v={unit:t.subarray(e+s,e+s+n),pts:f,dts:f},r.samples.push(v),r.len+=n,e+=n+s,c++;u-1>e&&(255!==t[e]||240!==(240&t[e+1]));e++);this.remuxer.remux(this._aacTrack,{samples:[]},{samples:[{pts:h,dts:h,unit:d.payload}]},{samples:[]},m)}},{key:"destroy",value:function(){}}],[{key:"probe",value:function(t){var e,r,i=new a.default(t);if(i.hasTimeStamp)for(e=i.length,r=t.length;r-1>e;e++)if(255===t[e]&&240===(240&t[e+1]))return!0;return!1}}]),e}();t.default=s},{"../demux/id3":19,"../utils/logger":38,"./adts":14}],14:[function(e,o,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;t>>6)+1,e=(60&u[l+2])>>>2,e>d.length-1?void h.trigger(Event.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!0,reason:"invalid ADTS sampling index:"+e}):(o=(1&u[l+2])<<2,o|=(192&u[l+3])>>>6,n.logger.log("manifest codec:"+i+",ADTS data:type:"+a+",sampleingIndex:"+e+"["+d[e]+"Hz],channelConfig:"+o),-1!==f.indexOf("firefox")?e>=6?(a=5,t=new Array(4),s=e-3):(a=2,t=new Array(2),s=e):-1!==f.indexOf("android")?(a=2,t=new Array(2),s=e):(a=5,t=new Array(4),i&&(-1!==i.indexOf("mp4a.40.29")||-1!==i.indexOf("mp4a.40.5"))||!i&&e>=6?s=e-3:((i&&-1!==i.indexOf("mp4a.40.2")&&e>=6&&1===o||!i&&1===o)&&(a=2,t=new Array(2)),s=e)),t[0]=a<<3,t[0]|=(14&e)>>1,t[1]|=(1&e)<<7,t[1]|=o<<3,5===a&&(t[1]|=(14&s)>>1,t[2]=(1&s)<<7,t[2]|=8,t[3]=0),{config:t,samplerate:d[e],channelCount:o,codec:"mp4a.40."+a})}}]),e}();t.default=s},{"../errors":21,"../utils/logger":38}],15:[function(e,y,a){"use strict";function t(e){return e&&e.__esModule?e:{default:e}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var h=function(){function e(a,r){for(var t=0;t1?r-1:0),e=1;r>e;e++)i[e-1]=arguments[e];t.emit.apply(t,[a,a].concat(i))},t.off=function(i){for(var r=arguments.length,a=Array(r>1?r-1:0),e=1;r>e;e++)a[e-1]=arguments[e];t.removeListener.apply(t,[i].concat(a))},r.addEventListener("message",function(a){var e=a.data;switch(e.cmd){case"init":r.demuxer=new u.default(t,e.typeSupported);break;case"demux":r.demuxer.push(new Uint8Array(e.data),e.audioCodec,e.videoCodec,e.timeOffset,e.cc,e.level,e.sn,e.duration)}}),t.on(e.default.FRAG_PARSING_INIT_SEGMENT,function(t,e){r.postMessage({event:t,tracks:e.tracks,unique:e.unique})}),t.on(e.default.FRAG_PARSING_DATA,function(a,e){var t={event:a,type:e.type,startPTS:e.startPTS,endPTS:e.endPTS,startDTS:e.startDTS,endDTS:e.endDTS,data1:e.data1.buffer,data2:e.data2.buffer,nb:e.nb,dropped:e.dropped};r.postMessage(t,[t.data1,t.data2])}),t.on(e.default.FRAG_PARSED,function(e){r.postMessage({event:e})}),t.on(e.default.ERROR,function(e,t){r.postMessage({event:e,data:t})}),t.on(e.default.FRAG_PARSING_METADATA,function(e,t){var a={event:e,samples:t.samples};r.postMessage(a)}),t.on(e.default.FRAG_PARSING_USERDATA,function(e,t){var a={event:e,samples:t.samples};r.postMessage(a)})};a.default=o},{"../demux/demuxer-inline":15,"../events":23,events:1}],17:[function(t,p,a){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(a,"__esModule",{value:!0});var u=function(){function e(a,r){for(var t=0;t0&&null!=e&&null!=e.key&&"AES-128"===e.method){null==this.decrypter&&(this.decrypter=new v.default(this.hls));var u=this;this.decrypter.decrypt(t,e.key,e.iv,function(e){u.pushDecrypted(e,r,a,i,n,s,o,l)})}else this.pushDecrypted(t,r,a,i,n,s,o,l)}},{key:"onWorkerMessage",value:function(a){var t=a.data;switch(t.event){case e.default.FRAG_PARSING_INIT_SEGMENT:var r={};r.tracks=t.tracks,r.unique=t.unique,this.hls.trigger(e.default.FRAG_PARSING_INIT_SEGMENT,r);break;case e.default.FRAG_PARSING_DATA:this.hls.trigger(e.default.FRAG_PARSING_DATA,{data1:new Uint8Array(t.data1),data2:new Uint8Array(t.data2),startPTS:t.startPTS,endPTS:t.endPTS,startDTS:t.startDTS,endDTS:t.endDTS,type:t.type,nb:t.nb,dropped:t.dropped});break;case e.default.FRAG_PARSING_METADATA:this.hls.trigger(e.default.FRAG_PARSING_METADATA,{samples:t.samples});break;case e.default.FRAG_PARSING_USERDATA:this.hls.trigger(e.default.FRAG_PARSING_USERDATA,{samples:t.samples});break;default:this.hls.trigger(t.event,t.data)}}}]),r}();a.default=o},{"../crypt/decrypter":12,"../demux/demuxer-inline":15,"../demux/demuxer-worker":16,"../errors":21,"../events":23,"../utils/logger":38,webworkify:2}],18:[function(t,s,e){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var a=function(){function e(a,r){for(var t=0;te?(this.word<<=e,this.bitsAvailable-=e):(e-=this.bitsAvailable,t=e>>3,e-=t>>3,this.bytesAvailable-=t,this.loadWord(),this.word<<=e,this.bitsAvailable-=e)}},{key:"readBits",value:function(t){var e=Math.min(this.bitsAvailable,t),r=this.word>>>32-e;return t>32&&i.logger.error("Cannot read more than 32 bits at a time"),this.bitsAvailable-=e,this.bitsAvailable>0?this.word<<=e:this.bytesAvailable>0&&this.loadWord(),e=t-e,e>0?r<>>e))return this.word<<=e,this.bitsAvailable-=e,e;return this.loadWord(),e+this.skipLZ()}},{key:"skipUEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"skipEG",value:function(){this.skipBits(1+this.skipLZ())}},{key:"readUEG",value:function(){var e=this.skipLZ();return this.readBits(e+1)-1}},{key:"readEG",value:function(){var e=this.readUEG();return 1&e?1+e>>>1:-1*(e>>>1)}},{key:"readBoolean",value:function(){return 1===this.readBits(1)}},{key:"readUByte",value:function(){return this.readBits(8)}},{key:"readUShort",value:function(){return this.readBits(16)}},{key:"readUInt",value:function(){return this.readBits(32)}},{key:"skipScalingList",value:function(i){var t,a,r=8,e=8;for(t=0;i>t;t++)0!==e&&(a=this.readEG(),e=(r+a+256)%256),r=0===e?r:e}},{key:"readSPS",value:function(){var t,g,p,l,i,n,a,o,r,s=0,d=0,f=0,h=0,c=1;if(this.readUByte(),t=this.readUByte(),g=this.readBits(5),this.skipBits(3),p=this.readUByte(),this.skipUEG(),100===t||110===t||122===t||244===t||44===t||83===t||86===t||118===t||128===t){var v=this.readUEG();if(3===v&&this.skipBits(1),this.skipUEG(),this.skipUEG(),this.skipBits(1),this.readBoolean())for(o=3!==v?8:12,r=0;o>r;r++)this.readBoolean()&&(6>r?this.skipScalingList(16):this.skipScalingList(64))}this.skipUEG();var u=this.readUEG();if(0===u)this.readUEG();else if(1===u)for(this.skipBits(1),this.skipEG(),this.skipEG(),l=this.readUEG(),r=0;l>r;r++)this.skipEG();if(this.skipUEG(),this.skipBits(1),i=this.readUEG(),n=this.readUEG(),a=this.readBits(1),0===a&&this.skipBits(1),this.skipBits(1),this.readBoolean()&&(s=this.readUEG(),d=this.readUEG(),f=this.readUEG(),h=this.readUEG()),this.readBoolean()&&this.readBoolean()){var e=void 0,y=this.readUByte();switch(y){case 1:e=[1,1];break;case 2:e=[12,11];break;case 3:e=[10,11];break;case 4:e=[16,11];break;case 5:e=[40,33];break;case 6:e=[24,11];break;case 7:e=[20,11];break;case 8:e=[32,11];break;case 9:e=[80,33];break;case 10:e=[18,11];break;case 11:e=[15,11];break;case 12:e=[64,33];break;case 13:e=[160,99];break;case 14:e=[4,3];break;case 15:e=[3,2];break;case 16:e=[2,1];break;case 255:e=[this.readUByte()<<8|this.readUByte(),this.readUByte()<<8|this.readUByte()]}e&&(c=e[0]/e[1])}return{width:Math.ceil((16*(i+1)-2*s-2*d)*c),height:(2-a)*(n+1)*16-(a?2:4)*(f+h)}}},{key:"readSliceType",value:function(){return this.readUByte(),this.readUEG(),this.readUEG()}}]),e}();e.default=n},{"../utils/logger":38}],19:[function(r,s,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;tr);return t}},{key:"_parseID3Frames",value:function(r,t,n){for(var i,s,o,l,a;n>=t+8;)switch(i=this.readUTF(r,t,4),t+=4,s=r[t++]<<24+r[t++]<<16+r[t++]<<8+r[t++],l=r[t++]<<8+r[t++],o=t,i){case"PRIV":if("com.apple.streaming.transportStreamTimestamp"===this.readUTF(r,t,44)){t+=44,t+=4;var u=1&r[t++];this._hasTimeStamp=!0,a=((r[t++]<<23)+(r[t++]<<15)+(r[t++]<<7)+r[t++])/45,u&&(a+=47721858.84),a=Math.round(a),e.logger.trace("ID3 timestamp found: "+a),this._timeStamp=a}}}},{key:"hasTimeStamp",get:function(){return this._hasTimeStamp}},{key:"timeStamp",get:function(){return this._timeStamp}},{key:"length",get:function(){return this._length}},{key:"payload",get:function(){return this._payload}}]),t}();t.default=n},{"../utils/logger":38}],20:[function(t,v,i){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var f=function(){function e(a,r){for(var t=0;tt;t+=188)if(71===a[t]){if(d=!!(64&a[t+1]),u=((31&a[t+1])<<8)+a[t+2],y=(48&a[t+3])>>4,y>1){if(i=t+5+a[t+4],i===t+188)continue}else i=t+4;if(g)if(u===h){if(d){if(s&&(this._parseAVCPES(this._parsePES(s)),b&&this._avcTrack.codec&&(-1===f||this._aacTrack.codec)))return void this.remux(a);s={data:[],size:0}}s&&(s.data.push(a.subarray(i,t+188)),s.size+=t+188-i)}else if(u===f){if(d){if(o&&(this._parseAACPES(this._parsePES(o)),b&&this._aacTrack.codec&&(-1===h||this._avcTrack.codec)))return void this.remux(a);o={data:[],size:0}}o&&(o.data.push(a.subarray(i,t+188)),o.size+=t+188-i)}else u===_&&(d&&(l&&this._parseID3PES(this._parsePES(l)),l={data:[],size:0}),l&&(l.data.push(a.subarray(i,t+188)),l.size+=t+188-i));else d&&(i+=a[i]+1),0===u?this._parsePAT(a,i):u===this._pmtId?(this._parsePMT(a,i),g=this.pmtParsed=!0,h=this._avcTrack.id,f=this._aacTrack.id,_=this._id3Track.id,v&&(e.logger.log("reparse from beginning"),v=!1,t=-188)):(e.logger.log("unknown PID found before PAT/PMT"),v=!0)}else this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"TS packet did not start with 0x47"});s&&this._parseAVCPES(this._parsePES(s)),o&&this._parseAACPES(this._parsePES(o)),l&&this._parseID3PES(this._parsePES(l)),this.remux(null)}},{key:"remux",value:function(e){this.remuxer.remux(this._aacTrack,this._avcTrack,this._id3Track,this._txtTrack,this.timeOffset,this.contiguous,e)}},{key:"destroy",value:function(){this.switchLevel(),this._initPTS=this._initDTS=void 0,this._duration=0}},{key:"_parsePAT",value:function(e,t){this._pmtId=(31&e[t+10])<<8|e[t+11]}},{key:"_parsePMT",value:function(r,t){var i,n,s,a;for(i=(15&r[t+1])<<8|r[t+2],n=t+3+i-4,s=(15&r[t+10])<<8|r[t+11],t+=12+s;n>t;){switch(a=(31&r[t+1])<<8|r[t+2],r[t]){case 15:this._aacTrack.id=a;break;case 21:this._id3Track.id=a;break;case 27:this._avcTrack.id=a;break;default:e.logger.log("unkown stream type:"+r[t])}t+=((15&r[t+3])<<8|r[t+4])+5}}},{key:"_parsePES",value:function(o){var e,n,h,d,u,l,a,r,t,f=0,s=o.data;if(e=s[0],h=(e[0]<<16)+(e[1]<<8)+e[2],1===h){for(d=(e[4]<<8)+e[5],n=e[7],192&n&&(a=536870912*(14&e[9])+4194304*(255&e[10])+16384*(254&e[11])+128*(255&e[12])+(254&e[13])/2,a>4294967295&&(a-=8589934592),64&n?(r=536870912*(14&e[14])+4194304*(255&e[15])+16384*(254&e[16])+128*(255&e[17])+(254&e[18])/2,r>4294967295&&(r-=8589934592)):r=a),u=e[8],t=u+9,o.size-=t,l=new Uint8Array(o.size);s.length;){e=s.shift();var i=e.byteLength;if(t){if(t>i){t-=i;continue}e=e.subarray(t),i-=t,t=0}l.set(e,f),f+=i}return{data:l,pts:a,dts:r,len:d}}return null}},{key:"_parseAVCPES",value:function(a){var t,m,n,o,y=this,r=this._avcTrack,u=r.samples,p=this._parseAVCNALu(a.data),d=[],l=!1,c=!1,f=0;if(0===p.length&&u.length>0){var v=u[u.length-1],h=v.units.units[v.units.units.length-1],g=new Uint8Array(h.data.byteLength+a.data.byteLength);g.set(h.data,0),g.set(a.data,h.data.byteLength),h.data=g,v.units.length+=a.data.byteLength,r.len+=a.data.byteLength}a.data=null;var i="",E=function(){d.length&&(c===!0||r.sps&&(u.length||this.contiguous)?(m={units:{units:d,length:f},pts:a.pts,dts:a.dts,key:c},u.push(m),r.len+=f,r.nbNalu+=d.length):r.dropped++,d=[],f=0)}.bind(this);p.forEach(function(e){switch(e.type){case 1:n=!0,l&&(i+="NDR ");break;case 5:n=!0,l&&(i+="IDR "),c=!0;break;case 6:n=!0,l&&(i+="SEI "),t=new s.default(e.data),t.readUByte();var b=t.readUByte();if(4===b){var g=0;do g=t.readUByte();while(255===g);var A=t.readUByte();if(181===A){var R=t.readUShort();if(49===R){var T=t.readUInt();if(1195456820===T){var k=t.readUByte();if(3===k){var v=t.readUByte(),_=t.readUByte(),S=31&v,h=[v,_];for(o=0;S>o;o++)h.push(t.readUByte()),h.push(t.readUByte()),h.push(t.readUByte());y._txtTrack.samples.push({type:3,pts:a.pts,bytes:h})}}}}}break;case 7:if(n=!0,l&&(i+="SPS "),!r.sps){t=new s.default(e.data);var p=t.readSPS();r.width=p.width,r.height=p.height,r.sps=[e.data],r.duration=y._duration;var L=e.data.subarray(1,4),m="avc1.";for(o=0;3>o;o++){var u=L[o].toString(16);u.length<2&&(u="0"+u),m+=u}r.codec=m}break;case 8:n=!0,l&&(i+="PPS "),r.pps||(r.pps=[e.data]);break;case 9:n=!1,l&&(i+="AUD "),E();break;default:n=!1,i+="unknown NAL "+e.type+" "}n&&(d.push(e),f+=e.data.byteLength)}),(l||i.length)&&e.logger.log(i),E()}},{key:"_parseAVCNALu",value:function(r){for(var s,a,l,_,n,d,t=0,g=r.byteLength,e=this.avcNaluState,v=[];g>t;)switch(s=r[t++],e){case 0:0===s&&(e=1);break;case 1:e=0===s?2:0;break;case 2:case 3:if(0===s)e=3;else if(1===s&&g>t){if(_=31&r[t],n)l={data:r.subarray(n,t-e-1),type:d},v.push(l);else{var i=this.avcNaluState;if(i&&4-i>=t){var m=this._avcTrack,c=m.samples;if(c.length){var p=c[c.length-1],R=p.units.units,u=R[R.length-1];u.state&&(u.data=u.data.subarray(0,u.data.byteLength-i),p.units.length-=i,m.len-=i)}}if(a=t-e-1,a>0){var y=this._avcTrack,h=y.samples;if(h.length){var E=h[h.length-1],b=E.units.units,o=b[b.length-1],f=new Uint8Array(o.data.byteLength+a);f.set(o.data,0),f.set(r.subarray(0,a),o.data.byteLength),o.data=f,E.units.length+=a,y.len+=a}}}n=t,d=_,e=0}else e=0}return n&&(l={data:r.subarray(n,g),type:d,state:e},v.push(l),this.avcNaluState=e),v}},{key:"_parseAACPES",value:function(R){var l,o,p,E,t,d,f,s,_,i=this._aacTrack,a=R.data,v=R.pts,L=0,T=this._duration,A=this.audioCodec,u=this.aacOverFlow,b=this.aacLastPTS;if(u){var m=new Uint8Array(u.byteLength+a.byteLength);m.set(u,0),m.set(a,u.byteLength),a=m}for(t=L,s=a.length;s-1>t&&(255!==a[t]||240!==(240&a[t+1]));t++);if(t){var y,h;if(s-1>t?(y="AAC PES did not start with ADTS header,offset:"+t,h=!1):(y="no ADTS header found in AAC PES",h=!0),this.observer.trigger(n.default.ERROR,{type:r.ErrorTypes.MEDIA_ERROR,details:r.ErrorDetails.FRAG_PARSING_ERROR,fatal:h,reason:y}),h)return}if(i.audiosamplerate||(l=c.default.getAudioConfig(this.observer,a,t,A),i.config=l.config,i.audiosamplerate=l.samplerate,i.channelCount=l.channelCount,i.codec=l.codec,i.duration=T,e.logger.log("parsed codec:"+i.codec+",rate:"+l.samplerate+",nb channel:"+l.channelCount)),E=0,p=9216e4/i.audiosamplerate,u&&b){var g=b+p;Math.abs(g-v)>1&&(e.logger.log("AAC: align PTS for overlapping frames by "+Math.round((g-v)/90)),v=g)}for(;s>t+5&&(d=1&a[t+1]?7:9,o=(3&a[t+3])<<11|a[t+4]<<3|(224&a[t+5])>>>5,o-=d,o>0&&s>=t+d+o);)for(f=v+E*p,_={unit:a.subarray(t+d,t+d+o),pts:f,dts:f},i.samples.push(_),i.len+=o,t+=o+d,E++;s-1>t&&(255!==a[t]||240!==(240&a[t+1]));t++);u=s>t?a.subarray(t,s):null,this.aacOverFlow=u,this.aacLastPTS=f}},{key:"_parseID3PES",value:function(e){this._id3Track.samples.push(e)}}],[{key:"probe",value:function(e){return e.length>=564&&71===e[0]&&71===e[188]&&71===e[376]}}]),t}();i.default=o},{"../errors":21,"../events":23,"../utils/logger":38,"./adts":14,"./exp-golomb":18}],21:[function(t,r,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0});e.ErrorTypes={NETWORK_ERROR:"networkError",MEDIA_ERROR:"mediaError",OTHER_ERROR:"otherError"},e.ErrorDetails={MANIFEST_LOAD_ERROR:"manifestLoadError",MANIFEST_LOAD_TIMEOUT:"manifestLoadTimeOut",MANIFEST_PARSING_ERROR:"manifestParsingError",MANIFEST_INCOMPATIBLE_CODECS_ERROR:"manifestIncompatibleCodecsError",LEVEL_LOAD_ERROR:"levelLoadError",LEVEL_LOAD_TIMEOUT:"levelLoadTimeOut",LEVEL_SWITCH_ERROR:"levelSwitchError",FRAG_LOAD_ERROR:"fragLoadError",FRAG_LOOP_LOADING_ERROR:"fragLoopLoadingError",FRAG_LOAD_TIMEOUT:"fragLoadTimeOut",FRAG_DECRYPT_ERROR:"fragDecryptError",FRAG_PARSING_ERROR:"fragParsingError",KEY_LOAD_ERROR:"keyLoadError",KEY_LOAD_TIMEOUT:"keyLoadTimeOut",BUFFER_APPEND_ERROR:"bufferAppendError",BUFFER_APPENDING_ERROR:"bufferAppendingError",BUFFER_STALLED_ERROR:"bufferStalledError",BUFFER_FULL_ERROR:"bufferFullError",BUFFER_SEEK_OVER_HOLE:"bufferSeekOverHole",INTERNAL_EXCEPTION:"internalException"}},{}],22:[function(e,f,t){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},d=function(){function e(a,r){for(var t=0;t1?r-1:0),t=1;r>t;t++)a[t-1]=arguments[t];this.handledEvents=a,this.useGenericHandler=!0,this.registerListeners()}return d(e,[{key:"destroy",value:function(){this.unregisterListeners()}},{key:"isEventHandler",value:function(){return"object"===n(this.handledEvents)&&this.handledEvents.length&&"function"==typeof this.onEvent}},{key:"registerListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){if("hlsEventGeneric"===e)throw new Error("Forbidden event name: "+e);this.hls.on(e,this.onEvent)}.bind(this))}},{key:"unregisterListeners",value:function(){this.isEventHandler()&&this.handledEvents.forEach(function(e){this.hls.off(e,this.onEvent)}.bind(this))}},{key:"onEvent",value:function(e,t){this.onEventGeneric(e,t)}},{key:"onEventGeneric",value:function(e,t){var a=function(t,r){var e="on"+t.replace("hls","");if("function"!=typeof this[e])throw new Error("Event "+t+" has no generic handler in this "+this.constructor.name+" class (tried "+e+")");return this[e].bind(this,r)};try{a.call(this,e,t).call()}catch(t){o.logger.error("internal error happened while processing "+e+":"+t.message),this.hls.trigger(s.default.ERROR,{type:r.ErrorTypes.OTHER_ERROR,details:r.ErrorDetails.INTERNAL_EXCEPTION,fatal:!1,event:e,err:t})}}}]),e}();t.default=l},{"./errors":21,"./events":23,"./utils/logger":38}],23:[function(t,e,r){"use strict";e.exports={MEDIA_ATTACHING:"hlsMediaAttaching",MEDIA_ATTACHED:"hlsMediaAttached",MEDIA_DETACHING:"hlsMediaDetaching",MEDIA_DETACHED:"hlsMediaDetached",BUFFER_RESET:"hlsBufferReset",BUFFER_CODECS:"hlsBufferCodecs",BUFFER_APPENDING:"hlsBufferAppending",BUFFER_APPENDED:"hlsBufferAppended",BUFFER_EOS:"hlsBufferEos",BUFFER_FLUSHING:"hlsBufferFlushing",BUFFER_FLUSHED:"hlsBufferFlushed",MANIFEST_LOADING:"hlsManifestLoading",MANIFEST_LOADED:"hlsManifestLoaded",MANIFEST_PARSED:"hlsManifestParsed",LEVEL_LOADING:"hlsLevelLoading",LEVEL_LOADED:"hlsLevelLoaded",LEVEL_UPDATED:"hlsLevelUpdated",LEVEL_PTS_UPDATED:"hlsLevelPtsUpdated",LEVEL_SWITCH:"hlsLevelSwitch",FRAG_LOADING:"hlsFragLoading",FRAG_LOAD_PROGRESS:"hlsFragLoadProgress",FRAG_LOAD_EMERGENCY_ABORTED:"hlsFragLoadEmergencyAborted",FRAG_LOADED:"hlsFragLoaded",FRAG_PARSING_INIT_SEGMENT:"hlsFragParsingInitSegment",FRAG_PARSING_USERDATA:"hlsFragParsingUserdata",FRAG_PARSING_METADATA:"hlsFragParsingMetadata",FRAG_PARSING_DATA:"hlsFragParsingData",FRAG_PARSED:"hlsFragParsed",FRAG_BUFFERED:"hlsFragBuffered",FRAG_CHANGED:"hlsFragChanged",FPS_DROP:"hlsFpsDrop",ERROR:"hlsError",DESTROYING:"hlsDestroying",KEY_LOADING:"hlsKeyLoading",KEY_LOADED:"hlsKeyLoaded"}},{}],24:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;td&&(t[u-1].end=r[e].end):t.push(r[e])}else t.push(r[e])}for(e=0,o=0,l=i=a;e=n&&f>a)l=n,i=f,o=i-a;else if(n>a+s){h=n;break}}return{len:o,start:l,end:i,nextStart:h}}}]),e}();e.default=a},{}],25:[function(r,s,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;th)return void(a.PTSKnown=!1);for(var r=c;h>=r;r++){var s=f[u+r],n=l[r];n&&s&&(d=s.cc-n.cc,isNaN(s.startPTS)||(n.start=n.startPTS=s.startPTS,n.endPTS=s.endPTS,n.duration=s.duration,i=n))}if(d)for(e.logger.log("discontinuity sliding from playlist, take drift into account"),r=0;r=0&&ui.endSN)return 0;if(o=l-i.startSN,n=i.fragments,e=n[o],!isNaN(e.startPTS)){var f=Math.abs(e.startPTS-a);isNaN(e.deltaPTS)?e.deltaPTS=f:e.deltaPTS=Math.max(f,e.deltaPTS),a=Math.min(a,e.startPTS),s=Math.max(s,e.endPTS),d=Math.min(d,e.startDTS),u=Math.max(u,e.endDTS)}var h=a-e.start;for(e.start=e.startPTS=a,e.endPTS=s,e.startDTS=d,e.endDTS=u,e.duration=s-a,r=o;r>0;r--)t.updatePTS(n,r,r-1);for(r=o;ra?r.start=t.start+t.duration:r.start=t.start-r.duration:i>a?(t.duration=n-t.start,t.duration<0&&e.logger.error("negative duration computed for frag "+t.sn+",level "+t.level+", there should be some duration drift between playlist and fragment!")):(r.duration=t.start-n,r.duration<0&&e.logger.error("negative duration computed for frag "+r.sn+",level "+r.level+", there should be some duration drift between playlist and fragment!"))}}]),t}();t.default=n},{"../utils/logger":38}],26:[function(t,I,i){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var n=function(){function e(a,r){for(var t=0;t1?t-1:0),e=1;t>e;e++)i[e-1]=arguments[e];a.emit.apply(a,[r,r].concat(i))},a.off=function(i){for(var t=arguments.length,r=Array(t>1?t-1:0),e=1;t>e;e++)r[e-1]=arguments[e];a.removeListener.apply(a,[i].concat(r))},this.on=a.on.bind(a),this.off=a.off.bind(a),this.trigger=a.trigger.bind(a),this.playlistLoader=new d.default(this),this.fragmentLoader=new h.default(this),this.levelController=new R.default(this),this.abrController=new r.abrController(this),this.bufferController=new r.bufferController(this),this.capLevelController=new r.capLevelController(this),this.streamController=new r.streamController(this),this.timelineController=new r.timelineController(this),this.keyLoader=new p.default(this)}return n(t,null,[{key:"isSupported",value:function(){return window.MediaSource&&"function"==typeof window.MediaSource.isTypeSupported&&window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')}},{key:"Events",get:function(){return a.default}},{key:"ErrorTypes",get:function(){return s.ErrorTypes}},{key:"ErrorDetails",get:function(){return s.ErrorDetails}},{key:"DefaultConfig",get:function(){return t.defaultConfig||(t.defaultConfig={autoStartLoad:!0,startPosition:-1,debug:!1,capLevelToPlayerSize:!1,maxBufferLength:30,maxBufferSize:6e7,maxBufferHole:.5,maxSeekHole:2,seekHoleNudgeDuration:.01,stalledInBufferedNudgeThreshold:10,maxFragLookUpTolerance:.2,liveSyncDurationCount:3,liveMaxLatencyDurationCount:1/0,liveSyncDuration:void 0,liveMaxLatencyDuration:void 0,maxMaxBufferLength:600,enableWorker:!0,enableSoftwareAES:!0,manifestLoadingTimeOut:1e4,manifestLoadingMaxRetry:1,manifestLoadingRetryDelay:1e3,levelLoadingTimeOut:1e4,levelLoadingMaxRetry:4,levelLoadingRetryDelay:1e3,fragLoadingTimeOut:2e4,fragLoadingMaxRetry:6,fragLoadingRetryDelay:1e3,fragLoadingLoopThreshold:3,startFragPrefetch:!1,appendErrorMaxRetry:3,loader:S.default,fLoader:void 0,pLoader:void 0,abrController:v.default,bufferController:P.default,capLevelController:m.default,streamController:b.default,timelineController:T.default,enableCEA708Captions:!0,enableMP2TPassThrough:!1,abrEwmaFastLive:5,abrEwmaSlowLive:9,abrEwmaFastVoD:4,abrEwmaSlowVoD:15,abrEwmaDefaultEstimate:5e5,abrBandWidthFactor:.8,abrBandWidthUpFactor:.7,maxStarvationDelay:2}),t.defaultConfig},set:function(e){t.defaultConfig=e}}]),n(t,[{key:"destroy",value:function(){e.logger.log("destroy"),this.trigger(a.default.DESTROYING),this.detachMedia(),this.playlistLoader.destroy(),this.fragmentLoader.destroy(),this.levelController.destroy(),this.abrController.destroy(),this.bufferController.destroy(),this.capLevelController.destroy(),this.streamController.destroy(),this.timelineController.destroy(),this.keyLoader.destroy(),this.url=null,this.observer.removeAllListeners()}},{key:"attachMedia",value:function(t){e.logger.log("attachMedia"),this.media=t,this.trigger(a.default.MEDIA_ATTACHING,{media:t})}},{key:"detachMedia",value:function(){e.logger.log("detachMedia"),this.trigger(a.default.MEDIA_DETACHING),this.media=null}},{key:"loadSource",value:function(t){e.logger.log("loadSource:"+t),this.url=t,this.trigger(a.default.MANIFEST_LOADING,{url:t})}},{key:"startLoad",value:function(){var t=arguments.length<=0||void 0===arguments[0]?-1:arguments[0];e.logger.log("startLoad"),this.levelController.startLoad(),this.streamController.startLoad(t)}},{key:"stopLoad",value:function(){e.logger.log("stopLoad"),this.levelController.stopLoad(),this.streamController.stopLoad()}},{key:"swapAudioCodec",value:function(){e.logger.log("swapAudioCodec"),this.streamController.swapAudioCodec()}},{key:"recoverMediaError",value:function(){e.logger.log("recoverMediaError");var t=this.media;this.detachMedia(),this.attachMedia(t)}},{key:"levels",get:function(){return this.levelController.levels}},{key:"currentLevel",get:function(){return this.streamController.currentLevel},set:function(t){e.logger.log("set currentLevel:"+t),this.loadLevel=t,this.streamController.immediateLevelSwitch()}},{key:"nextLevel",get:function(){return this.streamController.nextLevel},set:function(t){e.logger.log("set nextLevel:"+t),this.levelController.manualLevel=t,this.streamController.nextLevelSwitch()}},{key:"loadLevel",get:function(){return this.levelController.level},set:function(t){e.logger.log("set loadLevel:"+t),this.levelController.manualLevel=t}},{key:"nextLoadLevel",get:function(){return this.levelController.nextLoadLevel},set:function(e){this.levelController.nextLoadLevel=e}},{key:"firstLevel",get:function(){return this.levelController.firstLevel},set:function(t){e.logger.log("set firstLevel:"+t),this.levelController.firstLevel=t}},{key:"startLevel",get:function(){return this.levelController.startLevel},set:function(t){e.logger.log("set startLevel:"+t),this.levelController.startLevel=t}},{key:"autoLevelCapping",get:function(){return this.abrController.autoLevelCapping},set:function(t){e.logger.log("set autoLevelCapping:"+t),this.abrController.autoLevelCapping=t}},{key:"autoLevelEnabled",get:function(){return-1===this.levelController.manualLevel}},{key:"manualLevel",get:function(){return this.levelController.manualLevel}}]),t}();i.default=l},{"./controller/abr-controller":3,"./controller/buffer-controller":4,"./controller/cap-level-controller":5,"./controller/level-controller":7,"./controller/stream-controller":8,"./controller/timeline-controller":9,"./errors":21,"./events":23,"./loader/fragment-loader":28,"./loader/key-loader":29,"./loader/playlist-loader":30,"./utils/logger":38,"./utils/xhr-loader":40,events:1}],27:[function(e,t,r){"use strict";t.exports=e("./hls.js").default},{"./hls.js":26}],28:[function(r,c,a){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function u(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}Object.defineProperty(a,"__esModule",{value:!0});var h=function(){function e(a,r){for(var t=0;te;e++)t[e]=r>>8*(15-e)&255;return t}},{key:"fragmentDecryptdataFromLevelkey",value:function(e,r){var t=e;return e&&e.method&&e.uri&&!e.iv&&(t=this.cloneObj(e),t.iv=this.createInitializationVector(r)),t}},{key:"avc1toavcoti",value:function(r){var e,t=r.split(".");return t.length>2?(e=t.shift()+".",e+=parseInt(t.shift()).toString(16),e+=("000"+parseInt(t.shift()).toString(16)).substr(-4)):e=r,e}},{key:"cloneObj",value:function(e){return JSON.parse(JSON.stringify(e))}},{key:"parseLevelPlaylist",value:function(D,f,L){var E,e,R,l=0,o=0,t={version:null,type:null,url:f,fragments:[],live:!0,startSN:0},a={method:null,key:null,iv:null,uri:null},y=0,c=null,r=null,n=null,d=null,h=null,s=null;for(R=/(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE):(\d+))|(?:#EXT-X-(TARGETDURATION):(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT(INF):(\d+(?:\.\d+)?)(?:,(.*))?)|(?:(?!#)()(\S.+))|(?:#EXT-X-(BYTERANGE):(\d+(?:@\d+(?:\.\d+)?))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(PROGRAM-DATE-TIME):(.+))|(?:#EXT-X-(VERSION):(\d+))|(?:(#)(.*):(.*))|(?:(#)(.*)))(?:.*)\r?\n?/g;null!==(e=R.exec(D));)switch(e.shift(),e=e.filter(function(e){return void 0!==e}),e[0]){case"VERSION":t.version=parseInt(e[1]);break;case"PLAYLIST-TYPE":t.type=e[1].toUpperCase();break;case"MEDIA-SEQUENCE":l=t.startSN=parseInt(e[1]);break;case"TARGETDURATION":t.targetduration=parseFloat(e[1]);break;case"EXTM3U":break;case"ENDLIST":t.live=!1;break;case"DIS":y++;break;case"BYTERANGE":var v=e[1].split("@");s=1===v.length?h:parseInt(v[1]),h=parseInt(v[0])+s;break;case"INF":n=parseFloat(e[1]),d=e[2]?e[2]:null;break;case"":if(!isNaN(n)){var b=l++;E=this.fragmentDecryptdataFromLevelkey(a,b);var T=e[1]?this.resolve(e[1],f):null;r={url:T,duration:n,title:d,start:o,sn:b,level:L,cc:y,decryptdata:E,programDateTime:c},null!==s&&(r.byteRangeStartOffset=s,r.byteRangeEndOffset=h),t.fragments.push(r),o+=n,n=null,d=null,s=null,c=null}break;case"KEY":var A=e[1],p=new i.default(A),g=p.enumeratedString("METHOD"),m=p.URI,k=p.hexadecimalInteger("IV");g&&(a={method:null,key:null,iv:null,uri:null},m&&"AES-128"===g&&(a.method=g,a.uri=this.resolve(m,f),a.key=null,a.iv=k));break;case"START":var S=e[1],w=new i.default(S),_=w.decimalFloatingPoint("TIME-OFFSET");_&&(t.startTimeOffset=_);break;case"PROGRAM-DATE-TIME":c=new Date(Date.parse(e[1]));break;case"#":e.shift();break;default:u.logger.warn("line parsed but not handled: "+e)}return r&&!r.url&&(t.fragments.pop(),o-=r.duration),t.totalduration=o,t.endSN=l-1,t}},{key:"loadsuccess",value:function(d,a){var s,o=d.currentTarget,n=o.responseText,r=o.responseURL,l=this.id,f=this.id2,i=this.hls;if(this.loading=!1,void 0===r&&(r=this.url),a.tload=performance.now(),a.mtime=new Date(o.getResponseHeader("Last-Modified")),0===n.indexOf("#EXTM3U"))if(n.indexOf("#EXTINF:")>0){var u=this.parseLevelPlaylist(n,r,l||0);u.tload=a.tload,null===l&&i.trigger(t.default.MANIFEST_LOADED,{levels:[{url:r,details:u}],url:r,stats:a}),a.tparsed=performance.now(),i.trigger(t.default.LEVEL_LOADED,{details:u,level:l||0,id:f,stats:a})}else s=this.parseMasterPlaylist(n,r),s.length?i.trigger(t.default.MANIFEST_LOADED,{levels:s,url:r,stats:a}):i.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no level found in manifest"});else i.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:e.ErrorDetails.MANIFEST_PARSING_ERROR,fatal:!0,url:r,reason:"no EXTM3U delimiter"})}},{key:"loaderror",value:function(i){var r,a;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_ERROR,a=!0):(r=e.ErrorDetails.LEVEL_LOAD_ERROR,a=!1),this.loader&&this.loader.abort(),this.loading=!1,this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:a,url:this.url,loader:this.loader,response:i.currentTarget,level:this.id,id:this.id2})}},{key:"loadtimeout",value:function(){var r,a;null===this.id?(r=e.ErrorDetails.MANIFEST_LOAD_TIMEOUT,a=!0):(r=e.ErrorDetails.LEVEL_LOAD_TIMEOUT,a=!1),this.loader&&this.loader.abort(),this.loading=!1,this.hls.trigger(t.default.ERROR,{type:e.ErrorTypes.NETWORK_ERROR,details:r,fatal:a,url:this.url,loader:this.loader,level:this.id,id:this.id2})}}]),r}(n.default);s.default=y},{"../errors":21,"../event-handler":22,"../events":23,"../utils/attr-list":34,"../utils/logger":38,"../utils/url":39}],31:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;t>24&255,t[1]=e>>16&255,t[2]=e>>8&255,t[3]=255&e,t.set(i,4),r=0,e=8;n>r;r++)t.set(a[r],e),e+=a[r].byteLength;return t}},{key:"hdlr",value:function(t){return e.box(e.types.hdlr,e.HDLR_TYPES[t])}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}},{key:"mdhd",value:function(t,r){return r*=t,e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,2,0,0,0,3,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24,r>>16&255,r>>8&255,255&r,85,196,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t.timescale,t.duration),e.hdlr(t.type),e.minf(t))}},{key:"mfhd",value:function(t){return e.box(e.types.mfhd,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t]))}},{key:"minf",value:function(t){return"audio"===t.type?e.box(e.types.minf,e.box(e.types.smhd,e.SMHD),e.DINF,e.stbl(t)):e.box(e.types.minf,e.box(e.types.vmhd,e.VMHD),e.DINF,e.stbl(t))}},{key:"moof",value:function(t,r,a){return e.box(e.types.moof,e.mfhd(t),e.traf(a,r))}},{key:"moov",value:function(t){for(var r=t.length,a=[];r--;)a[r]=e.trak(t[r]);return e.box.apply(null,[e.types.moov,e.mvhd(t[0].timescale,t[0].duration)].concat(a).concat(e.mvex(t)))}},{key:"mvex",value:function(r){for(var t=r.length,a=[];t--;)a[t]=e.trex(r[t]);return e.box.apply(null,[e.types.mvex].concat(a))}},{key:"mvhd",value:function(t,r){r*=t;var a=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,2,t>>24&255,t>>16&255,t>>8&255,255&t,r>>24&255,r>>16&255,r>>8&255,255&r,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]);return e.box(e.types.mvhd,a)}},{key:"sdtp",value:function(n){var r,t,a=n.samples||[],i=new Uint8Array(4+a.length);for(t=0;t>>8&255),a.push(255&n),a=a.concat(Array.prototype.slice.call(i));for(r=0;r>>8&255),s.push(255&n),s=s.concat(Array.prototype.slice.call(i));var u=e.box(e.types.avcC,new Uint8Array([1,a[3],a[4],a[5],255,224|t.sps.length].concat(a).concat([t.pps.length]).concat(s))),o=t.width,l=t.height;return e.box(e.types.avc1,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,o>>8&255,255&o,l>>8&255,255&l,0,72,0,0,0,72,0,0,0,0,0,0,0,1,18,100,97,105,108,121,109,111,116,105,111,110,47,104,108,115,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]),u,e.box(e.types.btrt,new Uint8Array([0,28,156,128,0,45,198,192,0,45,198,192])))}},{key:"esds",value:function(t){var e=t.config.length;return new Uint8Array([0,0,0,0,3,23+e,0,1,0,4,15+e,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([e]).concat(t.config).concat([6,1,2]))}},{key:"mp4a",value:function(t){var r=t.audiosamplerate;return e.box(e.types.mp4a,new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t.channelCount,0,16,0,0,0,0,r>>8&255,255&r,0,0]),e.box(e.types.esds,e.esds(t)))}},{key:"stsd",value:function(t){return"audio"===t.type?e.box(e.types.stsd,e.STSD,e.mp4a(t)):e.box(e.types.stsd,e.STSD,e.avc1(t))}},{key:"tkhd",value:function(t){var r=t.id,a=t.duration*t.timescale,i=t.width,n=t.height;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,r>>24&255,r>>16&255,r>>8&255,255&r,0,0,0,0,a>>24,a>>16&255,a>>8&255,255&a,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,i>>8&255,255&i,0,0,n>>8&255,255&n,0,0]))}},{key:"traf",value:function(a,t){var i=e.sdtp(a),r=a.id;return e.box(e.types.traf,e.box(e.types.tfhd,new Uint8Array([0,0,0,0,r>>24,r>>16&255,r>>8&255,255&r])),e.box(e.types.tfdt,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t])),e.trun(a,i.length+16+16+8+16+8+8),i)}},{key:"trak",value:function(t){return t.duration=t.duration||4294967295,e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"trex",value:function(r){var t=r.id;return e.box(e.types.trex,new Uint8Array([0,0,0,0,t>>24,t>>16&255,t>>8&255,255&t,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]))}},{key:"trun",value:function(h,o){var a,i,n,s,t,l,d=h.samples||[],r=d.length,f=12+16*r,u=new Uint8Array(f);for(o+=8+f,u.set([0,0,15,1,r>>>24&255,r>>>16&255,r>>>8&255,255&r,o>>>24&255,o>>>16&255,o>>>8&255,255&o],0),a=0;r>a;a++)i=d[a],n=i.duration,s=i.size,t=i.flags,l=i.cts,u.set([n>>>24&255,n>>>16&255,n>>>8&255,255&n,s>>>24&255,s>>>16&255,s>>>8&255,255&s,t.isLeading<<2|t.dependsOn,t.isDependedOn<<6|t.hasRedundancy<<4|t.paddingValue<<1|t.isNonSync,61440&t.degradPrio,15&t.degradPrio,l>>>24&255,l>>>16&255,l>>>8&255,255&l],12+16*a);return e.box(e.types.trun,u)}},{key:"initSegment",value:function(a){e.types||e.init();var t,r=e.moov(a);return t=new Uint8Array(e.FTYP.byteLength+r.byteLength),t.set(e.FTYP),t.set(r,e.FTYP.byteLength),t}}]),e}();e.default=a},{}],32:[function(a,h,i){"use strict";function n(e){return e&&e.__esModule?e:{default:e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(i,"__esModule",{value:!0});var l=function(){function e(a,r){for(var t=0;tMath.pow(2,32)&&!function(){var e=function r(t,e){return e?r(e,t%e):t};a.timescale=a.audiosamplerate/e(a.audiosamplerate,1024)}(),e.logger.log("audio mp4 timescale :"+a.timescale),l.audio={container:"audio/mp4",codec:a.codec,initSegment:r.default.initSegment([a]),metadata:{channelCount:a.channelCount}},u&&(n=o=v[0].pts-f*h)),i.sps&&i.pps&&d.length&&(i.timescale=this.MP4_TIMESCALE,l.video={container:"video/mp4",codec:i.codec,initSegment:r.default.initSegment([i]),metadata:{width:i.width,height:i.height}},u&&(n=Math.min(n,d[0].pts-f*h),o=Math.min(o,d[0].dts-f*h))),Object.keys(l).length?(c.trigger(t.default.FRAG_PARSING_INIT_SEGMENT,g),this.ISGenerated=!0,u&&(this._initPTS=n,this._initDTS=o)):c.trigger(t.default.ERROR,{type:s.ErrorTypes.MEDIA_ERROR,details:s.ErrorDetails.FRAG_PARSING_ERROR,fatal:!1,reason:"no audio/video samples found"})}},{key:"remuxVideo",value:function(a,D,w){var T,s,v,L,y,d,k,S,R,g,m,f,u,i,l,b=8,c=this.PES_TIMESCALE,h=this.PES2MP4SCALEFACTOR,o=[],A=a.samples.reduce(function(t,e){return Math.max(Math.min(t,e.pts-e.dts),-18e3)},0);for(0>A&&e.logger.warn("PTS < DTS detected in video samples, shifting DTS by "+Math.round(A/90)+" ms to overcome this issue"),d=new Uint8Array(a.len+4*a.nbNalu+8),T=new DataView(d.buffer),T.setUint32(0,d.byteLength),d.set(r.default.types.mdat,4);a.samples.length;){for(s=a.samples.shift(),L=0;s.units.units.length;)y=s.units.units.shift(),T.setUint32(b,y.data.byteLength),b+=4,d.set(y.data,b),b+=y.data.byteLength,L+=4+y.data.byteLength;if(m=s.pts-this._initDTS,f=s.dts-this._initDTS+A,f=Math.min(m,f),void 0!==g){u=this._PTSNormalize(m,g),i=this._PTSNormalize(f,g);var _=(i-g)/h;0>=_&&(e.logger.log("invalid sample duration at PTS/DTS: "+s.pts+"/"+s.dts+":"+_),_=1),v.duration=_}else{var p=void 0,n=void 0;p=w?this.nextAvcDts:D*c,u=this._PTSNormalize(m,p),i=this._PTSNormalize(f,p),n=Math.round((i-p)/90),w&&n&&(n>1?e.logger.log("AVC:"+n+" ms hole between fragments detected,filling it"):-1>n&&e.logger.log("AVC:"+-n+" ms overlapping between fragments detected"),i=p,u=Math.max(u-n,i),e.logger.log("Video/PTS/DTS adjusted: "+u+"/"+i+",delta:"+n)),S=Math.max(0,u),R=Math.max(0,i)}v={size:L,duration:0,cts:(u-i)/h,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0}},l=v.flags,s.key===!0?(l.dependsOn=2,l.isNonSync=0):(l.dependsOn=1,l.isNonSync=1),o.push(v),g=i}var E=0;o.length>=2&&(E=o[o.length-2].duration,v.duration=E),this.nextAvcDts=i+E*h;var O=a.dropped;a.len=0,a.nbNalu=0,a.dropped=0,o.length&&navigator.userAgent.toLowerCase().indexOf("chrome")>-1&&(l=o[0].flags,l.dependsOn=2,l.isNonSync=0),a.samples=o,k=r.default.moof(a.sequenceNumber++,R/h,a),a.samples=[],this.observer.trigger(t.default.FRAG_PARSING_DATA,{data1:k,data2:d,startPTS:S/c,endPTS:(u+h*E)/c,startDTS:R/c,endDTS:this.nextAvcDts/c,type:"video",nb:o.length,dropped:O})}},{key:"remuxAudio",value:function(a,D,S){var k,p,n,h,d,L,T,b,u,g,R,o,i,A=8,s=this.PES_TIMESCALE,w=a.timescale,f=s/w,E=1024*a.timescale/a.audiosamplerate,m=[],_=[];for(a.samples.sort(function(e,t){return e.pts-t.pts}),_=a.samples;_.length;){if(p=_.shift(),h=p.unit,g=p.pts-this._initDTS,R=p.dts-this._initDTS,void 0!==u)o=this._PTSNormalize(g,u),i=this._PTSNormalize(R,u),n.duration=(i-u)/f,Math.abs(n.duration-E)>E/10&&e.logger.log("invalid AAC sample duration at PTS "+Math.round(g/90)+",should be 1024,found :"+Math.round(n.duration*a.audiosamplerate/a.timescale)),n.duration=E,o=i=E*f+u;else{var c=void 0,l=void 0;if(c=S?this.nextAacPts:D*s,o=this._PTSNormalize(g,c),i=this._PTSNormalize(R,c),l=Math.round(1e3*(o-c)/s),S&&l){if(l>0)e.logger.log(l+" ms hole between AAC samples detected,filling it");else if(-12>l){e.logger.log(-l+" ms overlapping between AAC samples detected, drop frame"),a.len-=h.byteLength;continue}o=i=c}if(T=Math.max(0,o),b=Math.max(0,i),!(a.len>0))return;d=new Uint8Array(a.len+8),k=new DataView(d.buffer),k.setUint32(0,d.byteLength),d.set(r.default.types.mdat,4)}d.set(h,A),A+=h.byteLength,n={size:h.byteLength,cts:0,duration:0,flags:{isLeading:0,isDependedOn:0,hasRedundancy:0,degradPrio:0,dependsOn:1}},m.push(n),u=i}var y=0,v=m.length;v>=2&&(y=m[v-2].duration,n.duration=y),v&&(this.nextAacPts=o+f*y,a.len=0,a.samples=m,L=r.default.moof(a.sequenceNumber++,b/f,a),a.samples=[],this.observer.trigger(t.default.FRAG_PARSING_DATA,{data1:L,data2:d,startPTS:T/s,endPTS:this.nextAacPts/s,startDTS:b/s,endDTS:(i+f*y)/s,type:"audio",nb:v}))}},{key:"remuxID3",value:function(r,i){var e,n=r.samples.length;if(n){for(var a=0;n>a;a++)e=r.samples[a],e.pts=(e.pts-this._initPTS)/this.PES_TIMESCALE,e.dts=(e.dts-this._initDTS)/this.PES_TIMESCALE;this.observer.trigger(t.default.FRAG_PARSING_METADATA,{samples:r.samples})}r.samples=[],i=i}},{key:"remuxText",value:function(e,i){e.samples.sort(function(e,t){return e.pts-t.pts});var r,n=e.samples.length;if(n){for(var a=0;n>a;a++)r=e.samples[a],r.pts=(r.pts-this._initPTS)/this.PES_TIMESCALE;this.observer.trigger(t.default.FRAG_PARSING_USERDATA,{samples:e.samples})}e.samples=[],i=i}},{key:"_PTSNormalize",value:function(e,t){var r;if(void 0===t)return e;for(r=e>t?-8589934592:8589934592;Math.abs(e-t)>4294967296;)e+=r;return e}},{key:"passthrough",get:function(){return!1}}]),a}();i.default=d},{"../errors":21,"../events":23,"../remux/mp4-generator":31,"../utils/logger":38}],33:[function(r,l,e){"use strict";function a(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var n=function(){function e(a,r){for(var t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"hexadecimalInteger",value:function(r){if(this[r]){var e=(this[r]||"0x").slice(2);e=(1&e.length?"0":"")+e;for(var a=new Uint8Array(e.length/2),t=0;tNumber.MAX_SAFE_INTEGER?1/0:e}},{key:"decimalFloatingPoint",value:function(e){return parseFloat(this[e])}},{key:"enumeratedString",value:function(e){return this[e]}},{key:"decimalResolution",value:function(t){var e=/^(\d+)x(\d+)$/.exec(this[t]);if(null!==e)return{width:parseInt(e[1],10),height:parseInt(e[2],10)}}}],[{key:"parseAttrList",value:function(i){for(var t,n=/\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g,r={};null!==(t=n.exec(i));){var e=t[2],a='"';0===e.indexOf(a)&&e.lastIndexOf(a)===e.length-1&&(e=e.slice(1,-1)),r[t[1]]=e}return r}}]),e}();e.default=a},{}],35:[function(r,e,a){"use strict";var t={search:function(i,s){for(var t=0,r=i.length-1,e=null,a=null;r>=t;){e=(t+r)/2|0,a=i[e];var n=s(a);if(n>0)t=e+1;else{if(!(0>n))return a;r=e-1}}return null}};e.exports=t},{}],36:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;t0;)e.removeCue(e.cues[0])}},{key:"push",value:function(r,a){this.cue||this._createCue();for(var i,t,e,s,o,u=31&a[0],n=2,l=0;u>l;l++)if(i=a[n++],t=127&a[n++],e=127&a[n++],s=0!==(4&i),o=3&i,(0!==t||0!==e)&&s&&0===o){if(32&t||64&t)this.cue.text+=this._fromCharCode(t)+this._fromCharCode(e);else if((17===t||25===t)&&e>=48&&63>=e)switch(e){case 48:this.cue.text+="®";break;case 49:this.cue.text+="°";break;case 50:this.cue.text+="½";break;case 51:this.cue.text+="¿";break;case 52:this.cue.text+="™";break;case 53:this.cue.text+="¢";break;case 54:this.cue.text+="";break;case 55:this.cue.text+="£";break;case 56:this.cue.text+="♪";break;case 57:this.cue.text+=" ";break;case 58:this.cue.text+="è";break;case 59:this.cue.text+="â";break;case 60:this.cue.text+="ê";break;case 61:this.cue.text+="î";break;case 62:this.cue.text+="ô";break;case 63:this.cue.text+="û"}if((17===t||25===t)&&e>=32&&47>=e)switch(e){case 32:break;case 33:break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:break;case 42:break;case 43:break;case 44:break;case 45:break;case 46:break;case 47:}if((20===t||28===t)&&e>=32&&47>=e)switch(e){case 32:this._clearActiveCues(r);break;case 33:this.cue.text=this.cue.text.substr(0,this.cue.text.length-1);break;case 34:break;case 35:break;case 36:break;case 37:break;case 38:break;case 39:break;case 40:break;case 41:this._clearActiveCues(r);break;case 42:break;case 43:break;case 44:this._clearActiveCues(r);break;case 45:break;case 46:this._text="";break;case 47:this._flipMemory(r)}if((23===t||31===t)&&e>=33&&35>=e)switch(e){case 33:break;case 34:break;case 35:}}}},{key:"_fromCharCode",value:function(e){switch(e){case 42:return"á";case 2:return"á";case 2:return"é";case 4:return"í";case 5:return"ó";case 6:return"ú";case 3:return"ç";case 4:return"÷";case 5:return"Ñ";case 6:return"ñ";case 7:return"█";default:return String.fromCharCode(e)}}},{key:"_flipMemory",value:function(e){this._clearActiveCues(e),this._flushCaptions(e)}},{key:"_flushCaptions",value:function(s){this._has708||(this._textTrack=this.media.addTextTrack("captions","English","en"),this._has708=!0);var e=!0,a=!1,i=void 0;try{for(var n,t=this.memory[Symbol.iterator]();!(e=(n=t.next()).done);e=!0){var r=n.value;r.startTime=s,this._textTrack.addCue(r),this.display.push(r)}}catch(e){a=!0,i=e}finally{try{!e&&t.return&&t.return()}finally{if(a)throw i}}this.memory=[],this.cue=null}},{key:"_clearActiveCues",value:function(n){var e=!0,r=!1,a=void 0;try{for(var i,t=this.display[Symbol.iterator]();!(e=(i=t.next()).done);e=!0){var s=i.value;s.endTime=n}}catch(e){r=!0,a=e}finally{try{!e&&t.return&&t.return()}finally{if(r)throw a}}this.display=[]}},{key:"_clearBufferedCues",value:function(){}}]),e}();e.default=a},{}],37:[function(i,n,e){"use strict";function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=function(){function e(a,r){for(var t=0;t "+e}function n(t){var r=window.console[t];return r?function(){for(var n=arguments.length,e=Array(n),a=0;n>a;a++)e[a]=arguments[a];e[0]&&(e[0]=i(t,e[0])),r.apply(window.console,e)}:e}function s(r){for(var a=arguments.length,i=Array(a>1?a-1:0),e=1;a>e;e++)i[e-1]=arguments[e];i.forEach(function(e){t[e]=r[e]?r[e].bind(r):n(e)})}Object.defineProperty(r,"__esModule",{value:!0});var o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol?"symbol":typeof e},a={trace:e,debug:e,log:e,warn:e,info:e,error:e},t=a;r.enableLogs=function(e){if(e===!0||"object"===("undefined"==typeof e?"undefined":o(e))){s(e,"debug","log","info","warn","error");try{t.log()}catch(e){t=a}}else t=a},r.logger=t},{}],39:[function(r,t,a){"use strict";var e={buildAbsoluteURL:function(r,t){if(t=t.trim(),/^[a-z]+:/i.test(t))return t;var l=null,o=null,n=/^([^#]*)(.*)$/.exec(t);n&&(o=n[2],t=n[1]);var s=/^([^\?]*)(.*)$/.exec(t);s&&(l=s[2],t=s[1]);var f=/^([^#]*)(.*)$/.exec(r);f&&(r=f[1]);var u=/^([^\?]*)(.*)$/.exec(r);u&&(r=u[1]);var a=/^(([a-z]+:)?\/\/[a-z0-9\.\-_~]+(:[0-9]+)?)?(\/.*)$/i.exec(r);if(!a)throw new Error("Error trying to parse base URL.");var h=a[2]||"",d=a[1]||"",c=a[4],i=null;return i=/^\/\//.test(t)?h+"//"+e.buildAbsolutePath("",t.substring(2)):/^\//.test(t)?d+"/"+e.buildAbsolutePath("",t.substring(1)):e.buildAbsolutePath(d+c,t),l&&(i+=l),o&&(i+=o),i},buildAbsolutePath:function(n,s){for(var a,e,o=s,i="",t=n.replace(/[^\/]*$/,o.replace(/(\/|^)(?:\.?\/+)+/g,"$1")),r=0;e=t.indexOf("/../",r),e>-1;r=e+a)a=/^\/(?:\.\.\/)*/.exec(t.slice(e))[0].length,i=(i+t.substring(r,e)).replace(new RegExp("(?:\\/+[^\\/]*){0,"+(a-1)/3+"}$"),"/");return i+t.substr(r)}};t.exports=e},{}],40:[function(r,s,t){"use strict";function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0});var i=function(){function e(a,r){for(var t=0;t=200&&300>t?(window.clearTimeout(this.timeoutHandle),r.tload=Math.max(r.tfirst,performance.now()),this.onSuccess(a,r)):r.retry>=this.maxRetry||t>=400&&499>t?(window.clearTimeout(this.timeoutHandle),e.logger.error(t+" while loading "+this.url),this.onError(a)):(e.logger.warn(t+" while loading "+this.url+", retrying in "+this.retryDelay+"..."),this.destroy(),window.setTimeout(this.loadInternal.bind(this),this.retryDelay),this.retryDelay=Math.min(2*this.retryDelay,64e3),r.retry++))}},{key:"loadtimeout",value:function(t){e.logger.warn("timeout while loading "+this.url),this.onTimeout(t,this.stats)}},{key:"loadprogress",value:function(t){var e=this.stats;0===e.tfirst&&(e.tfirst=Math.max(performance.now(),e.trequest)),e.loaded=t.loaded,this.onProgress&&this.onProgress(t,e)}}]),t}();t.default=n},{"../utils/logger":38}]},{},[27])(27)}); diff --git a/dashboard-ui/bower_components/hls.js/package.json b/dashboard-ui/bower_components/hls.js/package.json index c666ad791e..852af9cf5a 100644 --- a/dashboard-ui/bower_components/hls.js/package.json +++ b/dashboard-ui/bower_components/hls.js/package.json @@ -1,6 +1,6 @@ { "name": "hls.js", - "version": "0.5.46", + "version": "0.5.47", "license": "Apache-2.0", "description": "Media Source Extension - HLS library, by/for Dailymotion", "homepage": "https://github.com/dailymotion/hls.js", diff --git a/dashboard-ui/components/channelmapper/channelmapper.js b/dashboard-ui/components/channelmapper/channelmapper.js index 05e2ca78f4..1baac16bab 100644 --- a/dashboard-ui/components/channelmapper/channelmapper.js +++ b/dashboard-ui/components/channelmapper/channelmapper.js @@ -181,7 +181,6 @@ function (dialogHelper, loading, connectionManager, globalize, actionsheet) { html += getEditorHtml(); dlg.innerHTML = html; - document.body.appendChild(dlg); initEditor(dlg, options); diff --git a/dashboard-ui/components/directorybrowser/directorybrowser.js b/dashboard-ui/components/directorybrowser/directorybrowser.js index 57296bc593..c5aa93d391 100644 --- a/dashboard-ui/components/directorybrowser/directorybrowser.js +++ b/dashboard-ui/components/directorybrowser/directorybrowser.js @@ -256,7 +256,6 @@ html += getEditorHtml(options, systemInfo); dlg.innerHTML = html; - document.body.appendChild(dlg); initEditor(dlg, options, fileOptions); diff --git a/dashboard-ui/components/fileorganizer/fileorganizer.js b/dashboard-ui/components/fileorganizer/fileorganizer.js index bedbb7b53f..5bced1b2f1 100644 --- a/dashboard-ui/components/fileorganizer/fileorganizer.js +++ b/dashboard-ui/components/fileorganizer/fileorganizer.js @@ -214,7 +214,6 @@ html += Globalize.translateDocument(template); dlg.innerHTML = html; - document.body.appendChild(dlg); dlg.querySelector('.formDialogHeaderTitle').innerHTML = Globalize.translate('FileOrganizeManually'); diff --git a/dashboard-ui/components/filterdialog/filterdialog.js b/dashboard-ui/components/filterdialog/filterdialog.js index 98b67eb303..47ec96cdfe 100644 --- a/dashboard-ui/components/filterdialog/filterdialog.js +++ b/dashboard-ui/components/filterdialog/filterdialog.js @@ -564,7 +564,6 @@ dlg.innerHTML = Globalize.translateDocument(template); setVisibility(dlg, options); - document.body.appendChild(dlg); dialogHelper.open(dlg); diff --git a/dashboard-ui/components/guestinviter/connectlink.js b/dashboard-ui/components/guestinviter/connectlink.js index 214c8607bf..b88c2ac634 100644 --- a/dashboard-ui/components/guestinviter/connectlink.js +++ b/dashboard-ui/components/guestinviter/connectlink.js @@ -120,7 +120,6 @@ html += Globalize.translateDocument(template); dlg.innerHTML = html; - document.body.appendChild(dlg); dialogHelper.open(dlg); diff --git a/dashboard-ui/components/guestinviter/guestinviter.js b/dashboard-ui/components/guestinviter/guestinviter.js index 4b7c6239d4..e12746667b 100644 --- a/dashboard-ui/components/guestinviter/guestinviter.js +++ b/dashboard-ui/components/guestinviter/guestinviter.js @@ -152,7 +152,6 @@ html += Globalize.translateDocument(template); dlg.innerHTML = html; - document.body.appendChild(dlg); dialogHelper.open(dlg); diff --git a/dashboard-ui/components/imagedownloader/imagedownloader.js b/dashboard-ui/components/imagedownloader/imagedownloader.js index 67740db8d3..574cf90092 100644 --- a/dashboard-ui/components/imagedownloader/imagedownloader.js +++ b/dashboard-ui/components/imagedownloader/imagedownloader.js @@ -327,7 +327,6 @@ html += ''; dlg.innerHTML = html; - document.body.appendChild(dlg); // Has to be assigned a z-index after the call to .open() dlg.addEventListener('close', onDialogClosed); diff --git a/dashboard-ui/components/imageuploader/imageuploader.js b/dashboard-ui/components/imageuploader/imageuploader.js index 66b330fe54..77b8c3bfd4 100644 --- a/dashboard-ui/components/imageuploader/imageuploader.js +++ b/dashboard-ui/components/imageuploader/imageuploader.js @@ -157,7 +157,6 @@ html += ''; dlg.innerHTML = html; - document.body.appendChild(dlg); // Has to be assigned a z-index after the call to .open() $(dlg).on('close', onDialogClosed); diff --git a/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js b/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js index a6e15c6350..339ffeba15 100644 --- a/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js +++ b/dashboard-ui/components/medialibrarycreator/medialibrarycreator.js @@ -229,7 +229,6 @@ dlg.classList.add('formDialog'); dlg.innerHTML = Globalize.translateDocument(template); - document.body.appendChild(dlg); initEditor(dlg, options.collectionTypeOptions); diff --git a/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js b/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js index c6afbe2b71..f17f4f5311 100644 --- a/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js +++ b/dashboard-ui/components/medialibraryeditor/medialibraryeditor.js @@ -187,8 +187,6 @@ dlg.querySelector('.formDialogHeaderTitle').innerHTML = options.library.Name; - document.body.appendChild(dlg); - initEditor(dlg, options); dlg.addEventListener('closing', onDialogClosing); diff --git a/dashboard-ui/device.html b/dashboard-ui/device.html index d8f23ea46e..ec54ab37a4 100644 --- a/dashboard-ui/device.html +++ b/dashboard-ui/device.html @@ -16,7 +16,7 @@
- +
diff --git a/dashboard-ui/livetv.html b/dashboard-ui/livetv.html index 7d340bce82..daf305c36f 100644 --- a/dashboard-ui/livetv.html +++ b/dashboard-ui/livetv.html @@ -31,15 +31,13 @@
-

${HeaderWhatsOnTV}

+
+

${HeaderWhatsOnTV}

+ +

-
-

${HeaderUpcomingPrograms}

-
-
-

${HeaderUpcomingMovies}

@@ -64,6 +62,14 @@

+
+
+

${HeaderUpcomingPrograms}

+ +
+
+
+
diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index e183e69565..9556337d63 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -658,13 +658,8 @@ html += '
'; dlg.innerHTML = html; - document.body.appendChild(dlg); - // Seeing an issue in Firefox and IE where it's initially visible in the bottom right, then moves to the center - var delay = browser.animate ? 0 : 100; - setTimeout(function () { - dialogHelper.open(dlg); - }, delay); + dialogHelper.open(dlg); function onSortByChange() { var newValue = this.value; diff --git a/dashboard-ui/scripts/livetvitems.js b/dashboard-ui/scripts/livetvitems.js index 605dfc4d6c..39006e876d 100644 --- a/dashboard-ui/scripts/livetvitems.js +++ b/dashboard-ui/scripts/livetvitems.js @@ -37,6 +37,8 @@ ApiClient.getLiveTvRecordings(query) : params.type == 'RecordingSeries' ? ApiClient.getLiveTvRecordingSeries(query) : + params.IsAiring == 'true' ? + ApiClient.getLiveTvRecommendedPrograms(query) : ApiClient.getLiveTvPrograms(query); promise.then(function (result) { @@ -66,7 +68,8 @@ showParentTitle: query.IsSeries !== false && !query.IsMovie, showProgramAirInfo: params.type != 'Recordings' && params.type != 'RecordingSeries', overlayMoreButton: true, - showYear: query.IsMovie && params.type == 'Recordings' + showYear: query.IsMovie && params.type == 'Recordings', + coverImage: true }); var elem = page.querySelector('.itemsContainer'); @@ -133,14 +136,20 @@ else if (params.IsKids == 'false') { query.IsKids = false; } + if (params.IsAiring == 'true') { + query.IsAiring = true; + } + else if (params.IsAiring == 'false') { + query.IsAiring = false; + } if (params.type == 'Recordings') { - if (params.IsMovie) { + if (params.IsMovie == 'true') { LibraryMenu.setTitle(Globalize.translate('TabMovies')); - } else if (params.IsSports) { + } else if (params.IsSports == 'true') { LibraryMenu.setTitle(Globalize.translate('Sports')); - } else if (params.IsKids) { + } else if (params.IsKids == 'true') { LibraryMenu.setTitle(Globalize.translate('HeaderForKids')); } else { LibraryMenu.setTitle(Globalize.translate('TabRecordings')); @@ -151,12 +160,14 @@ LibraryMenu.setTitle(Globalize.translate('TabSeries')); } else { - if (params.IsMovie) { + if (params.IsMovie == 'true') { LibraryMenu.setTitle(Globalize.translate('HeaderUpcomingMovies')); - } else if (params.IsSports) { + } else if (params.IsSports == 'true') { LibraryMenu.setTitle(Globalize.translate('HeaderUpcomingSports')); - } else if (params.IsKids) { + } else if (params.IsKids == 'true') { LibraryMenu.setTitle(Globalize.translate('HeaderUpcomingForKids')); + } else if (params.IsAiring == 'true') { + LibraryMenu.setTitle(Globalize.translate('HeaderWhatsOnTV')); } else { LibraryMenu.setTitle(Globalize.translate('HeaderUpcomingPrograms')); } diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index 34639d74c2..2ff0b149ba 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -29,7 +29,6 @@ limit: limit, ImageTypeLimit: 1, EnableImageTypes: "Primary", - EnableTotalRecordCount: false, Fields: "ChannelInfo" }).then(function (result) { diff --git a/dashboard-ui/scripts/mediacontroller.js b/dashboard-ui/scripts/mediacontroller.js index 09204e7ce9..38b8029e7d 100644 --- a/dashboard-ui/scripts/mediacontroller.js +++ b/dashboard-ui/scripts/mediacontroller.js @@ -180,8 +180,6 @@ html += '
'; dlg.innerHTML = html; - document.body.appendChild(dlg); - var chkMirror = dlg.querySelector('.chkMirror'); if (chkMirror) { diff --git a/dashboard-ui/scripts/registrationservices.js b/dashboard-ui/scripts/registrationservices.js index c4ebb5dab0..65d5680115 100644 --- a/dashboard-ui/scripts/registrationservices.js +++ b/dashboard-ui/scripts/registrationservices.js @@ -128,7 +128,6 @@ html += ''; dlg.innerHTML = html; - document.body.appendChild(dlg); // Has to be assigned a z-index after the call to .open() dlg.addEventListener('close', function (e) {