@vkontakte/videoplayer-core 2.0.36 → 2.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/index.cjs.js +4 -4
  2. package/index.esm.js +4 -4
  3. package/package.json +1 -1
  4. package/{env.d.ts → sdk/src/env.d.ts} +0 -0
  5. package/{index.d.ts → sdk/src/index.d.ts} +0 -0
  6. package/{player → sdk/src/player}/Player.d.ts +0 -0
  7. package/{player → sdk/src/player}/types.d.ts +0 -0
  8. package/{player → sdk/src/player}/utils/position.d.ts +0 -0
  9. package/{player → sdk/src/player}/utils/selectContainer.d.ts +0 -0
  10. package/{player → sdk/src/player}/utils/watchCoverage.d.ts +0 -0
  11. package/{providers → sdk/src/providers}/ChromecastProvider/ChromecastInitializer/index.d.ts +0 -0
  12. package/{providers → sdk/src/providers}/ChromecastProvider/ChromecastInitializer/types.d.ts +0 -0
  13. package/{providers → sdk/src/providers}/ChromecastProvider/index.d.ts +0 -0
  14. package/{providers → sdk/src/providers}/DashIFProvider/BigRequestLoader.d.ts +0 -0
  15. package/{providers → sdk/src/providers}/DashIFProvider/dashjsTypes.d.ts +0 -0
  16. package/{providers → sdk/src/providers}/DashIFProvider/index.d.ts +0 -0
  17. package/{providers → sdk/src/providers}/DashIFProvider/observableManifestLoader.d.ts +0 -0
  18. package/{providers → sdk/src/providers}/DashIFProvider/stripRangeHeader.d.ts +0 -0
  19. package/{providers → sdk/src/providers}/DashLiveProvider/DashLiveProvider.d.ts +0 -0
  20. package/{providers → sdk/src/providers}/DashLiveProvider/index.d.ts +0 -0
  21. package/{providers → sdk/src/providers}/DashLiveProvider/types.d.ts +0 -0
  22. package/{providers → sdk/src/providers}/DashLiveProvider/utils/FilesFetcher.d.ts +0 -0
  23. package/{providers → sdk/src/providers}/DashLiveProvider/utils/LiveDashPlayer.d.ts +0 -0
  24. package/{providers → sdk/src/providers}/DashLiveProvider/utils/ThroughputEstimator.d.ts +0 -0
  25. package/{providers → sdk/src/providers}/DashLiveProvider/utils/liveDashPlayerUtil.d.ts +0 -0
  26. package/{providers → sdk/src/providers}/DashProvider/DashProvider.d.ts +0 -0
  27. package/{providers → sdk/src/providers}/DashProvider/index.d.ts +0 -0
  28. package/{providers → sdk/src/providers}/DashProvider/types.d.ts +0 -0
  29. package/{providers → sdk/src/providers}/DashProvider/utils/DashLite.d.ts +0 -0
  30. package/{providers → sdk/src/providers}/DashProvider/utils/stream.d.ts +0 -0
  31. package/{providers → sdk/src/providers}/DashProvider/utils/xhr2.d.ts +0 -0
  32. package/{providers → sdk/src/providers}/DashVKProvider/index.d.ts +0 -0
  33. package/{providers → sdk/src/providers}/DashVKProvider/lib/buffer.d.ts +1 -0
  34. package/{providers → sdk/src/providers}/DashVKProvider/lib/ebml.d.ts +0 -0
  35. package/{providers → sdk/src/providers}/DashVKProvider/lib/fetch.d.ts +0 -0
  36. package/{providers → sdk/src/providers}/DashVKProvider/lib/mpd.d.ts +0 -0
  37. package/{providers → sdk/src/providers}/DashVKProvider/lib/player.d.ts +0 -0
  38. package/{providers → sdk/src/providers}/DashVKProvider/lib/types.d.ts +0 -0
  39. package/{providers → sdk/src/providers}/DashVKProvider/lib/webm.d.ts +0 -0
  40. package/{providers → sdk/src/providers}/HlsJsProvider/index.d.ts +0 -0
  41. package/{providers → sdk/src/providers}/HlsLiveProvider/index.d.ts +0 -0
  42. package/{providers → sdk/src/providers}/HlsLiveProvider/seekBackTimeExtractor.d.ts +0 -0
  43. package/{providers → sdk/src/providers}/HlsProvider/index.d.ts +0 -0
  44. package/{providers → sdk/src/providers}/HlsProvider/qualityExtractor.d.ts +0 -0
  45. package/{providers → sdk/src/providers}/MpegProvider/index.d.ts +0 -0
  46. package/{providers → sdk/src/providers}/ProviderContainer/index.d.ts +0 -0
  47. package/{providers → sdk/src/providers}/ProviderContainer/types.d.ts +0 -0
  48. package/{providers → sdk/src/providers}/ProviderContainer/utils/formatsSupport.d.ts +0 -0
  49. package/{providers → sdk/src/providers}/ProviderContainer/utils/playbackHangup.d.ts +0 -0
  50. package/{providers → sdk/src/providers}/types.d.ts +0 -0
  51. package/{providers → sdk/src/providers}/utils/HtmlVideoTextTrackManager.d.ts +0 -0
  52. package/{providers → sdk/src/providers}/utils/LiveOffset/index.d.ts +0 -0
  53. package/{providers → sdk/src/providers}/utils/LiveOffset/types.d.ts +0 -0
  54. package/{providers → sdk/src/providers}/utils/firstBytesEventForVideoElement.d.ts +0 -0
  55. package/{providers → sdk/src/providers}/utils/firstFrameEvent.d.ts +0 -0
  56. package/{providers → sdk/src/providers}/utils/forcePlay.d.ts +0 -0
  57. package/{providers → sdk/src/providers}/utils/generateLiveUrl.d.ts +0 -0
  58. package/{providers → sdk/src/providers}/utils/initVideoInContainer.d.ts +0 -0
  59. package/{providers → sdk/src/providers}/utils/observableVideo.d.ts +0 -0
  60. package/{providers → sdk/src/providers}/utils/syncDesiredState.d.ts +0 -0
  61. package/{providers → sdk/src/providers}/utils/syncPlaybackState.d.ts +0 -0
  62. package/{utils → sdk/src/utils}/StateMachine/StateMachine.d.ts +0 -0
  63. package/{utils → sdk/src/utils}/StateMachine/types.d.ts +0 -0
  64. package/{utils → sdk/src/utils}/StatefulIterator/StatefulIterator.spec.d.ts +0 -0
  65. package/{utils → sdk/src/utils}/StatefulIterator/index.d.ts +0 -0
  66. package/sdk/src/utils/ThroughputEstimator.d.ts +25 -0
  67. package/{utils → sdk/src/utils}/addScript.d.ts +0 -0
  68. package/{utils → sdk/src/utils}/autoSelectVideoTrack.d.ts +0 -0
  69. package/{utils → sdk/src/utils}/buffer/HttpVideoBuffer.d.ts +0 -0
  70. package/{utils → sdk/src/utils}/buffer/getBufferedRangeForPosition.d.ts +0 -0
  71. package/{utils → sdk/src/utils}/buffer/getForwardBufferDuration.d.ts +0 -0
  72. package/{utils → sdk/src/utils}/buffer/types.d.ts +0 -0
  73. package/{utils → sdk/src/utils}/hostnameFromUrl.d.ts +0 -0
  74. package/{utils → sdk/src/utils}/iframeSafeStorage.d.ts +0 -0
  75. package/{utils → sdk/src/utils}/isSafari.d.ts +0 -0
  76. package/{utils → sdk/src/utils}/link.d.ts +0 -0
  77. package/{utils → sdk/src/utils}/observeElementSize.d.ts +0 -0
  78. package/{utils → sdk/src/utils}/playbackTelemetry.d.ts +0 -0
  79. package/{utils → sdk/src/utils}/quality/quality.spec.d.ts +0 -0
  80. package/{utils → sdk/src/utils}/quality/types.d.ts +0 -0
  81. package/{utils → sdk/src/utils}/quality/utils.d.ts +0 -0
  82. package/{utils → sdk/src/utils}/range.d.ts +0 -0
  83. package/{utils → sdk/src/utils}/rectangle.d.ts +0 -0
  84. package/sdk/src/utils/smoothedValue.d.ts +24 -0
  85. package/{utils → sdk/src/utils}/tuningConfig.d.ts +1 -1
  86. package/{utils → sdk/src/utils}/videoFormat.d.ts +0 -0
  87. package/shared/src/Logger/Logger.d.ts +10 -0
  88. package/shared/src/Logger/index.d.ts +2 -0
  89. package/shared/src/index.d.ts +4 -0
  90. package/shared/src/reactive/Observable.d.ts +7 -0
  91. package/shared/src/reactive/Subject.d.ts +10 -0
  92. package/shared/src/reactive/Subscription.d.ts +6 -0
  93. package/shared/src/reactive/ValueSubject.d.ts +10 -0
  94. package/shared/src/reactive/combine.d.ts +10 -0
  95. package/shared/src/reactive/fromEvent.d.ts +7 -0
  96. package/shared/src/reactive/index.d.ts +19 -0
  97. package/shared/src/reactive/merge.d.ts +12 -0
  98. package/shared/src/reactive/observableFrom.d.ts +3 -0
  99. package/shared/src/reactive/operators/debounce.d.ts +6 -0
  100. package/shared/src/reactive/operators/filter.d.ts +3 -0
  101. package/shared/src/reactive/operators/filterChanged.d.ts +5 -0
  102. package/shared/src/reactive/operators/map.d.ts +2 -0
  103. package/shared/src/reactive/operators/mapTo.d.ts +2 -0
  104. package/shared/src/reactive/operators/once.d.ts +5 -0
  105. package/shared/src/reactive/operators/pairwise.d.ts +4 -0
  106. package/shared/src/reactive/operators/tap.d.ts +2 -0
  107. package/shared/src/reactive/operators/throttle.d.ts +5 -0
  108. package/shared/src/reactive/timeout.d.ts +3 -0
  109. package/shared/src/types/index.d.ts +18 -0
  110. package/shared/src/utils/addScript.d.ts +1 -0
  111. package/shared/src/utils/index.d.ts +5 -0
  112. package/shared/src/utils/never.d.ts +2 -0
  113. package/shared/src/utils/noop.d.ts +1 -0
  114. package/shared/src/utils/nullable.d.ts +6 -0
  115. package/utils/ThroughputEstimator.d.ts +0 -31
package/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
- * @vkontakte/videoplayer-core v2.0.36
3
- * Thu, 16 Dec 2021 16:39:59 GMT
4
- * https://st.mycdn.me/static/playersdk/2-0-36/doc/
2
+ * @vkontakte/videoplayer-core v2.0.37
3
+ * Mon, 20 Dec 2021 12:46:35 GMT
4
+ * https://st.mycdn.me/static/playersdk/2-0-37/doc/
5
5
  */
6
- import{ValueSubject as t,Subject as e,Subscription as i,isNonNullable as s,isNullable as a,fromEvent as r,assertNever as n,merge as o,tap as d,map as h,observableFrom as u,filterChanged as c,assertNonNullable as l,Observable as p,once as m,debounce as v,combine as S,filter as f,timeout as g,mapTo as b,throttle as T,Logger as y}from"@vkontakte/videoplayer-shared";export{Observable,Subject,Subscription,ValueSubject}from"@vkontakte/videoplayer-shared";import E from"lodash/debounce";var $,P,k,w,A;!function(t){t.STOPPED="stopped",t.PLAYING="playing",t.PAUSED="paused"}($||($={})),function(t){t.MPEG="MPEG",t.DASH="DASH",t.DASH_SEP="DASH_SEP",t.DASH_WEBM="DASH_WEBM",t.DASH_WEBM_VK="DASH_WEBM_VK",t.DASH_ONDEMAND="DASH_ONDEMAND",t.DASH_LIVE="DASH_LIVE",t.DASH_LIVE_WEBM="DASH_LIVE_WEBM",t.HLS="HLS",t.HLS_ONDEMAND="HLS_ONDEMAND",t.HLS_JS="HLS_JS",t.HLS_LIVE="HLS_LIVE"}(P||(P={})),function(t){t.SCREEN="SCREEN",t.CHROMECAST="CHROMECAST"}(k||(k={})),function(t){t.NOT_AVAILABLE="NOT_AVAILABLE",t.AVAILABLE="AVAILABLE",t.CONNECTING="CONNECTING",t.CONNECTED="CONNECTED"}(w||(w={})),function(t){t.SuccessWithSound="success_with_sound",t.SuccessWithoutSound="success_without_sound",t.Failed="failed"}(A||(A={}));const D={throughputEstimator:{emaAlpha:.2,emaAlphaSlow:.2,emaAlphaFast:.7,changeThreshold:.2,useBrowserEstimation:!0,streamMinSampleSize:10240,streamMinSampleTime:300},autoTrackSelection:{bitrateFactorAtEmptyBuffer:1.8,bitrateFactorAtFullBuffer:1.1,usePixelRatio:!0,limitByContainer:!0,containerSizeFactor:2},dash:{extraInitSize:1e3,forwardBufferTarget:3e4,segmentRequestSize:1048576,representationSwitchForwardBufferGap:3e3},enableTelemetryAtStart:!1,formatsToAvoid:[P.DASH_WEBM_VK],disableChromecast:!1,chromecastReceiverId:void 0,useWebmBigRequest:!0,bigRequestMinInitSize:51200,bigRequestMinDataSize:1048576,stripRangeHeader:!0,flushShortLoopedBuffers:!0,insufficientBufferRuleMargin:1e4,dashSeekInSegmentDurationThreshold:18e4,dashSeekInSegmentAlwaysSeekDelta:1e4,endGapTolerance:300};class _{constructor(a){var r;this.connection$=new t(void 0),this.castState$=new t(w.NOT_AVAILABLE),this.errorEvent$=new e,this.realCastState$=new t(w.NOT_AVAILABLE),this.subscription=new i,this.params=a,this.log=this.params.dependencies.logger.createComponentLog("ChromecastInitializer");const n="chrome"in window;if(this.log({message:`[constructor] receiverApplicationId: ${this.params.receiverApplicationId}, isDisabled: ${this.params.isDisabled}, isSupported: ${n}`}),a.isDisabled||!n)return;var o;s(null===(r=window.chrome)||void 0===r?void 0:r.cast)?this.initializeCastApi():(window.__onGCastApiAvailable=t=>{t&&this.initializeCastApi()},(o="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise(((t,e)=>{const i=document.createElement("script");i.setAttribute("src",o),i.onload=()=>t,i.onerror=()=>e,document.body.appendChild(i)}))).catch((()=>this.errorEvent$.next({id:"ChromecastLoading",message:"Script loading failed!"}))))}connect(){var t;null===(t=cast.framework.CastContext.getInstance())||void 0===t||t.requestSession()}disconnect(){var t,e;null===(e=null===(t=cast.framework.CastContext.getInstance())||void 0===t?void 0:t.getCurrentSession())||void 0===e||e.endSession(!0)}stopMedia(){return new Promise(((t,e)=>{var i,s,a;null===(a=null===(s=null===(i=cast.framework.CastContext.getInstance())||void 0===i?void 0:i.getCurrentSession())||void 0===s?void 0:s.getMediaSession())||void 0===a||a.stop(new chrome.cast.media.StopRequest,t,e)}))}toggleConnection(){s(this.connection$.getValue())?this.disconnect():this.connect()}setVolume(t){const e=this.connection$.getValue();a(e)||(e.remotePlayer.volumeLevel=t,e.remotePlayerController.setVolumeLevel())}setMuted(t){const e=this.connection$.getValue();a(e)||t!==e.remotePlayer.isMuted&&e.remotePlayerController.muteOrUnmute()}destroy(){this.subscription.unsubscribe()}initListeners(){const t=new cast.framework.RemotePlayer,e=new cast.framework.RemotePlayerController(t),i=cast.framework.CastContext.getInstance();this.subscription.add(r(i,cast.framework.CastContextEventType.SESSION_STATE_CHANGED).subscribe((t=>{var e,s;switch(t.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_STARTING:case cast.framework.SessionState.SESSION_RESUMED:this.contentId=null===(s=null===(e=i.getCurrentSession())||void 0===e?void 0:e.getMediaSession())||void 0===s?void 0:s.media.contentId;break;case cast.framework.SessionState.NO_SESSION:case cast.framework.SessionState.SESSION_ENDING:case cast.framework.SessionState.SESSION_ENDED:case cast.framework.SessionState.SESSION_START_FAILED:this.contentId=void 0;break;default:return n(t.sessionState)}}))).add(o(r(i,cast.framework.CastContextEventType.CAST_STATE_CHANGED).pipe(d((t=>{this.log({message:`[cast.framework.RemotePlayerEventType.CAST_STATE_CHANGED]: ${JSON.stringify(t)}`})})),h((t=>t.castState))),u([i.getCastState()])).pipe(c(),h(I),d((t=>{this.log({message:`realCastState$: ${t}`})}))).subscribe(this.realCastState$)).add(this.realCastState$.subscribe((r=>{var n;const o=r===w.CONNECTED,d=s(this.connection$.getValue());if(o&&!d){const s=i.getCurrentSession();l(s);const r=s.getCastDevice(),o=null===(n=s.getMediaSession())||void 0===n?void 0:n.media.contentId;(a(o)||o===this.contentId)&&(this.log({message:"connection created"}),this.connection$.next({remotePlayer:t,remotePlayerController:e,session:s,castDevice:r}))}else!o&&d&&(this.log({message:"connection destroyed"}),this.connection$.next(void 0));this.castState$.next(r===w.CONNECTED?s(this.connection$.getValue())?w.CONNECTED:w.AVAILABLE:r)})))}initializeCastApi(){var t;let e,i,s;try{e=cast.framework.CastContext.getInstance(),i=chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,s=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}catch(t){return}try{e.setOptions({receiverApplicationId:null!==(t=this.params.receiverApplicationId)&&void 0!==t?t:i,autoJoinPolicy:s}),this.initListeners()}catch(t){this.errorEvent$.next({id:"ChromecastInitializer",message:"[initializeCastApi] failed",thrown:t})}}}const I=t=>{switch(t){case cast.framework.CastState.NO_DEVICES_AVAILABLE:return w.NOT_AVAILABLE;case cast.framework.CastState.NOT_CONNECTED:return w.AVAILABLE;case cast.framework.CastState.CONNECTING:return w.CONNECTING;case cast.framework.CastState.CONNECTED:return w.CONNECTED;default:return n(t)}};function R(t,e,i,s){return new(i||(i=Promise))((function(a,r){function n(t){try{d(s.next(t))}catch(t){r(t)}}function o(t){try{d(s.throw(t))}catch(t){r(t)}}function d(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(n,o)}d((s=s.apply(t,e||[])).next())}))}var L,C;!function(t){t.VIDEO="video",t.AUDIO="audio",t.TEXT="text"}(L||(L={})),function(t){t.NONE="none",t.DOWNLOADING="downloading",t.DOWNLOADED="downloaded",t.FED="fed"}(C||(C={}));var x=t=>R(void 0,void 0,void 0,(function*(){const e=t.muted;try{yield t.play()}catch(i){if(i instanceof DOMException&&(20===i.code||"AbortError"===i.name))return!1;if(e)return console.warn(i),!1;t.muted=!0;try{yield t.play()}catch(e){return t.muted=!1,console.warn(e),!1}}return!0}));const N=(t,e,s,{equal:r=((t,e)=>t===e),changed$:n,onError:o}={})=>{const d=t.getState(),h=e(),u=a(n),c=new i;return n&&c.add(n.subscribe((e=>{const i=t.getState();r(e,i)&&t.setState(e)}),o)),r(h,d)||(s(d),u&&t.setState(d)),c.add(t.stateChangeStarted$.subscribe((e=>{s(e.to),u&&t.setState(e.to)}),o)),c},O=(t,e,i)=>N(e,(()=>t.loop),(e=>{s(e)&&(t.loop=e)}),{onError:i}),B=(t,e,i,a)=>N(e,(()=>({muted:t.muted,volume:t.volume})),(e=>{s(e)&&(t.muted=e.muted,t.volume=e.volume)}),{equal:(t,e)=>t===e||(null==t?void 0:t.muted)===(null==e?void 0:e.muted)&&(null==t?void 0:t.volume)===(null==e?void 0:e.volume),changed$:i,onError:a}),M=(t,e)=>{if(t.id===e)return!0;const[i,s,a]=e.split("|");return t.language===s&&t.label===a};class U{constructor(){this.available$=new e,this.current$=new t(void 0),this.error$=new e,this.subscription=new i,this.externalTracks=new Map}connect(t,e,i){this.video=t,this.cueSettings=e.textTrackCuesSettings,this.subscribe();const a=t=>{this.error$.next({id:"TextTracksManager",message:"Generic HtmlVideoTextTrackManager error",thrown:t})};this.subscription.add(this.available$.subscribe(i.availableTextTracks$)),this.subscription.add(this.current$.subscribe(i.currentTextTrack$)),this.subscription.add(this.error$.subscribe(i.error$)),this.subscription.add(N(e.externalTextTracks,(()=>Object.values(this.externalTracks)),(t=>{s(t)&&this.setExternal(t)}),{equal:(t,e)=>s(t)&&s(e)&&t.length===e.length&&t.every((({id:t},i)=>t===e[i].id)),changed$:this.available$.pipe(h((t=>t.filter((({type:t})=>"external"===t))))),onError:a})),this.subscription.add(N(e.currentTextTrack,(()=>{if(this.video)return;const t=this.htmlTextTracksAsArray().find((({mode:t})=>"showing"===t));return t&&this.htmlTextTrackToITextTrack(t).id}),(t=>this.select(t)),{changed$:this.current$,onError:a})),this.subscription.add(N(e.textTrackCuesSettings,(()=>({})),(()=>{if(this.video)for(const t of this.htmlTextTracksAsArray())this.applyCueSettings(t.cues),this.applyCueSettings(t.activeCues)})))}subscribe(){l(this.video);const{textTracks:t}=this.video;this.subscription.add(r(t,"addtrack").subscribe((()=>{const t=this.current$.getValue();this.select(t)}))),this.subscription.add(o(r(t,"addtrack"),r(t,"removetrack"),u(["init"])).pipe(h((()=>this.htmlTextTracksAsArray().map((t=>this.htmlTextTrackToITextTrack(t))))),c(((t,e)=>t.length===e.length&&t.every((({id:t},i)=>t===e[i].id))))).subscribe(this.available$)),this.subscription.add(o(r(t,"change"),u(["init"])).pipe(h((()=>this.htmlTextTracksAsArray().find((({mode:t})=>"showing"===t)))),h((t=>t&&this.htmlTextTrackToITextTrack(t).id)),c()).subscribe(this.current$));const e=t=>{var e,i;return this.applyCueSettings(null!==(i=null===(e=t.target)||void 0===e?void 0:e.activeCues)&&void 0!==i?i:null)};this.subscription.add(r(t,"addtrack").subscribe((t=>{var i,s;null===(i=t.track)||void 0===i||i.addEventListener("cuechange",e);const a=t=>{var e,i,s,r,n;const o=null!==(i=null===(e=t.target)||void 0===e?void 0:e.cues)&&void 0!==i?i:null;o&&o.length&&(this.applyCueSettings(null!==(r=null===(s=t.target)||void 0===s?void 0:s.cues)&&void 0!==r?r:null),null===(n=t.target)||void 0===n||n.removeEventListener("cuechange",a))};null===(s=t.track)||void 0===s||s.addEventListener("cuechange",a)}))),this.subscription.add(r(t,"removetrack").subscribe((t=>{var i;null===(i=t.track)||void 0===i||i.removeEventListener("cuechange",e)})))}applyCueSettings(t){if(!t||!t.length)return;const e=this.cueSettings.getState();for(const i of Array.from(t)){const t=i;s(e.align)&&(t.align=e.align),s(e.position)&&(t.position=e.position),s(e.size)&&(t.size=e.size),s(e.line)&&(t.line=e.line)}}htmlTextTracksAsArray(t=!1){l(this.video);const e=[...this.video.textTracks];return t?e:e.filter(U.isHealthyTrack)}htmlTextTrackToITextTrack(t){const{language:e,label:i}=t,s=""!==t.id?t.id:(t=>["__",t.language,t.label].join("|"))(t);return this.externalTracks.has(s)?{id:s,type:"external",language:e,label:i,url:this.externalTracks.get(s).url}:{id:s,type:"internal",language:e,label:i}}static isHealthyTrack(t){return"metadata"!==t.kind&&(""!==t.id||""!==t.label||""!==t.language)}setExternal(t){t.filter((({id:t})=>!this.externalTracks.has(t))).forEach((t=>this.attach(t))),Array.from(this.externalTracks.keys()).filter((e=>!t.find((t=>t.id===e)))).forEach((t=>this.detach(t)))}select(t){l(this.video);for(const e of this.htmlTextTracksAsArray(!0))s(t)&&M(e,t)?e.mode="showing":e.mode="disabled"}destroy(){if(this.subscription.unsubscribe(),this.video)for(const t of Array.from(this.video.getElementsByTagName("track"))){const e=t.getAttribute("id");e&&this.externalTracks.has(e)&&this.video.removeChild(t)}this.externalTracks.clear()}attach(t){l(this.video);const e=document.createElement("track");e.setAttribute("src",t.url),e.setAttribute("id",t.id),t.label&&e.setAttribute("label",t.label),t.language&&e.setAttribute("srclang",t.language),this.externalTracks.set(t.id,t),this.video.appendChild(e)}detach(t){l(this.video);const e=Array.prototype.find.call(this.video.getElementsByTagName("track"),(e=>e.getAttribute("id")===t));e&&this.video.removeChild(e),this.externalTracks.delete(t)}}var V=t=>{const e=document.createElement("video");return e.setAttribute("crossorigin","anonymous"),e.setAttribute("playsinline","playsinline"),t.appendChild(e),e},H=t=>new p((e=>{let s=0;return(new i).add(r(t,"loadstart").subscribe((()=>{s=Date.now()}))).add(r(t,"loadeddata").subscribe((()=>{e.next(Date.now()-s)})))})).pipe(m());class F{constructor(t){this._buffer=[],this._source=t}fill(){this._buffer=[];const t=this._source.currentTime;for(let e=0,i=this._source.buffered.length;e<i;e++){let i=this._source.buffered.start(e);const s=this._source.buffered.end(e);i>t&&i-t<3&&(i=t),this._buffer.push({start:i,end:s,i:e})}return this._buffer.sort((function(t,e){return t.start-e.start})),this._buffer}getByTime(t){return this._buffer.find((e=>t>=e.start&&t<e.end))}getNextWithGap(t,e){const i=this.getNext(t);if(i&&i.start-t.end<(e||3))return i}getNext(t){let e=this._buffer.indexOf(t);if(~e&&this._buffer.length-1>e)return this._buffer[++e]}smartRemove(t,e,i){this._buffer.forEach((({start:s,end:a})=>{const r=s>=t&&s<e,n=a>=t&&a<e;r&&n||(r?i(e,a):n?i(s,t):s<t&&a>e?(i(e,a),i(s,t)):i(s,a))}))}destroy(){this._buffer=[]}}var q=(t,e,i=3)=>{let s=0,a=0;for(let r=0;r<t.length;r++){const n=t.start(r),o=t.end(r);if(n<=e&&e<=o){if(s=n,a=o,!i)return{start:s,end:a};for(let e=r-1;e>=0;e--)t.end(e)+i>=s&&(s=t.start(e));for(let e=r+1;e<t.length;e++)t.start(e)-i<=a&&(a=t.end(e))}}return{start:s,end:a}},G=t=>new p((e=>{let s=0;return(new i).add(r(t,"loadstart").subscribe((()=>{s=Date.now()}))).add(r(t,"loadedmetadata").subscribe((()=>{e.next(Date.now()-s)})))})).pipe(m());const Y=t=>{const e=(e,i=(()=>{}))=>r(t,e).pipe(h(i)),i=o(...["waiting","pause","canplay","canplaythrough","playing","seeked","ended"].map((e=>r(t,e)))).pipe(h((()=>t.readyState<3)),c()),s=o(r(t,"progress"),r(t,"timeupdate")).pipe(h((()=>q(t.buffered,t.currentTime)))),a=r(t,"volumechange").pipe(v(0),h((()=>({muted:t.muted,volume:t.volume})))),n=r(t,"error").pipe(h((()=>{const e=t.error;return{id:e?`MediaError#${e.code}`:"HtmlVideoError",message:e?e.message:"Error event from HTML video element"}})));return{play$:e("play"),pause$:e("pause"),canplay$:e("canplay"),ended$:e("ended"),error$:n,seeked$:e("seeked"),seeking$:e("seeking"),progress$:e("progress"),loadedMetadata$:e("loadedmetadata"),loadedData$:e("loadeddata"),timeUpdate$:e("timeupdate",(()=>t.currentTime)),durationChange$:e("durationchange",(()=>t.duration)),isBuffering$:i,currentBuffer$:s,volumeState$:a,firstBytes$:G(t),firstFrame$:H(t)}};var z,Q=(t,e,i=!1)=>{const s=t.getTransition();!i&&s&&s.to!==e||t.setState(e)};!function(t){t.INVARIANT="Invariant quality",t.Q_144P="144p",t.Q_240P="240p",t.Q_360P="360p",t.Q_480P="480p",t.Q_720P="720p",t.Q_1080P="1080p",t.Q_1440P="1440p",t.Q_2160P="2160p",t.Q_4320P="4320p"}(z||(z={}));const W={[z.Q_144P]:144,[z.Q_240P]:240,[z.Q_360P]:360,[z.Q_480P]:480,[z.Q_720P]:720,[z.Q_1080P]:1080,[z.Q_1440P]:1440,[z.Q_2160P]:2160,[z.Q_4320P]:4320},J=(t,e)=>W[t]>W[e],j=(t,e)=>W[t]<W[e],X=Object.keys(W).sort(((t,e)=>j(t,e)?-1:1)),K=({width:t,height:e},i)=>((t,e=.02)=>[...X].find((i=>W[i]*(1+e)>=t)))(Math.min(t,e),i),Z=t=>t===z.INVARIANT;let tt=!1,et={};const it=t=>{t(et)},st=(t,e)=>{var i;tt&&(et.meta=null!==(i=et.meta)&&void 0!==i?i:{},et.meta[t]=e)};class at{constructor(t){this.name=t}next(t){var e,i;if(!tt)return;et.series=null!==(e=et.series)&&void 0!==e?e:{};const s=null!==(i=et.series[this.name])&&void 0!==i?i:[];s.push([Date.now(),t]),et.series[this.name]=s}}const rt=new at("best_bitrate"),nt=(t,{container:e,throughput:i,tuning:a,forwardBufferHealth:r})=>{var n,o;const d=a.usePixelRatio&&null!==(n=window.devicePixelRatio)&&void 0!==n?n:1,h=a.limitByContainer&&e&&e.width>0&&e.height>0&&{width:e.width*d*a.containerSizeFactor,height:e.height*d*a.containerSizeFactor},u=h&&K(h,0),c=t.filter((t=>!Z(t.quality))).sort(((t,e)=>J(t.quality,e.quality)?-1:1)),l=c.filter((t=>{const e=!u||j(t.quality,u),n=!(s(i)&&isFinite(i)&&s(t.bitrate))||i>=t.bitrate*(o=null!=r?r:.5,d=a.bitrateFactorAtEmptyBuffer,(a.bitrateFactorAtFullBuffer-d)*Math.pow(2,-10*o)+d);var o,d;return e&&n}))[0];return l&&l.bitrate&&rt.next(l.bitrate),null!==(o=null!=l?l:c[c.length-1])&&void 0!==o?o:t[0]};var ot=(t,e)=>{let i=0;for(let s=0;s<t.length;s++){const a=1e3*t.start(s),r=1e3*t.end(s);a<=e&&e<=r&&(i=r)}return Math.max(i-e,0)},dt=t=>new URL(t).hostname;const ht=(t,e=300)=>window.ResizeObserver?new p((i=>{const a=new ResizeObserver(E((t=>{const e=t[0];if(!e)return;let a,r;e.contentBoxSize&&e.contentBoxSize[0]?(r=e.contentBoxSize[0].blockSize,a=e.contentBoxSize[0].inlineSize):e.contentRect&&(a=e.contentRect.width,r=e.contentRect.height),s(a)&&s(r)&&i.next({width:a,height:r})}),e));return a.observe(t),()=>a.disconnect()})):new p((e=>{const{width:i,height:s}=t.getBoundingClientRect();e.next({width:i,height:s})}));class ut{constructor(t){this.transitionStarted$=new e,this.transitionEnded$=new e,this.transitionUpdated$=new e,this.forceChanged$=new e,this.stateChangeStarted$=o(this.transitionStarted$,this.transitionUpdated$),this.stateChangeEnded$=o(this.transitionEnded$,this.forceChanged$),this.state=t}setState(t){const e=this.transition,i=this.state;this.transition=void 0,this.state=t,e?e.to===t?this.transitionEnded$.next(e):this.forceChanged$.next({from:e.from,to:t,canceledTransition:e}):this.forceChanged$.next({from:i,to:t,canceledTransition:e})}startTransitionTo(t){const e=this.transition,i=this.state;i===t||s(e)&&e.to===t||(this.state=t,e?(this.transition={from:e.from,to:t,canceledTransition:e},this.transitionUpdated$.next(this.transition)):(this.transition={from:i,to:t},this.transitionStarted$.next(this.transition)))}getTransition(){return this.transition}getState(){return this.state}}var ct;!function(t){t[t.HEADER=0]="HEADER",t[t.PARAM=1]="PARAM"}(ct||(ct={}));const lt=(t,e,i,s=ct.HEADER,a,r)=>R(void 0,void 0,void 0,(function*(){var o,d,h,u;const c=new Headers(null===(o=null==r?void 0:r.fetchInit)||void 0===o?void 0:o.headers);let l=t;switch(s){case ct.HEADER:c.append("Range",`${e}-${i}`);break;case ct.PARAM:{const t=new URL(l,location.href);t.searchParams.append("bytes",`${e}-${i}`),l=t.toString();break}default:n(s)}const p=yield fetch(l,Object.assign(Object.assign({},null!==(d=null==r?void 0:r.fetchInit)&&void 0!==d?d:{}),{headers:c}));if(!p.ok||!p.body)return Promise.reject(new Error(`Fetch error ${p.status}: ${p.statusText}`));const[m,v]=p.body.tee(),S=m.getReader();null===(h=null==r?void 0:r.throughputEstimator)||void 0===h||h.stream$.next(v);const f=parseInt(null!==(u=p.headers.get("Content-Length"))&&void 0!==u?u:"",10);let g=0;const b=new ArrayBuffer(f),T=new Uint8Array(b),y=new DataView(b),E=({done:t,value:e})=>R(void 0,void 0,void 0,(function*(){t?null==a||a(y,g):e&&(T.set(e,g),g+=e.byteLength,null==a||a(y,g),yield null==S?void 0:S.read().then(E))}));return yield null==S?void 0:S.read().then(E),b})),pt=t=>{if(!(t instanceof DOMException)||"AbortError"!==t.name&&20!==t.code)throw t};var mt,vt;!function(t){t[t.EBML=440786851]="EBML",t[t.EBMLVersion=17030]="EBMLVersion",t[t.EBMLReadVersion=17143]="EBMLReadVersion",t[t.EBMLMaxIDLength=17138]="EBMLMaxIDLength",t[t.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",t[t.DocType=17026]="DocType",t[t.DocTypeVersion=17031]="DocTypeVersion",t[t.DocTypeReadVersion=17029]="DocTypeReadVersion",t[t.Void=236]="Void",t[t.Segment=408125543]="Segment",t[t.SeekHead=290298740]="SeekHead",t[t.Seek=19899]="Seek",t[t.SeekID=21419]="SeekID",t[t.SeekPosition=21420]="SeekPosition",t[t.Info=357149030]="Info",t[t.TimestampScale=2807729]="TimestampScale",t[t.Duration=17545]="Duration",t[t.Tracks=374648427]="Tracks",t[t.Chapters=272869232]="Chapters",t[t.Cluster=524531317]="Cluster",t[t.Attachments=423732329]="Attachments",t[t.Tags=307544935]="Tags",t[t.Cues=475249515]="Cues",t[t.CuePoint=187]="CuePoint",t[t.CueTime=179]="CueTime",t[t.CueTrackPositions=183]="CueTrackPositions",t[t.CueTrack=247]="CueTrack",t[t.CueClusterPosition=241]="CueClusterPosition",t[t.CueRelativePosition=240]="CueRelativePosition",t[t.CueDuration=178]="CueDuration",t[t.CueBlockNumber=21368]="CueBlockNumber",t[t.CueCodecState=234]="CueCodecState",t[t.CueReference=219]="CueReference",t[t.CueRefTime=150]="CueRefTime"}(mt||(mt={})),function(t){t.SignedInteger="int",t.UnsignedInteger="uint",t.Float="float",t.String="string",t.UTF8="utf8",t.Date="date",t.Master="master",t.Binary="binary"}(vt||(vt={}));const St={[mt.EBML]:{type:vt.Master},[mt.EBMLVersion]:{type:vt.UnsignedInteger},[mt.EBMLReadVersion]:{type:vt.UnsignedInteger},[mt.EBMLMaxIDLength]:{type:vt.UnsignedInteger},[mt.EBMLMaxSizeLength]:{type:vt.UnsignedInteger},[mt.DocType]:{type:vt.String},[mt.DocTypeVersion]:{type:vt.UnsignedInteger},[mt.DocTypeReadVersion]:{type:vt.UnsignedInteger},[mt.Void]:{type:vt.Binary},[mt.Segment]:{type:vt.Master},[mt.SeekHead]:{type:vt.Master},[mt.Seek]:{type:vt.Master},[mt.SeekID]:{type:vt.Binary},[mt.SeekPosition]:{type:vt.UnsignedInteger},[mt.Info]:{type:vt.Master},[mt.TimestampScale]:{type:vt.UnsignedInteger},[mt.Duration]:{type:vt.Float},[mt.Tracks]:{type:vt.Master},[mt.Chapters]:{type:vt.Master},[mt.Cluster]:{type:vt.Master},[mt.Attachments]:{type:vt.Master},[mt.Tags]:{type:vt.Master},[mt.Cues]:{type:vt.Master},[mt.CuePoint]:{type:vt.Master},[mt.CueTime]:{type:vt.UnsignedInteger},[mt.CueTrackPositions]:{type:vt.Master},[mt.CueTrack]:{type:vt.UnsignedInteger},[mt.CueClusterPosition]:{type:vt.UnsignedInteger},[mt.CueRelativePosition]:{type:vt.UnsignedInteger},[mt.CueDuration]:{type:vt.UnsignedInteger},[mt.CueBlockNumber]:{type:vt.UnsignedInteger},[mt.CueCodecState]:{type:vt.UnsignedInteger},[mt.CueReference]:{type:vt.Master},[mt.CueRefTime]:{type:vt.UnsignedInteger}},ft=t=>{const e=t.getUint8(0);let i=0;128&e?i=1:64&e?i=2:32&e?i=3:16&e&&(i=4);const s=gt(t,i),a=s in St,r=a?St[s].type:vt.Binary,n=t.getUint8(i);let o=0;128&n?o=1:64&n?o=2:32&n?o=3:16&n?o=4:8&n?o=5:4&n?o=6:2&n?o=7:1&n&&(o=8);const d=new DataView(t.buffer,t.byteOffset+i+1,o-1),h=((n&255>>o)<<8*(o-1))+gt(d),u=i+o;let c;return c=u+h>t.byteLength?new DataView(t.buffer,t.byteOffset+u):new DataView(t.buffer,t.byteOffset+u,h),{tag:a?s:"0x"+s.toString(16).toUpperCase(),type:r,value:c,valueSize:h}},gt=(t,e=t.byteLength)=>{switch(e){case 1:return t.getUint8(0);case 2:return t.getUint16(0);case 3:return t.getUint16(0)<<8|t.getUint8(2);case 4:return t.getUint32(0);case 5:return t.getUint32(0)<<8|t.getUint8(4);case 6:return t.getUint32(0)<<16|t.getUint16(4);case 7:return t.getUint32(0)<<32|t.getUint16(4)<<8|t.getUint8(6);case 8:return t.getUint32(0)<<32|t.getUint32(4)}return 0},bt=(t,e)=>{switch(e){case vt.SignedInteger:return t.getInt8(0);case vt.UnsignedInteger:return gt(t);case vt.Float:return 4===t.byteLength?t.getFloat32(0):t.getFloat64(0);case vt.String:return new TextDecoder("ascii").decode(t);case vt.UTF8:return new TextDecoder("utf-8").decode(t);case vt.Date:return new Date(Date.UTC(2001,0)+t.getInt8(0)).getTime();case vt.Master:case vt.Binary:return t;default:n(e)}},Tt=(t,e)=>{let i=0;for(;i<t.byteLength;){const s=new DataView(t.buffer,t.byteOffset+i),a=ft(s);if(!e(a))return;a.type===vt.Master&&Tt(a.value,e),i=a.value.byteOffset-t.byteOffset+a.valueSize}},yt=[mt.Info,mt.SeekHead,mt.Tracks,mt.Chapters,mt.Cluster,mt.Cues,mt.Attachments,mt.Tags],Et=(t,e=0,i)=>R(void 0,void 0,void 0,(function*(){const{from:s,to:a}=t.initRange;let r,n,o=s,d=a,h=!1;t.indexRange&&(r=t.indexRange.from,n=t.indexRange.to,h=a+1===r,h&&(o=Math.min(r,s),d=Math.max(n,a))),o=Math.min(o,0),d+=e;const u=yield lt(t.url,o,d,ct.PARAM,void 0,{throughputEstimator:i}),c=new DataView(u,s-o,a-o);if(!(t=>{if(t.getUint32(0)!==mt.EBML)return!1;let e,i,s;const a=ft(t);return Tt(a.value,(({tag:t,type:a,value:r})=>(t===mt.EBMLReadVersion?e=bt(r,a):t===mt.DocType?i=bt(r,a):t===mt.DocTypeReadVersion&&(s=bt(r,a)),!0))),(void 0===e||e<=1)&&void 0!==i&&"webm"===i&&(void 0===s||s<=2)})(c))throw new Error("Not a valid webm file");const l=$t(c);let p;if(h&&void 0!==r&&void 0!==n)p=new DataView(u,r-o,n-r);else{if(void 0===l.cuesSeekPosition)throw new ReferenceError("No way to load representation index");{const e=l.segmentStart+l.cuesSeekPosition,i=1048576,s=yield lt(t.url,e,e+i,ct.PARAM);p=new DataView(s)}}const m=Pt(p,l);return{dataView:new DataView(u),init:l,segments:m}})),$t=t=>{let e,i,s,a,r,n,o=!1,d=!1,h=!1;return Tt(t,(({tag:t,type:u,value:c,valueSize:l})=>{if(t===mt.SeekID){const t=bt(c,u);n=gt(t)}else t!==mt.SeekPosition&&(n=void 0);return t===mt.Segment?(e=c.byteOffset,i=c.byteOffset+l):t===mt.Info?o=!0:t===mt.SeekHead?d=!0:t===mt.TimestampScale?s=bt(c,u):t===mt.Duration?a=bt(c,u):t===mt.SeekPosition&&n===mt.Cues?r=bt(c,u):o&&d&&yt.includes(t)&&(h=!0),!h})),l(e,"Failed to parse webm Segment start"),l(i,"Failed to parse webm Segment end"),l(a,"Failed to parse webm Segment duration"),s=null!=s?s:1e6,{segmentStart:Math.round(e/1e9*s*1e3),segmentEnd:Math.round(i/1e9*s*1e3),timeScale:s,segmentDuration:Math.round(a/1e9*s*1e3),cuesSeekPosition:r}},Pt=(t,e)=>{let i=!1,a=!1;const r=t=>s(t.time)&&s(t.position),n=[];let o;return Tt(t,(({tag:t,type:e,value:s})=>{switch(t){case mt.Cues:i=!0;break;case mt.CuePoint:o&&r(o)&&n.push(o),o={};break;case mt.CueTime:o&&(o.time=bt(s,e));break;case mt.CueTrackPositions:break;case mt.CueClusterPosition:o&&(o.position=bt(s,e));break;default:i&&yt.includes(t)&&(a=!0)}return!(i&&a)})),o&&r(o)&&n.push(o),n.map(((t,i)=>{const{time:s,position:a}=t,r=n[i+1];return{status:C.NONE,time:{from:s,to:r?r.time:e.segmentDuration},byte:{from:e.segmentStart+a,to:r?e.segmentStart+r.position-1:e.segmentEnd-1}}}))};class kt{constructor(s,a,r,{throughputEstimator:n,tuning:o}){this.ended$=new t(!1),this.playingRepresentation$=new t(void 0),this.error$=new e,this.subscription=new i,this.abortController=new AbortController,this.throughputEstimator=n,this.tuning=o,this.initData=new Map,this.segments=new Map,this.representations=new Map(r.map((t=>[t.id,t]))),this.kind=s,this.mediaSource=a,this.sourceBuffer=null,this.segmentDownloadPromise=Promise.resolve()}startWith(t){return R(this,void 0,void 0,(function*(){const e=this.representations.get(t);l(e,`Cannot find representation ${t}`);const i=Math.ceil(1e3*e.bitrate/8*(this.tuning.extraInitSize/1e3)*1.1);this.playingRepresentationId=t,this.downloadingRepresentationId=t,this.sourceBuffer=this.mediaSource.addSourceBuffer(`${e.mime}; codecs="${e.codecs}"`),this.subscription.add(r(this.sourceBuffer,"updateEnd").subscribe((()=>this.checkEjectedSegments()),(t=>this.error$.next({id:"SegmentEjection",message:"Error when trying to clear segments ejecte by browser",thrown:t})))),this.subscription.add(r(this.sourceBuffer,"error").subscribe((t=>this.error$.next({id:"SourceBuffer",message:"SourceBuffer Error event fired",thrown:t}))));const{dataView:s,segments:a}=yield Et(e,i,this.throughputEstimator),n=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength-i);this.initData.set(t,n);const o=a.filter((t=>t.byte.from>=s.byteOffset&&t.byte.to<s.byteOffset+s.byteLength)),d=o.at(-1),h=new DataView(s.buffer,s.byteOffset,o.length&&d?Math.min(d.byte.to-s.byteOffset+1,s.byteLength):s.byteLength-i);yield this.appendDataToBuffer(h),this.segments.set(t,a.map((t=>Object.assign(Object.assign({},t),{status:t.byte.from>=s.byteOffset&&t.byte.to<s.byteOffset+s.byteLength?C.FED:C.NONE})))),this.maintain(0)}))}switchTo(t){var e;return R(this,void 0,void 0,(function*(){if(t===this.downloadingRepresentationId)return;let i=this.initData.get(t);i||(yield this.loadAllInits(),i=this.initData.get(t)),l(i,`No init buffer for ${t}`),l(this.sourceBuffer),this.abortController.abort(),this.abortController=new AbortController;try{this.sourceBuffer.abort()}catch(t){this.error$.next({id:"SourceBufferAbort",message:"SourceBuffer.abort() threw",thrown:t})}yield this.appendDataToBuffer(i),s(this.playingRepresentationId)&&(null===(e=this.segments.get(this.playingRepresentationId))||void 0===e||e.forEach((t=>{t.status===C.FED&&(t.status=C.NONE)}))),this.downloadingRepresentationId=t}))}maintain(t){return R(this,void 0,void 0,(function*(){if(a(this.downloadingRepresentationId)||a(this.playingRepresentationId)||a(this.sourceBuffer)||this.ended$.getValue())return;const e=this.representations.get(this.downloadingRepresentationId),i=this.segments.get(this.downloadingRepresentationId);l(e),l(i);const s=i.find((e=>t>=e.time.from&&t<e.time.to));let r=t;if(this.playingRepresentationId!==this.downloadingRepresentationId){const e=ot(this.sourceBuffer.buffered,t);r=t+Math.min(e,this.tuning.representationSwitchForwardBufferGap)}const n=this.selectForwardBufferSegments(i,r);n.length&&(yield this.loadSegments(n,e)),this.loadAllInitsPromise||!s||s.status!==C.FED||n.length||this.loadAllInits().catch((t=>this.error$.next({id:"InitDownload",message:"Error when trying to load all inits",thrown:t})));const o=i.at(-1);o&&s===o&&o.status===C.FED&&this.ended$.next(!0)}))}destroy(){this.initData.clear(),this.segments.clear(),this.representations.clear(),this.subscription.unsubscribe(),this.sourceBuffer&&"open"===this.mediaSource.readyState&&(this.sourceBuffer.abort(),this.mediaSource.removeSourceBuffer(this.sourceBuffer)),this.abortController.abort()}selectForwardBufferSegments(t,e){const i=t.findIndex((({status:t,time:{from:i,to:s}})=>t===C.NONE&&(i>e||i<=e&&s>=e)&&s<=e+this.tuning.forwardBufferTarget));if(-1===i)return[];let s=0;const a=[];for(let e=i;e<t.length&&s<=this.tuning.segmentRequestSize;e++){const i=t[e];s+=i.byte.to+1-i.byte.from,i.status===C.NONE&&a.push(i)}return a}loadSegments(t,e){return R(this,void 0,void 0,(function*(){if(!t.length)return;const i=t.at(0).byte.from,s=t.at(-1).byte.to;for(const e of t)e.status=C.DOWNLOADING;return this.segmentDownloadPromise=this.segmentDownloadPromise.then((()=>R(this,void 0,void 0,(function*(){var a;const r=yield lt(e.url,i,s,ct.PARAM,((e,s)=>{for(const a of t)if(a.status===C.DOWNLOADING&&a.byte.from-i>=0&&a.byte.to+1-i<=s){a.status=C.DOWNLOADED;const t=new DataView(e.buffer,e.byteOffset+a.byte.from-i,a.byte.to+1-a.byte.from);this.appendDataToBuffer(t).then((()=>{this.playingRepresentationId=this.downloadingRepresentationId,this.playingRepresentation$.next(this.playingRepresentationId),a.status=C.FED}))}}),{throughputEstimator:this.throughputEstimator,fetchInit:{signal:this.abortController.signal}}),n=t.at(-1),o=null===(a=this.segments.get(e.id))||void 0===a?void 0:a.at(-1);if(n&&o&&n.status===C.DOWNLOADING&&n===o){n.status=C.DOWNLOADED;const t=new DataView(r,n.byte.from-i);this.appendDataToBuffer(t).then((()=>{this.playingRepresentationId=this.downloadingRepresentationId,this.playingRepresentation$.next(this.playingRepresentationId),n.status=C.FED}))}})))).catch((e=>{for(const e of t)e.status===C.DOWNLOADING&&(e.status=C.NONE);pt(e)})).catch((t=>this.error$.next({id:"SegmentDownload",message:"Error when fetching segments",thrown:t}))),this.segmentDownloadPromise}))}loadAllInits(){return R(this,void 0,void 0,(function*(){return this.loadAllInitsPromise||(this.loadAllInitsPromise=Promise.all(Array.from(this.representations.entries()).map((([t,e])=>this.initData.has(t)?Promise.resolve():Et(e).then((({dataView:e,segments:i})=>{const s=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);this.initData.set(t,s),this.segments.set(t,i)}))))).then(void 0)),this.loadAllInitsPromise}))}appendDataToBuffer(t){return R(this,void 0,void 0,(function*(){if(l(this.sourceBuffer),this.sourceBuffer.updating)yield kt.waitForBufferUpdate(this.sourceBuffer),yield this.appendDataToBuffer(t);else{try{this.sourceBuffer.appendBuffer(t)}catch(t){this.error$.next({id:"AppendBuffer",message:"Error appending data to buffer",thrown:t})}yield kt.waitForBufferUpdate(this.sourceBuffer)}}))}checkEjectedSegments(){if(a(this.sourceBuffer)||a(this.playingRepresentationId))return;const t=this.segments.get(this.playingRepresentationId);l(t);const e=[];for(let t=0;t<this.sourceBuffer.buffered.length;t++){const i=1e3*this.sourceBuffer.buffered.start(t),s=this.sourceBuffer.buffered.end(t),a=1e3*(s%1>.9?Math.round(s):s);e.push({from:i,to:a})}for(const i of t){const t=e.some((t=>t.from<=i.time.from&&t.to>=i.time.to));i.status!==C.FED||t||(i.status=C.NONE)}}static waitForBufferUpdate(t){return R(this,void 0,void 0,(function*(){return new Promise((e=>t?t.addEventListener("update",(()=>e())):e()))}))}}const wt=["timeupdate","progress","play","seeked","stalled"];var At,Dt;!function(t){t.NONE="none",t.MANIFEST_LOADED="manifest_loaded",t.REPRESENTATION_SELECTED="representation_selected"}(At||(At={}));class _t{constructor(s){this.element=null,this.source=null,this.manifest=null,this.subscription=new i,this.state$=new ut(At.NONE),this.currentVideoRepresentation$=new t(void 0),this.error$=new e,this.forceEnded$=new e,this.tick=()=>{var t,e;if(!this.element)return;const i=1e3*this.element.currentTime;null===(t=this.videoBufferManager)||void 0===t||t.maintain(i),null===(e=this.audioBufferManager)||void 0===e||e.maintain(i)},this.throughputEstimator=s.throughputEstimator,this.tuning=s.tuning}initManifest(t,e){return R(this,void 0,void 0,(function*(){this.element=t,this.subscription.add(r(t,"waiting").subscribe((()=>{t.duration-t.currentTime<this.tuning.endGapTolerance/1e3&&this.forceEnded$.next()}),(t=>this.error$.next({id:"ForceEnd",message:"Error when forcing stream end",thrown:t})))),this.state$.startTransitionTo(At.MANIFEST_LOADED);const i=yield(s=e,R(void 0,void 0,void 0,(function*(){return(yield fetch(s,null==a?void 0:a.fetchInit)).text()}))).catch(pt);var s,a;return this.manifest=((t,e)=>{var i,s,a,r,n,o,d,h,u,c,l,p,m,v,S,f;const g={representations:{video:[],audio:[],text:[]}},b=(new DOMParser).parseFromString(t,"application/xml").children[0].children[0].children;let T=0;for(const t of b){const b=t.getAttribute("mimeType"),y=t.getAttribute("codecs"),E=null!==(i=t.getAttribute("contentType"))&&void 0!==i?i:null==b?void 0:b.split("/")[0],$=t.querySelectorAll("Representation");for(const t of $){const i=null!==(s=t.getAttribute("mimeType"))&&void 0!==s?s:b,$=null!==(r=null!==(a=t.getAttribute("codecs"))&&void 0!==a?a:y)&&void 0!==r?r:"",P=null!==(o=null!==(n=t.getAttribute("contentType"))&&void 0!==n?n:null==i?void 0:i.split("/")[0])&&void 0!==o?o:E,k=parseInt(null!==(d=t.getAttribute("width"))&&void 0!==d?d:"",10),w=parseInt(null!==(h=t.getAttribute("height"))&&void 0!==h?h:"",10),A=parseInt(null!==(u=t.getAttribute("bandwidth"))&&void 0!==u?u:"",10)/1e3,D=`${null!==(c=t.getAttribute("id"))&&void 0!==c?c:(T++).toString(10)}@${"video"===P?`${w}p`:"audio"===P?`${A}Kbps`:$}`,_=null!==(m=null===(p=null===(l=t.querySelector("BaseURL"))||void 0===l?void 0:l.textContent)||void 0===p?void 0:p.trim())&&void 0!==m?m:"",I=new URL(_,e).toString(),R=null!==(S=null===(v=t.querySelector("SegmentBase Initialization"))||void 0===v?void 0:v.getAttribute("range"))&&void 0!==S?S:"",[C,x]=R.split("-").map((t=>parseInt(t,10))),N={from:C,to:x},O=null===(f=t.querySelector("SegmentBase"))||void 0===f?void 0:f.getAttribute("indexRange"),[B,M]=O?O.split("-").map((t=>parseInt(t,10))):[],U=O?{from:B,to:M}:void 0;if(!P||!i)continue;const V={video:L.VIDEO,audio:L.AUDIO,text:L.TEXT}[P];V&&g.representations[V].push({id:D,kind:V,initRange:N,indexRange:U,bitrate:A,mime:i,codecs:$,width:k,height:w,url:I})}}return g})(null!=i?i:"",e),this.state$.setState(At.MANIFEST_LOADED),this.manifest}))}initRepresentations(t,e){return R(this,void 0,void 0,(function*(){l(this.manifest),l(this.element),this.state$.startTransitionTo(At.REPRESENTATION_SELECTED),this.source=new MediaSource,this.element.src=URL.createObjectURL(this.source);const i={throughputEstimator:this.throughputEstimator,tuning:this.tuning.dash};this.videoBufferManager=new kt(L.VIDEO,this.source,this.manifest.representations.video,i),this.audioBufferManager=new kt(L.AUDIO,this.source,this.manifest.representations.audio,i),this.subscription.add(o(this.forceEnded$,S({video:this.videoBufferManager.ended$,audio:this.audioBufferManager.ended$}).pipe(f((t=>Object.values(t).every((t=>!0===t)))))).subscribe((()=>{var t,e;if("open"===(null===(t=this.source)||void 0===t?void 0:t.readyState))try{null===(e=this.source)||void 0===e||e.endOfStream()}catch(t){this.error$.next({id:"EndOfStream",message:"Failed to end MediaSource stream",thrown:t})}}))),this.subscription.add(o(this.videoBufferManager.error$,this.audioBufferManager.error$).subscribe(this.error$)),this.subscription.add(this.videoBufferManager.playingRepresentation$.subscribe(this.currentVideoRepresentation$)),"open"!==this.source.readyState&&(yield new Promise((t=>{var e;return null===(e=this.source)||void 0===e?void 0:e.addEventListener("sourceopen",t)}))),yield Promise.all([this.videoBufferManager.startWith(t),this.audioBufferManager.startWith(e)]),this.state$.setState(At.REPRESENTATION_SELECTED);for(const t of wt)this.subscription.add(r(this.element,t).subscribe(this.tick,(t=>{this.error$.next({id:"DashVKPlayer",message:"Internal logic error",thrown:t})})));this.tick()}))}switchRepresentation(t,e){return R(this,void 0,void 0,(function*(){const i={[L.VIDEO]:this.videoBufferManager,[L.AUDIO]:this.audioBufferManager,[L.TEXT]:null}[t];return l(i),i.switchTo(e)}))}seek(t){l(this.element),l(this.videoBufferManager),l(this.audioBufferManager),this.videoBufferManager.maintain(t),this.audioBufferManager.maintain(t),this.element.currentTime=t/1e3}stop(){var t,e;this.element=null,this.source=null,this.manifest=null,this.currentVideoRepresentation$.next(void 0),null===(t=this.videoBufferManager)||void 0===t||t.destroy(),this.videoBufferManager=null,null===(e=this.audioBufferManager)||void 0===e||e.destroy(),this.audioBufferManager=null,this.state$.setState(At.NONE)}destroy(){var t;this.subscription.unsubscribe(),this.stop();for(const e of wt)null===(t=this.element)||void 0===t||t.removeEventListener(e,this.tick);this.source=null}}!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Dt||(Dt={}));const It=({id:t,width:e,height:i,bitrate:s})=>{const a=K({width:e,height:i});return a&&{id:t,quality:a,bitrate:s,size:{width:e,height:i}}},Rt=(t,e,i)=>{var s;const a=Array.from(e).sort(((t,e)=>e.bitrate-t.bitrate)).indexOf(i);return null!==(s=t.at(Math.round(t.length*a/e.length)))&&void 0!==s?s:t.at(-1)};class Lt{constructor(e){this.subscription=new i,this.videoState=new ut(Dt.STOPPED),this.elementSize$=new t(void 0),this.textTracksManager=new U,this.videoTracks=[],this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekPosition.getTransition();if(this.videoState.getTransition())return;const r=null==a?void 0:a.to;if((null==i?void 0:i.to)!==$.PAUSED&&s(r)&&t!==Dt.STOPPED&&e!==$.STOPPED&&this.seek(r),e!==$.STOPPED){if(t===Dt.STOPPED)return this.videoState.startTransitionTo(Dt.READY),void this.prepare();switch(t){case Dt.READY:return void(e===$.PAUSED?(this.videoState.setState(Dt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(Dt.PLAYING),this.playIfAllowed()));case Dt.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(Dt.PAUSED),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case Dt.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(Dt.PLAYING),this.playIfAllowed()):(null==i?void 0:i.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));default:return n(t)}}else t!==Dt.STOPPED&&(this.videoState.startTransitionTo(Dt.STOPPED),this.player.stop(),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(Dt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0))},this.params=e,this.video=V(this.params.container),this.params.output.element$.next(this.video),this.params.output.availableVideoTracks$.next([]),this.params.output.hostname$.next(dt(this.params.source.url)),this.params.output.isLive$.next(!1),this.player=new _t({throughputEstimator:this.params.dependencies.throughputEstimator,tuning:this.params.tuning}),this.subscribe()}subscribe(){const{output:t,desiredState:e}=this.params,i=Y(this.video),s=e=>{t.error$.next({id:"DashVKProvider",message:"DashVKProvider internal logic error",thrown:e})},a=(t,e)=>this.subscription.add(t.subscribe(e,s));a(i.timeUpdate$,t.position$),a(i.durationChange$,t.duration$),a(i.ended$,t.endedEvent$),a(i.error$,t.error$),a(i.isBuffering$,t.isBuffering$),a(i.currentBuffer$,t.currentBuffer$),a(i.firstBytes$,t.firstBytesEvent$),a(i.firstFrame$,t.firstFrameEvent$),this.subscription.add(i.seeked$.subscribe((()=>e.seekPosition.setState(void 0)),s)),this.subscription.add(O(this.video,e.isLooped,s)),this.subscription.add(B(this.video,e.volume,i.volumeState$,s)),this.subscription.add(i.volumeState$.subscribe(this.params.output.volume$,s)),this.subscription.add(i.play$.subscribe((()=>{this.videoState.setState(Dt.PLAYING),Q(e.playbackState,$.PLAYING)}),s)).add(i.pause$.subscribe((()=>{this.videoState.setState(Dt.PAUSED),Q(e.playbackState,$.PAUSED)}),s)).add(i.canplay$.subscribe((()=>{this.videoState.getState()===Dt.PLAYING&&this.playIfAllowed()}),s)),this.subscription.add(this.player.state$.stateChangeEnded$.pipe(f((({to:t})=>t===At.REPRESENTATION_SELECTED))).subscribe((()=>{this.videoState.setState(Dt.READY)}))),this.subscription.add(o(this.player.state$.stateChangeEnded$,e.videoTrack.stateChangeStarted$,e.autoVideoTrackSwitching.transitionStarted$,this.params.dependencies.throughputEstimator.estimation$,this.elementSize$,r(this.video,"progress")).subscribe((()=>{var t,i,s;const a=this.player.state$.getState(),r=this.player.state$.getTransition();if(a===At.NONE||!this.videoTracks.length)return;const n=a===At.MANIFEST_LOADED&&!r,o=e.autoVideoTrackSwitching.getState(),d=e.videoTrack.getState(),h=null===(t=this.videoTracks.find((({track:{id:t}})=>t===d)))||void 0===t?void 0:t.track;e.autoVideoTrackSwitching.getTransition()&&e.autoVideoTrackSwitching.setState(o);const u=ot(this.video.buffered,1e3*this.video.currentTime),c=Math.min(u/this.params.tuning.dash.forwardBufferTarget,1),p=nt(this.videoTracks.map((({track:t})=>t)),{container:this.elementSize$.getValue(),throughput:this.params.dependencies.throughputEstimator.estimation$.getValue(),tuning:this.params.tuning.autoTrackSelection,forwardBufferHealth:c});if(n){const t=null!=h?h:p,e=t&&(null===(i=this.videoTracks.find((({track:e})=>e===t)))||void 0===i?void 0:i.representation);l(e);const s=Rt(this.audioRepresentations,this.videoTracks.map((({representation:t})=>t)),e);l(s),this.player.initRepresentations(e.id,s.id)}else{const t=o?null!=p?p:h:null!=h?h:p,e=t&&(null===(s=this.videoTracks.find((({track:e})=>e===t)))||void 0===s?void 0:s.representation);if(e){const t=Rt(this.audioRepresentations,this.videoTracks.map((({representation:t})=>t)),e);this.player.switchRepresentation(L.VIDEO,e.id),t&&this.player.switchRepresentation(L.AUDIO,t.id)}}}))),this.subscription.add(this.player.currentVideoRepresentation$.pipe(c(),h((t=>{var e;return t&&(null===(e=this.videoTracks.find((({representation:{id:e}})=>e===t)))||void 0===e?void 0:e.track)}))).subscribe(t.currentVideoTrack$)),a(ht(this.video),this.elementSize$),this.textTracksManager.connect(this.video,e,t);const n=o(e.playbackState.stateChangeStarted$,e.videoTrack.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,s))}prepare(){return R(this,void 0,void 0,(function*(){const t=yield this.player.initManifest(this.video,this.params.source.url);this.videoTracks=[];for(const e of t.representations.video){const t=It(e);t&&this.videoTracks.push({track:t,representation:e})}this.audioRepresentations=Array.from(t.representations.audio).sort(((t,e)=>e.bitrate-t.bitrate)),this.params.output.availableVideoTracks$.next(this.videoTracks.map((({track:t})=>t)))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.player.seek(1e3*t)}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0),this.player.destroy()}playIfAllowed(){x(this.video).then((t=>{t||(this.videoState.setState(Dt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}}var Ct;!function(t){t[t.OFFSET_P=0]="OFFSET_P",t[t.PLAYBACK_SHIFT=1]="PLAYBACK_SHIFT"}(Ct||(Ct={}));var xt=(t,e=0,i=Ct.OFFSET_P)=>{switch(i){case Ct.OFFSET_P:return t.replace("_offset_p",0===e?"":"_"+e.toFixed(0));case Ct.PLAYBACK_SHIFT:{if(0===e)return t;const i=new URL(t);return i.searchParams.append("playback_shift",e.toFixed(0)),i.toString()}default:n(i)}return t};var Nt;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Nt||(Nt={}));class Ot{constructor(t){this.subscription=new i,this.loadMediaTimeoutSubscription=new i,this.videoState=new ut(Nt.STOPPED),this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),a=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.seekPosition.getTransition();if(this.log({message:`[syncPlayback] videoState: ${t}; videoTransition: ${JSON.stringify(e)}; desiredPlaybackState: ${i}; desiredPlaybackStateTransition: ${this.params.desiredState.playbackState.getTransition()}; seekPositionTransition: ${JSON.stringify(r)};`}),i===$.STOPPED)return void(t!==Nt.STOPPED&&(this.videoState.startTransitionTo(Nt.STOPPED),this.stop()));if(e)return;const o=null==r?void 0:r.to;if((null==a?void 0:a.to)!==$.PAUSED&&s(o)&&t!==Nt.STOPPED)return this.params.desiredState.seekPosition.setState(o),this.params.desiredState.seekPosition.startTransitionTo(void 0),void this.seek(o);switch(i){case $.PLAYING:switch(t){case Nt.PLAYING:break;case Nt.PAUSED:case Nt.READY:this.videoState.startTransitionTo(Nt.PLAYING),this.params.connection.remotePlayerController.playOrPause();break;case Nt.STOPPED:this.videoState.startTransitionTo(Nt.READY),this.prepare();break;default:n(t)}break;case $.PAUSED:switch(t){case Nt.PLAYING:this.videoState.startTransitionTo(Nt.PAUSED),this.params.connection.remotePlayerController.playOrPause();break;case Nt.PAUSED:break;case Nt.READY:this.videoState.startTransitionTo(Nt.PAUSED),this.videoState.setState(Nt.PAUSED);break;case Nt.STOPPED:this.videoState.startTransitionTo(Nt.READY),this.prepare();break;default:n(t)}break;default:n(i)}},this.params=t,this.log=this.params.dependencies.logger.createComponentLog("ChromecastProvider"),this.log({message:`constructor, format: ${t.format}`}),this.params.output.isLive$.next((t=>{switch(t){case P.MPEG:case P.DASH:case P.DASH_SEP:case P.DASH_ONDEMAND:case P.DASH_WEBM:case P.DASH_WEBM_VK:case P.HLS:case P.HLS_JS:case P.HLS_ONDEMAND:return!1;case P.HLS_LIVE:case P.DASH_LIVE:case P.DASH_LIVE_WEBM:return!0;default:return n(t)}})(t.format)),this.handleRemoteVolumeChange({volume:this.params.connection.remotePlayer.volumeLevel,muted:this.params.connection.remotePlayer.isMuted});const e=this.params.connection.session.getMediaSession();e&&this.restoreSession(e),this.subscribe()}destroy(){this.log({message:"[destroy]"}),this.subscription.unsubscribe()}subscribe(){this.subscription.add(this.loadMediaTimeoutSubscription);const t=new i;this.subscription.add(t),this.subscription.add(o(this.videoState.stateChangeStarted$.pipe(h((t=>`stateChangeStarted$ ${JSON.stringify(t)}`))),this.videoState.stateChangeEnded$.pipe(h((t=>`stateChangeEnded$ ${JSON.stringify(t)}`)))).subscribe((t=>this.log({message:`[videoState] ${t}`}))));const d=(t,e)=>this.subscription.add(t.subscribe(e));if(this.params.output.isLive$.getValue())this.params.output.position$.next(0),this.params.output.duration$.next(0);else{const i=new e;t.add(i.pipe(v(500)).subscribe((t=>{this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.params.desiredState.seekPosition.setState(void 0)})));let n=NaN;t.add(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED).subscribe((t=>{this.logRemoteEvent(t);const e=t.value;this.params.output.position$.next(e);const r=this.params.desiredState.seekPosition.getTransition();s(r)&&a(r.to)?this.params.desiredState.seekPosition.setState(void 0):Math.abs(e-n)>5&&i.next(e),n=e}))),t.add(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.DURATION_CHANGED).subscribe((t=>{this.logRemoteEvent(t),this.params.output.duration$.next(t.value)})))}d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED),(e=>{this.logRemoteEvent(e),e.value?this.handleRemoteReady():(this.handleRemoteStop(),t.unsubscribe())})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED),(t=>{this.logRemoteEvent(t),t.value?this.handleRemotePause():this.handleRemotePlay()})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED),(t=>{this.logRemoteEvent(t);const{remotePlayer:e}=this.params.connection,i=t.value,s=this.params.output.isBuffering$.getValue(),a=i===chrome.cast.media.PlayerState.BUFFERING;switch(s!==a&&this.params.output.isBuffering$.next(a),i){case chrome.cast.media.PlayerState.IDLE:!this.params.output.isLive$.getValue()&&e.duration-e.currentTime<5&&this.params.output.endedEvent$.next(),this.handleRemoteStop(),Q(this.params.desiredState.playbackState,$.STOPPED);break;case chrome.cast.media.PlayerState.PAUSED:this.handleRemotePause();break;case chrome.cast.media.PlayerState.PLAYING:this.handleRemotePlay();break;case chrome.cast.media.PlayerState.BUFFERING:break;default:n(i)}})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED),(t=>{this.logRemoteEvent(t),this.handleRemoteVolumeChange({volume:t.value})})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED),(t=>{this.logRemoteEvent(t),this.handleRemoteVolumeChange({muted:t.value})}));d(o(this.params.desiredState.playbackState.stateChangeStarted$,this.params.desiredState.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)),this.syncPlayback)}restoreSession(t){this.log({message:"restoreSession"});const{remotePlayer:e}=this.params.connection;if(t.playerState!==chrome.cast.media.PlayerState.IDLE){e.isPaused?(this.videoState.setState(Nt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):(this.videoState.setState(Nt.PLAYING),Q(this.params.desiredState.playbackState,$.PLAYING));const t=this.params.output.isLive$.getValue();this.params.output.duration$.next(t?0:e.duration),this.params.output.position$.next(t?0:e.currentTime),this.params.desiredState.seekPosition.setState(void 0)}}prepare(){const t=this.params.format;this.log({message:`[prepare] format: ${t}`});const e=this.createMediaInfo(t),i=this.createLoadRequest(e);this.loadMedia(i)}handleRemotePause(){const t=this.videoState.getState(),e=this.videoState.getTransition();(null==e?void 0:e.to)!==Nt.PAUSED&&t!==Nt.PLAYING||(this.videoState.setState(Nt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED))}handleRemotePlay(){const t=this.videoState.getState(),e=this.videoState.getTransition();(null==e?void 0:e.to)!==Nt.PLAYING&&t!==Nt.PAUSED||(this.videoState.setState(Nt.PLAYING),Q(this.params.desiredState.playbackState,$.PLAYING))}handleRemoteReady(){const t=this.videoState.getTransition();(null==t?void 0:t.to)===Nt.READY&&this.videoState.setState(Nt.READY)}handleRemoteStop(){this.videoState.getState()!==Nt.STOPPED&&this.videoState.setState(Nt.STOPPED)}handleRemoteVolumeChange(t){var e,i;const s=this.params.output.volume$.getValue(),a={volume:null!==(e=t.volume)&&void 0!==e?e:s.volume,muted:null!==(i=t.muted)&&void 0!==i?i:s.muted};a.volume===s.volume&&a.muted==a.muted||this.params.output.volume$.next(a)}seek(t){const{remotePlayer:e,remotePlayerController:i}=this.params.connection;e.currentTime=t,i.seek()}stop(){const{remotePlayerController:t}=this.params.connection;t.stop()}createMediaInfo(t){var e;const i=this.params.source;let a,r,o;switch(t){case P.MPEG:{const e=i[t];l(e);const s=Object.keys(e).sort(((t,e)=>t===e?0:t===z.INVARIANT?1:e===z.INVARIANT?-1:j(t,e)?1:-1))[0];l(s);const n=e[s];l(n),a=n,r="video/mp4",o=chrome.cast.media.StreamType.BUFFERED;break}case P.HLS:case P.HLS_ONDEMAND:{const e=i[t];l(e),a=e.url,r="application/x-mpegurl",o=chrome.cast.media.StreamType.BUFFERED;break}case P.DASH_SEP:case P.DASH_ONDEMAND:case P.DASH_WEBM_VK:case P.DASH_WEBM:{const e=i[t];l(e),a=e.url,r="application/dash+xml",o=chrome.cast.media.StreamType.BUFFERED;break}case P.HLS_LIVE:{const e=i[t];l(e),a=xt(e.url),r="application/x-mpegurl",o=chrome.cast.media.StreamType.LIVE;break}case P.DASH_LIVE_WEBM:{const e=i[t];l(e),a=e.url,r="application/dash+xml",o=chrome.cast.media.StreamType.LIVE;break}case P.HLS_JS:case P.DASH:case P.DASH_LIVE:{const t="Unsupported format for Chromecast",e=new Error(t);throw this.params.output.error$.next({id:"ChromecastProvider.createMediaInfo()",message:t,thrown:e}),e}default:return n(t)}const d=new chrome.cast.media.MediaInfo(null!==(e=this.params.meta.videoId)&&void 0!==e?e:a,r);d.contentUrl=a,d.streamType=o,d.metadata=new chrome.cast.media.GenericMediaMetadata;const{title:h,subtitle:u}=this.params.meta;return s(h)&&(d.metadata.title=h),s(u)&&(d.metadata.subtitle=u),d}createLoadRequest(t){var e;const i=new chrome.cast.media.LoadRequest(t);i.autoplay=!1;const s=this.params.desiredState.seekPosition.getTransition();return i.currentTime=s?this.params.output.isLive$.getValue()?0:null!==(e=s.to)&&void 0!==e?e:0:0,i}loadMedia(t){const e=this.params.connection.session.loadMedia(t),i=new Promise(((t,e)=>{this.loadMediaTimeoutSubscription.add(g(7e3).subscribe((()=>e("timeout(7000)"))))}));Promise.race([e,i]).then((()=>{this.log({message:`[loadMedia] completed, format: ${this.params.format}`});const t=this.params.desiredState.seekPosition;t.getTransition()&&t.setState(void 0),this.handleRemoteReady()}),(t=>{const e=`[prepare] loadMedia failed, format: ${this.params.format}, reason: ${t}`;this.log({message:e}),this.params.output.error$.next({id:"ChromecastProvider.loadMedia",message:e,thrown:t})})).finally((()=>{this.loadMediaTimeoutSubscription.unsubscribe()}))}logRemoteEvent(t){this.log({message:`[remoteEvent] ${JSON.stringify(t)}`})}}var Bt;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Bt||(Bt={}));class Mt{constructor(t){this.subscription=new i,this.videoState=new ut(Bt.STOPPED),this.trackUrls={},this.textTracksManager=new U,this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition();if(e===$.STOPPED)return void(t!==Bt.STOPPED&&(this.videoState.startTransitionTo(Bt.STOPPED),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(Bt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(this.videoState.getTransition())return;const a=this.params.desiredState.videoTrack.getTransition(),r=this.params.desiredState.seekPosition.getTransition();if(t===Bt.STOPPED)return this.videoState.startTransitionTo(Bt.READY),void this.prepare();if(a){const{currentTime:t}=this.video;return this.prepare(),void(r||this.params.desiredState.seekPosition.startTransitionTo(t))}const o=null==r?void 0:r.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(o)&&this.seek(o),t){case Bt.READY:return void(e===$.PAUSED?(this.videoState.setState(Bt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(Bt.PLAYING),this.playIfAllowed()));case Bt.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(Bt.PAUSED),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case Bt.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(Bt.PLAYING),this.playIfAllowed()):(null==i?void 0:i.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));default:return n(t)}},this.params=t,this.video=V(t.container),this.params.output.element$.next(this.video),Object.entries(this.params.source).forEach((([t,e],i)=>{const s=i.toString(10);this.trackUrls[s]={track:{quality:t,id:s},url:e}})),this.params.output.availableVideoTracks$.next(Object.values(this.trackUrls).map((({track:t})=>t))),this.params.output.isLive$.next(!1),this.subscribe()}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"MpegProvider",message:"MpegProvider internal logic error",thrown:e})},a=Y(this.video),r=(t,e)=>this.subscription.add(t.subscribe(e,i));r(a.timeUpdate$,t.position$),r(a.durationChange$,t.duration$),r(a.ended$,t.endedEvent$),r(a.error$,t.error$),r(a.isBuffering$,t.isBuffering$),r(a.currentBuffer$,t.currentBuffer$),r(a.firstBytes$,t.firstBytesEvent$),r(a.firstFrame$,t.firstFrameEvent$),this.subscription.add(a.seeked$.subscribe((()=>e.seekPosition.setState(void 0)),i)),this.subscription.add(O(this.video,e.isLooped,i)),this.subscription.add(B(this.video,e.volume,a.volumeState$,i)),this.subscription.add(a.volumeState$.subscribe(this.params.output.volume$,i)),this.subscription.add(a.play$.subscribe((()=>{this.videoState.setState(Bt.PLAYING),Q(e.playbackState,$.PLAYING)}),i)).add(a.pause$.subscribe((()=>{this.videoState.setState(Bt.PAUSED),Q(e.playbackState,$.PAUSED)}),i)).add(a.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===Bt.READY&&this.videoState.setState(Bt.READY);const e=this.params.desiredState.videoTrack.getTransition();e&&s(e.to)&&(this.params.desiredState.videoTrack.setState(e.to),this.params.output.currentVideoTrack$.next(this.trackUrls[e.to].track)),this.videoState.getState()===Bt.PLAYING&&this.playIfAllowed()}),i)),this.subscription.add(e.autoVideoTrackSwitching.stateChangeStarted$.subscribe((()=>e.autoVideoTrackSwitching.setState(!1)),i)),this.textTracksManager.connect(this.video,e,t);const n=o(e.playbackState.stateChangeStarted$,e.videoTrack.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.trackUrls={},this.video.remove(),this.params.output.element$.next(void 0)}prepare(){var t,e;const i=null!==(e=null===(t=this.params.desiredState.videoTrack.getTransition())||void 0===t?void 0:t.to)&&void 0!==e?e:this.params.desiredState.videoTrack.getState();l(i,"MpegProvider: track is not selected");const{url:s}=this.trackUrls[i];l(s,`MpegProvider: No url for ${i}`),this.video.setAttribute("src",s),this.video.load(),this.params.output.hostname$.next(dt(s))}playIfAllowed(){x(this.video).then((t=>{t||(this.videoState.setState(Bt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.video.currentTime=t}}class Ut{constructor(t,e=[],i,s,a,r){this._failoverIndex=0,this._failoverCount=0,this._xhr=null,this._retryTimeout=0,this._url=t,this._failoverHosts=e,this._completeCb=i,this._progressCb=s,this._headersCb=a,this._errorCb=r,this._request()}_request(){this._xhr=new XMLHttpRequest,this._xhr.open("GET",this._url,!0),this._xhr.overrideMimeType("text/plain; charset=x-user-defined");let t=!1;this._xhr.onreadystatechange=()=>{var e,i,s,a,r,n,o,d;if(l(this._xhr),(null===(e=this._xhr)||void 0===e?void 0:e.status)>=400)return null===(i=this._errorCb)||void 0===i||i.call(this,`Http${null===(s=this._xhr)||void 0===s?void 0:s.status}`,`XHR response code ${null===(a=this._xhr)||void 0===a?void 0:a.status}`),void this.abort();if(4!==this._xhr.readyState||0!==this._xhr.status)try{this._xhr.readyState>=2&&!t&&(t=!0,null===(r=this._headersCb)||void 0===r||r.call(this)),4===this._xhr.readyState&&(null===(n=this._completeCb)||void 0===n||n.call(this,this._xhr.response)),3===this._xhr.readyState&&(null===(o=this._progressCb)||void 0===o||o.call(this,this._xhr.response))}catch(t){throw null===(d=this._errorCb)||void 0===d||d.call(this,"XHR2CallbackError",`xhr2 callback threw ${String(t)}`,t),t}},this._xhr.onerror=()=>{var t;null===(t=this._xhr)||void 0===t||t.abort(),this._retryTimeout=window.setTimeout((()=>{var t;if(this._xhr)if(++this._failoverCount>=30)this._xhr=null,null===(t=this._errorCb)||void 0===t||t.call(this,"XHR2Failover","XHR failed, retrying failover host");else{let t;this._failoverIndex>=this._failoverHosts.length?(t=this._url,this._failoverIndex=0):(t=this._url.replace((t=>{const e=document.createElement("a");return e.href=t,e.host})(this._url),this._failoverHosts[this._failoverIndex]),this._failoverIndex++),this._xhr.open("GET",t,!0),this._xhr.send(null)}}),500)},this._xhr.send(null)}abort(){window.clearTimeout(this._retryTimeout),this._completeCb=this._progressCb=this._errorCb=void 0,this._xhr&&(this._xhr.abort(),this._xhr=null)}}class Vt{constructor(t){this._maxBufferDuration=Number.POSITIVE_INFINITY,this._isFull=!1,this._params=t,this._mediaSource=t.mediaSource,this._sourceBuffer=t.sourceBuffer,this._onDashCallback=t.onDashCallback}_appendBuffer(t,e){try{this._isFull=!1;(this._sourceBuffer.appendBuffer||this._sourceBuffer.append).bind(this._sourceBuffer)(t),null==e||e()}catch(t){if("QuotaExceededError"!==t.name)throw this._params.onError("AppendBuffer","Unknown Buffer error",t),t;{this._isFull=!0;const t=this._sourceBuffer.buffered;let e=0;for(let i=0,s=t.length;i<s;i++)e+=t.end(i)-t.start(i);e&&(this._maxBufferDuration=Math.round(e))}}}getMaxBufferDuration(){return this._maxBufferDuration}isFull(){return this._isFull}load(t,e,i,s,a,r,n){this.abort((()=>{let o=0;const d=Date.now();let h=Date.now(),u=0;const c=i-e+1,l=t=>{s(Vt._str2ua(t.substr(o))),o=t.length};this._lastXhr=new Ut(t.baseURL+"&bytes="+e+"-"+i,t.failoverHosts,(t=>{this._lastXhr=void 0,l(t);const e=Date.now()-d;this._params.onBandwidthChange({size:c,duration:e,speed:8*c/(e/1e3)}),this._onDashCallback("loading",{size:t.length,done:!0}),null==a||a()}),(t=>{t.length-o>n&&l(t);const e=t.length-u,i=Date.now()-h;u&&this._params.onBandwidthChange({size:e,duration:i,speed:8*e/(i/1e3)}),u=t.length,h=Date.now(),this._onDashCallback("loading",{size:t.length,done:!1})}),r,((t,e,i)=>this._params.onError(t,e,i)))}))}abort(t){var e;null===(e=this._lastXhr)||void 0===e||e.abort(),this._sbUpdatingStop(this._lastStreamUpdatingCallback),this._lastStreamUpdatingCallback=this._sbUpdatingWatch((()=>{this._appendPromiseUint8Array&&(this._appendBuffer(this._appendPromiseUint8Array),this._appendPromiseUint8Array=void 0),this._lastStreamUpdatingCallback=this._sbUpdatingWatch((()=>{"open"===this._mediaSource.readyState&&this._sourceBuffer.abort(),null==t||t()}))}))}_sbUpdatingWatch(t){if(this._sourceBuffer.updating){const e=()=>{try{this._sbUpdatingStop(e),this._sbUpdatingWatch(t)}catch(t){throw this._params.onError("SourceBuffer","Source Buffer update error",t),t}};return this._sourceBuffer.addEventListener("updateend",e,!1),e}t()}_sbUpdatingStop(t){t&&this._sourceBuffer.removeEventListener("updateend",t,!1)}append(t,e){this._appendPromiseUint8Array?this._appendPromiseUint8Array=Vt._concatUint8(this._appendPromiseUint8Array,t):(this._appendPromiseUint8Array=t,this._lastStreamUpdatingCallback=this._sbUpdatingWatch((()=>{this._appendPromiseUint8Array&&this._appendBuffer(this._appendPromiseUint8Array,(()=>{this._appendPromiseUint8Array=void 0,e&&this._sbUpdatingWatch(e)}))})))}endOfStream(){"open"===this._mediaSource.readyState&&this._sbUpdatingWatch((()=>this._mediaSource.endOfStream()))}static _concatUint8(t,e){const i=new Uint8Array(t.byteLength+e.byteLength);return i.set(t,0),i.set(e,t.byteLength),i}static _str2ua(t){const e=new Uint8Array(t.length);for(let i=0;i<t.length;i++)e[i]=t.charCodeAt(i);return e}remove(t,e){this._sbUpdatingWatch((()=>{!this._sourceBuffer.updating&&this._sourceBuffer.remove&&this._sourceBuffer.remove(t,e),this._maxBufferDuration=Number.POSITIVE_INFINITY}))}destroy(){var t;null===(t=this._lastXhr)||void 0===t||t.abort(),this._sbUpdatingStop(this._lastStreamUpdatingCallback),"open"===this._mediaSource.readyState&&this._sourceBuffer.abort()}}class Ht{constructor(t){var e;this._representations=[],this._appendVector={},this._cachingPaused=!1,this._duration=0,this.STREAM_END_THRESHOLD=1,this._params=t,this._video=t.video,this._buffer=t.buffer,this._onDashCallback=null!==(e=t.onDashCallback)&&void 0!==e?e:()=>{},this._config=t.config}_parseDurationFromISO8601(t){const e=(t,e)=>{const i=t?parseFloat(t.replace(",",".")):NaN;return(isNaN(i)?0:i)*e},i=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/.exec(t),s="-"===(null==i?void 0:i[1])?-1:1;e(null==i?void 0:i[2],s),e(null==i?void 0:i[3],s),e(null==i?void 0:i[4],s),e(null==i?void 0:i[5],s);return 3600*e(null==i?void 0:i[6],s)+60*e(null==i?void 0:i[7],s)+e(null==i?void 0:i[8],s)}getRepresentations(){return this._representations}attachSource(t,e){new Ut(t,e,(i=>{this.attachManifest(i,e,(t=>{const e=document.createElement("a");return e.href=t,e.origin})(t))}),void 0,void 0,((t,e,i)=>this._params.onError(t,e,i)))}attachManifest(t,e,i){const s=(new DOMParser).parseFromString(t,"text/xml").documentElement,a=(t,e)=>{const i=t.attributes.getNamedItem(e);return i?i.value:null};this._duration=this._parseDurationFromISO8601(String(a(s,"mediaPresentationDuration")));const r=[],n=[];Array.prototype.forEach.call(s.getElementsByTagName("Representation"),(t=>{var s,o,d,h,u,c,l,p,m,v,S,f,g,b,T,y,E;const $=t.getElementsByTagName("SegmentBase")[0],P=$&&a($,"indexRange").split("-"),k=$&&$.getElementsByTagName("Initialization")[0],w=k&&a(k,"range").split("-");if(!w||!P){const e=t.parentElement;if("text"===(null==e?void 0:e.getAttribute("contentType"))){const a=null!==(s=t.getAttribute("id"))&&void 0!==s?s:void 0,r=(i?i+"/":"")+(null===(u=null===(h=null===(d=null===(o=t.getElementsByTagName("BaseURL"))||void 0===o?void 0:o[0])||void 0===d?void 0:d.childNodes)||void 0===h?void 0:h[0])||void 0===u?void 0:u.data),l=null!==(c=e.getAttribute("lang"))&&void 0!==c?c:void 0;r&&n.push({id:a,url:r,language:l})}return}const A=Number(null===(l=t.attributes.getNamedItem("bandwidth"))||void 0===l?void 0:l.value),D=(i?i+"/":"")+t.getElementsByTagName("BaseURL")[0].childNodes[0].data;r.push({width:Number(null===(p=t.attributes.getNamedItem("width"))||void 0===p?void 0:p.value),height:Number(null===(m=t.attributes.getNamedItem("height"))||void 0===m?void 0:m.value),bandwidth:A,baseURL:D,failoverHosts:e,indexFrom:Number(P[0]),indexTo:Number(P[1]),initFrom:Number(w[0]),initTo:Number(w[1]),codecs:null!==(S=null===(v=t.attributes.getNamedItem("codecs"))||void 0===v?void 0:v.value)&&void 0!==S?S:void 0,mimeType:null!==(g=null===(f=t.attributes.getNamedItem("mimeType"))||void 0===f?void 0:f.value)&&void 0!==g?g:void 0,bufferSize:.1*A/8,bufferLength:.1,name:null!==(T=null===(b=t.attributes.getNamedItem("okQuality"))||void 0===b?void 0:b.value)&&void 0!==T?T:void 0,id:null!==(E=null===(y=t.attributes.getNamedItem("id"))||void 0===y?void 0:y.value)&&void 0!==E?E:void 0})})),r.length?(this._representations=r,n.forEach((({id:t,language:e,url:i})=>{const s=document.createElement("track");s.setAttribute("src",i),t&&s.setAttribute("id",t),e&&s.setAttribute("srclang",e),this._video.appendChild(s)})),this._representations.sort(((t,e)=>e.bandwidth-t.bandwidth)),this._params.onManifestReady(this._representations)):this._onDashCallback("error")}_loadInitAndSidx(t,e){if(t===this._currentRepresentation)return void(e&&e());if(t.refs)return void this._stream.abort((()=>{this._stream.append(t.initMessage,e)}));const i=Date.now();this._stream.load(t,t.initFrom,t.indexTo,(i=>{let s=t.initTo-t.initFrom+1;if(!i.byteLength)return void this._params.onError("EmptyResponse","Empty response");t.initMessage=new Uint8Array(i.buffer,0,s);const a=new DataView(i.buffer);s+=12;const r=a.getUint32(s+4,!1);s+=8;let n=a.getUint32(s,!1),o=a.getUint32(s+4,!1)+(t.indexTo+1);s+=8;const d=a.getUint16(s+2,!1);s+=4,t.refs=[];for(let e=0;e<d;e+=1){const e=o+(2147483647&a.getUint32(s,!1)),i=n+a.getUint32(s+4,!1);s+=12,t.refs.push({fromTime:n/r,toTime:i/r,fromOffset:o,toOffset:e-1}),o=e,n=i}const h=t.refs[t.refs.length-1];h.toTime-h.fromTime<.3&&t.refs.pop(),this._stream.append(t.initMessage,e)}),void 0,(()=>{this._params.onIdxRequestPing(Date.now()-i)}),t.indexTo-t.initFrom+1)}startPlay(t){const e=window.MediaSource||window.WebKitMediaSource;if(!e)return void this._params.onError("MediaSourceNotSupported","MediaSource is not supported");const i=new e;let s,a;const r=()=>{const e=this._findRef(this._video.currentTime);if(!e||this._video.paused)return;if(!this._cachingPaused&&void 0!==this._lastLoadOffset&&this._lastLoadOffset-this._video.currentTime<this._config.FRONT_CACHE_DURATION&&this._lastLoadOffset-this._video.currentTime<this._stream.getMaxBufferDuration()){const t=this._stream.isFull()?this._findBufferRangeEnd(this._video.currentTime):this._lastLoadOffset;this._loadRef(this._params.selectRepresentation(this._representations),t)}const i=this._appendVector[String(e.fromTime)];let r;i!==s&&(s=i,this._params.onRepresentationPlay(i));if(this._findRef(e.toTime)){const e=this._buffer.getByTime(this._video.currentTime);if(!e)return void this._onDashCallback("buffering");r=e.end-this._video.currentTime,r<t.bufferLength&&(this._onDashCallback("buffering"),a!==e.end&&(a=e.end,window.setTimeout((()=>{try{const t=this._buffer.getNextWithGap(e);t&&(this._video.currentTime=t.start)}catch(t){throw this._params.onError("GapSyncError",`Seek Error ${String(t)}`,t),t}}),1e3*r)))}},n=()=>{this._loopTimeout=window.setTimeout((()=>{try{r()}catch(t){throw this._params.onError("LoopError",`Dash Loop exception ${String(t)}`,t),t}n()}),250)},o=()=>{if(!this._stream)try{const e=i.addSourceBuffer(`${t.mimeType}; codecs="${t.codecs}"`);this._stream=new Vt({mediaSource:i,sourceBuffer:e,onBandwidthChange:this._params.onBandwidthChange,onError:this._params.onError,onDashCallback:this._onDashCallback})}catch(t){throw this._params.onError("DashSourceOpen",`Source open exception ${String(t)}`,t),t}this._loadInitAndSidx(t),i.duration||(i.duration=this._duration),this._loopTimeout||n(),i.removeEventListener("sourceopen",o),i.removeEventListener("webkitsourceopen",o)};i.addEventListener("sourceopen",o,!1),i.addEventListener("webkitsourceopen",o,!1),this._video&&(this._video.src=window.URL.createObjectURL(i),this._video.addEventListener("waiting",(()=>{const t=this._video&&this._video.played.length;t&&!this._video.currentTime&&this._video.loop?this._video.duration-this._video.played.end(t-1)<this.STREAM_END_THRESHOLD&&this.seek(0):this._video.duration-this._video.currentTime<this.STREAM_END_THRESHOLD&&this._stream.endOfStream()})))}_loadRef(t,e,i=!1){this._lastLoadOffset=void 0,this._loadInitAndSidx(t,(()=>{this._currentRepresentation=t;const s=this._findRef(e);if(s){if(i){this._isLastRef(s)&&e>=s.toTime&&(e=s.fromTime);const t=this._findRef(this._video.currentTime),i=Math.abs(this._video.currentTime-e),a=this._video.duration<this._config.SEEK_IN_SEGMENT_THRESHOLD/1e3||s===t||i<=this._config.SEEK_IN_SEGMENT_DELTA/1e3;this._video.currentTime=a?e:s.fromTime}this._appendVector[String(s.fromTime)]=t,this._stream.load(t,s.fromOffset,s.toOffset,((t,e)=>this._stream.append(t,e)),(()=>{this._lastLoadOffset=s.toTime,this._video.duration-this._lastLoadOffset<this.STREAM_END_THRESHOLD&&this._stream.endOfStream()}),void 0,t.bufferSize)}}))}setQualityByRepresentation(t){const e=this._buffer.getByTime(this._video.currentTime),i=this._findRef(this._video.currentTime);if(!e||!i)return;const s=.1;if(i.toTime<e.end+s){const a=this._findRef(i.toTime);a&&a.toTime<e.end+s?(this._buffer.smartRemove(i.fromTime-s,a.toTime+s,((t,e)=>this._stream.remove(t,e))),this._loadRef(t,a.toTime)):(this._buffer.smartRemove(i.fromTime-s,i.toTime+s,((t,e)=>this._stream.remove(t,e))),this._loadRef(t,i.toTime))}}setQuality(t){return this.setQualityByRepresentation(this._representations[t])}pauseCaching(){this._cachingPaused=!0}resumeCaching(){this._cachingPaused=!1}seek(t,e=!1){this._stream&&this._buffer.getByTime(t)&&!e?this._video.currentTime=t:this._loadRef(this._params.selectRepresentation(this._representations),t,!0)}updateRefsForCurrentTime(){const t=this._video.currentTime;this._stream&&!a(this._buffer.getByTime(t))||this._loadRef(this._params.selectRepresentation(this._representations),t,!1)}_findRef(t){var e;const i=null===(e=this._currentRepresentation)||void 0===e?void 0:e.refs;if(!i)return;if(Array.isArray(i)&&0===i.length)return void this._params.onError("emptyrefs","Empty refs");let s;for(let e=0;e<i.length;e++){const a=i[e];if(a.fromTime<=t&&a.toTime>t)return a;a.fromTime>t&&(!s||a.fromTime<s.fromTime)&&(s=a)}if(!s){const e=i[i.length-1];if(t>e.toTime)return e}return s}_isLastRef(t){var e;const i=null===(e=this._currentRepresentation)||void 0===e?void 0:e.refs;if(!i)return!1;const s=i[i.length-1];return t.fromTime===s.fromTime}_findBufferRangeEnd(t){let e=this._video.buffered.length;for(;e-- >0;){const i=this._video.buffered.start(e),s=this._video.buffered.end(e);if(t>i&&t<s)return Math.round(10*s)/10}return t}destroy(){this._stream&&this._stream.destroy(),clearTimeout(this._loopTimeout),this._loopTimeout=void 0}}var Ft;!function(t){t.STOPPED="stopped",t.MANIFEST_LOADED="manifest-loaded",t.INITIAL_REPRESENTATION_SELECTED="initial-representation-selected",t.METADATA_LOADED="metadata-loaded",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Ft||(Ft={}));const qt=[Ft.PAUSED,Ft.PLAYING];class Gt{constructor(a){this.videoState=new ut(Ft.STOPPED),this.subscription=new i,this.representations$=new t([]),this.currentRepresentation$=new t(void 0),this.textTracksManager=new U,this.elementSize$=new t(void 0),this.dashLiteEvents={idxRequestPing$:new e,manifestReady$:new e,representationPlay$:new e,error$:new e},this.handleManifestReady=t=>{var e,i;const s=[];for(const a of t){const t=null!==(i=null!==(e=a.name)&&void 0!==e?e:a.id)&&void 0!==i?i:a.height.toString(10),r=K(a),n=a.bandwidth/1e3,o={width:a.width,height:a.height};if(!r)continue;const d={id:t,quality:r,bitrate:n,size:o};s.push({track:d,representation:a})}this.representations$.next(s),this.params.output.availableVideoTracks$.next(s.map((({track:t})=>t))),this.videoState.setState(Ft.MANIFEST_LOADED)},this.handleRepresentationPlay=t=>{var e;const i=null===(e=this.representations$.getValue().find((({representation:e})=>e===t)))||void 0===e?void 0:e.track;if(i){this.params.output.currentVideoTrack$.next(i);this.params.desiredState.videoTrack.getTransition()&&this.params.desiredState.videoTrack.setState(i.id)}},this.selectRepresentation=()=>{const t=this.currentRepresentation$.getValue();return l(t,"Can't select representation. something went wrong"),t},this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),a=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.seekPosition.getTransition();if(this.log({message:`[syncPlayback] videoState: ${t}; videoTransition: ${JSON.stringify(e)}; desiredPlaybackState: ${i}; seekPositionTransition: ${JSON.stringify(r)};`}),i===$.STOPPED)return void(t!==Ft.STOPPED&&(this.videoState.startTransitionTo(Ft.STOPPED),this.dash.destroy(),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(Ft.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(e)return;const o=null==r?void 0:r.to;switch((null==a?void 0:a.to)!==$.PAUSED&&s(o)&&qt.includes(t)&&this.seek(o),t){case Ft.STOPPED:return this.videoState.startTransitionTo(Ft.MANIFEST_LOADED),void this.prepare();case Ft.MANIFEST_LOADED:return void this.videoState.startTransitionTo(Ft.INITIAL_REPRESENTATION_SELECTED);case Ft.INITIAL_REPRESENTATION_SELECTED:return this.videoState.startTransitionTo(Ft.METADATA_LOADED),void this.dash.startPlay(this.selectRepresentation());case Ft.METADATA_LOADED:return this.videoState.startTransitionTo(Ft.READY),void this.dash.seek(null!=o?o:0);case Ft.READY:return void(i===$.PAUSED?(this.videoState.setState(Ft.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):i===$.PLAYING&&(this.videoState.startTransitionTo(Ft.PLAYING),this.playIfAllowed()));case Ft.PLAYING:return void(i===$.PAUSED?(this.videoState.startTransitionTo(Ft.PAUSED),this.video.pause()):(null==a?void 0:a.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case Ft.PAUSED:return void(i===$.PLAYING?(this.videoState.startTransitionTo(Ft.PLAYING),this.playIfAllowed()):(null==a?void 0:a.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));default:return n(t)}},this.params=a,this.log=this.params.dependencies.logger.createComponentLog("DashProvider"),o(this.videoState.stateChangeStarted$.pipe(h((t=>({transition:t,type:"start"})))),this.videoState.stateChangeEnded$.pipe(h((t=>({transition:t,type:"end"}))))).subscribe((({transition:t,type:e})=>{this.log({message:`[videoState change] ${e}: ${JSON.stringify(t)}`})})),this.video=V(a.container),this.params.output.element$.next(this.video),this.params.output.isLive$.next(!1),"url"===this.params.source.type&&this.params.output.hostname$.next(dt(this.params.source.url)),this.buffer=new F(this.video),this.dash=new Ht({video:this.video,buffer:this.buffer,selectRepresentation:this.selectRepresentation,onIdxRequestPing:t=>this.dashLiteEvents.idxRequestPing$.next(t),onManifestReady:t=>this.dashLiteEvents.manifestReady$.next(t),onRepresentationPlay:t=>this.dashLiteEvents.representationPlay$.next(t),onBandwidthChange:t=>this.params.dependencies.throughputEstimator.rawSpeed$.next({size:t.size,time:t.duration}),onError:(t,e,i)=>{this.log({message:`[DashLite error], ${t}`}),this.dashLiteEvents.error$.next({id:t,message:e,thrown:i})},config:{SEEK_IN_SEGMENT_THRESHOLD:this.params.tuning.dashSeekInSegmentDurationThreshold,SEEK_IN_SEGMENT_DELTA:this.params.tuning.dashSeekInSegmentAlwaysSeekDelta,FRONT_CACHE_DURATION:this.params.config.cacheDuration/1e3}}),this.subscribe()}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"DashProvider",message:"DashProvider internal logic error",thrown:e})},r=Y(this.video),n=(t,e)=>this.subscription.add(t.subscribe(e,i));n(r.timeUpdate$,t.position$),n(r.durationChange$,t.duration$),n(r.ended$,t.endedEvent$),n(r.error$,t.error$),n(r.isBuffering$,t.isBuffering$),n(r.firstFrame$,t.firstFrameEvent$),this.subscription.add(r.seeking$.subscribe((()=>{a(this.params.desiredState.seekPosition.getTransition())&&(this.videoState.getState()===Ft.PLAYING||this.videoState.getState()===Ft.PAUSED)&&this.dash.updateRefsForCurrentTime()}))),this.subscription.add(r.seeked$.subscribe((()=>e.seekPosition.setState(void 0)))),this.subscription.add(O(this.video,e.isLooped,i)),this.subscription.add(B(this.video,e.volume,r.volumeState$,i)),this.subscription.add(r.volumeState$.subscribe(this.params.output.volume$)),this.textTracksManager.connect(this.video,e,t),n(ht(this.video),this.elementSize$),this.subscription.add(r.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===Ft.READY&&this.videoState.setState(Ft.READY)}),i)).add(r.pause$.subscribe((()=>{this.videoState.setState(Ft.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)}))).add(r.play$.subscribe((()=>{this.videoState.setState(Ft.PLAYING),Q(this.params.desiredState.playbackState,$.PLAYING)}),i)).add(r.loadedMetadata$.subscribe((()=>{this.videoState.setState(Ft.METADATA_LOADED)}),i)).add(r.currentBuffer$.subscribe((e=>{this.buffer.fill(),t.currentBuffer$.next(e)}),i)).add(this.dashLiteEvents.error$.pipe(h((({id:t,message:e,thrown:i})=>({id:`DashLite_${t}`,message:e,thrown:i})))).subscribe(this.params.output.error$)).add(o(this.params.desiredState.videoTrack.transitionStarted$,this.params.desiredState.autoVideoTrackSwitching.transitionStarted$,this.representations$,this.params.dependencies.throughputEstimator.estimation$,this.params.output.element$,this.elementSize$).pipe(h((()=>{var t,e;const i=this.representations$.getValue(),a=this.params.desiredState.autoVideoTrackSwitching.getState(),r=this.params.desiredState.autoVideoTrackSwitching.getTransition(),n=this.params.desiredState.videoTrack.getState(),o=this.params.desiredState.videoTrack.getTransition(),d=this.params.dependencies.throughputEstimator.estimation$.getValue(),h=this.elementSize$.getValue(),u=r?r.to:a;let c;if(r&&this.params.desiredState.autoVideoTrackSwitching.setState(r.to),!u&&s(n))c=n;else{const e=ot(this.video.buffered,1e3*this.video.currentTime),s=Math.min(e/this.params.tuning.dash.forwardBufferTarget,1);c=o?o.to:null===(t=nt(i.map((({track:t})=>t)),{container:h,throughput:d,tuning:this.params.tuning.autoTrackSelection,forwardBufferHealth:s}))||void 0===t?void 0:t.id}return s(c)?null===(e=i.find((({track:t})=>t.id===c)))||void 0===e?void 0:e.representation:void 0})),c()).subscribe(this.currentRepresentation$,i)).add(S({needToSelectRepresentation:this.videoState.stateChangeStarted$.pipe(f((t=>t.to===Ft.INITIAL_REPRESENTATION_SELECTED))),currentRepresentationSelected:this.currentRepresentation$.pipe(f(s))}).pipe(m()).subscribe((()=>this.videoState.setState(Ft.INITIAL_REPRESENTATION_SELECTED)),i)).add(this.currentRepresentation$.pipe(f(s),c()).subscribe((t=>{this.dash.setQualityByRepresentation(t),this.params.output.hostname$.next(dt(t.baseURL))}),i)).add(this.dashLiteEvents.idxRequestPing$.pipe(m()).subscribe(this.params.output.firstBytesEvent$)).add(this.dashLiteEvents.manifestReady$.subscribe(this.handleManifestReady,i)).add(this.dashLiteEvents.representationPlay$.pipe(f(s)).subscribe(this.handleRepresentationPlay,i)).add(o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)).subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0),this.buffer.destroy(),this.dash.destroy()}prepare(){const t=this.params.source;switch(t.type){case"url":this.dash.attachSource(t.url);break;case"raw":this.dash.attachManifest(t.raw);break;default:return n(t)}}seek(t){this.log({message:`[seek] position: ${t}`}),this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.dash.seek(t)}playIfAllowed(){x(this.video).then((t=>{t||(this.videoState.setState(Ft.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}}var Yt=t=>{t.extend("HTTPLoader",(function(){const{parent:t}=this,e=t.load;return{load:t=>{if(t.request&&t.request.range){const[e,i]=t.request.range.split("-").map((t=>parseInt(t,10))),s=new URL(t.request.url,location.href);s.searchParams.append("bytes",`${e}-${i}`),t.request.url=s.toString(),t.request.range=void 0}e(t)}}}),!0)};const zt=t=>t.range?t.range.split("-").map((t=>parseInt(t,10))):[NaN,NaN];class Qt{constructor(t){this.params=t,this.dashJsRequestQueue=new Map,this.activeRequests=new Map}setMetrics(t){this.dashMetrics=t}queueDashJSRequest(t){var e;const{url:i}=t.request,s=null!==(e=this.dashJsRequestQueue.get(i))&&void 0!==e?e:[];s.push(t),this.dashJsRequestQueue.set(i,s)}executeNextRequests(){return R(this,void 0,void 0,(function*(){for(const[t,e]of this.dashJsRequestQueue.entries()){const i=this.activeRequests.get(t);if(i){e.length&&this.onBigRequestProgress(i);const s=e[0];if(!s||!s.request.range)continue;const[a,r]=zt(s.request);if(a>=i.from&&r<=i.to)continue;this.activeRequests.delete(t)}if(e.length){const i=this.sendBigRequest(t,e.map((({request:t})=>t)));this.activeRequests.set(t,i)}}}))}abort(t){var e;if(t){const{request:i}=t,s=(null!==(e=this.dashJsRequestQueue.get(i.url))&&void 0!==e?e:[]).includes(t),a=this.activeRequests.get(i.url);s&&a&&a.abortController.abort()}else for(const{abortController:t}of this.activeRequests.values())t.abort()}destroy(){this.abort(),this.dashMetrics=void 0,this.dashJsRequestQueue.clear(),this.activeRequests.clear()}sendBigRequest(t,e){const i=e.map(zt),s=i[0][0];let a=i[0][1];for(let t=1;t<i.length&&a<this.params.minDataSize;t++){const e=i[t][1];e-s<=2*this.params.minDataSize&&(a=Math.max(a,e))}a=0===s?Math.max(a,s+this.params.minInitSize):Math.max(a,s+this.params.minDataSize);const r=new URL(t,location.href);r.searchParams.append("bytes",`${s}-${a}`);const n=r.toString(),o=new AbortController,d=o.signal,h={url:t,from:s,to:a,loaded:0,data:null,abortController:o};d.addEventListener("abort",(()=>this.onBigRequestAbort(h)));const u=t=>{var e,i;throw null===(i=(e=this.params).onError)||void 0===i||i.call(e,{id:"BigRequestParsing",message:"Error parsing response data",thrown:t}),t};return fetch(n,{signal:d}).then((t=>{var e,i,s;if(!t.ok||!t.body)return void this.onBigRequestError(h);const[a,r]=t.body.tee();null===(i=(e=this.params).onDownloadStream)||void 0===i||i.call(e,r);const n=a.getReader(),o=parseInt(null!==(s=t.headers.get("Content-Length"))&&void 0!==s?s:"",10);h.data=new ArrayBuffer(o);const d=new Uint8Array(h.data),c=({done:t,value:e})=>R(this,void 0,void 0,(function*(){t?this.onBigRequestProgress(h):e&&(d.set(e,h.loaded),h.loaded+=e.byteLength,this.onBigRequestProgress(h),yield null==n?void 0:n.read().then(c,Qt.suppressStreamErrors).catch(u))}));null==n||n.read().then(c,Qt.suppressStreamErrors).catch(u)}),Qt.suppressAbort).catch((t=>this.onBigRequestError(h,t))),h}onBigRequestProgress({url:t,from:e,to:i,loaded:s,data:a}){var r,n,o,d,h,u,c;if(!this.activeRequests.has(t)||!a)return;const l=null!==(r=this.dashJsRequestQueue.get(t))&&void 0!==r?r:[];for(const r of l){const{request:l}=r,[p,m]=zt(l),v=p>=e&&m<=e+s,S=e>=p&&e+s<m,f=a.slice(p-e,Math.min(m-e+1,s));(v||S)&&(l.requestStartDate=null!==(n=l.requestStartDate)&&void 0!==n?n:new Date,l.firstByteDate=null!==(o=l.firstByteDate)&&void 0!==o?o:new Date,l.bytesLoaded=f.byteLength,l.bytesTotal=i-e),v?(l.requestEndDate=new Date,this.dashJsRequestQueue.set(t,(null!==(d=this.dashJsRequestQueue.get(t))&&void 0!==d?d:[]).filter((t=>t!==r))),null===(h=r.success)||void 0===h||h.call(r,f,"",t),null===(u=this.dashMetrics)||void 0===u||u.addHttpRequest(l,t,200,{},[])):S&&(null===(c=r.progress)||void 0===c||c.call(r,{loaded:s,total:i-e,lengthComputable:!0,stream:!0}))}}onBigRequestError({url:t,from:e,to:i},s){var a,r,n,o;if(null===(r=(a=this.params).onError)||void 0===r||r.call(a,{id:"BigRequest",message:"Download error",thrown:s}),!this.activeRequests.has(t))return;const d=null!==(n=this.dashJsRequestQueue.get(t))&&void 0!==n?n:[];for(const t of d){const[a,r]=zt(t.request);(a>=e&&a<i||r>e&&r<=i)&&(null===(o=null==t?void 0:t.error)||void 0===o||o.call(t,t.request,String(s)))}if(this.activeRequests.delete(t),s)throw s}onBigRequestAbort({url:t,from:e,to:i}){var s,a;if(!this.activeRequests.has(t))return;const r=null!==(s=this.dashJsRequestQueue.get(t))&&void 0!==s?s:[];for(const t of r){const[s,r]=zt(t.request);(s>=e&&s<i||r>e&&r<=i)&&(null===(a=null==t?void 0:t.abort)||void 0===a||a.call(t,t.request))}this.activeRequests.delete(t)}static suppressAbort(t){if(!(t instanceof DOMException)||"AbortError"!==t.name&&20!==t.code)throw t}static suppressStreamErrors(){}}class Wt{constructor(t,e,i){this.baseLoader=t,this.config=i,this.bigRequest=e,e.setMetrics(i.dashMetrics)}static shouldDelegateToBase(t){return"download"!==t.action||"text"===t.mediaType||!t.range||"arraybuffer"!==t.responseType}load(t){const{request:e}=t;if(Wt.shouldDelegateToBase(e))return this.baseLoader.load(t);this.bigRequest.queueDashJSRequest(t),this.bigRequest.executeNextRequests()}abort(t){if(!t)return this.baseLoader.abort(),void this.bigRequest.abort();const{request:e}=t;Wt.shouldDelegateToBase(e)?this.baseLoader.abort(t):this.bigRequest.abort(t)}}const Jt=(t,e)=>{const i=new Qt(e);return t.extend("SchemeLoaderFactory",(function(){const{parent:t}=this,e=t.getLoader;return{getLoader:t=>((t,e)=>i=>({create:s=>{const a=t(i).create(s);return new Wt(a,e,s)}}))(e(t),i)}}),!0),()=>i.destroy()};var jt=i=>{const a=new t(1/0),r=new e;let n=NaN,o=!1;return i.extend("XHRLoader",(function(){const{parent:t}=this,e=t.load.bind(t);return{load:function(t){if("MPD"===t.request.type){const e=t.onload,i=t.progress;t.onload=function(...t){return(t=>{var e,i,r;if(!t.getAllResponseHeaders().includes("x-playback-duration"))return;const n=parseInt(null!==(e=t.getResponseHeader("X-Playback-Duration"))&&void 0!==e?e:"",10),o=parseInt(null!==(i=t.getResponseHeader("X-Playback-Duration-Millis"))&&void 0!==i?i:"",10),d=null!==(r=null!=o?o:1e3*n)&&void 0!==r?r:NaN;s(d)&&!isNaN(d)&&a.next(d)})(this),e(...t)},t.progress=function(...t){return this.readyState>=2&&!o&&(o=!0,r.next(Date.now()-n)),i(...t)},n=Date.now(),o=!1}return e(t)}}}),!0),{playbackDuration$:a,ping$:r}};class Xt{constructor(){this.pausedTime=0,this.streamOffset=0,this.pauseTimestamp=0}getTotalPausedTime(){return this.pausedTime+this.getCurrentPausedTime()}getCurrentPausedTime(){return this.pauseTimestamp>0?Date.now()-this.pauseTimestamp:0}getStreamOffset(){return this.streamOffset}getTotalOffset(){return this.getTotalPausedTime()+this.streamOffset}pause(){0===this.pauseTimestamp&&(this.pauseTimestamp=Date.now())}resume(){this.pauseTimestamp>0&&(this.pausedTime+=this.getCurrentPausedTime(),this.pauseTimestamp=0)}resetTo(t){this.streamOffset=t,this.pauseTimestamp=0,this.pausedTime=0}}const Kt={};var Zt;!function(t){t.DOWNLOADING_LIB="downloading_lib",t.STOPPED="stopped",t.STREAM_INITIALIZED="stream_initialized",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Zt||(Zt={}));const te=(t,e)=>new p((i=>{const s=t=>i.next(t);return t.on(e,s),()=>t.off(e,s)}));class ee{constructor(e){this.subscription=new i,this.videoState=new ut(Zt.DOWNLOADING_LIB),this.textTracksManager=new U,this.videoTracks=[],this.isLive$=new t(void 0),this.maxSeekBackTime$=new t(1/0),this.availableFrom$=new t(void 0),this.liveOffset=new Xt,this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekPosition.getTransition(),r=this.isLive$.getValue();if(this.videoState.getTransition())return;if(t===Zt.DOWNLOADING_LIB||t===Zt.STREAM_INITIALIZED)return;const o=null==a?void 0:a.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(o)&&t!==Zt.STOPPED&&e!==$.STOPPED&&(r?this.seek(o+ie(this.liveOffset.getTotalPausedTime())):this.seek(o)),e){case $.STOPPED:switch(t){case Zt.STOPPED:break;case Zt.PLAYING:case Zt.PAUSED:case Zt.READY:this.stop();break;default:n(t)}break;case $.PLAYING:switch(t){case Zt.PLAYING:break;case Zt.PAUSED:r&&(this.liveOffset.getTotalPausedTime()<this.params.config.maxPausedTime&&this.liveOffset.getTotalOffset()<this.maxSeekBackTime$.getValue()?(this.liveOffset.resume(),this.params.output.position$.next(ie(this.liveOffset.getTotalOffset()))):this.seek(ie(this.liveOffset.getTotalOffset()))),this.play();break;case Zt.READY:this.play();break;case Zt.STOPPED:this.prepare();break;default:n(t)}break;case $.PAUSED:switch(t){case Zt.PLAYING:this.pause(),this.liveOffset.pause();break;case Zt.PAUSED:break;case Zt.READY:this.videoState.setState(Zt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED);break;case Zt.STOPPED:this.prepare();break;default:n(t)}break;default:n(e)}},this.video=V(e.container),this.params=e,this.params.output.element$.next(this.video),this.params.output.availableVideoTracks$.next([]),this.params.output.hostname$.next(dt(this.params.source.url)),this.loadDashJs()}loadDashJs(){let t=!1;const e=e=>{var i,s;t||this.params.output.error$.next({id:"timeout"===e?"DashJSTimedOut":"DashJSLoadingError",message:`Dash.js failed to load: ${null===(s=null===(i=e)||void 0===i?void 0:i.toString)||void 0===s?void 0:s.call(i)}`,thrown:e}),t=!0},i=window.setTimeout((()=>e("timeout")),5e3);import("dashjs/dist/dash.mediaplayer.min.js").then((e=>{t||(Kt.MediaPlayer=e.MediaPlayer,Kt.Debug=e.Debug,this.init())}),e).finally((()=>{window.clearTimeout(i),t=!0}))}init(){l(Kt.MediaPlayer,"dashjs not loaded"),l(Kt.Debug,"dashjs not loaded"),this.player=Kt.MediaPlayer().create(),this.player.updateSettings({debug:{logLevel:3},streaming:{buffer:{fastSwitchEnabled:!0},abr:{limitBitrateByPortal:this.params.tuning.autoTrackSelection.limitByContainer,usePixelRatioInLimitBitrateByPortal:this.params.tuning.autoTrackSelection.usePixelRatio,additionalAbrRules:{insufficientBufferRule:!1}},utcSynchronization:{useManifestDateHeaderTimeSource:!0}}});(this.params.format===P.DASH_WEBM||this.params.format===P.DASH_LIVE_WEBM)&&this.params.tuning.useWebmBigRequest?this.destroyBigRequest=Jt(this.player,{minInitSize:this.params.tuning.bigRequestMinInitSize,minDataSize:this.params.tuning.bigRequestMinDataSize,onError:t=>this.params.output.error$.next(t),onDownloadStream:t=>this.params.dependencies.throughputEstimator.stream$.next(t)}):this.params.tuning.stripRangeHeader&&Yt(this.player),this.player.clearDefaultUTCTimingSources(),this.subscribe(),this.videoState.setState(Zt.STOPPED)}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"DashIFProvider",message:"DashIFProvider internal logic error",thrown:e})},r=(t,e)=>this.subscription.add(t.subscribe(e,i));r(te(this.player,"error").pipe(h((t=>({id:`DashJS#${"object"==typeof t.error?t.error.code:t.error}`,message:"object"==typeof t.error?t.error.message:void 0})))),t.error$),r(te(this.player,"playbackError").pipe(h((t=>({id:"DashJSPlayback",message:t.error})))),t.error$);const n=te(this.player,"qualityChangeRendered").pipe(f((({mediaType:t})=>"video"===t)),h((({newQuality:t})=>{var e;return null===(e=this.videoTracks.find((({bitrateInfo:e})=>e.qualityIndex===t)))||void 0===e?void 0:e.track})));n.pipe(f(s)).subscribe(t.currentVideoTrack$),this.subscription.add(this.videoState.transitionEnded$.pipe(f((({to:t})=>t===Zt.STREAM_INITIALIZED)),m()).subscribe((()=>{this.subscription.add(N(e.videoTrack,(()=>{var t,e;const i=this.player.getQualityFor("video");return null===(e=null===(t=this.videoTracks.find((({bitrateInfo:t})=>t.qualityIndex===i)))||void 0===t?void 0:t.track)||void 0===e?void 0:e.id}),(t=>{var e;if(a(t))return;const i=null===(e=this.videoTracks.find((({track:e})=>e.id===t)))||void 0===e?void 0:e.bitrateInfo;i&&this.player.setQualityFor("video",i.qualityIndex)}),{changed$:n.pipe(h((t=>null==t?void 0:t.id))),onError:i}))}),i)),this.subscription.add(N(e.autoVideoTrackSwitching,(()=>{var t,e,i;return null===(i=null===(e=null===(t=this.player.getSettings().streaming)||void 0===t?void 0:t.abr)||void 0===e?void 0:e.autoSwitchBitrate)||void 0===i?void 0:i.video}),(t=>this.player.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:t}}}})),{onError:i})),r(te(this.player,"bufferStateChanged").pipe(f((({mediaType:t})=>"video"===t)),h((({state:t})=>"bufferStalled"===t))),t.isBuffering$),r(te(this.player,"fragmentLoadingStarted").pipe(h((t=>dt(t.request.url)))),t.hostname$),r(te(this.player,"streamInitialized"),(({streamInfo:{duration:e,manifestInfo:{isDynamic:i,availableFrom:s}}})=>{this.isLive$.next(i),this.availableFrom$.next(s.getTime()),i||t.duration$.next(e),this.videoTracks=[];const a=this.player.getQualityFor("video");let r;for(const t of this.player.getBitrateInfoListFor("video")){const e=t.qualityIndex.toString(10),i=K(t),s=t.bitrate/1e3,n={width:t.width,height:t.height};if(i){const o={id:e,quality:i,bitrate:s,size:n};this.videoTracks.push({track:o,bitrateInfo:t}),t.qualityIndex===a&&(r=o)}}t.availableVideoTracks$.next(this.videoTracks.map((({track:t})=>t))),r&&t.currentVideoTrack$.next(r),this.videoState.setState(Zt.STREAM_INITIALIZED),this.videoState.startTransitionTo(Zt.READY)})),r(te(this.player,"fragmentLoadingCompleted"),(({request:t})=>{if(!t.requestEndDate||!t.firstByteDate||!t.bytesLoaded)return;const e=t.requestEndDate.getTime()-t.firstByteDate.getTime(),i=t.bytesLoaded;this.params.dependencies.throughputEstimator.rawSpeed$.next({time:e,size:i})})),r(this.params.dependencies.throughputEstimator.estimation$,(t=>{if(!this.params.desiredState.autoVideoTrackSwitching.getState()||!this.videoTracks.length)return;const e=nt(this.videoTracks.map((({track:t})=>t)),{container:{width:this.video.offsetWidth,height:this.video.offsetHeight},throughput:t,tuning:this.params.tuning.autoTrackSelection}),i=this.videoTracks.find((({track:t})=>t===e));(null==i?void 0:i.bitrateInfo)&&this.player.setQualityFor("video",null==i?void 0:i.bitrateInfo.qualityIndex,!1)})),r(S({maxSeekBackTime:this.maxSeekBackTime$,isLive:this.isLive$.pipe(f(s))}).pipe(f((({isLive:t})=>t)),h((({maxSeekBackTime:t})=>ie(t)))),this.params.output.duration$);const d=te(this.player,"playbackTimeUpdated").pipe(h((({time:t})=>null!=t?t:0)));r(S({availableFrom:this.availableFrom$.pipe(f(s)),currentTime:d}),(({availableFrom:t,currentTime:e})=>this.params.output.liveTime$.next(t+1e3*e))),r(d.pipe(f((()=>!1===this.isLive$.getValue()))),t.position$),r(te(this.player,"playbackSeeked"),(()=>e.seekPosition.setState(void 0))),r(te(this.player,"playbackEnded"),t.endedEvent$),r(te(this.player,"playbackProgress").pipe(h((()=>q(this.video.buffered,this.video.currentTime)))),t.currentBuffer$),r(te(this.player,"playbackPlaying"),(()=>{this.videoState.setState(Zt.PLAYING),Q(e.playbackState,$.PLAYING)})),r(te(this.player,"playbackNotAllowed"),(()=>{this.player.isMuted()?(this.player.setMute(!1),this.videoState.setState(Zt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0)):(this.player.setMute(!0),this.player.play())})),r(te(this.player,"playbackPaused"),(()=>{this.videoState.setState(Zt.PAUSED),Q(e.playbackState,$.PAUSED)})),r(te(this.player,"canPlay"),(()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===Zt.READY&&this.videoState.setState(Zt.READY)})),r(this.isLive$,t.isLive$),r(ht(this.video),(()=>{this.player.isReady()&&this.player.updatePortalSize()}));r(o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)),this.syncPlayback);const{playbackDuration$:c,ping$:l}=jt(this.player);r(c,this.maxSeekBackTime$),r(l.pipe(m()),t.firstBytesEvent$),this.params.tuning.flushShortLoopedBuffers&&r(S({isLive:this.isLive$,isShort:t.duration$.pipe(h((t=>t<30)))}),(({isLive:t,isShort:e})=>{const i=!t&&e;this.player.updateSettings({streaming:{buffer:{flushBufferAtTrackSwitch:i}}})})),r(d.pipe(f((t=>t>this.params.tuning.insufficientBufferRuleMargin)),m()),(()=>this.player.updateSettings({streaming:{abr:{additionalAbrRules:{insufficientBufferRule:!0}}}}))),this.textTracksManager.connect(this.video,e,t),this.subscription.add(te(this.player,"manifestLoaded").pipe(m()).subscribe((()=>{const e=Date.now();this.subscription.add(te(this.player,"playbackPlaying").pipe(m()).subscribe((()=>t.firstFrameEvent$.next(Date.now()-e)),i))}),i)),this.subscription.add(O(this.video,e.isLooped,i));const{volumeState$:p}=Y(this.video);this.subscription.add(B(this.video,e.volume,p,i)),this.subscription.add(p.subscribe(t.volume$,i))}stop(){this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.player.attachSource(null),this.player.attachView(null),this.player.initialize(),this.player.clearDefaultUTCTimingSources(),this.videoState.setState(Zt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)}prepare(){this.videoState.startTransitionTo(Zt.STREAM_INITIALIZED),this.player.initialize(),this.player.clearDefaultUTCTimingSources(),this.player.attachView(this.video),this.player.attachSource(this.params.source.url)}seek(t){if(this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.isLive$.getValue()){const e=-Math.round(1e3*t),i=e<this.maxSeekBackTime$.getValue()?e:0;this.liveOffset.resetTo(i),this.params.output.position$.next(ie(i));const s=xt(this.params.source.url,this.liveOffset.getTotalOffset()/1e3,Ct.PLAYBACK_SHIFT);this.player.attachSource(s)}else this.player.seek(t)}play(){this.videoState.startTransitionTo(Zt.PLAYING),this.player.play()}pause(){this.videoState.startTransitionTo(Zt.PAUSED),this.video.pause()}destroy(){var t,e;this.subscription.unsubscribe(),this.textTracksManager.destroy();try{null===(t=this.player)||void 0===t||t.destroy()}catch(t){}this.video.remove(),this.params.output.element$.next(void 0),null===(e=this.destroyBigRequest)||void 0===e||e.call(this)}}const ie=t=>-t/1e3;function se(){return window.performance?window.performance.now():Date.now()}function ae(t){return se()-t}function re(t){const e=t.split("/"),i=e.slice(0,e.length-1).join("/"),s=/^([a-z]+:)?\/\//i;return{resolve:(t,e,a=!1)=>{(t=>s.test(t))(t)||(t.startsWith("/")||(t="/"+t),t=i+t);let r=t.indexOf("?")>-1?"&":"?";return a&&(t+=r+"lowLat=1",r="&"),e&&(t+=r+"_rnd="+Math.floor(999999999*Math.random())),t}}}function ne(t,e,i,a){const r=window.XMLHttpRequest;let n,o,d,h,u,c=!1,p=0,m=!1,v="arraybuffer",S=7e3,f=2e3,g=()=>{if(c)return;l(h);const t=ae(h);let e;if(t<f)return e=f-t,void setTimeout(g,e);f*=2,f>S&&(f=S),o&&o.abort(),o=new r,T()};const b=()=>{if(!c){if(--p>=0)return g(),void(a&&a());c=!0,u&&u(),i&&i()}},T=()=>{h=se(),o=new r,o.open("get",t);let i,s=0,a=0;const p=()=>(l(h),Math.max(h,Math.max(i||0,a||0)));if(n&&o.addEventListener("progress",(t=>{const e=se();n.updateChunk&&t.loaded>s&&(n.updateChunk(p(),t.loaded-s),s=t.loaded,i=e)})),d&&(o.timeout=d,o.addEventListener("timeout",(()=>b()))),o.addEventListener("load",(()=>{if(c)return;l(o);const t=o.status;if(t>=200&&t<300){if(o.response.byteLength&&n){const t=o.response.byteLength-s;t&&n.updateChunk&&n.updateChunk(p(),t)}u&&u(),o&&e(o.response)}else b()})),o.addEventListener("error",(()=>{b()})),m){const t=()=>{l(o),o.readyState===XMLHttpRequest.HEADERS_RECEIVED&&(a=se(),o.removeEventListener("readystatechange",t))};o.addEventListener("readystatechange",t)}return o.responseType=v,o.send(),y},y={withBitrateReporting:t=>(n=t,y),withParallel:t=>(m=t,y),withJSONResponse:()=>(v="json",y),withRetryCount:t=>(p=t,y),withRetryInterval:(t,e)=>(s(t)&&(f=t),s(e)&&(S=e),y),withTimeout:t=>(d=t,y),withFinally:t=>(u=t,y),send:T,abort:()=>{o&&(o.abort(),o=void 0),c=!0,u&&u()}};return y}class oe{constructor(t){this.intervals=[],this.currentRate=0,this.logger=t}_updateRate(t){let e=.2;this.currentRate&&(t<.1*this.currentRate?e=.8:t<.5*this.currentRate?e=.5:t<.7*this.currentRate&&(e=.3)),t=Math.max(1,Math.min(t,104857600)),this.currentRate=this.currentRate?this.currentRate*(1-e)+t*e:t}_createInterval(t,e,i){return{start:t,end:e,bytes:i}}_doMergeIntervals(t,e){t.start=Math.min(e.start,t.start),t.end=Math.max(e.end,t.end),t.bytes+=e.bytes}_mergeIntervals(t,e){return t.start<=e.end&&e.start<=t.end&&(this._doMergeIntervals(t,e),!0)}_flushIntervals(){if(!this.intervals.length)return!1;const t=this.intervals[0].start,e=this.intervals[this.intervals.length-1].end-500;if(e-t>2e3){let i=0,s=0;for(;this.intervals.length>0;){const t=this.intervals[0];if(t.end<=e)i+=t.end-t.start,s+=t.bytes,this.intervals.splice(0,1);else{if(t.start>=e)break;{const a=e-t.start,r=t.end-t.start;i+=a;const n=t.bytes*a/r;s+=n,t.start=e,t.bytes-=n}}}if(s>0&&i>0){const a=8*s/(i/1e3);return this._updateRate(a),this.logger(`rate updated, new=${Math.round(a/1024)}K; average=${Math.round(this.currentRate/1024)}K bytes/ms=${Math.round(s)}/${Math.round(i)} interval=${Math.round(e-t)}`),!0}}return!1}_joinIntervals(){let t;do{t=!1;for(let e=0;e<this.intervals.length-1;++e)this._mergeIntervals(this.intervals[e],this.intervals[e+1])&&(this.intervals.splice(e+1,1),t=!0)}while(t)}addInterval(t,e,i){return this.intervals.push(this._createInterval(t,e,i)),this._joinIntervals(),this.intervals.length>100&&(this.logger(`too many intervals (${this.intervals.length}); will merge`,{type:"warn"}),this._doMergeIntervals(this.intervals[1],this.intervals[0]),this.intervals.splice(0,1)),this._flushIntervals()}getBitRate(){return this.currentRate}}class de{constructor(t,e,i,s,a){this.pendingQueue=[],this.activeRequests={},this.completeRequests={},this.averageSegmentDuration=2e3,this.lastPrefetchStart=0,this.throttleTimeout=null,this.RETRY_COUNT=t,this.TIMEOUT=e,this.BITRATE_ESTIMATOR=i,this.MAX_PARALLEL_REQUESTS=s,this.logger=a}limitCompleteCount(){let t;for(;(t=Object.keys(this.completeRequests)).length>this._getParallelRequestCount()+2;){const e=t[Math.floor(Math.random()*t.length)];this.logger(`Dropping completed request for url ${e}`,{type:"warn"}),delete this.completeRequests[e]}}_sendRequest(t,e){const i=se(),s=i=>{delete this.activeRequests[e],this.limitCompleteCount(),this.completeRequests[e]=t,this._sendPending(),t._error=1,t._errorMsg=i,t._errorCB?t._errorCB(i):(this.limitCompleteCount(),this.completeRequests[e]=t)};t._request=ne(e,(s=>{t._complete=1,t._responseData=s,t._downloadTime=se()-i,delete this.activeRequests[e],this._sendPending(),t._cb?t._cb(s,t._downloadTime):(this.limitCompleteCount(),this.completeRequests[e]=t)}),(()=>s("error")),(()=>{t._retry=1,t._retryCB&&t._retryCB()})),t._request.withRetryCount(this.RETRY_COUNT).withTimeout(this.TIMEOUT).withBitrateReporting(this.BITRATE_ESTIMATOR).withParallel(this._getParallelRequestCount()>1).withFinally((()=>{t._finallyCB&&t._finallyCB()})),this.activeRequests[e]=t,t._request.send(),this.lastPrefetchStart=se()}_getParallelRequestCount(){return Math.min(this.MAX_PARALLEL_REQUESTS,this.averageSegmentDuration<3e3?3:2)}_getPrefetchDelay(){return Math.max(100,Math.min(5e3,this.averageSegmentDuration/3))}_canSendPending(){const t=this._getParallelRequestCount(),e=se();if(Object.keys(this.activeRequests).length>=t)return!1;const i=this._getPrefetchDelay()-(e-this.lastPrefetchStart);return this.throttleTimeout&&clearTimeout(this.throttleTimeout),!(i>0)||(this.throttleTimeout=window.setTimeout((()=>this._sendPending()),i),!1)}_sendPending(){for(;this._canSendPending();){const t=this.pendingQueue.pop();if(!t)return;this.activeRequests[t]||this.completeRequests[t]||(this.logger(`Submitting pending request url=${t}`),this._sendRequest({},t))}}_removeFromActive(t){delete this.completeRequests[t],delete this.activeRequests[t]}abortAll(){Object.values(this.activeRequests).forEach((t=>{t&&t._request&&t._request.abort()})),this.activeRequests={},this.pendingQueue=[],this.completeRequests={}}requestData(t,e,i,s){const a={};return a.send=()=>{const r=this.activeRequests[t]||this.completeRequests[t];if(r)r._cb=e,r._errorCB=i,r._retryCB=s,r._finallyCB=a._finallyCB,r._error||r._complete?(this._removeFromActive(t),setTimeout((()=>{r._complete?(this.logger(`Requested url already prefetched, url=${t}`),e(r._responseData,r._downloadTime)):(this.logger(`Requested url already prefetched with error, url=${t}`),i(r._errorMsg)),a._finallyCB&&a._finallyCB()}),0)):this.logger(`Attached to active request, url=${t}`);else{const e=this.pendingQueue.indexOf(t);-1!==e&&this.pendingQueue.splice(e,1),this.logger(`Request not prefetched, starting new request, url=${t}${-1===e?"":"; removed pending"}`),this._sendRequest(a,t)}},a._cb=e,a._errorCB=i,a._retryCB=s,a.abort=function(){a.request&&a.request.abort()},a.withFinally=t=>(a._finallyCB=t,a),a}prefetch(t){this.activeRequests[t]||this.completeRequests[t]?this.logger(`Request already active for url=${t}`):(this.logger(`Added to pending queue; url=${t}`),this.pendingQueue.unshift(t),this._sendPending())}optimizeForSegDuration(t){this.averageSegmentDuration=t}}class he{constructor(t){this.paused=!1,this.autoQuality=!0,this.buffering=!0,this.destroyed=!1,this.videoPlayStarted=!1,this.lowLatency=!1,this.bitrate=0,this.manifest=[],this.sourceBuffer=0,this.bufferStates=[],this.sourceJitter=-1,this.params=t,this.chunkRateEstimator=new oe(this.params.logger),this._initVideo()}attachSource(t){this.manifestUrl=t,this.urlResolver=re(t),this.bitrateSwitcher=this._initBitrateSwitcher(),this._initManifest()}setAutoQualityEnabled(t){this.autoQuality=t}switchByName(t){let e;for(let i=0;i<this.manifest.length;++i)if(e=this.manifest[i],e.name===t)return void this._switchToQuality(e)}catchUp(){this.rep&&this.rep.stop(),this.currentManifestEntry&&(this.paused=!1,this._initPlayerWith(this.currentManifestEntry),this._notifyBuffering(!0))}stop(){this.params.videoElement.pause(),this.rep&&(this.rep.stop(),this.rep=null)}pause(){this.paused=!0,this.params.videoElement.pause(),this.videoPlayStarted=!1,this._notifyBuffering(!1)}play(t){this.paused=!1;const e=this.lowLatency&&this._getBufferSizeSec()>this.sourceJitter+5;this.rep&&!e?(this.bufferStates=[],this.videoPlayStarted=!1,this.shouldPlay()?this._playVideoElement(t):this._notifyBuffering(!0)):this.catchUp()}startPlay(t,e){this.autoQuality=e,this._initPlayerWith(t)}destroy(){this.destroyed=!0,this.rep&&(this.rep.stop(),this.rep=null),this.manifestRequest&&this.manifestRequest.abort(),this.manifestRefetchTimer&&(clearTimeout(this.manifestRefetchTimer),this.manifestRefetchTimer=void 0)}reinit(t){this.manifestUrl=t,this.urlResolver=re(t),this.catchUp()}_handleNetworkError(){this.params.logger("Fatal network error"),this.params.playerCallback({name:"error",type:"network"})}_retryCallback(){this.params.playerCallback({name:"retry"})}_getBufferSizeSec(){const t=this.params.videoElement;let e=0;const i=t.buffered.length;return 0!==i&&(e=t.buffered.end(i-1)-Math.max(t.currentTime,t.buffered.start(0))),e}_notifyBuffering(t){this.destroyed||(this.params.logger(`buffering: ${t}`),this.params.playerCallback({name:"buffering",isBuffering:t}),this.buffering=t)}_initVideo(){const{videoElement:t,logger:e}=this.params;t.addEventListener("error",(i=>{var s;this.destroyed||(e(`Video element error: ${null===(s=t.error)||void 0===s?void 0:s.code}`),this.params.playerCallback({name:"error",type:"media"}))})),t.addEventListener("timeupdate",(()=>{const e=this._getBufferSizeSec();!this.paused&&e<.3?this.buffering||(this.buffering=!0,window.setTimeout((()=>{!this.paused&&this.buffering&&this._notifyBuffering(!0),t.pause(),this.videoPlayStarted=!1}),1e3*(e+.1))):this.buffering&&this.videoPlayStarted&&this._notifyBuffering(!1)})),t.addEventListener("playing",(()=>{e("playing")})),t.addEventListener("stalled",(()=>this._fixupStall())),t.addEventListener("waiting",(()=>this._fixupStall()))}_fixupStall(){const{logger:t,videoElement:e}=this.params,i=e.buffered.length;let s;0!==i&&(s=e.buffered.start(i-1),e.currentTime<s&&(t("Fixup stall"),e.currentTime=s))}_selectQuality(t){const{videoElement:e}=this.params;let i,s,a;const r=e&&1.62*(window.devicePixelRatio||1)*e.offsetHeight||520;for(let e=0;e<this.manifest.length;++e)a=this.manifest[e],a.bitrate<t&&r>Math.min(a.video.height,a.video.width)?(!s||a.bitrate>s.bitrate)&&(s=a):(!i||i.bitrate>a.bitrate)&&(i=a);return s||i}shouldPlay(){if(this.paused)return!1;const t=this._getBufferSizeSec()-Math.max(1,this.sourceJitter);return t>3||s(this.downloadRate)&&(this.downloadRate>1.5&&t>2||this.downloadRate>2&&t>1)}_setVideoSrc(t,e){const{logger:i,videoElement:s,playerCallback:a}=this.params;this.mediaSource=new window.MediaSource,i("setting video src"),s.src=URL.createObjectURL(this.mediaSource),this.mediaSource.addEventListener("sourceopen",(()=>{l(this.mediaSource),this.sourceBuffer=this.mediaSource.addSourceBuffer(t.codecs),this.bufferStates=[],e()})),this.videoPlayStarted=!1,s.addEventListener("canplay",(()=>{this.shouldPlay()&&(this.videoPlayStarted=!0,this._playVideoElement())}));const r=()=>{!function(t,e,i){const s=(...a)=>{i.apply(null,a),t.removeEventListener(e,s)};t.addEventListener(e,s)}(s,"progress",(()=>{s.buffered.length?(s.currentTime=s.buffered.start(0),a({name:"playing"})):r()}))};r()}_initPlayerWith(t){this.bitrate=0,this.rep=0,this.sourceBuffer=0,this.bufferStates=[],this.filesFetcher&&this.filesFetcher.abortAll(),this.filesFetcher=new de(3,1e4,this.bitrateSwitcher,this.params.config.MAX_PARALLEL_REQUESTS,this.params.logger),this._setVideoSrc(t,(()=>this._switchToQuality(t)))}_representation(t){const{logger:e,videoElement:i,playerCallback:r}=this.params;let n=!1,o=null,d=null,h=null,u=null,c=!1;const p=()=>{const t=n&&(!c||c===this.rep);return t||e("Not running!"),t},m=(t,e,i)=>{h&&h.abort(),h=ne(this.urlResolver.resolve(t,!1),e,i,(()=>this._retryCallback())).withTimeout(1e4).withBitrateReporting(this.bitrateSwitcher).withRetryCount(3).withFinally((()=>{h=null})).send()},v=(t,e,i)=>{l(this.filesFetcher),null==d||d.abort(),d=this.filesFetcher.requestData(this.urlResolver.resolve(t,!1),e,i,(()=>this._retryCallback())).withFinally((()=>{d=null})).send()},S=t=>{const s=i.playbackRate;i.playbackRate!==t&&(e(`Playback rate switch: ${s}=>${t}`),i.playbackRate=t)},f=t=>{this.lowLatency=t,e(`lowLatency changed to ${t}`),g()},g=()=>{if(this.lowLatency){let t=this._getBufferSizeSec();if(this.bufferStates.length<5)return void S(1);const i=se()-6e4;let s=0;for(let e=0;e<this.bufferStates.length;e++){const a=this.bufferStates[e];t=Math.min(t,a.buf),a.ts<i&&s++}this.bufferStates.splice(0,s),e(`update playback rate; minBuffer=${t} drop=${s} jitter=${this.sourceJitter}`);let a=t-1;this.sourceJitter>=0?a-=this.sourceJitter/2:this.sourceJitter-=1,S(a>3?1.15:a>1?1.1:a>.3?1.01:1)}else S(1)},b=t=>{let i;const a=()=>i&&i.start?i.start.length:0,n=t=>i.start[t]/1e3,o=t=>i.dur[t]/1e3,d=t=>i.fragIndex+t,h=(t,e)=>({chunkIdx:d(t),startTS:n(t),dur:o(t),discontinuity:e}),c=()=>{let t=0;if(i&&i.dur){let e=Math.max(this.sourceJitter,1);for(this.lowLatency||(e+=2),t=i.dur.length-1;t>=0&&(e-=i.dur[t]/1e3,!(e<=0));--t);}return h(t,!0)},m=(t,e,i)=>{u&&u.abort(),u=ne(this.urlResolver.resolve(t,!0,this.lowLatency),e,i,(()=>this._retryCallback())).withTimeout(1e4).withRetryCount(3).withFinally((()=>{u=null})).withJSONResponse().send()};return{seek:(e,o)=>{m(t,(t=>{if(!p())return;i=t;const d=Boolean(i.lowLatency);d!==this.lowLatency&&f(d);let u=0;for(let t=0;t<i.dur.length;++t)u+=i.dur[t];u>0&&(l(this.filesFetcher),this.filesFetcher.optimizeForSegDuration(u/i.dur.length)),r({name:"index",zeroTime:i.zeroTime,shiftDuration:i.shiftDuration}),this.sourceJitter=i.hasOwnProperty("jitter")?Math.min(10,Math.max(.01,i.jitter/1e3)):1,e((t=>{const e=a();if(!(e<=0)){if(s(t))for(let i=0;i<e;i++)if(n(i)>t)return h(i);return c()}})(o))}),(()=>this._handleNetworkError()))},nextChunk:t=>{const s=a(),r=t?t.chunkIdx+1:0,n=r-i.fragIndex;if(!(s<=0)){if(!t||n<0||n-s>10)return e(`Resync: offset=${n} bChunks=${s} chunk=`+JSON.stringify(t)),c();if(!(n>=s))return h(r-i.fragIndex,!1)}}}},T=()=>{n=!1,d&&d.abort(),h&&h.abort(),u&&u.abort(),l(this.filesFetcher),this.filesFetcher.abortAll()};return c={start:e=>{const{videoElement:i,logger:s}=this.params;let r,d,h,c,S,f,y,E=b(t.jidxUrl),$=0;const P=()=>{S&&(clearTimeout(S),S=void 0);const t=Math.max(500,1e3*(this._getBufferSizeSec()-this.sourceJitter-5)),e=$+t,i=se(),s=Math.min(1e4,e-i);$=i;const a=()=>{u||p()&&E.seek((()=>{p()&&($=se(),k(),P())}))};s>0?S=window.setTimeout((()=>{this.paused?P():a()}),s):a()},k=()=>{let e;for(;e=E.nextChunk(c);)c=e,I(e);const i=E.nextChunk(h);if(i){if(h&&i.discontinuity)return s("Detected discontinuity; restarting playback"),void(this.paused?P():(T(),this._initPlayerWith(t)));_(i)}else P()},w=(t,e)=>{if(!p()||!this.sourceBuffer)return;let a,r,n;const o=i=>{window.setTimeout((()=>{p()&&w(t,e)}),i)};if(this.sourceBuffer.updating)s("Source buffer is updating; delaying appendBuffer"),o(100);else{const d=se(),h=i.currentTime;!this.paused&&i.buffered.length>1&&f===h&&d-y>500&&(s("Stall suspected; trying to fix"),this._fixupStall()),f!==h&&(f=h,y=d);const u=this._getBufferSizeSec();if(u>30)s(`Buffered ${u} seconds; delaying appendBuffer`),o(2e3);else try{this.sourceBuffer.appendBuffer(t),this.videoPlayStarted?(this.bufferStates.push({ts:d,buf:u}),g(),this.bufferStates.length>200&&this.bufferStates.shift()):this.shouldPlay()&&(this.videoPlayStarted=!0,this._playVideoElement()),e&&e()}catch(t){if("QuotaExceededError"!==t.name)throw t;s("QuotaExceededError; delaying appendBuffer"),n=this.sourceBuffer.buffered.length,0!==n&&(a=this.sourceBuffer.buffered.start(0),r=h,r-a>4&&this.sourceBuffer.remove(a,r-3)),o(1e3)}}},A=()=>{d&&r&&(s([`Appending chunk, sz=${d.byteLength}:`,JSON.stringify(h)]),w(d,(function(){d=null,k()})))},D=e=>t.fragUrlTemplate.replace("%%id%%",e.chunkIdx),_=t=>{p()&&v(D(t),((e,i)=>{if(p()){if(i/=1e3,d=e,h=t,o=t.startTS,i){const e=Math.min(10,t.dur/i);this.downloadRate=this.downloadRate?.7*this.downloadRate+.3*e:e}A()}}),(()=>this._handleNetworkError()))},I=t=>{p()&&(l(this.filesFetcher),this.filesFetcher.prefetch(this.urlResolver.resolve(D(t),!1)))},R=e=>{p()&&(t.cachedHeader=e,w(e,(()=>{r=!0,A()})))};n=!0,E.seek((t=>{p()&&($=se(),t?(c=t,!a(e)||t.startTS>e?_(t):(h=t,k())):P())}),e),t.cachedHeader?R(t.cachedHeader):m(t.headerUrl,R,(()=>this._handleNetworkError()))},stop:T,getTimestampSec:()=>o},c}_switchToQuality(t){const{logger:e,playerCallback:i}=this.params;let a;t.bitrate!==this.bitrate&&(this.rep&&(a=this.rep.getTimestampSec(),s(a)&&(a+=.1),this.rep.stop()),this.currentManifestEntry=t,this.rep=this._representation(t),e(`switch to quality: codecs=${t.codecs}; headerUrl=${t.headerUrl}; bitrate=${t.bitrate}`),this.bitrate=t.bitrate,l(this.bitrateSwitcher),this.bitrateSwitcher.notifySwitch(this.bitrate),this.rep.start(a),i({name:"qualitySwitch",quality:t}))}_qualityAvailable(t){return s(this.manifest.find((e=>e.name===t)))}_initBitrateSwitcher(){const{logger:t,playerCallback:e}=this.params,i=e=>{if(!this.autoQuality)return;let i,s,a;this.currentManifestEntry&&this._qualityAvailable(this.currentManifestEntry.name)&&e<this.bitrate&&(s=this._getBufferSizeSec(),a=e/this.bitrate,s>10&&a>.8||s>15&&a>.5||s>20&&a>.3)?t(`Not switching: buffer=${Math.floor(s)}; bitrate=${this.bitrate}; newRate=${Math.floor(e)}`):(i=this._selectQuality(e),i?this._switchToQuality(i):t(`Could not find quality by bitrate ${e}`))},s=(()=>({updateChunk:(t,i)=>{const s=se();if(this.chunkRateEstimator.addInterval(t,s,i)){const a=this.chunkRateEstimator.getBitRate();return e({name:"bandwidth",size:i,duration:s-t,speed:a}),!0}},get:()=>{const t=this.chunkRateEstimator.getBitRate();return t?.85*t:0}}))();let a,r=-1/0,n=!0;const o=()=>{let t=s.get();if(t&&a&&this.autoQuality){if(n&&t>a&&ae(r)<3e4)return;i(t)}n=this.autoQuality};return{updateChunk:(t,e)=>{const i=s.updateChunk(t,e);return i&&o(),i},notifySwitch:t=>{const e=se();t<a&&(r=e),a=t}}}_fetchManifest(t,e,i){this.manifestRequest=ne(this.urlResolver.resolve(t,!0),e,i,(()=>this._retryCallback())).withJSONResponse().withTimeout(1e4).withRetryCount(3).withRetryInterval(300,2e3).send().withFinally((()=>{this.manifestRequest=void 0}))}_playVideoElement(t){const{videoElement:e}=this.params;x(e).then((e=>{e||null==t||t()}))}_handleManifestUpdate(t){const{logger:e,playerCallback:i,videoElement:s}=this.params;this.manifest=(t=>{const e=[];return(null==t?void 0:t.length)?(t.forEach(((t,i)=>{t.video&&s.canPlayType(t.codecs).replace(/no/,"")&&window.MediaSource.isTypeSupported(t.codecs)&&(t.index=i,e.push(t))})),e.sort((function(t,e){return t.video&&e.video?e.video.height-t.video.height:e.bitrate-t.bitrate})),e):(this.params.playerCallback({name:"error",type:"partial_metadata"}),[])})(t),e(`Valid manifest entries: ${this.manifest.length}/${t.length}`),i({name:"manifest",manifest:this.manifest})}_refetchManifest(t){this.destroyed||(this.manifestRefetchTimer&&clearTimeout(this.manifestRefetchTimer),this.manifestRefetchTimer=window.setTimeout((()=>{this._fetchManifest(t,(e=>{this.destroyed||(this._handleManifestUpdate(e),this._refetchManifest(t))}),(()=>this._refetchManifest(t)))}),6e4))}_initManifest(){this._fetchManifest(this.manifestUrl,(t=>{this.destroyed||(this._handleManifestUpdate(t),this._refetchManifest(this.manifestUrl))}),(()=>this._handleNetworkError()))}}var ue;!function(t){t.STOPPED="stopped",t.MANIFEST_READY="manifest_ready",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(ue||(ue={}));const ce=[ue.PAUSED,ue.PLAYING,ue.READY],le=[ue.PAUSED,ue.PLAYING,ue.READY];class pe{constructor(e){this.subscription=new i,this.videoState=new ut(ue.STOPPED),this.representations$=new t([]),this.textTracksManager=new U,this.maxSeekBackTime$=new t(1/0),this.zeroTime$=new t(void 0),this.liveOffset=new Xt,this._dashCb=t=>{var e,i,a;switch(t.name){case"buffering":{const e=t.isBuffering;this.params.output.isBuffering$.next(e);break}case"error":this.params.output.error$.next({id:`DashLiveProviderInternal:${t.type}`,message:"LiveDashPlayer reported error"});break;case"manifest":{const s=t.manifest,a=[];for(const t of s){const i=null!==(e=t.name)&&void 0!==e?e:t.index.toString(10),s=K(t.video),r=t.bitrate/1e3,n=Object.assign({},t.video);if(!s)continue;const o={id:i,quality:s,bitrate:r,size:n};a.push({track:o,representation:t})}this.representations$.next(a),this.params.output.availableVideoTracks$.next(a.map((({track:t})=>t))),(null===(i=this.videoState.getTransition())||void 0===i?void 0:i.to)===ue.MANIFEST_READY&&this.videoState.setState(ue.MANIFEST_READY);break}case"qualitySwitch":{const e=t.quality,i=null===(a=this.representations$.getValue().find((({representation:t})=>t===e)))||void 0===a?void 0:a.track;this.params.output.hostname$.next(new URL(e.headerUrl,this.params.source.url).hostname),s(i)&&this.params.output.currentVideoTrack$.next(i);break}case"bandwidth":{const{size:e,duration:i}=t;this.params.dependencies.throughputEstimator.rawSpeed$.next({size:e,time:i});break}case"index":this.maxSeekBackTime$.next(t.shiftDuration),this.zeroTime$.next(t.zeroTime)}},this.syncPlayback=()=>{var t;const e=this.videoState.getState(),i=this.videoState.getTransition(),a=this.params.desiredState.playbackState.getState(),r=this.params.desiredState.playbackState.getTransition(),o=this.params.desiredState.seekPosition.getTransition();if(this.log({message:`[syncPlayback] videoState: ${e}; videoTransition: ${JSON.stringify(i)}; desiredPlaybackState: ${a}; seekPositionTransition: ${JSON.stringify(o)};`}),a===$.STOPPED)return void(e!==ue.STOPPED&&(this.videoState.startTransitionTo(ue.STOPPED),this.dash.destroy(),this.video.setAttribute("src",""),this.video.load(),this.videoState.setState(ue.STOPPED)));if(i)return;if(le.includes(e)){const e=null===(t=this.params.desiredState.videoTrack.getTransition())||void 0===t?void 0:t.to;s(e)&&this.setVideoTrack(e);const i=this.params.desiredState.autoVideoTrackSwitching.getTransition();i&&this.setAutoQuality(i.to)}const d=null==o?void 0:o.to;if((null==r?void 0:r.to)!==$.PAUSED&&s(d)&&ce.includes(e))this.seek(d+me(this.liveOffset.getTotalPausedTime()));else switch(e){case ue.STOPPED:return this.videoState.startTransitionTo(ue.MANIFEST_READY),void this.dash.attachSource(xt(this.params.source.url));case ue.MANIFEST_READY:this.videoState.startTransitionTo(ue.READY),this.prepare();break;case ue.READY:return void(a===$.PAUSED?this.videoState.setState(ue.PAUSED):a===$.PLAYING&&(this.videoState.startTransitionTo(ue.PLAYING),this.dash.play((()=>{this.liveOffset.pause(),this.videoState.setState(ue.PAUSED)}))));case ue.PLAYING:return void(a===$.PAUSED&&(this.videoState.startTransitionTo(ue.PAUSED),this.liveOffset.pause(),this.dash.pause()));case ue.PAUSED:return void(a===$.PLAYING&&(this.videoState.startTransitionTo(ue.PLAYING),this.liveOffset.getTotalPausedTime()<this.params.config.maxPausedTime&&this.liveOffset.getTotalOffset()<this.maxSeekBackTime$.getValue()?(this.liveOffset.resume(),this.dash.play((()=>{this.liveOffset.pause(),this.videoState.setState(ue.PAUSED)})),this.params.output.position$.next(me(this.liveOffset.getTotalOffset()))):this.seek(me(this.liveOffset.getTotalOffset()))));default:return n(e)}},this.params=e,this.log=this.params.dependencies.logger.createComponentLog("DashLiveProvider");const a=t=>{e.output.error$.next({id:"DashLiveProvider",message:"DashLiveProvider internal logic error",thrown:t})};o(this.videoState.stateChangeStarted$.pipe(h((t=>({transition:t,type:"start"})))),this.videoState.stateChangeEnded$.pipe(h((t=>({transition:t,type:"end"}))))).subscribe((({transition:t,type:e})=>{this.log({message:`[videoState change] ${e}: ${JSON.stringify(t)}`})})),this.video=V(e.container),this.params.output.element$.next(this.video),this.dash=this.createLiveDashPlayer(),this.params.output.duration$.next(1/0),this.params.output.position$.next(0),this.params.output.isLive$.next(!0),this.params.output.hostname$.next(dt(this.params.source.url)),this.textTracksManager.connect(this.video,this.params.desiredState,this.params.output);const r=Y(this.video);this.subscription.add(r.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===ue.READY&&this.videoState.setState(ue.READY)}),a)).add(r.pause$.subscribe((()=>{this.videoState.setState(ue.PAUSED)}),a)).add(r.play$.subscribe((()=>{this.videoState.setState(ue.PLAYING)}),a)).add(r.error$.subscribe(this.params.output.error$)).add(this.maxSeekBackTime$.pipe(c(),h(me)).subscribe(this.params.output.duration$)).add(S({zeroTime:this.zeroTime$.pipe(f(s)),position:r.timeUpdate$}).subscribe((({zeroTime:t,position:e})=>this.params.output.liveTime$.next(t+1e3*e)),a)).add(O(this.video,this.params.desiredState.isLooped,a)).add(B(this.video,this.params.desiredState.volume,r.volumeState$,a)).add(r.volumeState$.subscribe(this.params.output.volume$,a)).add(G(this.video).subscribe(this.params.output.firstBytesEvent$)).add(H(this.video).subscribe(this.params.output.firstFrameEvent$)).add(this.videoState.stateChangeEnded$.subscribe((t=>{switch(t.to){case ue.STOPPED:this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.desiredState.playbackState.setState($.STOPPED);break;case ue.MANIFEST_READY:case ue.READY:break;case ue.PAUSED:this.params.desiredState.playbackState.setState($.PAUSED);break;case ue.PLAYING:this.params.desiredState.playbackState.setState($.PLAYING);break;default:return n(t.to)}}),a)).add(o(e.desiredState.playbackState.stateChangeStarted$,e.desiredState.seekPosition.stateChangeStarted$,e.desiredState.videoTrack.stateChangeStarted$,e.desiredState.autoVideoTrackSwitching.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)).subscribe(this.syncPlayback,a))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0),this.dash.destroy()}createLiveDashPlayer(){const t=new he({videoElement:this.video,config:{CHUNK_DURATION:this.params.config.chunkDuration,BUFFER_OPTIMAL_DURATION:this.params.config.optimalBufferDuration,MAX_PARALLEL_REQUESTS:this.params.config.maxParallelRequests},playerCallback:this._dashCb,logger:t=>{this.params.dependencies.logger.log({message:String(t),component:"LiveDashPlayer"})}});return t.pause(),t}prepare(){var t,e,i,a,r,n;const o=this.representations$.getValue(),d=null!==(e=null===(t=this.params.desiredState.videoTrack.getTransition())||void 0===t?void 0:t.to)&&void 0!==e?e:this.params.desiredState.videoTrack.getState(),h=null!==(a=null===(i=this.params.desiredState.autoVideoTrackSwitching.getTransition())||void 0===i?void 0:i.to)&&void 0!==a?a:this.params.desiredState.autoVideoTrackSwitching.getState(),u=!h&&s(d)?d:null===(r=nt(o.map((({track:t})=>t)),{container:{width:this.video.offsetWidth,height:this.video.offsetHeight},throughput:this.params.dependencies.throughputEstimator.estimation$.getValue(),tuning:this.params.tuning.autoTrackSelection}))||void 0===r?void 0:r.id,c=null===(n=o.find((({track:t})=>t.id===u)))||void 0===n?void 0:n.representation;l(c),this.dash.startPlay(c,h),this.params.desiredState.videoTrack.getTransition()&&this.params.desiredState.videoTrack.setState(u),this.params.desiredState.autoVideoTrackSwitching.getTransition()&&this.params.desiredState.autoVideoTrackSwitching.setState(h)}setVideoTrack(t){var e;const i=null===(e=this.representations$.getValue().find((({track:e})=>e.id===t)))||void 0===e?void 0:e.representation;l(i),this.dash.switchByName(i.name),this.params.desiredState.videoTrack.setState(t)}setAutoQuality(t){this.dash.setAutoQualityEnabled(t),this.params.desiredState.autoVideoTrackSwitching.setState(t)}seek(t){this.log({message:`[seek] position: ${t}`}),this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0);const e=-Math.round(1e3*t),i=e<this.maxSeekBackTime$.getValue()?e:0;this.liveOffset.resetTo(i),this.params.output.position$.next(me(i)),this.dash.reinit(xt(this.params.source.url,i)),this.params.desiredState.seekPosition.setState(void 0)}}const me=t=>-t/1e3,ve=t=>{if(t.QUALITY)switch(t.QUALITY){case"mobile":return z.Q_144P;case"lowest":return z.Q_240P;case"low":return z.Q_360P;case"sd":case"medium":return z.Q_480P;case"hd":case"high":return z.Q_720P;case"fullhd":case"full":return z.Q_1080P;case"quadhd":case"quad":return z.Q_1440P;case"ultrahd":case"ultra":return z.Q_2160P}if(t.RESOLUTION){const[e,i]=t.RESOLUTION.split("x").map((t=>parseInt(t,10))),s=K({width:e,height:i});if(s)return s}return null},Se=(t,e=t)=>R(void 0,void 0,void 0,(function*(){var i;const s=yield fetch(t),a=(yield s.text()).split("\n"),r=[];for(let t=0;t<a.length;t++){const s=a[t].match(/^#EXT-X-STREAM-INF:(.+)/);if(!s)continue;const n=Object.fromEntries(s[1].split(",").map((t=>t.split("=")))),o=null!==(i=n.QUALITY)&&void 0!==i?i:`stream-${n.BANDWIDTH}`,d=ve(n);let h,u;if(n.BANDWIDTH&&(h=parseInt(n.BANDWIDTH,10)/1e3||void 0),!h&&n["AVERAGE-BANDWIDTH"]&&(h=parseInt(n["AVERAGE-BANDWIDTH"],10)/1e3||void 0),n.RESOLUTION){const[t,e]=n.RESOLUTION.split("x").map((t=>parseInt(t,10)));t&&e&&(u={width:t,height:e})}const c=new URL(a[++t],e).toString();d&&r.push({id:o,quality:d,url:c,bandwidth:h,size:u})}return r}));var fe;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.CHANGING_MANIFEST="changing_manifest",t.PAUSED="paused"}(fe||(fe={}));class ge{constructor(e){this.subscription=new i,this.videoState=new ut(fe.STOPPED),this.textTracksManager=new U,this.manifests$=new t([]),this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.videoTrack.getTransition(),o=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(e===$.STOPPED)return void(t!==fe.STOPPED&&(this.videoState.startTransitionTo(fe.STOPPED),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(fe.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(this.videoState.getTransition())return;const d=this.params.desiredState.seekPosition.getTransition();if(t===fe.STOPPED)return this.videoState.startTransitionTo(fe.READY),void this.prepare();if(r||o){const t=this.videoState.getState();this.videoState.setState(fe.CHANGING_MANIFEST),this.videoState.startTransitionTo(t);const{currentTime:e}=this.video;return this.prepare(),void(d&&!a(d.to)||this.params.desiredState.seekPosition.startTransitionTo(e))}const h=null==d?void 0:d.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(h)&&this.seek(h),t){case fe.READY:return void(e===$.PAUSED?(this.videoState.setState(fe.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(fe.PLAYING),this.playIfAllowed()));case fe.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(fe.PAUSED),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case fe.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(fe.PLAYING),this.playIfAllowed()):(null==i?void 0:i.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));case fe.CHANGING_MANIFEST:break;default:return n(t)}},this.params=e,this.video=V(e.container),this.params.output.element$.next(this.video);const r={id:"master",quality:z.INVARIANT,url:this.params.source.url};this.manifests$.next([r]),this.params.output.isLive$.next(!1),this.params.output.hostname$.next(dt(this.params.source.url)),Se(this.params.source.url).then((t=>{this.manifests$.next([r,...t])}),(t=>this.params.output.error$.next({id:"ExtractHlsQualities",message:"Error fetching manifest and extracting qualities",thrown:t}))),this.subscribe()}selectManifest(){var t,e;const{autoVideoTrackSwitching:i,videoTrack:s}=this.params.desiredState,a=i.getState(),r=s.getTransition(),n=null!==(e=null!==(t=null==r?void 0:r.to)&&void 0!==t?t:s.getState())&&void 0!==e?e:"master",o=this.manifests$.getValue();if(!o)return;const d=a?"master":n;return a&&!r&&s.startTransitionTo("master"),o.find((t=>t.id===d))}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"HlsProvider",message:"HlsProvider internal logic error",thrown:e})},a=Y(this.video),r=(t,e)=>this.subscription.add(t.subscribe(e));r(a.timeUpdate$,t.position$),r(a.durationChange$,t.duration$),r(a.ended$,t.endedEvent$),r(a.error$,t.error$),r(a.isBuffering$,t.isBuffering$),r(a.currentBuffer$,t.currentBuffer$),r(a.firstBytes$,t.firstBytesEvent$),r(a.firstFrame$,t.firstFrameEvent$),this.subscription.add(a.seeked$.subscribe((()=>e.seekPosition.setState(void 0)),i)),this.subscription.add(O(this.video,e.isLooped,i)),this.subscription.add(B(this.video,e.volume,a.volumeState$,i)),this.subscription.add(a.volumeState$.subscribe(this.params.output.volume$,i)),this.textTracksManager.connect(this.video,e,t),this.subscription.add(a.play$.subscribe((()=>{this.videoState.setState(fe.PLAYING),Q(e.playbackState,$.PLAYING)}),i)).add(a.pause$.subscribe((()=>{this.videoState.setState(fe.PAUSED),Q(e.playbackState,$.PAUSED)}),i)).add(a.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===fe.READY&&this.videoState.setState(fe.READY),this.videoState.getState()===fe.PLAYING&&this.playIfAllowed()}),i).add(a.loadedMetadata$.subscribe((()=>{const t=this.params.desiredState.seekPosition.getTransition(),e=this.videoState.getTransition(),i=this.params.desiredState.videoTrack.getTransition(),a=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(i&&s(i.to)){const t=i.to;this.params.desiredState.videoTrack.setState(t);const e=this.manifests$.getValue().find((e=>e.id===t));e&&(this.params.output.currentVideoTrack$.next(e),this.params.output.hostname$.next(dt(e.url)))}a&&this.params.desiredState.autoVideoTrackSwitching.setState(a.to),e&&e.from===fe.CHANGING_MANIFEST&&this.videoState.setState(e.to),t&&s(t.to)&&this.seek(t.to)}),i))),this.subscription.add(this.manifests$.pipe(h((t=>t.map((({id:t,quality:e,size:i,bandwidth:s})=>({id:t,quality:e,size:i,bitrate:s})))))).subscribe(this.params.output.availableVideoTracks$,i));const n=o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,e.videoTrack.stateChangeStarted$,e.autoVideoTrackSwitching.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0)}prepare(){const t=this.selectManifest();a(t)||(this.video.setAttribute("src",t.url),this.video.load())}playIfAllowed(){x(this.video).then((t=>{t||(this.videoState.setState(fe.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.video.currentTime=t}}var be;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.CHANGING_MANIFEST="changing_manifest",t.PAUSED="paused"}(be||(be={}));class Te{constructor(e){var r;this.subscription=new i,this.videoState=new ut(be.STOPPED),this.textTracksManager=new U,this.manifests$=new t([]),this.liveOffset=new Xt,this.manifestStartTime$=new t(void 0),this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.videoTrack.getTransition(),o=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(e===$.STOPPED)return void(t!==be.STOPPED&&(this.videoState.startTransitionTo(be.STOPPED),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(be.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(this.videoState.getTransition())return;const d=this.params.desiredState.seekPosition.getTransition();if(t===be.STOPPED)return this.videoState.startTransitionTo(be.READY),void this.prepare();if(r||o){const t=this.videoState.getState();this.videoState.setState(be.CHANGING_MANIFEST),this.videoState.startTransitionTo(t);const e=ye(this.liveOffset.getTotalOffset());return this.prepare(),void(d&&!a(d.to)||this.params.desiredState.seekPosition.startTransitionTo(e))}const h=null==d?void 0:d.to;if((null==i?void 0:i.to)!==$.PAUSED&&s(h))return this.videoState.startTransitionTo(be.READY),this.seek(h+ye(this.liveOffset.getTotalPausedTime())),void this.prepare();switch(t){case be.READY:return void(e===$.PAUSED?(this.videoState.setState(be.PAUSED),this.liveOffset.pause(),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(be.PLAYING),this.playIfAllowed()));case be.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(be.PAUSED),this.liveOffset.pause(),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case be.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(be.PLAYING),this.liveOffset.getTotalPausedTime()<this.params.config.maxPausedTime&&this.liveOffset.getTotalOffset()<this.maxSeekBackTime$.getValue()?(this.liveOffset.resume(),this.playIfAllowed(),this.params.output.position$.next(ye(this.liveOffset.getTotalOffset()))):this.seek(ye(this.liveOffset.getTotalOffset()))):(null==i?void 0:i.to)===$.PAUSED&&(Q(this.params.desiredState.playbackState,$.PAUSED),this.liveOffset.pause()));case be.CHANGING_MANIFEST:break;default:return n(t)}},this.params=e,this.video=V(e.container),this.params.output.element$.next(this.video);const o={id:"master",quality:z.INVARIANT,url:this.params.source.url};this.manifests$.next([o]),Se(xt(this.params.source.url)).then((t=>{this.manifests$.next([o,...t])}),(t=>this.params.output.error$.next({id:"ExtractHlsQualities",message:"Error fetching manifest and extracting qualities",thrown:t}))),this.params.output.isLive$.next(!0),this.params.output.hostname$.next(dt(this.params.source.url)),this.maxSeekBackTime$=new t(null!==(r=e.source.maxSeekBackTime)&&void 0!==r?r:1/0),this.subscribe()}selectManifest(){var t,e;const{autoVideoTrackSwitching:i,videoTrack:s}=this.params.desiredState,a=i.getState(),r=s.getTransition(),n=null!==(e=null!==(t=null==r?void 0:r.to)&&void 0!==t?t:s.getState())&&void 0!==e?e:"master",o=this.manifests$.getValue();if(!o)return;const d=a?"master":n;return a&&!r&&s.startTransitionTo("master"),o.find((t=>t.id===d))}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"HlsLiveProvider",message:"HlsLiveProvider internal logic error",thrown:e})},a=Y(this.video),r=(t,e)=>this.subscription.add(t.subscribe(e,i));r(a.ended$,t.endedEvent$),r(a.error$,t.error$),r(a.isBuffering$,t.isBuffering$),r(a.currentBuffer$,t.currentBuffer$),r(a.firstBytes$,t.firstBytesEvent$),r(a.firstFrame$,t.firstFrameEvent$),this.subscription.add(e.isLooped.stateChangeStarted$.subscribe((()=>e.isLooped.setState(!1)),i)),this.subscription.add(B(this.video,e.volume,a.volumeState$,i)),this.subscription.add(a.volumeState$.subscribe(this.params.output.volume$,i)),this.textTracksManager.connect(this.video,e,t),this.subscription.add(a.play$.subscribe((()=>{this.videoState.setState(be.PLAYING),Q(e.playbackState,$.PLAYING)}),i)).add(a.pause$.subscribe((()=>{this.videoState.setState(be.PAUSED),Q(e.playbackState,$.PAUSED)}),i)).add(a.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===be.READY&&this.videoState.setState(be.READY),this.videoState.getState()===be.PLAYING&&this.playIfAllowed()}),i)),this.subscription.add(this.maxSeekBackTime$.pipe(c(),h(ye)).subscribe(this.params.output.duration$,i)),this.subscription.add(a.loadedMetadata$.subscribe((()=>{const t=this.params.desiredState.seekPosition.getTransition(),e=this.videoState.getTransition(),i=this.params.desiredState.videoTrack.getTransition(),a=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(i&&s(i.to)){const t=i.to;this.params.desiredState.videoTrack.setState(t);const e=this.manifests$.getValue().find((e=>e.id===t));e&&(this.params.output.currentVideoTrack$.next(e),this.params.output.hostname$.next(dt(e.url)))}a&&this.params.desiredState.autoVideoTrackSwitching.setState(a.to),e&&e.from===be.CHANGING_MANIFEST&&this.videoState.setState(e.to),t&&s(t.to)&&this.seek(t.to)}),i)),this.subscription.add(a.loadedData$.subscribe((()=>{var t,e;const i=null===(e=null===(t=this.video)||void 0===t?void 0:t.getStartDate())||void 0===e?void 0:e.getTime();this.manifestStartTime$.next(i||void 0)}),i)),this.subscription.add(S({startTime:this.manifestStartTime$.pipe(f(s)),currentTime:a.timeUpdate$}).subscribe((({startTime:t,currentTime:e})=>this.params.output.liveTime$.next(t+1e3*e)),i)),this.subscription.add(this.manifests$.pipe(h((t=>t.map((({id:t,quality:e,size:i,bandwidth:s})=>({id:t,quality:e,size:i,bitrate:s})))))).subscribe(this.params.output.availableVideoTracks$,i));const n=o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,e.videoTrack.stateChangeStarted$,e.autoVideoTrackSwitching.stateChangeStarted$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0)}prepare(){const t=this.selectManifest();if(a(t))return;const e=xt(t.url,this.liveOffset.getTotalOffset());var i;this.video.setAttribute("src",e),this.video.load(),(i=e,R(void 0,void 0,void 0,(function*(){const t=yield fetch(i,{method:"HEAD"});return t.headers.has("X-Playback-Duration")?parseInt(t.headers.get("X-Playback-Duration"),10):void 0}))).then((t=>{a(t)||this.maxSeekBackTime$.next(t)}))}playIfAllowed(){x(this.video).then((t=>{t||(this.videoState.setState(be.PAUSED),this.liveOffset.pause(),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0);const e=-Math.round(1e3*t),i=e<this.maxSeekBackTime$.getValue()?e:0;this.liveOffset.resetTo(i),this.params.output.position$.next(ye(i)),this.params.desiredState.seekPosition.setState(void 0)}}const ye=t=>-t/1e3,Ee={};var $e;!function(t){t.INITIALIZING="initializing",t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}($e||($e={}));const Pe=(t,e)=>new p((i=>{const s=(t,e)=>i.next(e);return t.on(e,s),()=>t.off(e,s)}));class ke{constructor(t){this.subscription=new i,this.videoState=new ut($e.INITIALIZING),this.textTracksManager=new U,this.trackLevels=new Map,this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekPosition.getTransition();if(t===$e.INITIALIZING)return;const r=null==a?void 0:a.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(r)&&this.seek(r),e){case $.STOPPED:switch(t){case $e.STOPPED:break;case $e.READY:case $e.PLAYING:case $e.PAUSED:this.stop();break;default:n(t)}break;case $.PLAYING:switch(t){case $e.PLAYING:break;case $e.STOPPED:this.prepare();break;case $e.READY:case $e.PAUSED:this.playIfAllowed();break;default:n(t)}break;case $.PAUSED:switch(t){case $e.PAUSED:break;case $e.STOPPED:this.prepare();break;case $e.READY:this.videoState.setState($e.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED);break;case $e.PLAYING:this.pause();break;default:n(t)}break;default:n(e)}},this.video=V(t.container),this.params=t,this.params.output.element$.next(this.video),this.params.output.isLive$.next(!1),this.params.output.hostname$.next(dt(this.params.source.url)),this.loadHlsJs()}destroy(){var t,e;this.subscription.unsubscribe(),this.trackLevels.clear(),this.textTracksManager.destroy(),null===(t=this.hls)||void 0===t||t.detachMedia(),null===(e=this.hls)||void 0===e||e.destroy(),this.video.remove(),this.params.output.element$.next(void 0)}loadHlsJs(){let t=!1;const e=e=>{t||this.params.output.error$.next({id:"timeout"===e?"HlsJsTimeout":"HlsJsLoadError",message:"Failed to load Hls.js",thrown:e}),t=!0},i=window.setTimeout((()=>e("timeout")),5e3);import("hls.js").then((e=>{t||(Ee.Hls=e.default,Ee.Events=e.default.Events,this.init())}),e).finally((()=>{window.clearTimeout(i),t=!0}))}init(){l(Ee.Hls,"hls.js not loaded"),this.hls=new Ee.Hls({fragLoadingMaxRetry:5,levelLoadingMaxRetry:2,manifestLoadingMaxRetry:2,fragLoadingMaxRetryTimeout:16e3,manifestLoadingMaxRetryTimeout:2e3,levelLoadingMaxRetryTimeout:2e3}),this.subscribe(),this.videoState.setState($e.STOPPED)}subscribe(){l(Ee.Events,"hls.js not loaded");const{desiredState:t,output:e}=this.params,i=t=>{e.error$.next({id:"HlsJsProvider",message:"HlsJsProvider internal logic error",thrown:t})},r=Y(this.video),n=(t,e)=>this.subscription.add(t.subscribe(e,i));n(r.timeUpdate$,e.position$),n(r.durationChange$,e.duration$),n(r.ended$,e.endedEvent$),n(r.error$,e.error$),n(r.isBuffering$,e.isBuffering$),n(r.currentBuffer$,e.currentBuffer$),n(r.firstBytes$,e.firstBytesEvent$),n(r.firstFrame$,e.firstFrameEvent$),this.subscription.add(r.seeked$.subscribe((()=>t.seekPosition.setState(void 0)),i)),this.subscription.add(O(this.video,t.isLooped,i)),this.subscription.add(B(this.video,t.volume,r.volumeState$,i)),this.subscription.add(r.volumeState$.subscribe(this.params.output.volume$)),this.subscription.add(Pe(this.hls,Ee.Events.ERROR).subscribe((t=>{var i;t.fatal&&e.error$.next({id:["HlsJsFatal",t.type,t.details].join("_"),message:`HlsJs fatal ${t.type} ${t.details}, ${null===(i=t.err)||void 0===i?void 0:i.message} ${t.reason}`,thrown:t.error})}))),this.subscription.add(r.play$.subscribe((()=>{this.videoState.setState($e.PLAYING),Q(t.playbackState,$.PLAYING)}),i)).add(r.pause$.subscribe((()=>{this.videoState.setState($e.PAUSED),Q(t.playbackState,$.PAUSED)}),i)).add(r.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===$e.READY&&this.videoState.setState($e.READY),this.videoState.getState()===$e.PLAYING&&this.playIfAllowed()}),i)),n(Pe(this.hls,Ee.Events.MANIFEST_PARSED).pipe(h((({levels:t})=>t.reduce(((t,e)=>{const i=e.name||e.height.toString(10),{width:s,height:a}=e,r=K({width:s,height:a});if(!r)return t;const n={id:i.toString(),quality:r,bitrate:e.bitrate/1e3,size:{width:s,height:a}};return this.trackLevels.set(i,{track:n,level:e}),t.push(n),t}),[])))),e.availableVideoTracks$),n(Pe(this.hls,Ee.Events.LEVEL_LOADING).pipe(h((({url:t})=>dt(t)))),e.hostname$),this.subscription.add(N(t.autoVideoTrackSwitching,(()=>this.hls.autoLevelEnabled),(t=>{this.hls.nextLevel=t?-1:this.hls.currentLevel,this.hls.loadLevel=t?-1:this.hls.loadLevel}),{onError:i}));const d=t=>{var e;return null===(e=Array.from(this.trackLevels.values()).find((({level:e})=>e===t)))||void 0===e?void 0:e.track},c=Pe(this.hls,Ee.Events.LEVEL_SWITCHED).pipe(h((({level:t})=>d(this.hls.levels[t]))));c.pipe(f(s)).subscribe(e.currentVideoTrack$,i),this.subscription.add(N(t.videoTrack,(()=>{var t;return null===(t=d(this.hls.levels[this.hls.currentLevel]))||void 0===t?void 0:t.id}),(t=>{var e;if(a(t))return;const i=null===(e=this.trackLevels.get(t))||void 0===e?void 0:e.level;if(!i)return;const s=this.hls.levels.indexOf(i),r=this.hls.currentLevel,n=this.hls.levels[r];!n||i.bitrate>n.bitrate?this.hls.nextLevel=s:(this.hls.loadLevel=s,this.hls.loadLevel=s)}),{changed$:c.pipe(h((t=>null==t?void 0:t.id))),onError:i})),n(r.progress$,(()=>{this.params.dependencies.throughputEstimator.rawThroughput$.next(this.hls.bandwidthEstimate/1e3)})),this.textTracksManager.connect(this.video,t,e);const p=o(t.playbackState.stateChangeStarted$,t.videoTrack.stateChangeStarted$,t.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(p.subscribe(this.syncPlayback,i))}prepare(){this.videoState.startTransitionTo($e.READY),this.hls.attachMedia(this.video),this.hls.loadSource(this.params.source.url)}playIfAllowed(){return R(this,void 0,void 0,(function*(){this.videoState.startTransitionTo($e.PLAYING);(yield x(this.video))||(this.videoState.setState($e.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}pause(){this.videoState.startTransitionTo($e.PAUSED),this.video.pause()}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.video.currentTime=t}stop(){this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.hls.stopLoad(),this.hls.detachMedia(),this.video.setAttribute("src",""),this.video.load(),this.videoState.setState($e.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)}}class we{constructor(t){this.iterator=t[Symbol.iterator](),this.next()}next(){this.current=this.iterator.next()}getValue(){if(this.current.done)throw new Error("Iterable is completed");return this.current.value}isCompleted(){return Boolean(this.current.done)}}var Ae,De,_e,Ie,Re,Le,Ce,xe,Ne,Oe,Be,Me,Ue,Ve,He,Fe,qe,Ge;const Ye=(()=>{const{userAgent:t}=window.navigator;return!/chrome/i.test(t)&&/webkit|safari|khtml/i.test(t)})(),ze=(null===(De=null===(Ae=navigator)||void 0===Ae?void 0:Ae.userAgentData)||void 0===De?void 0:De.mobile)||/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(navigator.appVersion),Qe=document.createElement("video"),We={mse:Boolean(window.MediaSource&&window.MediaStreamTrack&&(null===(Ie=null===(_e=window.SourceBuffer)||void 0===_e?void 0:_e.prototype)||void 0===Ie?void 0:Ie.appendBuffer)),hls:Boolean((null===(Re=Qe.canPlayType)||void 0===Re?void 0:Re.call(Qe,"application/x-mpegurl"))||(null===(Le=Qe.canPlayType)||void 0===Le?void 0:Le.call(Qe,"vnd.apple.mpegURL")))},Je={mp4:Boolean(null===(Ce=Qe.canPlayType)||void 0===Ce?void 0:Ce.call(Qe,"video/mp4")),webm:Boolean(null===(xe=Qe.canPlayType)||void 0===xe?void 0:xe.call(Qe,"video/webm"))},je={h264:Boolean(null===(Oe=null===(Ne=window.MediaSource)||void 0===Ne?void 0:Ne.isTypeSupported)||void 0===Oe?void 0:Oe.call(Ne,'video/mp4; codecs="avc1.42000a,mp4a.40.2"')),h265:Boolean(null===(Me=null===(Be=window.MediaSource)||void 0===Be?void 0:Be.isTypeSupported)||void 0===Me?void 0:Me.call(Be,'video/mp4; codecs="hev1.1.6.L93.B0"')),vp9:Boolean(null===(Ve=null===(Ue=window.MediaSource)||void 0===Ue?void 0:Ue.isTypeSupported)||void 0===Ve?void 0:Ve.call(Ue,'video/webm; codecs="vp9"')),aac:Boolean(null===(Fe=null===(He=window.MediaSource)||void 0===He?void 0:He.isTypeSupported)||void 0===Fe?void 0:Fe.call(He,'audio/mp4; codecs="mp4a.40.2"')),opus:Boolean(null===(Ge=null===(qe=window.MediaSource)||void 0===qe?void 0:qe.isTypeSupported)||void 0===Ge?void 0:Ge.call(qe,'audio/webm; codecs="opus"'))},Xe=(je.h264||je.h265)&&je.aac,Ke=!Ye,Ze=ze||Ye,ti=!We.hls||!Ze,ei=3e4,ii=18e4,si=3,ai=100,ri={cacheDuration:12e4},ni={maxPausedTime:3e4,chunkDuration:5e3,optimalBufferDuration:1e4,maxParallelRequests:5},oi={maxPausedTime:3e4},di={maxPausedTime:3e4};class hi{constructor(a){this.current$=new t({type:void 0}),this.providerError$=new e,this.noAvailableProvidersError$=new e,this.providerOutput={position$:new t(0),duration$:new t(1/0),volume$:new t({muted:!1,volume:1}),currentVideoTrack$:new t(void 0),availableVideoTracks$:new t([]),currentBuffer$:new t(void 0),isBuffering$:new t(!0),error$:new e,endedEvent$:new e,firstBytesEvent$:new e,firstFrameEvent$:new e,isLive$:new t(void 0),liveTime$:new t(void 0),availableTextTracks$:new t([]),currentTextTrack$:new t(void 0),hostname$:new t(void 0),element$:new t(void 0)},this.subscription=new i,this.params=a,this.log=this.params.dependencies.logger.createComponentLog("ProviderContainer");const{formatsToAvoid:r}=this.params.tuning,o=r.length?[...a.screenFormatsPriority.filter((t=>!r.includes(t))),...a.screenFormatsPriority.filter((t=>r.includes(t)))]:a.screenFormatsPriority;this.screenFormatsIterator=new we(o.filter((t=>s(a.sources[t]))).filter((t=>{switch(t){case P.DASH:return We.mse&&Je.mp4&&Xe&&Ke;case P.DASH_SEP:return We.mse&&Je.mp4&&Xe;case P.DASH_WEBM:case P.DASH_WEBM_VK:case P.DASH_LIVE_WEBM:return We.mse&&Je.webm&&je.vp9&&je.opus;case P.DASH_LIVE:case P.DASH_ONDEMAND:return We.mse&&Je.mp4&&Xe;case P.HLS:case P.HLS_LIVE:case P.HLS_ONDEMAND:return We.hls&&Je.mp4&&Ze;case P.HLS_JS:return We.mse&&Je.mp4&&Xe&&ti;case P.MPEG:return Je.mp4;default:return n(t)}}))),this.chromecastFormatsIterator=new we(a.chromecastFormatsPriority.filter((t=>s(a.sources[t]))))}init(){this.subscription.add(this.initProviderErrorHandling()),this.subscription.add(this.params.dependencies.chromecastInitializer.connection$.subscribe((()=>{this.reinitProvider()})))}destroy(){this.destroyProvider(),this.current$.next({type:void 0}),this.subscription.unsubscribe()}initProvider(){const t=this.chooseDestination(),e=this.chooseFormat(t);if(a(e))return void this.handleNoFormatsError(t);const i=this.createProvider(t,e);this.current$.next({type:e,provider:i,destination:t})}reinitProvider(){this.destroyProvider(),this.initProvider()}switchToNextProvider(){this.destroyProvider();const t=this.current$.getValue().destination;l(t),this.skipFormat(t),this.initProvider()}destroyProvider(){const t=this.current$.getValue().provider;if(!t)return;this.log({message:"destroyProvider"});const e=this.params.desiredState.seekPosition;e.getTransition()||e.startTransitionTo(this.providerOutput.position$.getValue()),t.destroy();const i=this.providerOutput.isBuffering$;i.getValue()||i.next(!0)}createProvider(t,e){switch(this.log({message:`createProvider: ${t}:${e}`}),t){case k.SCREEN:return this.createScreenProvider(e);case k.CHROMECAST:return this.createChromecastProvider(e);default:return n(t)}}createScreenProvider(t){const{sources:e,container:i,desiredState:s}=this.params,a=this.providerOutput;switch(t){case P.DASH:{const r=e[t];return l(r),new Gt({container:i,source:r,desiredState:s,output:a,config:ri,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.DASH_WEBM_VK:{const r=e[t];return l(r),new Lt({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.DASH_SEP:case P.DASH_WEBM:case P.DASH_ONDEMAND:case P.DASH_LIVE_WEBM:{const r=e[t];return l(r),new ee({container:i,source:r,desiredState:s,output:a,format:t,config:di,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.HLS:case P.HLS_ONDEMAND:{const r=e[t];return l(r),new ge({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.HLS_LIVE:{const r=e[t];return l(r),new Te({container:i,source:r,desiredState:s,output:a,config:oi,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.HLS_JS:{const r=e[t];return l(r),new ke({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.MPEG:{const r=e[t];return l(r),new Mt({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.DASH_LIVE:{const r=e[t];return l(r),new pe({container:i,source:r,desiredState:s,output:a,config:ni,dependencies:this.params.dependencies,tuning:this.params.tuning})}default:return n(t)}}createChromecastProvider(t){const{sources:e,container:i,desiredState:s,meta:a}=this.params,r=this.providerOutput,n=this.params.dependencies.chromecastInitializer.connection$.getValue();return l(n),new Ot({connection:n,meta:a,container:i,source:e,format:t,desiredState:s,output:r,dependencies:this.params.dependencies,tuning:this.params.tuning})}chooseDestination(){return this.params.dependencies.chromecastInitializer.connection$.getValue()?k.CHROMECAST:k.SCREEN}chooseFormat(t){switch(t){case k.SCREEN:return this.screenFormatsIterator.isCompleted()?void 0:this.screenFormatsIterator.getValue();case k.CHROMECAST:return this.chromecastFormatsIterator.isCompleted()?void 0:this.chromecastFormatsIterator.getValue();default:return n(t)}}skipFormat(t){switch(t){case k.SCREEN:return this.screenFormatsIterator.next();case k.CHROMECAST:return this.chromecastFormatsIterator.next();default:return n(t)}}handleNoFormatsError(t){switch(t){case k.SCREEN:return this.noAvailableProvidersError$.next(),void this.current$.next({type:void 0});case k.CHROMECAST:return void this.params.dependencies.chromecastInitializer.disconnect();default:return n(t)}}initProviderErrorHandling(){let e=[],a=0;const r=new i;var n;return r.add(o(this.providerOutput.error$,(n={desiredPlaybackState$:this.params.desiredState.playbackState,maxTransitionInterval:ei,position$:this.providerOutput.position$,providerChanged$:this.current$},new p((e=>{const s=new i,a=g(n.maxTransitionInterval),r=new t(void 0);o(n.desiredPlaybackState$.stateChangeStarted$.pipe(b(a)),n.desiredPlaybackState$.stateChangeEnded$.pipe(b(void 0)),n.providerChanged$.pipe(h((()=>r.getValue())))).subscribe(r);const d=new i;return s.add(d),s.add(r.subscribe((t=>{d.unsubscribe(),t&&d.add(t.subscribe(e))}))),s}))).pipe(b({id:"ProviderHangup",message:"An operation failed to complete within reasonable time"}))).subscribe(this.providerError$)),r.add(this.providerError$.pipe(T(ai,{leading:!1,trailing:!0})).subscribe((()=>{const t=Date.now();this.current$.getValue().destination===k.CHROMECAST?(this.destroyProvider(),this.params.dependencies.chromecastInitializer.stopMedia().then((()=>{this.switchToNextProvider()}),(()=>{this.params.dependencies.chromecastInitializer.disconnect()}))):s(e[a])&&t<e[a]+ii?(e=[],this.switchToNextProvider()):(e[a]=t,this.reinitProvider()),a=(a+1)%si}))),r}}var ui;!function(t){t[t.LOCAL_STORAGE=0]="LOCAL_STORAGE",t[t.SESSION_STORAGE=1]="SESSION_STORAGE",t[t.RUNTIME=2]="RUNTIME"}(ui||(ui={}));const ci=new Map;let li=ui.RUNTIME;const pi=`vk-videoplayer-dummy-key-${Math.random()}`;(()=>{try{localStorage.setItem(pi,"test"),localStorage.removeItem(pi),li=ui.LOCAL_STORAGE}catch(t){if(!(t instanceof DOMException))throw t;try{sessionStorage.getItem(pi),li=ui.SESSION_STORAGE}catch(t){if(!(t instanceof DOMException))throw t;li=ui.RUNTIME}}})();const mi=(t,e,i)=>i*e+(1-i)*t,vi=()=>{var t,e;return null!==(e=null===(t=window.performance)||void 0===t?void 0:t.now())&&void 0!==e?e:Date.now()},Si=window.navigator.connection,fi=()=>{const t=null==Si?void 0:Si.downlink;if(t&&10!==t)return 1e3*t};class gi{constructor(s){this.smoothedCombination=this.load()||fi()||5e3,this.smoothedFast=this.smoothedCombination,this.smoothedSlow=this.smoothedCombination,this.subscription=new i,this.rawSeries$=new at("raw_throughput"),this.smoothedSeries$=new at("smoothed_throughput"),this.reportedSeries$=new at("reported_throughput"),this.xhr$=new e,this.rawSpeed$=new e,this.rawThroughput$=new e,this.stream$=new e,this.estimation$=new t(this.smoothedSlow),this.rtt$=new t(void 0),this.tuningConfig=s;const a=fi();if(a&&this.addValue(a),this.subscription.add(this.xhr$.subscribe((t=>this.trackXHR(t)))),this.subscription.add(this.stream$.subscribe((t=>this.trackStream(t)))),this.subscription.add(this.rawSpeed$.subscribe((({size:t,time:e})=>this.addRawSpeed(t,e)))),this.subscription.add(this.rawThroughput$.subscribe((t=>this.addValue(t)))),this.subscription.add(this.estimation$.subscribe(this.reportedSeries$)),this.tuningConfig.useBrowserEstimation){const t=Si&&"rtt"in Si,e=Si&&"onchange"in Si;t&&this.rtt$.next(Si.rtt),e&&this.subscription.add(r(Si,"change").subscribe((()=>{t&&this.rtt$.next(Si.rtt);const e=fi();e&&this.addValue(e)})))}}destroy(){this.subscription.unsubscribe()}trackXHR(t){let e=0,s=vi();const a=new i;switch(this.subscription.add(a),t.readyState){case 4:break;case 3:case 2:a.add(r(t,"progress").pipe(m()).subscribe((t=>{e=t.loaded,s=vi()})));break;case 1:case 0:a.add(r(t,"loadstart").subscribe((()=>{e=0,s=vi()})))}a.add(r(t,"loadend").subscribe((i=>{if(200===t.status){const t=i.loaded,a=vi(),r=t-e,n=a-s;this.addRawSpeed(r,n)}a.unsubscribe()})))}trackStream(t){const e=t.getReader();if(!e)return void t.cancel("Could not get reader");let i=0;const s=vi();let a=0,r=vi();const n=i=>{e.releaseLock(),t.cancel(`Throughput Estimator error: ${i}`).catch((()=>{}))},o=({done:t,value:d})=>R(this,void 0,void 0,(function*(){t?this.addRawSpeed(i,vi()-s):d&&(i+=d.byteLength,a+=d.byteLength,a>=this.tuningConfig.streamMinSampleSize&&vi()-r>=this.tuningConfig.streamMinSampleTime&&(this.addRawSpeed(a,vi()-r),a=0,r=vi()),yield null==e?void 0:e.read().then(o,n))}));null==e||e.read().then(o,n)}addRawSpeed(t,e){if(this.sanityCheck(t,e)){const i=8*t/e;this.addValue(i)}}sanityCheck(t,e){const i=8*t/e;return!(!i||!isFinite(i))&&(!(i>1e6)&&(!(i<30)&&(!(t<1024)&&!(e<=50))))}addValue(t){const e=Math.round(mi(this.smoothedSlow,t,this.tuningConfig.emaAlphaSlow)),i=Math.round(mi(this.smoothedFast,t,this.tuningConfig.emaAlphaFast));this.smoothedCombination=Math.min(e,i),this.rawSeries$.next(t),this.smoothedSeries$.next(this.smoothedCombination);const s=this.load();this.smoothedSlow=e,this.smoothedFast=i,(!s||Math.abs(this.smoothedCombination-s)/s>=this.tuningConfig.changeThreshold)&&(this.dump(),this.estimation$.next(this.smoothedCombination))}load(){const t=(t=>{var e,i;switch(li){case ui.LOCAL_STORAGE:return null!==(e=localStorage.getItem(t))&&void 0!==e?e:void 0;case ui.SESSION_STORAGE:return null!==(i=sessionStorage.getItem(t))&&void 0!==i?i:void 0;case ui.RUNTIME:return ci.get(t);default:n(li)}})("one_video_throughput");if(t)return parseInt(t,10)||void 0}dump(){((t,e)=>{switch(li){case ui.LOCAL_STORAGE:return localStorage.setItem(t,e);case ui.SESSION_STORAGE:return sessionStorage.setItem(t,e);case ui.RUNTIME:return void ci.set(t,e);default:n(li)}})("one_video_throughput",this.smoothedCombination.toFixed(0))}}const bi=(t=(t=>t))=>({playbackState:e,seekPosition:r,playbackAbort$:n,position$:d})=>new p((u=>{let c;const l=e.transitionEnded$.pipe(f((t=>(t.from===$.PAUSED||t.from===$.STOPPED)&&t.to===$.PLAYING))),p=e.stateChangeEnded$.pipe(f((t=>t.from===$.PLAYING&&t.to===$.PAUSED))),m=r.stateChangeEnded$.pipe(f((t=>{var i,a;return s(t.to)&&(null!==(a=null===(i=e.getTransition())||void 0===i?void 0:i.from)&&void 0!==a?a:e.getState())===$.PLAYING}))),v=r.stateChangeEnded$.pipe(f((t=>{var i,s;return a(t.to)&&(null!==(s=null===(i=e.getTransition())||void 0===i?void 0:i.from)&&void 0!==s?s:e.getState())===$.PLAYING}))),S=o(l,v).pipe(h((()=>t(d.getValue())))),g=o(p,m,n).pipe(h((()=>t(d.getValue()))));return(new i).add(S.subscribe((e=>{c=t(e)}))).add(g.subscribe((e=>{if(a(c))return;const i={start:c,end:t(e)};c=void 0,u.next(i)})))})),Ti=bi((t=>t)),yi=bi((t=>Math.round(1e3*t)+Date.now())),Ei={[k.SCREEN]:{vod:[P.HLS,P.HLS_ONDEMAND,P.DASH_WEBM_VK,P.DASH_WEBM,P.DASH,P.DASH_SEP,P.DASH_ONDEMAND,P.HLS_JS,P.MPEG],live:[P.HLS_LIVE,P.DASH_LIVE,P.DASH_LIVE_WEBM]},[k.CHROMECAST]:{vod:[P.DASH_WEBM_VK,P.DASH_WEBM,P.DASH_SEP,P.DASH_ONDEMAND,P.HLS,P.HLS_ONDEMAND,P.MPEG],live:[P.HLS_LIVE]}};class $i{constructor(s={}){if(this.subscription=new i,this.logger=new y,this.isPlaybackStarted=!1,this.desiredState={playbackState:new ut($.STOPPED),seekPosition:new ut(void 0),volume:new ut({volume:1,muted:!1}),videoTrack:new ut(void 0),autoVideoTrackSwitching:new ut(!0),isLooped:new ut(!1),externalTextTracks:new ut([]),currentTextTrack:new ut(void 0),textTrackCuesSettings:new ut({})},this.info={playbackState$:new t($.STOPPED),position$:new t(0),duration$:new t(1/0),muted$:new t(!1),volume$:new t(1),availableQualities$:new t([]),currentQuality$:new t(void 0),isAutoQualityEnabled$:new t(!0),currentBuffer$:new t(void 0),isBuffering$:new t(!0),isEnded$:new t(!1),isLooped$:new t(!1),isLive$:new t(void 0),liveTime$:new t(void 0),currentFormat$:new t(void 0),availableTextTracks$:new t([]),currentTextTrack$:new t(void 0),throughputEstimation$:new t(void 0),rttEstimation$:new t(void 0),videoBitrate$:new t(void 0),hostname$:new t(void 0),chromecastState$:new t(w.NOT_AVAILABLE),chromecastDeviceName$:new t(void 0)},this.events={started$:new e,startAttempt$:new e,willPause$:new e,willResume$:new e,willDestruct$:new e,watchCoverageRecord$:new e,watchCoverageLive$:new e,managedError$:new e,fatalError$:new e,ended$:new e,seeked$:new e,willSeek$:new e,firstBytes$:new e,firstFrame$:new e,log$:new e},this.experimental={element$:new t(void 0),enableDebugTelemetry$:new t(!1),dumpTelemetry:it},this.initLogs(),this.tuning=(t=>{const e={};for(const i of Object.keys(D)){const s=D[i],a=t[i];Array.isArray(s)&&Array.isArray(a)?e[i]=a:e[i]="object"==typeof s&&"object"==typeof a?Object.assign(Object.assign({},s),a):null!=a?a:s}return e})(s),this.chromecastInitializer=new _({receiverApplicationId:s.chromecastReceiverId,isDisabled:s.disableChromecast,dependencies:{logger:this.logger}}),this.throughputEstimator=new gi(this.tuning.throughputEstimator),this.initChromecastSubscription(),this.initDesiredStateSubscriptions(),Proxy&&Reflect)return new Proxy(this,{get:(t,e,i)=>{const s=Reflect.get(t,e,i);return"function"!=typeof s?s:(...i)=>{try{return s.apply(t,i)}catch(t){const s=i.map((t=>JSON.stringify(t,((t,e)=>{const i=typeof e;return["number","string","boolean"].includes(i)?e:null===e?null:`<${i}>`})))),a=`Player.${String(e)}`,r=`Exception calling ${a} (${s.join(", ")})`;throw this.events.fatalError$.next({id:a,message:r,thrown:t}),t}}}})}initVideo(t){var e,i;return this.config=t,this.domContainer=(t=>{const e="string"==typeof t.container?document.getElementById(t.container):t.container;return l(e,`Wrong container or containerId {${t.container}}`),e})(t),this.chromecastInitializer.contentId=null===(e=t.meta)||void 0===e?void 0:e.videoId,this.providerContainer=new hi({screenFormatsPriority:[...Ei[k.SCREEN].live,...Ei[k.SCREEN].vod],chromecastFormatsPriority:[...Ei[k.CHROMECAST].live,...Ei[k.CHROMECAST].vod],sources:t.sources,meta:null!==(i=t.meta)&&void 0!==i?i:{},container:this.domContainer,desiredState:this.desiredState,dependencies:{throughputEstimator:this.throughputEstimator,chromecastInitializer:this.chromecastInitializer,logger:this.logger},tuning:this.tuning}),this.initProviderContainerSubscription(this.providerContainer),this.initStartingVideoTrack(this.providerContainer),this.providerContainer.init(),this.initDebugTelemetry(),this}destroy(){var t;this.events.willDestruct$.next(),null===(t=this.providerContainer)||void 0===t||t.destroy(),this.throughputEstimator.destroy(),this.chromecastInitializer.destroy(),this.subscription.unsubscribe()}play(){const t=this.desiredState.playbackState;return t.getState()!==$.PLAYING&&t.startTransitionTo($.PLAYING),this}pause(){const t=this.desiredState.playbackState;return t.getState()!==$.PAUSED&&t.startTransitionTo($.PAUSED),this}stop(){const t=this.desiredState.playbackState;return t.getState()!==$.STOPPED&&t.startTransitionTo($.STOPPED),this}seekTime(t){return this.events.willSeek$.next({from:this.getExactTime(),to:t}),this.desiredState.seekPosition.startTransitionTo(t),this}seekPercent(t){const e=this.info.duration$.getValue();return isFinite(e)&&this.seekTime(Math.abs(e)*t),this}setVolume(t){return this.chromecastInitializer.castState$.getValue()===w.CONNECTED?this.chromecastInitializer.setVolume(t):this.desiredState.volume.startTransitionTo({volume:t,muted:this.desiredState.volume.getState().muted}),this}setMuted(t){return this.chromecastInitializer.castState$.getValue()===w.CONNECTED?this.chromecastInitializer.setMuted(t):this.desiredState.volume.startTransitionTo({volume:this.desiredState.volume.getState().volume,muted:t}),this}setQuality(t){l(this.providerContainer);const e=this.providerContainer.providerOutput.availableVideoTracks$.getValue();e.length||(this.explicitInitialQuality=t);const i=e.find((e=>e.quality===t));return i&&this.desiredState.videoTrack.startTransitionTo(i.id),this}setAutoQuality(t){return this.desiredState.autoVideoTrackSwitching.startTransitionTo(t),this}setExternalTextTracks(t){return this.desiredState.externalTextTracks.startTransitionTo(t.map((t=>Object.assign({type:"external"},t)))),this}selectTextTrack(t){var e;return(void 0===t||(null===(e=this.providerContainer)||void 0===e?void 0:e.providerOutput.availableTextTracks$.getValue().find((e=>e.id===t))))&&this.desiredState.currentTextTrack.startTransitionTo(t),this}setTextTrackCueSettings(t){return this.desiredState.textTrackCuesSettings.startTransitionTo(t),this}setLooped(t){return this.desiredState.isLooped.startTransitionTo(t),this}toggleChromecast(){this.chromecastInitializer.toggleConnection()}getExactTime(){var t;l(this.providerContainer);const e=this.providerContainer.providerOutput.element$.getValue();if(a(e))return this.info.position$.getValue();const i=this.desiredState.seekPosition.getTransition(),r=null!==(t=null==i?void 0:i.to)&&void 0!==t?t:null==i?void 0:i.from;return s(r)?r:e.currentTime}getAllLogs(){return this.logger.getAllLogs()}initDesiredStateSubscriptions(){this.subscription.add(o(this.desiredState.playbackState.stateChangeStarted$,this.desiredState.playbackState.forceChanged$).pipe(h((t=>t.to))).subscribe(this.info.playbackState$)).add(this.desiredState.isLooped.stateChangeEnded$.pipe(h((t=>t.to))).subscribe(this.info.isLooped$)).add(this.desiredState.autoVideoTrackSwitching.stateChangeEnded$.pipe(h((t=>t.to))).subscribe(this.info.isAutoQualityEnabled$)).add(this.desiredState.seekPosition.stateChangeEnded$.pipe(f((t=>void 0===t.to)),b(void 0)).subscribe(this.events.seeked$));const t=new i;this.subscription.add(t),this.subscription.add(this.desiredState.playbackState.stateChangeStarted$.pipe(f((t=>t.to===$.PLAYING))).subscribe((()=>{t.unsubscribe(),t.add(this.desiredState.playbackState.stateChangeEnded$.pipe(f((t=>t.to===$.PLAYING||t.to===$.PAUSED)),m()).subscribe((t=>{const e=t.to===$.PLAYING,i=this.info.muted$.getValue(),s=e?i?A.SuccessWithoutSound:A.SuccessWithSound:A.Failed;this.events.startAttempt$.next(s)})))}))),this.subscription.add(this.desiredState.playbackState.stateChangeEnded$.pipe(f((t=>t.to===$.PLAYING))).subscribe((()=>{this.isPlaybackStarted||(this.isPlaybackStarted=!0,this.events.started$.next())}))).add(this.desiredState.playbackState.stateChangeStarted$.subscribe((t=>{switch(t.to){case $.PAUSED:this.events.willPause$.next();break;case $.PLAYING:this.isPlaybackStarted&&this.events.willResume$.next()}})))}initProviderContainerSubscription(t){this.subscription.add(t.current$.pipe(h((t=>t.type))).subscribe(this.info.currentFormat$)).add(t.current$.pipe(h((t=>t.destination)),c()).subscribe((()=>{this.isPlaybackStarted=!1}))).add(t.providerOutput.availableVideoTracks$.pipe(h((t=>t.map((({quality:t})=>t)).sort(((t,e)=>Z(t)?1:Z(e)?-1:J(e,t)?1:-1))))).subscribe(this.info.availableQualities$)).add(t.providerOutput.currentVideoTrack$.subscribe((t=>{this.info.currentQuality$.next(null==t?void 0:t.quality),this.info.videoBitrate$.next(null==t?void 0:t.bitrate)}))).add(t.providerOutput.hostname$.pipe(c()).subscribe(this.info.hostname$)).add(t.providerOutput.currentTextTrack$.subscribe(this.info.currentTextTrack$)).add(t.providerOutput.availableTextTracks$.subscribe(this.info.availableTextTracks$)).add(t.providerOutput.currentBuffer$.subscribe(this.info.currentBuffer$)).add(t.providerOutput.duration$.subscribe(this.info.duration$)).add(t.providerOutput.isBuffering$.subscribe(this.info.isBuffering$)).add(t.providerOutput.isLive$.subscribe(this.info.isLive$)).add(t.providerOutput.liveTime$.subscribe(this.info.liveTime$)).add(t.providerOutput.volume$.pipe(h((t=>t.muted)),c()).subscribe(this.info.muted$)).add(t.providerOutput.volume$.pipe(h((t=>t.volume)),c()).subscribe(this.info.volume$)).add((({seekPosition:t,position$:e})=>o(t.stateChangeStarted$.pipe(h((t=>t.to)),f(s)),e.pipe(f((()=>a(t.getState())&&a(t.getTransition()))))))({seekPosition:this.desiredState.seekPosition,position$:t.providerOutput.position$}).subscribe(this.info.position$)).add(o(t.providerOutput.endedEvent$.pipe(b(!0)),this.desiredState.seekPosition.stateChangeEnded$.pipe(f((t=>void 0!==t.from)),b(!1))).pipe(c()).subscribe(this.info.isEnded$)).add(t.providerOutput.endedEvent$.subscribe(this.events.ended$)).add(t.providerError$.subscribe(this.events.managedError$)).add(t.noAvailableProvidersError$.pipe(h((t=>({id:"NoProviders",message:"No suitable providers or all providers failed"})))).subscribe(this.events.fatalError$)).add(t.providerOutput.element$.subscribe(this.experimental.element$)).add(t.providerOutput.firstBytesEvent$.subscribe(this.events.firstBytes$)).add(t.providerOutput.firstFrameEvent$.subscribe(this.events.firstFrame$)).add(this.throughputEstimator.estimation$.subscribe(this.info.throughputEstimation$)).add(this.throughputEstimator.rtt$.subscribe(this.info.rttEstimation$));const e=new i;this.subscription.add(e);const r=o(this.events.willDestruct$,t.current$.pipe(f((t=>Boolean(null==t?void 0:t.provider)))));t.providerOutput.isLive$.pipe(c()).subscribe((t=>{switch(l(this.providerContainer),e.unsubscribe(),t){case!0:e.add(yi({seekPosition:this.desiredState.seekPosition,playbackState:this.desiredState.playbackState,playbackAbort$:r,position$:this.providerContainer.providerOutput.position$}).subscribe(this.events.watchCoverageLive$));break;case!1:e.add(Ti({seekPosition:this.desiredState.seekPosition,playbackState:this.desiredState.playbackState,playbackAbort$:r,position$:this.providerContainer.providerOutput.position$}).subscribe(this.events.watchCoverageRecord$))}}))}initChromecastSubscription(){this.subscription.add(this.chromecastInitializer.castState$.subscribe(this.info.chromecastState$)),this.subscription.add(this.chromecastInitializer.connection$.pipe(h((t=>null==t?void 0:t.castDevice.friendlyName))).subscribe(this.info.chromecastDeviceName$)),this.subscription.add(this.chromecastInitializer.errorEvent$.subscribe(this.events.managedError$))}initStartingVideoTrack(t){const e=new i;this.subscription.add(e),this.subscription.add(t.current$.pipe(c(((t,e)=>t.provider===e.provider))).subscribe((()=>{e.unsubscribe(),e.add(t.providerOutput.availableVideoTracks$.pipe(f((t=>t.length>0)),m()).subscribe((t=>{this.setStartingVideoTrack(t)})))})))}setStartingVideoTrack(t){let e;this.explicitInitialQuality&&(e=t.find((({quality:t})=>t===this.explicitInitialQuality)),this.explicitInitialQuality=void 0),e||(e=nt(t,{container:this.domContainer.getBoundingClientRect(),throughput:this.throughputEstimator.estimation$.getValue(),tuning:this.tuning.autoTrackSelection,forwardBufferHealth:0})),this.desiredState.videoTrack.startTransitionTo(e.id),this.info.currentQuality$.next(e.quality),this.info.videoBitrate$.next(e.bitrate)}initLogs(){this.subscription.add(o(this.desiredState.videoTrack.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"quality",type:"start"})))),this.desiredState.videoTrack.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"quality",type:"end"})))),this.desiredState.autoVideoTrackSwitching.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"autoQualityEnabled",type:"start"})))),this.desiredState.autoVideoTrackSwitching.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"autoQualityEnabled",type:"end"})))),this.desiredState.seekPosition.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"seekPosition",type:"start"})))),this.desiredState.seekPosition.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"seekPosition",type:"end"})))),this.desiredState.playbackState.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"playbackState",type:"start"})))),this.desiredState.playbackState.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"playbackState",type:"end"}))))).pipe(h((t=>({component:"desiredState",message:`[${t.entity} change] ${t.type}: ${JSON.stringify(t.transition)}`})))).subscribe(this.logger.log)),this.subscription.add(this.logger.log$.subscribe(this.events.log$))}initDebugTelemetry(){var t;const e=null===(t=this.providerContainer)||void 0===t?void 0:t.providerOutput;l(this.providerContainer),l(e),et={},this.experimental.enableDebugTelemetry$.next(this.tuning.enableTelemetryAtStart),[this.experimental.enableDebugTelemetry$.subscribe((t=>{tt=t})),this.providerContainer.current$.subscribe((({type:t})=>st("provider",t))),e.duration$.subscribe((t=>st("duration",t))),e.availableVideoTracks$.pipe(f((t=>!!t.length)),m()).subscribe((t=>st("tracks",t))),this.events.fatalError$.subscribe(new at("fatalError")),this.events.managedError$.subscribe(new at("managedError")),e.position$.subscribe(new at("position")),e.currentVideoTrack$.pipe(h((t=>null==t?void 0:t.quality))).subscribe(new at("quality")),e.currentBuffer$.subscribe(new at("buffer")),e.isBuffering$.subscribe(new at("isBuffering"))].forEach((t=>this.subscription.add(t))),st("codecs",Object.keys(je).filter((t=>je[t])))}}const Pi="@vkontakte/videoplayer-core@2.0.36";export{w as ChromecastState,$ as PlaybackState,$i as Player,Pi as SDK_VERSION,A as StartStatus,P as VideoFormat,z as VideoQuality};
6
+ import{ValueSubject as t,Subject as e,Subscription as i,isNonNullable as s,isNullable as a,fromEvent as r,assertNever as n,merge as o,tap as d,map as h,observableFrom as u,filterChanged as c,assertNonNullable as l,Observable as p,once as m,debounce as v,combine as S,filter as f,timeout as g,mapTo as b,throttle as T,Logger as y}from"@vkontakte/videoplayer-shared";export{Observable,Subject,Subscription,ValueSubject}from"@vkontakte/videoplayer-shared";import E from"lodash/debounce";var $,P,k,w,A;!function(t){t.STOPPED="stopped",t.PLAYING="playing",t.PAUSED="paused"}($||($={})),function(t){t.MPEG="MPEG",t.DASH="DASH",t.DASH_SEP="DASH_SEP",t.DASH_WEBM="DASH_WEBM",t.DASH_WEBM_VK="DASH_WEBM_VK",t.DASH_ONDEMAND="DASH_ONDEMAND",t.DASH_LIVE="DASH_LIVE",t.DASH_LIVE_WEBM="DASH_LIVE_WEBM",t.HLS="HLS",t.HLS_ONDEMAND="HLS_ONDEMAND",t.HLS_JS="HLS_JS",t.HLS_LIVE="HLS_LIVE"}(P||(P={})),function(t){t.SCREEN="SCREEN",t.CHROMECAST="CHROMECAST"}(k||(k={})),function(t){t.NOT_AVAILABLE="NOT_AVAILABLE",t.AVAILABLE="AVAILABLE",t.CONNECTING="CONNECTING",t.CONNECTED="CONNECTED"}(w||(w={})),function(t){t.SuccessWithSound="success_with_sound",t.SuccessWithoutSound="success_without_sound",t.Failed="failed"}(A||(A={}));const D={throughputEstimator:{emaAlphaSlow:.2,emaAlphaFast:.7,changeThreshold:.2,useBrowserEstimation:!0,rttPenaltyRequestSize:1048576,streamMinSampleSize:10240,streamMinSampleTime:300},autoTrackSelection:{bitrateFactorAtEmptyBuffer:1.8,bitrateFactorAtFullBuffer:1.2,usePixelRatio:!0,limitByContainer:!0,containerSizeFactor:2},dash:{extraInitSize:1e3,forwardBufferTarget:3e4,segmentRequestSize:1048576,representationSwitchForwardBufferGap:3e3},enableTelemetryAtStart:!1,formatsToAvoid:[P.DASH_WEBM_VK],disableChromecast:!1,chromecastReceiverId:void 0,useWebmBigRequest:!0,bigRequestMinInitSize:51200,bigRequestMinDataSize:1048576,stripRangeHeader:!0,flushShortLoopedBuffers:!0,insufficientBufferRuleMargin:1e4,dashSeekInSegmentDurationThreshold:18e4,dashSeekInSegmentAlwaysSeekDelta:1e4,endGapTolerance:300};class _{constructor(a){var r;this.connection$=new t(void 0),this.castState$=new t(w.NOT_AVAILABLE),this.errorEvent$=new e,this.realCastState$=new t(w.NOT_AVAILABLE),this.subscription=new i,this.params=a,this.log=this.params.dependencies.logger.createComponentLog("ChromecastInitializer");const n="chrome"in window;if(this.log({message:`[constructor] receiverApplicationId: ${this.params.receiverApplicationId}, isDisabled: ${this.params.isDisabled}, isSupported: ${n}`}),a.isDisabled||!n)return;var o;s(null===(r=window.chrome)||void 0===r?void 0:r.cast)?this.initializeCastApi():(window.__onGCastApiAvailable=t=>{t&&this.initializeCastApi()},(o="https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise(((t,e)=>{const i=document.createElement("script");i.setAttribute("src",o),i.onload=()=>t,i.onerror=()=>e,document.body.appendChild(i)}))).catch((()=>this.errorEvent$.next({id:"ChromecastLoading",message:"Script loading failed!"}))))}connect(){var t;null===(t=cast.framework.CastContext.getInstance())||void 0===t||t.requestSession()}disconnect(){var t,e;null===(e=null===(t=cast.framework.CastContext.getInstance())||void 0===t?void 0:t.getCurrentSession())||void 0===e||e.endSession(!0)}stopMedia(){return new Promise(((t,e)=>{var i,s,a;null===(a=null===(s=null===(i=cast.framework.CastContext.getInstance())||void 0===i?void 0:i.getCurrentSession())||void 0===s?void 0:s.getMediaSession())||void 0===a||a.stop(new chrome.cast.media.StopRequest,t,e)}))}toggleConnection(){s(this.connection$.getValue())?this.disconnect():this.connect()}setVolume(t){const e=this.connection$.getValue();a(e)||(e.remotePlayer.volumeLevel=t,e.remotePlayerController.setVolumeLevel())}setMuted(t){const e=this.connection$.getValue();a(e)||t!==e.remotePlayer.isMuted&&e.remotePlayerController.muteOrUnmute()}destroy(){this.subscription.unsubscribe()}initListeners(){const t=new cast.framework.RemotePlayer,e=new cast.framework.RemotePlayerController(t),i=cast.framework.CastContext.getInstance();this.subscription.add(r(i,cast.framework.CastContextEventType.SESSION_STATE_CHANGED).subscribe((t=>{var e,s;switch(t.sessionState){case cast.framework.SessionState.SESSION_STARTED:case cast.framework.SessionState.SESSION_STARTING:case cast.framework.SessionState.SESSION_RESUMED:this.contentId=null===(s=null===(e=i.getCurrentSession())||void 0===e?void 0:e.getMediaSession())||void 0===s?void 0:s.media.contentId;break;case cast.framework.SessionState.NO_SESSION:case cast.framework.SessionState.SESSION_ENDING:case cast.framework.SessionState.SESSION_ENDED:case cast.framework.SessionState.SESSION_START_FAILED:this.contentId=void 0;break;default:return n(t.sessionState)}}))).add(o(r(i,cast.framework.CastContextEventType.CAST_STATE_CHANGED).pipe(d((t=>{this.log({message:`[cast.framework.RemotePlayerEventType.CAST_STATE_CHANGED]: ${JSON.stringify(t)}`})})),h((t=>t.castState))),u([i.getCastState()])).pipe(c(),h(I),d((t=>{this.log({message:`realCastState$: ${t}`})}))).subscribe(this.realCastState$)).add(this.realCastState$.subscribe((r=>{var n;const o=r===w.CONNECTED,d=s(this.connection$.getValue());if(o&&!d){const s=i.getCurrentSession();l(s);const r=s.getCastDevice(),o=null===(n=s.getMediaSession())||void 0===n?void 0:n.media.contentId;(a(o)||o===this.contentId)&&(this.log({message:"connection created"}),this.connection$.next({remotePlayer:t,remotePlayerController:e,session:s,castDevice:r}))}else!o&&d&&(this.log({message:"connection destroyed"}),this.connection$.next(void 0));this.castState$.next(r===w.CONNECTED?s(this.connection$.getValue())?w.CONNECTED:w.AVAILABLE:r)})))}initializeCastApi(){var t;let e,i,s;try{e=cast.framework.CastContext.getInstance(),i=chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,s=chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}catch(t){return}try{e.setOptions({receiverApplicationId:null!==(t=this.params.receiverApplicationId)&&void 0!==t?t:i,autoJoinPolicy:s}),this.initListeners()}catch(t){this.errorEvent$.next({id:"ChromecastInitializer",message:"[initializeCastApi] failed",thrown:t})}}}const I=t=>{switch(t){case cast.framework.CastState.NO_DEVICES_AVAILABLE:return w.NOT_AVAILABLE;case cast.framework.CastState.NOT_CONNECTED:return w.AVAILABLE;case cast.framework.CastState.CONNECTING:return w.CONNECTING;case cast.framework.CastState.CONNECTED:return w.CONNECTED;default:return n(t)}};function R(t,e,i,s){return new(i||(i=Promise))((function(a,r){function n(t){try{d(s.next(t))}catch(t){r(t)}}function o(t){try{d(s.throw(t))}catch(t){r(t)}}function d(t){var e;t.done?a(t.value):(e=t.value,e instanceof i?e:new i((function(t){t(e)}))).then(n,o)}d((s=s.apply(t,e||[])).next())}))}var L,x;!function(t){t.VIDEO="video",t.AUDIO="audio",t.TEXT="text"}(L||(L={})),function(t){t.NONE="none",t.DOWNLOADING="downloading",t.DOWNLOADED="downloaded",t.FED="fed"}(x||(x={}));var C=t=>R(void 0,void 0,void 0,(function*(){const e=t.muted;try{yield t.play()}catch(i){if(i instanceof DOMException&&(20===i.code||"AbortError"===i.name))return!1;if(e)return console.warn(i),!1;t.muted=!0;try{yield t.play()}catch(e){return t.muted=!1,console.warn(e),!1}}return!0}));const N=(t,e,s,{equal:r=((t,e)=>t===e),changed$:n,onError:o}={})=>{const d=t.getState(),h=e(),u=a(n),c=new i;return n&&c.add(n.subscribe((e=>{const i=t.getState();r(e,i)&&t.setState(e)}),o)),r(h,d)||(s(d),u&&t.setState(d)),c.add(t.stateChangeStarted$.subscribe((e=>{s(e.to),u&&t.setState(e.to)}),o)),c},O=(t,e,i)=>N(e,(()=>t.loop),(e=>{s(e)&&(t.loop=e)}),{onError:i}),B=(t,e,i,a)=>N(e,(()=>({muted:t.muted,volume:t.volume})),(e=>{s(e)&&(t.muted=e.muted,t.volume=e.volume)}),{equal:(t,e)=>t===e||(null==t?void 0:t.muted)===(null==e?void 0:e.muted)&&(null==t?void 0:t.volume)===(null==e?void 0:e.volume),changed$:i,onError:a}),M=(t,e)=>{if(t.id===e)return!0;const[i,s,a]=e.split("|");return t.language===s&&t.label===a};class U{constructor(){this.available$=new e,this.current$=new t(void 0),this.error$=new e,this.subscription=new i,this.externalTracks=new Map}connect(t,e,i){this.video=t,this.cueSettings=e.textTrackCuesSettings,this.subscribe();const a=t=>{this.error$.next({id:"TextTracksManager",message:"Generic HtmlVideoTextTrackManager error",thrown:t})};this.subscription.add(this.available$.subscribe(i.availableTextTracks$)),this.subscription.add(this.current$.subscribe(i.currentTextTrack$)),this.subscription.add(this.error$.subscribe(i.error$)),this.subscription.add(N(e.externalTextTracks,(()=>Object.values(this.externalTracks)),(t=>{s(t)&&this.setExternal(t)}),{equal:(t,e)=>s(t)&&s(e)&&t.length===e.length&&t.every((({id:t},i)=>t===e[i].id)),changed$:this.available$.pipe(h((t=>t.filter((({type:t})=>"external"===t))))),onError:a})),this.subscription.add(N(e.currentTextTrack,(()=>{if(this.video)return;const t=this.htmlTextTracksAsArray().find((({mode:t})=>"showing"===t));return t&&this.htmlTextTrackToITextTrack(t).id}),(t=>this.select(t)),{changed$:this.current$,onError:a})),this.subscription.add(N(e.textTrackCuesSettings,(()=>({})),(()=>{if(this.video)for(const t of this.htmlTextTracksAsArray())this.applyCueSettings(t.cues),this.applyCueSettings(t.activeCues)})))}subscribe(){l(this.video);const{textTracks:t}=this.video;this.subscription.add(r(t,"addtrack").subscribe((()=>{const t=this.current$.getValue();this.select(t)}))),this.subscription.add(o(r(t,"addtrack"),r(t,"removetrack"),u(["init"])).pipe(h((()=>this.htmlTextTracksAsArray().map((t=>this.htmlTextTrackToITextTrack(t))))),c(((t,e)=>t.length===e.length&&t.every((({id:t},i)=>t===e[i].id))))).subscribe(this.available$)),this.subscription.add(o(r(t,"change"),u(["init"])).pipe(h((()=>this.htmlTextTracksAsArray().find((({mode:t})=>"showing"===t)))),h((t=>t&&this.htmlTextTrackToITextTrack(t).id)),c()).subscribe(this.current$));const e=t=>{var e,i;return this.applyCueSettings(null!==(i=null===(e=t.target)||void 0===e?void 0:e.activeCues)&&void 0!==i?i:null)};this.subscription.add(r(t,"addtrack").subscribe((t=>{var i,s;null===(i=t.track)||void 0===i||i.addEventListener("cuechange",e);const a=t=>{var e,i,s,r,n;const o=null!==(i=null===(e=t.target)||void 0===e?void 0:e.cues)&&void 0!==i?i:null;o&&o.length&&(this.applyCueSettings(null!==(r=null===(s=t.target)||void 0===s?void 0:s.cues)&&void 0!==r?r:null),null===(n=t.target)||void 0===n||n.removeEventListener("cuechange",a))};null===(s=t.track)||void 0===s||s.addEventListener("cuechange",a)}))),this.subscription.add(r(t,"removetrack").subscribe((t=>{var i;null===(i=t.track)||void 0===i||i.removeEventListener("cuechange",e)})))}applyCueSettings(t){if(!t||!t.length)return;const e=this.cueSettings.getState();for(const i of Array.from(t)){const t=i;s(e.align)&&(t.align=e.align),s(e.position)&&(t.position=e.position),s(e.size)&&(t.size=e.size),s(e.line)&&(t.line=e.line)}}htmlTextTracksAsArray(t=!1){l(this.video);const e=[...this.video.textTracks];return t?e:e.filter(U.isHealthyTrack)}htmlTextTrackToITextTrack(t){const{language:e,label:i}=t,s=""!==t.id?t.id:(t=>["__",t.language,t.label].join("|"))(t);return this.externalTracks.has(s)?{id:s,type:"external",language:e,label:i,url:this.externalTracks.get(s).url}:{id:s,type:"internal",language:e,label:i}}static isHealthyTrack(t){return"metadata"!==t.kind&&(""!==t.id||""!==t.label||""!==t.language)}setExternal(t){t.filter((({id:t})=>!this.externalTracks.has(t))).forEach((t=>this.attach(t))),Array.from(this.externalTracks.keys()).filter((e=>!t.find((t=>t.id===e)))).forEach((t=>this.detach(t)))}select(t){l(this.video);for(const e of this.htmlTextTracksAsArray(!0))s(t)&&M(e,t)?e.mode="showing":e.mode="disabled"}destroy(){if(this.subscription.unsubscribe(),this.video)for(const t of Array.from(this.video.getElementsByTagName("track"))){const e=t.getAttribute("id");e&&this.externalTracks.has(e)&&this.video.removeChild(t)}this.externalTracks.clear()}attach(t){l(this.video);const e=document.createElement("track");e.setAttribute("src",t.url),e.setAttribute("id",t.id),t.label&&e.setAttribute("label",t.label),t.language&&e.setAttribute("srclang",t.language),this.externalTracks.set(t.id,t),this.video.appendChild(e)}detach(t){l(this.video);const e=Array.prototype.find.call(this.video.getElementsByTagName("track"),(e=>e.getAttribute("id")===t));e&&this.video.removeChild(e),this.externalTracks.delete(t)}}var V=t=>{const e=document.createElement("video");return e.setAttribute("crossorigin","anonymous"),e.setAttribute("playsinline","playsinline"),t.appendChild(e),e},H=t=>new p((e=>{let s=0;return(new i).add(r(t,"loadstart").subscribe((()=>{s=Date.now()}))).add(r(t,"loadeddata").subscribe((()=>{e.next(Date.now()-s)})))})).pipe(m());class q{constructor(t){this._buffer=[],this._source=t}fill(){this._buffer=[];const t=this._source.currentTime;for(let e=0,i=this._source.buffered.length;e<i;e++){let i=this._source.buffered.start(e);const s=this._source.buffered.end(e);i>t&&i-t<3&&(i=t),this._buffer.push({start:i,end:s,i:e})}return this._buffer.sort((function(t,e){return t.start-e.start})),this._buffer}getByTime(t){return this._buffer.find((e=>t>=e.start&&t<e.end))}getNextWithGap(t,e){const i=this.getNext(t);if(i&&i.start-t.end<(e||3))return i}getNext(t){let e=this._buffer.indexOf(t);if(~e&&this._buffer.length-1>e)return this._buffer[++e]}smartRemove(t,e,i){this._buffer.forEach((({start:s,end:a})=>{const r=s>=t&&s<e,n=a>=t&&a<e;r&&n||(r?i(e,a):n?i(s,t):s<t&&a>e?(i(e,a),i(s,t)):i(s,a))}))}destroy(){this._buffer=[]}}var F=(t,e,i=3)=>{let s=0,a=0;for(let r=0;r<t.length;r++){const n=t.start(r),o=t.end(r);if(n<=e&&e<=o){if(s=n,a=o,!i)return{start:s,end:a};for(let e=r-1;e>=0;e--)t.end(e)+i>=s&&(s=t.start(e));for(let e=r+1;e<t.length;e++)t.start(e)-i<=a&&(a=t.end(e))}}return{start:s,end:a}},G=t=>new p((e=>{let s=0;return(new i).add(r(t,"loadstart").subscribe((()=>{s=Date.now()}))).add(r(t,"loadedmetadata").subscribe((()=>{e.next(Date.now()-s)})))})).pipe(m());const Y=t=>{const e=(e,i=(()=>{}))=>r(t,e).pipe(h(i)),i=o(...["waiting","pause","canplay","canplaythrough","playing","seeked","ended"].map((e=>r(t,e)))).pipe(h((()=>t.readyState<3)),c()),s=o(r(t,"progress"),r(t,"timeupdate")).pipe(h((()=>F(t.buffered,t.currentTime)))),a=r(t,"volumechange").pipe(v(0),h((()=>({muted:t.muted,volume:t.volume})))),n=r(t,"error").pipe(h((()=>{const e=t.error;return{id:e?`MediaError#${e.code}`:"HtmlVideoError",message:e?e.message:"Error event from HTML video element"}})));return{play$:e("play"),pause$:e("pause"),canplay$:e("canplay"),ended$:e("ended"),error$:n,seeked$:e("seeked"),seeking$:e("seeking"),progress$:e("progress"),loadedMetadata$:e("loadedmetadata"),loadedData$:e("loadeddata"),timeUpdate$:e("timeupdate",(()=>t.currentTime)),durationChange$:e("durationchange",(()=>t.duration)),isBuffering$:i,currentBuffer$:s,volumeState$:a,firstBytes$:G(t),firstFrame$:H(t)}};var z,Q=(t,e,i=!1)=>{const s=t.getTransition();!i&&s&&s.to!==e||t.setState(e)};!function(t){t.INVARIANT="Invariant quality",t.Q_144P="144p",t.Q_240P="240p",t.Q_360P="360p",t.Q_480P="480p",t.Q_720P="720p",t.Q_1080P="1080p",t.Q_1440P="1440p",t.Q_2160P="2160p",t.Q_4320P="4320p"}(z||(z={}));const W={[z.Q_144P]:144,[z.Q_240P]:240,[z.Q_360P]:360,[z.Q_480P]:480,[z.Q_720P]:720,[z.Q_1080P]:1080,[z.Q_1440P]:1440,[z.Q_2160P]:2160,[z.Q_4320P]:4320},J=(t,e)=>W[t]>W[e],j=(t,e)=>W[t]<W[e],X=Object.keys(W).sort(((t,e)=>j(t,e)?-1:1)),K=({width:t,height:e},i)=>((t,e=.02)=>[...X].find((i=>W[i]*(1+e)>=t)))(Math.min(t,e),i),Z=t=>t===z.INVARIANT;let tt=!1,et={};const it=t=>{t(et)},st=(t,e)=>{var i;tt&&(et.meta=null!==(i=et.meta)&&void 0!==i?i:{},et.meta[t]=e)};class at{constructor(t){this.name=t}next(t){var e,i;if(!tt)return;et.series=null!==(e=et.series)&&void 0!==e?e:{};const s=null!==(i=et.series[this.name])&&void 0!==i?i:[];s.push([Date.now(),t]),et.series[this.name]=s}}const rt=new at("best_bitrate"),nt=(t,{container:e,throughput:i,tuning:a,forwardBufferHealth:r})=>{var n,o;const d=a.usePixelRatio&&null!==(n=window.devicePixelRatio)&&void 0!==n?n:1,h=a.limitByContainer&&e&&e.width>0&&e.height>0&&{width:e.width*d*a.containerSizeFactor,height:e.height*d*a.containerSizeFactor},u=h&&K(h,0),c=t.filter((t=>!Z(t.quality))).sort(((t,e)=>J(t.quality,e.quality)?-1:1)),l=c.filter((t=>{const e=!u||j(t.quality,u),n=!(s(i)&&isFinite(i)&&s(t.bitrate))||i>=t.bitrate*(o=null!=r?r:.5,d=a.bitrateFactorAtEmptyBuffer,h=a.bitrateFactorAtFullBuffer,(d-h)*Math.pow(2,-10*o)+h);var o,d,h;return e&&n}))[0];return l&&l.bitrate&&rt.next(l.bitrate),null!==(o=null!=l?l:c[c.length-1])&&void 0!==o?o:t[0]};var ot=(t,e)=>{let i=0;for(let s=0;s<t.length;s++){const a=1e3*t.start(s),r=1e3*t.end(s);a<=e&&e<=r&&(i=r)}return Math.max(i-e,0)},dt=t=>new URL(t).hostname;const ht=(t,e=300)=>window.ResizeObserver?new p((i=>{const a=new ResizeObserver(E((t=>{const e=t[0];if(!e)return;let a,r;e.contentBoxSize&&e.contentBoxSize[0]?(r=e.contentBoxSize[0].blockSize,a=e.contentBoxSize[0].inlineSize):e.contentRect&&(a=e.contentRect.width,r=e.contentRect.height),s(a)&&s(r)&&i.next({width:a,height:r})}),e));return a.observe(t),()=>a.disconnect()})):new p((e=>{const{width:i,height:s}=t.getBoundingClientRect();e.next({width:i,height:s})}));class ut{constructor(t){this.transitionStarted$=new e,this.transitionEnded$=new e,this.transitionUpdated$=new e,this.forceChanged$=new e,this.stateChangeStarted$=o(this.transitionStarted$,this.transitionUpdated$),this.stateChangeEnded$=o(this.transitionEnded$,this.forceChanged$),this.state=t}setState(t){const e=this.transition,i=this.state;this.transition=void 0,this.state=t,e?e.to===t?this.transitionEnded$.next(e):this.forceChanged$.next({from:e.from,to:t,canceledTransition:e}):this.forceChanged$.next({from:i,to:t,canceledTransition:e})}startTransitionTo(t){const e=this.transition,i=this.state;i===t||s(e)&&e.to===t||(this.state=t,e?(this.transition={from:e.from,to:t,canceledTransition:e},this.transitionUpdated$.next(this.transition)):(this.transition={from:i,to:t},this.transitionStarted$.next(this.transition)))}getTransition(){return this.transition}getState(){return this.state}}var ct;!function(t){t[t.HEADER=0]="HEADER",t[t.PARAM=1]="PARAM"}(ct||(ct={}));const lt=(t,e,i,s=ct.HEADER,a,r)=>R(void 0,void 0,void 0,(function*(){var o,d,h,u,c,l,p;const m=new Headers(null===(o=null==r?void 0:r.fetchInit)||void 0===o?void 0:o.headers);let v=t;switch(s){case ct.HEADER:m.append("Range",`${e}-${i}`);break;case ct.PARAM:{const t=new URL(v,location.href);t.searchParams.append("bytes",`${e}-${i}`),v=t.toString();break}default:n(s)}const S=null!==(d=null===performance||void 0===performance?void 0:performance.now())&&void 0!==d?d:Date.now(),f=yield fetch(v,Object.assign(Object.assign({},null!==(h=null==r?void 0:r.fetchInit)&&void 0!==h?h:{}),{headers:m})),g=null!==(u=null===performance||void 0===performance?void 0:performance.now())&&void 0!==u?u:Date.now();if(null===(c=null==r?void 0:r.throughputEstimator)||void 0===c||c.addRawRtt(g-S),!f.ok||!f.body)return Promise.reject(new Error(`Fetch error ${f.status}: ${f.statusText}`));const[b,T]=f.body.tee(),y=b.getReader();null===(l=null==r?void 0:r.throughputEstimator)||void 0===l||l.trackStream(T);const E=parseInt(null!==(p=f.headers.get("Content-Length"))&&void 0!==p?p:"",10);let $=0;const P=new ArrayBuffer(E),k=new Uint8Array(P),w=new DataView(P),A=({done:t,value:e})=>R(void 0,void 0,void 0,(function*(){t?null==a||a(w,$):e&&(k.set(e,$),$+=e.byteLength,null==a||a(w,$),yield null==y?void 0:y.read().then(A))}));return yield null==y?void 0:y.read().then(A),P})),pt=t=>{if(!(t instanceof DOMException)||"AbortError"!==t.name&&20!==t.code)throw t};var mt,vt;!function(t){t[t.EBML=440786851]="EBML",t[t.EBMLVersion=17030]="EBMLVersion",t[t.EBMLReadVersion=17143]="EBMLReadVersion",t[t.EBMLMaxIDLength=17138]="EBMLMaxIDLength",t[t.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",t[t.DocType=17026]="DocType",t[t.DocTypeVersion=17031]="DocTypeVersion",t[t.DocTypeReadVersion=17029]="DocTypeReadVersion",t[t.Void=236]="Void",t[t.Segment=408125543]="Segment",t[t.SeekHead=290298740]="SeekHead",t[t.Seek=19899]="Seek",t[t.SeekID=21419]="SeekID",t[t.SeekPosition=21420]="SeekPosition",t[t.Info=357149030]="Info",t[t.TimestampScale=2807729]="TimestampScale",t[t.Duration=17545]="Duration",t[t.Tracks=374648427]="Tracks",t[t.Chapters=272869232]="Chapters",t[t.Cluster=524531317]="Cluster",t[t.Attachments=423732329]="Attachments",t[t.Tags=307544935]="Tags",t[t.Cues=475249515]="Cues",t[t.CuePoint=187]="CuePoint",t[t.CueTime=179]="CueTime",t[t.CueTrackPositions=183]="CueTrackPositions",t[t.CueTrack=247]="CueTrack",t[t.CueClusterPosition=241]="CueClusterPosition",t[t.CueRelativePosition=240]="CueRelativePosition",t[t.CueDuration=178]="CueDuration",t[t.CueBlockNumber=21368]="CueBlockNumber",t[t.CueCodecState=234]="CueCodecState",t[t.CueReference=219]="CueReference",t[t.CueRefTime=150]="CueRefTime"}(mt||(mt={})),function(t){t.SignedInteger="int",t.UnsignedInteger="uint",t.Float="float",t.String="string",t.UTF8="utf8",t.Date="date",t.Master="master",t.Binary="binary"}(vt||(vt={}));const St={[mt.EBML]:{type:vt.Master},[mt.EBMLVersion]:{type:vt.UnsignedInteger},[mt.EBMLReadVersion]:{type:vt.UnsignedInteger},[mt.EBMLMaxIDLength]:{type:vt.UnsignedInteger},[mt.EBMLMaxSizeLength]:{type:vt.UnsignedInteger},[mt.DocType]:{type:vt.String},[mt.DocTypeVersion]:{type:vt.UnsignedInteger},[mt.DocTypeReadVersion]:{type:vt.UnsignedInteger},[mt.Void]:{type:vt.Binary},[mt.Segment]:{type:vt.Master},[mt.SeekHead]:{type:vt.Master},[mt.Seek]:{type:vt.Master},[mt.SeekID]:{type:vt.Binary},[mt.SeekPosition]:{type:vt.UnsignedInteger},[mt.Info]:{type:vt.Master},[mt.TimestampScale]:{type:vt.UnsignedInteger},[mt.Duration]:{type:vt.Float},[mt.Tracks]:{type:vt.Master},[mt.Chapters]:{type:vt.Master},[mt.Cluster]:{type:vt.Master},[mt.Attachments]:{type:vt.Master},[mt.Tags]:{type:vt.Master},[mt.Cues]:{type:vt.Master},[mt.CuePoint]:{type:vt.Master},[mt.CueTime]:{type:vt.UnsignedInteger},[mt.CueTrackPositions]:{type:vt.Master},[mt.CueTrack]:{type:vt.UnsignedInteger},[mt.CueClusterPosition]:{type:vt.UnsignedInteger},[mt.CueRelativePosition]:{type:vt.UnsignedInteger},[mt.CueDuration]:{type:vt.UnsignedInteger},[mt.CueBlockNumber]:{type:vt.UnsignedInteger},[mt.CueCodecState]:{type:vt.UnsignedInteger},[mt.CueReference]:{type:vt.Master},[mt.CueRefTime]:{type:vt.UnsignedInteger}},ft=t=>{const e=t.getUint8(0);let i=0;128&e?i=1:64&e?i=2:32&e?i=3:16&e&&(i=4);const s=gt(t,i),a=s in St,r=a?St[s].type:vt.Binary,n=t.getUint8(i);let o=0;128&n?o=1:64&n?o=2:32&n?o=3:16&n?o=4:8&n?o=5:4&n?o=6:2&n?o=7:1&n&&(o=8);const d=new DataView(t.buffer,t.byteOffset+i+1,o-1),h=((n&255>>o)<<8*(o-1))+gt(d),u=i+o;let c;return c=u+h>t.byteLength?new DataView(t.buffer,t.byteOffset+u):new DataView(t.buffer,t.byteOffset+u,h),{tag:a?s:"0x"+s.toString(16).toUpperCase(),type:r,value:c,valueSize:h}},gt=(t,e=t.byteLength)=>{switch(e){case 1:return t.getUint8(0);case 2:return t.getUint16(0);case 3:return t.getUint16(0)<<8|t.getUint8(2);case 4:return t.getUint32(0);case 5:return t.getUint32(0)<<8|t.getUint8(4);case 6:return t.getUint32(0)<<16|t.getUint16(4);case 7:return t.getUint32(0)<<32|t.getUint16(4)<<8|t.getUint8(6);case 8:return t.getUint32(0)<<32|t.getUint32(4)}return 0},bt=(t,e)=>{switch(e){case vt.SignedInteger:return t.getInt8(0);case vt.UnsignedInteger:return gt(t);case vt.Float:return 4===t.byteLength?t.getFloat32(0):t.getFloat64(0);case vt.String:return new TextDecoder("ascii").decode(t);case vt.UTF8:return new TextDecoder("utf-8").decode(t);case vt.Date:return new Date(Date.UTC(2001,0)+t.getInt8(0)).getTime();case vt.Master:case vt.Binary:return t;default:n(e)}},Tt=(t,e)=>{let i=0;for(;i<t.byteLength;){const s=new DataView(t.buffer,t.byteOffset+i),a=ft(s);if(!e(a))return;a.type===vt.Master&&Tt(a.value,e),i=a.value.byteOffset-t.byteOffset+a.valueSize}},yt=[mt.Info,mt.SeekHead,mt.Tracks,mt.Chapters,mt.Cluster,mt.Cues,mt.Attachments,mt.Tags],Et=(t,e=0,i)=>R(void 0,void 0,void 0,(function*(){const{from:s,to:a}=t.initRange;let r,n,o=s,d=a,h=!1;t.indexRange&&(r=t.indexRange.from,n=t.indexRange.to,h=a+1===r,h&&(o=Math.min(r,s),d=Math.max(n,a))),o=Math.min(o,0),d+=e;const u=yield lt(t.url,o,d,ct.PARAM,void 0,{throughputEstimator:i}),c=new DataView(u,s-o,a-o);if(!(t=>{if(t.getUint32(0)!==mt.EBML)return!1;let e,i,s;const a=ft(t);return Tt(a.value,(({tag:t,type:a,value:r})=>(t===mt.EBMLReadVersion?e=bt(r,a):t===mt.DocType?i=bt(r,a):t===mt.DocTypeReadVersion&&(s=bt(r,a)),!0))),(void 0===e||e<=1)&&void 0!==i&&"webm"===i&&(void 0===s||s<=2)})(c))throw new Error("Not a valid webm file");const l=$t(c);let p;if(h&&void 0!==r&&void 0!==n)p=new DataView(u,r-o,n-r);else{if(void 0===l.cuesSeekPosition)throw new ReferenceError("No way to load representation index");{const e=l.segmentStart+l.cuesSeekPosition,i=1048576,s=yield lt(t.url,e,e+i,ct.PARAM);p=new DataView(s)}}const m=Pt(p,l);return{dataView:new DataView(u),init:l,segments:m}})),$t=t=>{let e,i,s,a,r,n,o=!1,d=!1,h=!1;return Tt(t,(({tag:t,type:u,value:c,valueSize:l})=>{if(t===mt.SeekID){const t=bt(c,u);n=gt(t)}else t!==mt.SeekPosition&&(n=void 0);return t===mt.Segment?(e=c.byteOffset,i=c.byteOffset+l):t===mt.Info?o=!0:t===mt.SeekHead?d=!0:t===mt.TimestampScale?s=bt(c,u):t===mt.Duration?a=bt(c,u):t===mt.SeekPosition&&n===mt.Cues?r=bt(c,u):o&&d&&yt.includes(t)&&(h=!0),!h})),l(e,"Failed to parse webm Segment start"),l(i,"Failed to parse webm Segment end"),l(a,"Failed to parse webm Segment duration"),s=null!=s?s:1e6,{segmentStart:Math.round(e/1e9*s*1e3),segmentEnd:Math.round(i/1e9*s*1e3),timeScale:s,segmentDuration:Math.round(a/1e9*s*1e3),cuesSeekPosition:r}},Pt=(t,e)=>{let i=!1,a=!1;const r=t=>s(t.time)&&s(t.position),n=[];let o;return Tt(t,(({tag:t,type:e,value:s})=>{switch(t){case mt.Cues:i=!0;break;case mt.CuePoint:o&&r(o)&&n.push(o),o={};break;case mt.CueTime:o&&(o.time=bt(s,e));break;case mt.CueTrackPositions:break;case mt.CueClusterPosition:o&&(o.position=bt(s,e));break;default:i&&yt.includes(t)&&(a=!0)}return!(i&&a)})),o&&r(o)&&n.push(o),n.map(((t,i)=>{const{time:s,position:a}=t,r=n[i+1];return{status:x.NONE,time:{from:s,to:r?r.time:e.segmentDuration},byte:{from:e.segmentStart+a,to:r?e.segmentStart+r.position-1:e.segmentEnd-1}}}))};class kt{constructor(s,a,r,{throughputEstimator:n,tuning:o}){this.ended$=new t(!1),this.playingRepresentation$=new t(void 0),this.error$=new e,this.subscription=new i,this.abortController=new AbortController,this.allInitsLoaded=!1,this.throughputEstimator=n,this.tuning=o,this.initData=new Map,this.segments=new Map,this.representations=new Map(r.map((t=>[t.id,t]))),this.kind=s,this.mediaSource=a,this.sourceBuffer=null,this.segmentDownloadPromise=Promise.resolve()}startWith(t){return R(this,void 0,void 0,(function*(){const e=this.representations.get(t);l(e,`Cannot find representation ${t}`);const i=Math.ceil(1e3*e.bitrate/8*(this.tuning.extraInitSize/1e3)*1.1);this.playingRepresentationId=t,this.downloadingRepresentationId=t,this.sourceBuffer=this.mediaSource.addSourceBuffer(`${e.mime}; codecs="${e.codecs}"`),this.subscription.add(r(this.sourceBuffer,"updateEnd").subscribe((()=>this.checkEjectedSegments()),(t=>this.error$.next({id:"SegmentEjection",message:"Error when trying to clear segments ejecte by browser",thrown:t})))),this.subscription.add(r(this.sourceBuffer,"error").subscribe((t=>this.error$.next({id:"SourceBuffer",message:"SourceBuffer Error event fired",thrown:t}))));const{dataView:s,segments:a}=yield Et(e,i,this.throughputEstimator),n=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength-i);this.initData.set(t,n);const o=a.filter((t=>t.byte.from>=s.byteOffset&&t.byte.to<s.byteOffset+s.byteLength)),d=o.at(-1),h=new DataView(s.buffer,s.byteOffset,o.length&&d?Math.min(d.byte.to-s.byteOffset+1,s.byteLength):s.byteLength-i);yield this.appendDataToBuffer(h),this.segments.set(t,a.map((t=>Object.assign(Object.assign({},t),{status:t.byte.from>=s.byteOffset&&t.byte.to<s.byteOffset+s.byteLength?x.FED:x.NONE})))),this.maintain(0)}))}switchTo(t){var e;return R(this,void 0,void 0,(function*(){if(t===this.downloadingRepresentationId)return;if(!this.initData.has(t))if(this.loadAllInitsPromise)yield this.loadAllInitsPromise;else{const e=this.representations.get(t);l(e);const{dataView:i,segments:s}=yield Et(e),a=i.buffer.slice(i.byteOffset,i.byteOffset+i.byteLength);this.initData.set(t,a),this.segments.set(t,s)}const i=this.initData.get(t);l(i,`No init buffer for ${t}`),l(this.sourceBuffer),this.abortController.abort(),this.abortController=new AbortController;try{this.sourceBuffer.abort()}catch(t){this.error$.next({id:"SourceBufferAbort",message:"SourceBuffer.abort() threw",thrown:t})}yield this.appendDataToBuffer(i,this.abortController.signal),s(this.playingRepresentationId)&&(null===(e=this.segments.get(this.playingRepresentationId))||void 0===e||e.forEach((t=>{t.status===x.FED&&(t.status=x.NONE)}))),this.downloadingRepresentationId=t}))}maintain(t){return R(this,void 0,void 0,(function*(){if(a(this.downloadingRepresentationId)||a(this.playingRepresentationId)||a(this.sourceBuffer)||this.ended$.getValue())return;const e=this.representations.get(this.downloadingRepresentationId),i=this.segments.get(this.downloadingRepresentationId);l(e),l(i);const s=i.find((e=>t>=e.time.from&&t<e.time.to));let r=t;if(this.playingRepresentationId!==this.downloadingRepresentationId){const e=ot(this.sourceBuffer.buffered,t);r=t+Math.min(e,this.tuning.representationSwitchForwardBufferGap)}const n=this.selectForwardBufferSegments(i,r);n.length&&(yield this.loadSegments(n,e)),this.allInitsLoaded||this.loadAllInitsPromise||!s||s.status!==x.FED||n.length||this.loadAllInits().catch((t=>this.error$.next({id:"InitDownload",message:"Error when trying to load all inits",thrown:t})));const o=i.at(-1);o&&s===o&&o.status===x.FED&&this.ended$.next(!0)}))}destroy(){this.initData.clear(),this.segments.clear(),this.representations.clear(),this.subscription.unsubscribe(),this.sourceBuffer&&"open"===this.mediaSource.readyState&&(this.sourceBuffer.abort(),this.mediaSource.removeSourceBuffer(this.sourceBuffer)),this.abortController.abort()}selectForwardBufferSegments(t,e){const i=t.findIndex((({status:t,time:{from:i,to:s}})=>t===x.NONE&&(i>e||i<=e&&s>=e)&&s<=e+this.tuning.forwardBufferTarget));if(-1===i)return[];let s=0;const a=[];for(let e=i;e<t.length&&s<=this.tuning.segmentRequestSize;e++){const i=t[e];if(s+=i.byte.to+1-i.byte.from,i.status===x.NONE)a.push(i);else if([x.DOWNLOADING,x.DOWNLOADED,x.FED].includes(i.status))break}return a}loadSegments(t,e){return R(this,void 0,void 0,(function*(){if(!t.length)return;const i=t.at(0).byte.from,s=t.at(-1).byte.to;for(const e of t)e.status=x.DOWNLOADING;const{signal:a}=this.abortController;return this.segmentDownloadPromise=this.segmentDownloadPromise.then((()=>R(this,void 0,void 0,(function*(){var r;const n=yield lt(e.url,i,s,ct.PARAM,((s,r)=>{for(const n of t)if(n.status===x.DOWNLOADING&&n.byte.from-i>=0&&n.byte.to+1-i<=r){n.status=x.DOWNLOADED;const t=new DataView(s.buffer,s.byteOffset+n.byte.from-i,n.byte.to+1-n.byte.from);this.appendDataToBuffer(t,a).then((()=>{this.playingRepresentationId=e.id,this.playingRepresentation$.next(this.playingRepresentationId),n.status=x.FED}))}}),{throughputEstimator:this.throughputEstimator,fetchInit:{signal:a}}),o=t.at(-1),d=null===(r=this.segments.get(e.id))||void 0===r?void 0:r.at(-1);if(o&&d&&o.status===x.DOWNLOADING&&o===d){o.status=x.DOWNLOADED;const t=new DataView(n,o.byte.from-i);this.appendDataToBuffer(t,a).then((()=>{this.playingRepresentationId=e.id,this.playingRepresentation$.next(this.playingRepresentationId),o.status=x.FED}))}})))).catch((e=>{for(const e of t)e.status===x.DOWNLOADING&&(e.status=x.NONE);pt(e)})).catch((t=>this.error$.next({id:"SegmentDownload",message:"Error when fetching segments",thrown:t}))),this.segmentDownloadPromise}))}loadAllInits(){return R(this,void 0,void 0,(function*(){return this.loadAllInitsPromise||(this.loadAllInitsPromise=Promise.all(Array.from(this.representations.entries()).map((([t,e])=>this.initData.has(t)?Promise.resolve():Et(e).then((({dataView:e,segments:i})=>{const s=e.buffer.slice(e.byteOffset,e.byteOffset+e.byteLength);this.initData.set(t,s),this.segments.set(t,i)}))))).then((()=>{this.allInitsLoaded=!0})).finally((()=>{this.loadAllInitsPromise=null}))),this.loadAllInitsPromise}))}appendDataToBuffer(t,e){return R(this,void 0,void 0,(function*(){if(l(this.sourceBuffer),!e||!e.aborted)if(this.sourceBuffer.updating)yield kt.waitForBufferUpdate(this.sourceBuffer),yield this.appendDataToBuffer(t,e);else{try{this.sourceBuffer.appendBuffer(t)}catch(t){this.error$.next({id:"AppendBuffer",message:"Error appending data to buffer",thrown:t})}yield kt.waitForBufferUpdate(this.sourceBuffer)}}))}checkEjectedSegments(){if(a(this.sourceBuffer)||a(this.playingRepresentationId))return;const t=this.segments.get(this.playingRepresentationId);l(t);const e=[];for(let t=0;t<this.sourceBuffer.buffered.length;t++){const i=1e3*this.sourceBuffer.buffered.start(t),s=this.sourceBuffer.buffered.end(t),a=1e3*(s%1>.9?Math.round(s):s);e.push({from:i,to:a})}for(const i of t){const t=e.some((t=>t.from<=i.time.from&&t.to>=i.time.to));i.status!==x.FED||t||(i.status=x.NONE)}}static waitForBufferUpdate(t){return R(this,void 0,void 0,(function*(){return new Promise((e=>t?t.addEventListener("update",(()=>e())):e()))}))}}const wt=["timeupdate","progress","play","seeked","stalled"];var At,Dt;!function(t){t.NONE="none",t.MANIFEST_LOADED="manifest_loaded",t.REPRESENTATION_SELECTED="representation_selected"}(At||(At={}));class _t{constructor(s){this.element=null,this.source=null,this.manifest=null,this.subscription=new i,this.state$=new ut(At.NONE),this.currentVideoRepresentation$=new t(void 0),this.error$=new e,this.forceEnded$=new e,this.tick=()=>{var t,e;if(!this.element)return;const i=1e3*this.element.currentTime;null===(t=this.videoBufferManager)||void 0===t||t.maintain(i),null===(e=this.audioBufferManager)||void 0===e||e.maintain(i)},this.throughputEstimator=s.throughputEstimator,this.tuning=s.tuning}initManifest(t,e){return R(this,void 0,void 0,(function*(){this.element=t,this.subscription.add(r(t,"waiting").subscribe((()=>{t.duration-t.currentTime<this.tuning.endGapTolerance/1e3&&this.forceEnded$.next()}),(t=>this.error$.next({id:"ForceEnd",message:"Error when forcing stream end",thrown:t})))),this.state$.startTransitionTo(At.MANIFEST_LOADED);const i=yield(s=e,R(void 0,void 0,void 0,(function*(){return(yield fetch(s,null==a?void 0:a.fetchInit)).text()}))).catch(pt);var s,a;return this.manifest=((t,e)=>{var i,s,a,r,n,o,d,h,u,c,l,p,m,v,S,f;const g={representations:{video:[],audio:[],text:[]}},b=(new DOMParser).parseFromString(t,"application/xml").children[0].children[0].children;let T=0;for(const t of b){const b=t.getAttribute("mimeType"),y=t.getAttribute("codecs"),E=null!==(i=t.getAttribute("contentType"))&&void 0!==i?i:null==b?void 0:b.split("/")[0],$=t.querySelectorAll("Representation");for(const t of $){const i=null!==(s=t.getAttribute("mimeType"))&&void 0!==s?s:b,$=null!==(r=null!==(a=t.getAttribute("codecs"))&&void 0!==a?a:y)&&void 0!==r?r:"",P=null!==(o=null!==(n=t.getAttribute("contentType"))&&void 0!==n?n:null==i?void 0:i.split("/")[0])&&void 0!==o?o:E,k=parseInt(null!==(d=t.getAttribute("width"))&&void 0!==d?d:"",10),w=parseInt(null!==(h=t.getAttribute("height"))&&void 0!==h?h:"",10),A=parseInt(null!==(u=t.getAttribute("bandwidth"))&&void 0!==u?u:"",10)/1e3,D=`${null!==(c=t.getAttribute("id"))&&void 0!==c?c:(T++).toString(10)}@${"video"===P?`${w}p`:"audio"===P?`${A}Kbps`:$}`,_=null!==(m=null===(p=null===(l=t.querySelector("BaseURL"))||void 0===l?void 0:l.textContent)||void 0===p?void 0:p.trim())&&void 0!==m?m:"",I=new URL(_,e).toString(),R=null!==(S=null===(v=t.querySelector("SegmentBase Initialization"))||void 0===v?void 0:v.getAttribute("range"))&&void 0!==S?S:"",[x,C]=R.split("-").map((t=>parseInt(t,10))),N={from:x,to:C},O=null===(f=t.querySelector("SegmentBase"))||void 0===f?void 0:f.getAttribute("indexRange"),[B,M]=O?O.split("-").map((t=>parseInt(t,10))):[],U=O?{from:B,to:M}:void 0;if(!P||!i)continue;const V={video:L.VIDEO,audio:L.AUDIO,text:L.TEXT}[P];V&&g.representations[V].push({id:D,kind:V,initRange:N,indexRange:U,bitrate:A,mime:i,codecs:$,width:k,height:w,url:I})}}return g})(null!=i?i:"",e),this.state$.setState(At.MANIFEST_LOADED),this.manifest}))}initRepresentations(t,e){return R(this,void 0,void 0,(function*(){l(this.manifest),l(this.element),this.state$.startTransitionTo(At.REPRESENTATION_SELECTED),this.source=new MediaSource,this.element.src=URL.createObjectURL(this.source);const i={throughputEstimator:this.throughputEstimator,tuning:this.tuning.dash};this.videoBufferManager=new kt(L.VIDEO,this.source,this.manifest.representations.video,i),this.audioBufferManager=new kt(L.AUDIO,this.source,this.manifest.representations.audio,i),this.subscription.add(o(this.forceEnded$,S({video:this.videoBufferManager.ended$,audio:this.audioBufferManager.ended$}).pipe(f((t=>Object.values(t).every((t=>!0===t)))))).subscribe((()=>{var t,e;if("open"===(null===(t=this.source)||void 0===t?void 0:t.readyState))try{null===(e=this.source)||void 0===e||e.endOfStream()}catch(t){this.error$.next({id:"EndOfStream",message:"Failed to end MediaSource stream",thrown:t})}}))),this.subscription.add(o(this.videoBufferManager.error$,this.audioBufferManager.error$).subscribe(this.error$)),this.subscription.add(this.videoBufferManager.playingRepresentation$.subscribe(this.currentVideoRepresentation$)),"open"!==this.source.readyState&&(yield new Promise((t=>{var e;return null===(e=this.source)||void 0===e?void 0:e.addEventListener("sourceopen",t)}))),yield Promise.all([this.videoBufferManager.startWith(t),this.audioBufferManager.startWith(e)]),this.state$.setState(At.REPRESENTATION_SELECTED);for(const t of wt)this.subscription.add(r(this.element,t).subscribe(this.tick,(t=>{this.error$.next({id:"DashVKPlayer",message:"Internal logic error",thrown:t})})));this.tick()}))}switchRepresentation(t,e){return R(this,void 0,void 0,(function*(){const i={[L.VIDEO]:this.videoBufferManager,[L.AUDIO]:this.audioBufferManager,[L.TEXT]:null}[t];return l(i),i.switchTo(e)}))}seek(t){l(this.element),l(this.videoBufferManager),l(this.audioBufferManager),this.videoBufferManager.maintain(t),this.audioBufferManager.maintain(t),this.element.currentTime=t/1e3}stop(){var t,e;this.element=null,this.source=null,this.manifest=null,this.currentVideoRepresentation$.next(void 0),null===(t=this.videoBufferManager)||void 0===t||t.destroy(),this.videoBufferManager=null,null===(e=this.audioBufferManager)||void 0===e||e.destroy(),this.audioBufferManager=null,this.state$.setState(At.NONE)}destroy(){var t;this.subscription.unsubscribe(),this.stop();for(const e of wt)null===(t=this.element)||void 0===t||t.removeEventListener(e,this.tick);this.source=null}}!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Dt||(Dt={}));const It=({id:t,width:e,height:i,bitrate:s})=>{const a=K({width:e,height:i});return a&&{id:t,quality:a,bitrate:s,size:{width:e,height:i}}},Rt=(t,e,i)=>{var s;const a=Array.from(e).sort(((t,e)=>e.bitrate-t.bitrate)).indexOf(i);return null!==(s=t.at(Math.round(t.length*a/e.length)))&&void 0!==s?s:t.at(-1)};class Lt{constructor(e){this.subscription=new i,this.videoState=new ut(Dt.STOPPED),this.elementSize$=new t(void 0),this.textTracksManager=new U,this.videoTracks=[],this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekPosition.getTransition();if(this.videoState.getTransition())return;const r=null==a?void 0:a.to;if((null==i?void 0:i.to)!==$.PAUSED&&s(r)&&t!==Dt.STOPPED&&e!==$.STOPPED&&this.seek(r),e!==$.STOPPED){if(t===Dt.STOPPED)return this.videoState.startTransitionTo(Dt.READY),void this.prepare();switch(t){case Dt.READY:return void(e===$.PAUSED?(this.videoState.setState(Dt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(Dt.PLAYING),this.playIfAllowed()));case Dt.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(Dt.PAUSED),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case Dt.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(Dt.PLAYING),this.playIfAllowed()):(null==i?void 0:i.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));default:return n(t)}}else t!==Dt.STOPPED&&(this.videoState.startTransitionTo(Dt.STOPPED),this.player.stop(),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(Dt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0))},this.params=e,this.video=V(this.params.container),this.params.output.element$.next(this.video),this.params.output.availableVideoTracks$.next([]),this.params.output.hostname$.next(dt(this.params.source.url)),this.params.output.isLive$.next(!1),this.player=new _t({throughputEstimator:this.params.dependencies.throughputEstimator,tuning:this.params.tuning}),this.subscribe()}subscribe(){const{output:t,desiredState:e}=this.params,i=Y(this.video),s=e=>{t.error$.next({id:"DashVKProvider",message:"DashVKProvider internal logic error",thrown:e})},a=(t,e)=>this.subscription.add(t.subscribe(e,s));a(i.timeUpdate$,t.position$),a(i.durationChange$,t.duration$),a(i.ended$,t.endedEvent$),a(i.error$,t.error$),a(i.isBuffering$,t.isBuffering$),a(i.currentBuffer$,t.currentBuffer$),a(i.firstBytes$,t.firstBytesEvent$),a(i.firstFrame$,t.firstFrameEvent$),this.subscription.add(i.seeked$.subscribe((()=>e.seekPosition.setState(void 0)),s)),this.subscription.add(O(this.video,e.isLooped,s)),this.subscription.add(B(this.video,e.volume,i.volumeState$,s)),this.subscription.add(i.volumeState$.subscribe(this.params.output.volume$,s)),this.subscription.add(i.play$.subscribe((()=>{this.videoState.setState(Dt.PLAYING),Q(e.playbackState,$.PLAYING)}),s)).add(i.pause$.subscribe((()=>{this.videoState.setState(Dt.PAUSED),Q(e.playbackState,$.PAUSED)}),s)).add(i.canplay$.subscribe((()=>{this.videoState.getState()===Dt.PLAYING&&this.playIfAllowed()}),s)),this.subscription.add(this.player.state$.stateChangeEnded$.pipe(f((({to:t})=>t===At.REPRESENTATION_SELECTED))).subscribe((()=>{this.videoState.setState(Dt.READY)}))),this.subscription.add(o(this.player.state$.stateChangeEnded$,e.videoTrack.stateChangeStarted$,e.autoVideoTrackSwitching.transitionStarted$,this.params.dependencies.throughputEstimator.rttAdjustedThroughput$,this.elementSize$,r(this.video,"progress")).subscribe((()=>{var t,i,s;const a=this.player.state$.getState(),r=this.player.state$.getTransition();if(a===At.NONE||!this.videoTracks.length)return;const n=a===At.MANIFEST_LOADED&&!r,o=e.autoVideoTrackSwitching.getState(),d=e.videoTrack.getState(),h=null===(t=this.videoTracks.find((({track:{id:t}})=>t===d)))||void 0===t?void 0:t.track;e.autoVideoTrackSwitching.getTransition()&&e.autoVideoTrackSwitching.setState(o);const u=ot(this.video.buffered,1e3*this.video.currentTime),c=Math.min(u/Math.min(this.params.tuning.dash.forwardBufferTarget,(this.video.duration||1/0)-this.video.currentTime),1),p=nt(this.videoTracks.map((({track:t})=>t)),{container:this.elementSize$.getValue(),throughput:this.params.dependencies.throughputEstimator.rttAdjustedThroughput$.getValue(),tuning:this.params.tuning.autoTrackSelection,forwardBufferHealth:c});if(n){const t=null!=h?h:p,e=t&&(null===(i=this.videoTracks.find((({track:e})=>e===t)))||void 0===i?void 0:i.representation);l(e);const s=Rt(this.audioRepresentations,this.videoTracks.map((({representation:t})=>t)),e);l(s),this.player.initRepresentations(e.id,s.id)}else{const t=o?null!=p?p:h:null!=h?h:p,e=t&&(null===(s=this.videoTracks.find((({track:e})=>e===t)))||void 0===s?void 0:s.representation);if(e){const t=Rt(this.audioRepresentations,this.videoTracks.map((({representation:t})=>t)),e);this.player.switchRepresentation(L.VIDEO,e.id),t&&this.player.switchRepresentation(L.AUDIO,t.id)}}}))),this.subscription.add(this.player.currentVideoRepresentation$.pipe(c(),h((t=>{var e;return t&&(null===(e=this.videoTracks.find((({representation:{id:e}})=>e===t)))||void 0===e?void 0:e.track)}))).subscribe(t.currentVideoTrack$)),a(ht(this.video),this.elementSize$),this.textTracksManager.connect(this.video,e,t);const n=o(e.playbackState.stateChangeStarted$,e.videoTrack.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,s))}prepare(){return R(this,void 0,void 0,(function*(){const t=yield this.player.initManifest(this.video,this.params.source.url);this.videoTracks=[];for(const e of t.representations.video){const t=It(e);t&&this.videoTracks.push({track:t,representation:e})}this.audioRepresentations=Array.from(t.representations.audio).sort(((t,e)=>e.bitrate-t.bitrate)),this.params.output.availableVideoTracks$.next(this.videoTracks.map((({track:t})=>t)))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.player.seek(1e3*t)}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0),this.player.destroy()}playIfAllowed(){C(this.video).then((t=>{t||(this.videoState.setState(Dt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}}var xt;!function(t){t[t.OFFSET_P=0]="OFFSET_P",t[t.PLAYBACK_SHIFT=1]="PLAYBACK_SHIFT"}(xt||(xt={}));var Ct=(t,e=0,i=xt.OFFSET_P)=>{switch(i){case xt.OFFSET_P:return t.replace("_offset_p",0===e?"":"_"+e.toFixed(0));case xt.PLAYBACK_SHIFT:{if(0===e)return t;const i=new URL(t);return i.searchParams.append("playback_shift",e.toFixed(0)),i.toString()}default:n(i)}return t};var Nt;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Nt||(Nt={}));class Ot{constructor(t){this.subscription=new i,this.loadMediaTimeoutSubscription=new i,this.videoState=new ut(Nt.STOPPED),this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),a=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.seekPosition.getTransition();if(this.log({message:`[syncPlayback] videoState: ${t}; videoTransition: ${JSON.stringify(e)}; desiredPlaybackState: ${i}; desiredPlaybackStateTransition: ${this.params.desiredState.playbackState.getTransition()}; seekPositionTransition: ${JSON.stringify(r)};`}),i===$.STOPPED)return void(t!==Nt.STOPPED&&(this.videoState.startTransitionTo(Nt.STOPPED),this.stop()));if(e)return;const o=null==r?void 0:r.to;if((null==a?void 0:a.to)!==$.PAUSED&&s(o)&&t!==Nt.STOPPED)return this.params.desiredState.seekPosition.setState(o),this.params.desiredState.seekPosition.startTransitionTo(void 0),void this.seek(o);switch(i){case $.PLAYING:switch(t){case Nt.PLAYING:break;case Nt.PAUSED:case Nt.READY:this.videoState.startTransitionTo(Nt.PLAYING),this.params.connection.remotePlayerController.playOrPause();break;case Nt.STOPPED:this.videoState.startTransitionTo(Nt.READY),this.prepare();break;default:n(t)}break;case $.PAUSED:switch(t){case Nt.PLAYING:this.videoState.startTransitionTo(Nt.PAUSED),this.params.connection.remotePlayerController.playOrPause();break;case Nt.PAUSED:break;case Nt.READY:this.videoState.startTransitionTo(Nt.PAUSED),this.videoState.setState(Nt.PAUSED);break;case Nt.STOPPED:this.videoState.startTransitionTo(Nt.READY),this.prepare();break;default:n(t)}break;default:n(i)}},this.params=t,this.log=this.params.dependencies.logger.createComponentLog("ChromecastProvider"),this.log({message:`constructor, format: ${t.format}`}),this.params.output.isLive$.next((t=>{switch(t){case P.MPEG:case P.DASH:case P.DASH_SEP:case P.DASH_ONDEMAND:case P.DASH_WEBM:case P.DASH_WEBM_VK:case P.HLS:case P.HLS_JS:case P.HLS_ONDEMAND:return!1;case P.HLS_LIVE:case P.DASH_LIVE:case P.DASH_LIVE_WEBM:return!0;default:return n(t)}})(t.format)),this.handleRemoteVolumeChange({volume:this.params.connection.remotePlayer.volumeLevel,muted:this.params.connection.remotePlayer.isMuted});const e=this.params.connection.session.getMediaSession();e&&this.restoreSession(e),this.subscribe()}destroy(){this.log({message:"[destroy]"}),this.subscription.unsubscribe()}subscribe(){this.subscription.add(this.loadMediaTimeoutSubscription);const t=new i;this.subscription.add(t),this.subscription.add(o(this.videoState.stateChangeStarted$.pipe(h((t=>`stateChangeStarted$ ${JSON.stringify(t)}`))),this.videoState.stateChangeEnded$.pipe(h((t=>`stateChangeEnded$ ${JSON.stringify(t)}`)))).subscribe((t=>this.log({message:`[videoState] ${t}`}))));const d=(t,e)=>this.subscription.add(t.subscribe(e));if(this.params.output.isLive$.getValue())this.params.output.position$.next(0),this.params.output.duration$.next(0);else{const i=new e;t.add(i.pipe(v(500)).subscribe((t=>{this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.params.desiredState.seekPosition.setState(void 0)})));let n=NaN;t.add(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.CURRENT_TIME_CHANGED).subscribe((t=>{this.logRemoteEvent(t);const e=t.value;this.params.output.position$.next(e);const r=this.params.desiredState.seekPosition.getTransition();s(r)&&a(r.to)?this.params.desiredState.seekPosition.setState(void 0):Math.abs(e-n)>5&&i.next(e),n=e}))),t.add(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.DURATION_CHANGED).subscribe((t=>{this.logRemoteEvent(t),this.params.output.duration$.next(t.value)})))}d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MEDIA_LOADED_CHANGED),(e=>{this.logRemoteEvent(e),e.value?this.handleRemoteReady():(this.handleRemoteStop(),t.unsubscribe())})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_PAUSED_CHANGED),(t=>{this.logRemoteEvent(t),t.value?this.handleRemotePause():this.handleRemotePlay()})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.PLAYER_STATE_CHANGED),(t=>{this.logRemoteEvent(t);const{remotePlayer:e}=this.params.connection,i=t.value,s=this.params.output.isBuffering$.getValue(),a=i===chrome.cast.media.PlayerState.BUFFERING;switch(s!==a&&this.params.output.isBuffering$.next(a),i){case chrome.cast.media.PlayerState.IDLE:!this.params.output.isLive$.getValue()&&e.duration-e.currentTime<5&&this.params.output.endedEvent$.next(),this.handleRemoteStop(),Q(this.params.desiredState.playbackState,$.STOPPED);break;case chrome.cast.media.PlayerState.PAUSED:this.handleRemotePause();break;case chrome.cast.media.PlayerState.PLAYING:this.handleRemotePlay();break;case chrome.cast.media.PlayerState.BUFFERING:break;default:n(i)}})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.VOLUME_LEVEL_CHANGED),(t=>{this.logRemoteEvent(t),this.handleRemoteVolumeChange({volume:t.value})})),d(r(this.params.connection.remotePlayerController,cast.framework.RemotePlayerEventType.IS_MUTED_CHANGED),(t=>{this.logRemoteEvent(t),this.handleRemoteVolumeChange({muted:t.value})}));d(o(this.params.desiredState.playbackState.stateChangeStarted$,this.params.desiredState.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)),this.syncPlayback)}restoreSession(t){this.log({message:"restoreSession"});const{remotePlayer:e}=this.params.connection;if(t.playerState!==chrome.cast.media.PlayerState.IDLE){e.isPaused?(this.videoState.setState(Nt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):(this.videoState.setState(Nt.PLAYING),Q(this.params.desiredState.playbackState,$.PLAYING));const t=this.params.output.isLive$.getValue();this.params.output.duration$.next(t?0:e.duration),this.params.output.position$.next(t?0:e.currentTime),this.params.desiredState.seekPosition.setState(void 0)}}prepare(){const t=this.params.format;this.log({message:`[prepare] format: ${t}`});const e=this.createMediaInfo(t),i=this.createLoadRequest(e);this.loadMedia(i)}handleRemotePause(){const t=this.videoState.getState(),e=this.videoState.getTransition();(null==e?void 0:e.to)!==Nt.PAUSED&&t!==Nt.PLAYING||(this.videoState.setState(Nt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED))}handleRemotePlay(){const t=this.videoState.getState(),e=this.videoState.getTransition();(null==e?void 0:e.to)!==Nt.PLAYING&&t!==Nt.PAUSED||(this.videoState.setState(Nt.PLAYING),Q(this.params.desiredState.playbackState,$.PLAYING))}handleRemoteReady(){const t=this.videoState.getTransition();(null==t?void 0:t.to)===Nt.READY&&this.videoState.setState(Nt.READY)}handleRemoteStop(){this.videoState.getState()!==Nt.STOPPED&&this.videoState.setState(Nt.STOPPED)}handleRemoteVolumeChange(t){var e,i;const s=this.params.output.volume$.getValue(),a={volume:null!==(e=t.volume)&&void 0!==e?e:s.volume,muted:null!==(i=t.muted)&&void 0!==i?i:s.muted};a.volume===s.volume&&a.muted==a.muted||this.params.output.volume$.next(a)}seek(t){const{remotePlayer:e,remotePlayerController:i}=this.params.connection;e.currentTime=t,i.seek()}stop(){const{remotePlayerController:t}=this.params.connection;t.stop()}createMediaInfo(t){var e;const i=this.params.source;let a,r,o;switch(t){case P.MPEG:{const e=i[t];l(e);const s=Object.keys(e).sort(((t,e)=>t===e?0:t===z.INVARIANT?1:e===z.INVARIANT?-1:j(t,e)?1:-1))[0];l(s);const n=e[s];l(n),a=n,r="video/mp4",o=chrome.cast.media.StreamType.BUFFERED;break}case P.HLS:case P.HLS_ONDEMAND:{const e=i[t];l(e),a=e.url,r="application/x-mpegurl",o=chrome.cast.media.StreamType.BUFFERED;break}case P.DASH_SEP:case P.DASH_ONDEMAND:case P.DASH_WEBM_VK:case P.DASH_WEBM:{const e=i[t];l(e),a=e.url,r="application/dash+xml",o=chrome.cast.media.StreamType.BUFFERED;break}case P.HLS_LIVE:{const e=i[t];l(e),a=Ct(e.url),r="application/x-mpegurl",o=chrome.cast.media.StreamType.LIVE;break}case P.DASH_LIVE_WEBM:{const e=i[t];l(e),a=e.url,r="application/dash+xml",o=chrome.cast.media.StreamType.LIVE;break}case P.HLS_JS:case P.DASH:case P.DASH_LIVE:{const t="Unsupported format for Chromecast",e=new Error(t);throw this.params.output.error$.next({id:"ChromecastProvider.createMediaInfo()",message:t,thrown:e}),e}default:return n(t)}const d=new chrome.cast.media.MediaInfo(null!==(e=this.params.meta.videoId)&&void 0!==e?e:a,r);d.contentUrl=a,d.streamType=o,d.metadata=new chrome.cast.media.GenericMediaMetadata;const{title:h,subtitle:u}=this.params.meta;return s(h)&&(d.metadata.title=h),s(u)&&(d.metadata.subtitle=u),d}createLoadRequest(t){var e;const i=new chrome.cast.media.LoadRequest(t);i.autoplay=!1;const s=this.params.desiredState.seekPosition.getTransition();return i.currentTime=s?this.params.output.isLive$.getValue()?0:null!==(e=s.to)&&void 0!==e?e:0:0,i}loadMedia(t){const e=this.params.connection.session.loadMedia(t),i=new Promise(((t,e)=>{this.loadMediaTimeoutSubscription.add(g(7e3).subscribe((()=>e("timeout(7000)"))))}));Promise.race([e,i]).then((()=>{this.log({message:`[loadMedia] completed, format: ${this.params.format}`});const t=this.params.desiredState.seekPosition;t.getTransition()&&t.setState(void 0),this.handleRemoteReady()}),(t=>{const e=`[prepare] loadMedia failed, format: ${this.params.format}, reason: ${t}`;this.log({message:e}),this.params.output.error$.next({id:"ChromecastProvider.loadMedia",message:e,thrown:t})})).finally((()=>{this.loadMediaTimeoutSubscription.unsubscribe()}))}logRemoteEvent(t){this.log({message:`[remoteEvent] ${JSON.stringify(t)}`})}}var Bt;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Bt||(Bt={}));class Mt{constructor(t){this.subscription=new i,this.videoState=new ut(Bt.STOPPED),this.trackUrls={},this.textTracksManager=new U,this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition();if(e===$.STOPPED)return void(t!==Bt.STOPPED&&(this.videoState.startTransitionTo(Bt.STOPPED),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(Bt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(this.videoState.getTransition())return;const a=this.params.desiredState.videoTrack.getTransition(),r=this.params.desiredState.seekPosition.getTransition();if(t===Bt.STOPPED)return this.videoState.startTransitionTo(Bt.READY),void this.prepare();if(a){const{currentTime:t}=this.video;return this.prepare(),void(r||this.params.desiredState.seekPosition.startTransitionTo(t))}const o=null==r?void 0:r.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(o)&&this.seek(o),t){case Bt.READY:return void(e===$.PAUSED?(this.videoState.setState(Bt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(Bt.PLAYING),this.playIfAllowed()));case Bt.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(Bt.PAUSED),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case Bt.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(Bt.PLAYING),this.playIfAllowed()):(null==i?void 0:i.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));default:return n(t)}},this.params=t,this.video=V(t.container),this.params.output.element$.next(this.video),Object.entries(this.params.source).forEach((([t,e],i)=>{const s=i.toString(10);this.trackUrls[s]={track:{quality:t,id:s},url:e}})),this.params.output.availableVideoTracks$.next(Object.values(this.trackUrls).map((({track:t})=>t))),this.params.output.isLive$.next(!1),this.subscribe()}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"MpegProvider",message:"MpegProvider internal logic error",thrown:e})},a=Y(this.video),r=(t,e)=>this.subscription.add(t.subscribe(e,i));r(a.timeUpdate$,t.position$),r(a.durationChange$,t.duration$),r(a.ended$,t.endedEvent$),r(a.error$,t.error$),r(a.isBuffering$,t.isBuffering$),r(a.currentBuffer$,t.currentBuffer$),r(a.firstBytes$,t.firstBytesEvent$),r(a.firstFrame$,t.firstFrameEvent$),this.subscription.add(a.seeked$.subscribe((()=>e.seekPosition.setState(void 0)),i)),this.subscription.add(O(this.video,e.isLooped,i)),this.subscription.add(B(this.video,e.volume,a.volumeState$,i)),this.subscription.add(a.volumeState$.subscribe(this.params.output.volume$,i)),this.subscription.add(a.play$.subscribe((()=>{this.videoState.setState(Bt.PLAYING),Q(e.playbackState,$.PLAYING)}),i)).add(a.pause$.subscribe((()=>{this.videoState.setState(Bt.PAUSED),Q(e.playbackState,$.PAUSED)}),i)).add(a.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===Bt.READY&&this.videoState.setState(Bt.READY);const e=this.params.desiredState.videoTrack.getTransition();e&&s(e.to)&&(this.params.desiredState.videoTrack.setState(e.to),this.params.output.currentVideoTrack$.next(this.trackUrls[e.to].track)),this.videoState.getState()===Bt.PLAYING&&this.playIfAllowed()}),i)),this.subscription.add(e.autoVideoTrackSwitching.stateChangeStarted$.subscribe((()=>e.autoVideoTrackSwitching.setState(!1)),i)),this.textTracksManager.connect(this.video,e,t);const n=o(e.playbackState.stateChangeStarted$,e.videoTrack.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.trackUrls={},this.video.remove(),this.params.output.element$.next(void 0)}prepare(){var t,e;const i=null!==(e=null===(t=this.params.desiredState.videoTrack.getTransition())||void 0===t?void 0:t.to)&&void 0!==e?e:this.params.desiredState.videoTrack.getState();l(i,"MpegProvider: track is not selected");const{url:s}=this.trackUrls[i];l(s,`MpegProvider: No url for ${i}`),this.video.setAttribute("src",s),this.video.load(),this.params.output.hostname$.next(dt(s))}playIfAllowed(){C(this.video).then((t=>{t||(this.videoState.setState(Bt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.video.currentTime=t}}class Ut{constructor(t,e=[],i,s,a,r){this._failoverIndex=0,this._failoverCount=0,this._xhr=null,this._retryTimeout=0,this._url=t,this._failoverHosts=e,this._completeCb=i,this._progressCb=s,this._headersCb=a,this._errorCb=r,this._request()}_request(){this._xhr=new XMLHttpRequest,this._xhr.open("GET",this._url,!0),this._xhr.overrideMimeType("text/plain; charset=x-user-defined");let t=!1;this._xhr.onreadystatechange=()=>{var e,i,s,a,r,n,o,d;if(l(this._xhr),(null===(e=this._xhr)||void 0===e?void 0:e.status)>=400)return null===(i=this._errorCb)||void 0===i||i.call(this,`Http${null===(s=this._xhr)||void 0===s?void 0:s.status}`,`XHR response code ${null===(a=this._xhr)||void 0===a?void 0:a.status}`),void this.abort();if(4!==this._xhr.readyState||0!==this._xhr.status)try{this._xhr.readyState>=2&&!t&&(t=!0,null===(r=this._headersCb)||void 0===r||r.call(this)),4===this._xhr.readyState&&(null===(n=this._completeCb)||void 0===n||n.call(this,this._xhr.response)),3===this._xhr.readyState&&(null===(o=this._progressCb)||void 0===o||o.call(this,this._xhr.response))}catch(t){throw null===(d=this._errorCb)||void 0===d||d.call(this,"XHR2CallbackError",`xhr2 callback threw ${String(t)}`,t),t}},this._xhr.onerror=()=>{var t;null===(t=this._xhr)||void 0===t||t.abort(),this._retryTimeout=window.setTimeout((()=>{var t;if(this._xhr)if(++this._failoverCount>=30)this._xhr=null,null===(t=this._errorCb)||void 0===t||t.call(this,"XHR2Failover","XHR failed, retrying failover host");else{let t;this._failoverIndex>=this._failoverHosts.length?(t=this._url,this._failoverIndex=0):(t=this._url.replace((t=>{const e=document.createElement("a");return e.href=t,e.host})(this._url),this._failoverHosts[this._failoverIndex]),this._failoverIndex++),this._xhr.open("GET",t,!0),this._xhr.send(null)}}),500)},this._xhr.send(null)}abort(){window.clearTimeout(this._retryTimeout),this._completeCb=this._progressCb=this._errorCb=void 0,this._xhr&&(this._xhr.abort(),this._xhr=null)}}class Vt{constructor(t){this._maxBufferDuration=Number.POSITIVE_INFINITY,this._isFull=!1,this._params=t,this._mediaSource=t.mediaSource,this._sourceBuffer=t.sourceBuffer,this._onDashCallback=t.onDashCallback}_appendBuffer(t,e){try{this._isFull=!1;(this._sourceBuffer.appendBuffer||this._sourceBuffer.append).bind(this._sourceBuffer)(t),null==e||e()}catch(t){if("QuotaExceededError"!==t.name)throw this._params.onError("AppendBuffer","Unknown Buffer error",t),t;{this._isFull=!0;const t=this._sourceBuffer.buffered;let e=0;for(let i=0,s=t.length;i<s;i++)e+=t.end(i)-t.start(i);e&&(this._maxBufferDuration=Math.round(e))}}}getMaxBufferDuration(){return this._maxBufferDuration}isFull(){return this._isFull}load(t,e,i,s,a,r,n){this.abort((()=>{let o=0;const d=Date.now();let h=Date.now(),u=0;const c=i-e+1,l=t=>{s(Vt._str2ua(t.substr(o))),o=t.length};this._lastXhr=new Ut(t.baseURL+"&bytes="+e+"-"+i,t.failoverHosts,(t=>{this._lastXhr=void 0,l(t);const e=Date.now()-d;this._params.onBandwidthChange({size:c,duration:e,speed:8*c/(e/1e3)}),this._onDashCallback("loading",{size:t.length,done:!0}),null==a||a()}),(t=>{t.length-o>n&&l(t);const e=t.length-u,i=Date.now()-h;u&&this._params.onBandwidthChange({size:e,duration:i,speed:8*e/(i/1e3)}),u=t.length,h=Date.now(),this._onDashCallback("loading",{size:t.length,done:!1})}),r,((t,e,i)=>this._params.onError(t,e,i)))}))}abort(t){var e;null===(e=this._lastXhr)||void 0===e||e.abort(),this._sbUpdatingStop(this._lastStreamUpdatingCallback),this._lastStreamUpdatingCallback=this._sbUpdatingWatch((()=>{this._appendPromiseUint8Array&&(this._appendBuffer(this._appendPromiseUint8Array),this._appendPromiseUint8Array=void 0),this._lastStreamUpdatingCallback=this._sbUpdatingWatch((()=>{"open"===this._mediaSource.readyState&&this._sourceBuffer.abort(),null==t||t()}))}))}_sbUpdatingWatch(t){if(this._sourceBuffer.updating){const e=()=>{try{this._sbUpdatingStop(e),this._sbUpdatingWatch(t)}catch(t){throw this._params.onError("SourceBuffer","Source Buffer update error",t),t}};return this._sourceBuffer.addEventListener("updateend",e,!1),e}t()}_sbUpdatingStop(t){t&&this._sourceBuffer.removeEventListener("updateend",t,!1)}append(t,e){this._appendPromiseUint8Array?this._appendPromiseUint8Array=Vt._concatUint8(this._appendPromiseUint8Array,t):(this._appendPromiseUint8Array=t,this._lastStreamUpdatingCallback=this._sbUpdatingWatch((()=>{this._appendPromiseUint8Array&&this._appendBuffer(this._appendPromiseUint8Array,(()=>{this._appendPromiseUint8Array=void 0,e&&this._sbUpdatingWatch(e)}))})))}endOfStream(){"open"===this._mediaSource.readyState&&this._sbUpdatingWatch((()=>this._mediaSource.endOfStream()))}static _concatUint8(t,e){const i=new Uint8Array(t.byteLength+e.byteLength);return i.set(t,0),i.set(e,t.byteLength),i}static _str2ua(t){const e=new Uint8Array(t.length);for(let i=0;i<t.length;i++)e[i]=t.charCodeAt(i);return e}remove(t,e){this._sbUpdatingWatch((()=>{!this._sourceBuffer.updating&&this._sourceBuffer.remove&&this._sourceBuffer.remove(t,e),this._maxBufferDuration=Number.POSITIVE_INFINITY}))}destroy(){var t;null===(t=this._lastXhr)||void 0===t||t.abort(),this._sbUpdatingStop(this._lastStreamUpdatingCallback),"open"===this._mediaSource.readyState&&this._sourceBuffer.abort()}}class Ht{constructor(t){var e;this._representations=[],this._appendVector={},this._cachingPaused=!1,this._duration=0,this.STREAM_END_THRESHOLD=1,this._params=t,this._video=t.video,this._buffer=t.buffer,this._onDashCallback=null!==(e=t.onDashCallback)&&void 0!==e?e:()=>{},this._config=t.config}_parseDurationFromISO8601(t){const e=(t,e)=>{const i=t?parseFloat(t.replace(",",".")):NaN;return(isNaN(i)?0:i)*e},i=/^(-)?P(?:(-?[0-9,.]*)Y)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)W)?(?:(-?[0-9,.]*)D)?(?:T(?:(-?[0-9,.]*)H)?(?:(-?[0-9,.]*)M)?(?:(-?[0-9,.]*)S)?)?$/.exec(t),s="-"===(null==i?void 0:i[1])?-1:1;e(null==i?void 0:i[2],s),e(null==i?void 0:i[3],s),e(null==i?void 0:i[4],s),e(null==i?void 0:i[5],s);return 3600*e(null==i?void 0:i[6],s)+60*e(null==i?void 0:i[7],s)+e(null==i?void 0:i[8],s)}getRepresentations(){return this._representations}attachSource(t,e){new Ut(t,e,(i=>{this.attachManifest(i,e,(t=>{const e=document.createElement("a");return e.href=t,e.origin})(t))}),void 0,void 0,((t,e,i)=>this._params.onError(t,e,i)))}attachManifest(t,e,i){const s=(new DOMParser).parseFromString(t,"text/xml").documentElement,a=(t,e)=>{const i=t.attributes.getNamedItem(e);return i?i.value:null};this._duration=this._parseDurationFromISO8601(String(a(s,"mediaPresentationDuration")));const r=[],n=[];Array.prototype.forEach.call(s.getElementsByTagName("Representation"),(t=>{var s,o,d,h,u,c,l,p,m,v,S,f,g,b,T,y,E;const $=t.getElementsByTagName("SegmentBase")[0],P=$&&a($,"indexRange").split("-"),k=$&&$.getElementsByTagName("Initialization")[0],w=k&&a(k,"range").split("-");if(!w||!P){const e=t.parentElement;if("text"===(null==e?void 0:e.getAttribute("contentType"))){const a=null!==(s=t.getAttribute("id"))&&void 0!==s?s:void 0,r=(i?i+"/":"")+(null===(u=null===(h=null===(d=null===(o=t.getElementsByTagName("BaseURL"))||void 0===o?void 0:o[0])||void 0===d?void 0:d.childNodes)||void 0===h?void 0:h[0])||void 0===u?void 0:u.data),l=null!==(c=e.getAttribute("lang"))&&void 0!==c?c:void 0;r&&n.push({id:a,url:r,language:l})}return}const A=Number(null===(l=t.attributes.getNamedItem("bandwidth"))||void 0===l?void 0:l.value),D=(i?i+"/":"")+t.getElementsByTagName("BaseURL")[0].childNodes[0].data;r.push({width:Number(null===(p=t.attributes.getNamedItem("width"))||void 0===p?void 0:p.value),height:Number(null===(m=t.attributes.getNamedItem("height"))||void 0===m?void 0:m.value),bandwidth:A,baseURL:D,failoverHosts:e,indexFrom:Number(P[0]),indexTo:Number(P[1]),initFrom:Number(w[0]),initTo:Number(w[1]),codecs:null!==(S=null===(v=t.attributes.getNamedItem("codecs"))||void 0===v?void 0:v.value)&&void 0!==S?S:void 0,mimeType:null!==(g=null===(f=t.attributes.getNamedItem("mimeType"))||void 0===f?void 0:f.value)&&void 0!==g?g:void 0,bufferSize:.1*A/8,bufferLength:.1,name:null!==(T=null===(b=t.attributes.getNamedItem("okQuality"))||void 0===b?void 0:b.value)&&void 0!==T?T:void 0,id:null!==(E=null===(y=t.attributes.getNamedItem("id"))||void 0===y?void 0:y.value)&&void 0!==E?E:void 0})})),r.length?(this._representations=r,n.forEach((({id:t,language:e,url:i})=>{const s=document.createElement("track");s.setAttribute("src",i),t&&s.setAttribute("id",t),e&&s.setAttribute("srclang",e),this._video.appendChild(s)})),this._representations.sort(((t,e)=>e.bandwidth-t.bandwidth)),this._params.onManifestReady(this._representations)):this._onDashCallback("error")}_loadInitAndSidx(t,e){if(t===this._currentRepresentation)return void(e&&e());if(t.refs)return void this._stream.abort((()=>{this._stream.append(t.initMessage,e)}));const i=Date.now();this._stream.load(t,t.initFrom,t.indexTo,(i=>{let s=t.initTo-t.initFrom+1;if(!i.byteLength)return void this._params.onError("EmptyResponse","Empty response");t.initMessage=new Uint8Array(i.buffer,0,s);const a=new DataView(i.buffer);s+=12;const r=a.getUint32(s+4,!1);s+=8;let n=a.getUint32(s,!1),o=a.getUint32(s+4,!1)+(t.indexTo+1);s+=8;const d=a.getUint16(s+2,!1);s+=4,t.refs=[];for(let e=0;e<d;e+=1){const e=o+(2147483647&a.getUint32(s,!1)),i=n+a.getUint32(s+4,!1);s+=12,t.refs.push({fromTime:n/r,toTime:i/r,fromOffset:o,toOffset:e-1}),o=e,n=i}const h=t.refs[t.refs.length-1];h.toTime-h.fromTime<.3&&t.refs.pop(),this._stream.append(t.initMessage,e)}),void 0,(()=>{this._params.onIdxRequestPing(Date.now()-i)}),t.indexTo-t.initFrom+1)}startPlay(t){const e=window.MediaSource||window.WebKitMediaSource;if(!e)return void this._params.onError("MediaSourceNotSupported","MediaSource is not supported");const i=new e;let s,a;const r=()=>{const e=this._findRef(this._video.currentTime);if(!e||this._video.paused)return;if(!this._cachingPaused&&void 0!==this._lastLoadOffset&&this._lastLoadOffset-this._video.currentTime<this._config.FRONT_CACHE_DURATION&&this._lastLoadOffset-this._video.currentTime<this._stream.getMaxBufferDuration()){const t=this._stream.isFull()?this._findBufferRangeEnd(this._video.currentTime):this._lastLoadOffset;this._loadRef(this._params.selectRepresentation(this._representations),t)}const i=this._appendVector[String(e.fromTime)];let r;i!==s&&(s=i,this._params.onRepresentationPlay(i));if(this._findRef(e.toTime)){const e=this._buffer.getByTime(this._video.currentTime);if(!e)return void this._onDashCallback("buffering");r=e.end-this._video.currentTime,r<t.bufferLength&&(this._onDashCallback("buffering"),a!==e.end&&(a=e.end,window.setTimeout((()=>{try{const t=this._buffer.getNextWithGap(e);t&&(this._video.currentTime=t.start)}catch(t){throw this._params.onError("GapSyncError",`Seek Error ${String(t)}`,t),t}}),1e3*r)))}},n=()=>{this._loopTimeout=window.setTimeout((()=>{try{r()}catch(t){throw this._params.onError("LoopError",`Dash Loop exception ${String(t)}`,t),t}n()}),250)},o=()=>{if(!this._stream)try{const e=i.addSourceBuffer(`${t.mimeType}; codecs="${t.codecs}"`);this._stream=new Vt({mediaSource:i,sourceBuffer:e,onBandwidthChange:this._params.onBandwidthChange,onError:this._params.onError,onDashCallback:this._onDashCallback})}catch(t){throw this._params.onError("DashSourceOpen",`Source open exception ${String(t)}`,t),t}this._loadInitAndSidx(t),i.duration||(i.duration=this._duration),this._loopTimeout||n(),i.removeEventListener("sourceopen",o),i.removeEventListener("webkitsourceopen",o)};i.addEventListener("sourceopen",o,!1),i.addEventListener("webkitsourceopen",o,!1),this._video&&(this._video.src=window.URL.createObjectURL(i),this._video.addEventListener("waiting",(()=>{const t=this._video&&this._video.played.length;t&&!this._video.currentTime&&this._video.loop?this._video.duration-this._video.played.end(t-1)<this.STREAM_END_THRESHOLD&&this.seek(0):this._video.duration-this._video.currentTime<this.STREAM_END_THRESHOLD&&this._stream.endOfStream()})))}_loadRef(t,e,i=!1){this._lastLoadOffset=void 0,this._loadInitAndSidx(t,(()=>{this._currentRepresentation=t;const s=this._findRef(e);if(s){if(i){this._isLastRef(s)&&e>=s.toTime&&(e=s.fromTime);const t=this._findRef(this._video.currentTime),i=Math.abs(this._video.currentTime-e),a=this._video.duration<this._config.SEEK_IN_SEGMENT_THRESHOLD/1e3||s===t||i<=this._config.SEEK_IN_SEGMENT_DELTA/1e3;this._video.currentTime=a?e:s.fromTime}this._appendVector[String(s.fromTime)]=t,this._stream.load(t,s.fromOffset,s.toOffset,((t,e)=>this._stream.append(t,e)),(()=>{this._lastLoadOffset=s.toTime,this._video.duration-this._lastLoadOffset<this.STREAM_END_THRESHOLD&&this._stream.endOfStream()}),void 0,t.bufferSize)}}))}setQualityByRepresentation(t){const e=this._buffer.getByTime(this._video.currentTime),i=this._findRef(this._video.currentTime);if(!e||!i)return;const s=.1;if(i.toTime<e.end+s){const a=this._findRef(i.toTime);a&&a.toTime<e.end+s?(this._buffer.smartRemove(i.fromTime-s,a.toTime+s,((t,e)=>this._stream.remove(t,e))),this._loadRef(t,a.toTime)):(this._buffer.smartRemove(i.fromTime-s,i.toTime+s,((t,e)=>this._stream.remove(t,e))),this._loadRef(t,i.toTime))}}setQuality(t){return this.setQualityByRepresentation(this._representations[t])}pauseCaching(){this._cachingPaused=!0}resumeCaching(){this._cachingPaused=!1}seek(t,e=!1){this._stream&&this._buffer.getByTime(t)&&!e?this._video.currentTime=t:this._loadRef(this._params.selectRepresentation(this._representations),t,!0)}updateRefsForCurrentTime(){const t=this._video.currentTime;this._stream&&!a(this._buffer.getByTime(t))||this._loadRef(this._params.selectRepresentation(this._representations),t,!1)}_findRef(t){var e;const i=null===(e=this._currentRepresentation)||void 0===e?void 0:e.refs;if(!i)return;if(Array.isArray(i)&&0===i.length)return void this._params.onError("emptyrefs","Empty refs");let s;for(let e=0;e<i.length;e++){const a=i[e];if(a.fromTime<=t&&a.toTime>t)return a;a.fromTime>t&&(!s||a.fromTime<s.fromTime)&&(s=a)}if(!s){const e=i[i.length-1];if(t>e.toTime)return e}return s}_isLastRef(t){var e;const i=null===(e=this._currentRepresentation)||void 0===e?void 0:e.refs;if(!i)return!1;const s=i[i.length-1];return t.fromTime===s.fromTime}_findBufferRangeEnd(t){let e=this._video.buffered.length;for(;e-- >0;){const i=this._video.buffered.start(e),s=this._video.buffered.end(e);if(t>i&&t<s)return Math.round(10*s)/10}return t}destroy(){this._stream&&this._stream.destroy(),clearTimeout(this._loopTimeout),this._loopTimeout=void 0}}var qt;!function(t){t.STOPPED="stopped",t.MANIFEST_LOADED="manifest-loaded",t.INITIAL_REPRESENTATION_SELECTED="initial-representation-selected",t.METADATA_LOADED="metadata-loaded",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(qt||(qt={}));const Ft=[qt.PAUSED,qt.PLAYING];class Gt{constructor(a){this.videoState=new ut(qt.STOPPED),this.subscription=new i,this.representations$=new t([]),this.currentRepresentation$=new t(void 0),this.textTracksManager=new U,this.elementSize$=new t(void 0),this.dashLiteEvents={idxRequestPing$:new e,manifestReady$:new e,representationPlay$:new e,error$:new e},this.handleManifestReady=t=>{var e,i;const s=[];for(const a of t){const t=null!==(i=null!==(e=a.name)&&void 0!==e?e:a.id)&&void 0!==i?i:a.height.toString(10),r=K(a),n=a.bandwidth/1e3,o={width:a.width,height:a.height};if(!r)continue;const d={id:t,quality:r,bitrate:n,size:o};s.push({track:d,representation:a})}this.representations$.next(s),this.params.output.availableVideoTracks$.next(s.map((({track:t})=>t))),this.videoState.setState(qt.MANIFEST_LOADED)},this.handleRepresentationPlay=t=>{var e;const i=null===(e=this.representations$.getValue().find((({representation:e})=>e===t)))||void 0===e?void 0:e.track;if(i){this.params.output.currentVideoTrack$.next(i);this.params.desiredState.videoTrack.getTransition()&&this.params.desiredState.videoTrack.setState(i.id)}},this.selectRepresentation=()=>{const t=this.currentRepresentation$.getValue();return l(t,"Can't select representation. something went wrong"),t},this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.videoState.getTransition(),i=this.params.desiredState.playbackState.getState(),a=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.seekPosition.getTransition();if(this.log({message:`[syncPlayback] videoState: ${t}; videoTransition: ${JSON.stringify(e)}; desiredPlaybackState: ${i}; seekPositionTransition: ${JSON.stringify(r)};`}),i===$.STOPPED)return void(t!==qt.STOPPED&&(this.videoState.startTransitionTo(qt.STOPPED),this.dash.destroy(),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(qt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(e)return;const o=null==r?void 0:r.to;switch((null==a?void 0:a.to)!==$.PAUSED&&s(o)&&Ft.includes(t)&&this.seek(o),t){case qt.STOPPED:return this.videoState.startTransitionTo(qt.MANIFEST_LOADED),void this.prepare();case qt.MANIFEST_LOADED:return void this.videoState.startTransitionTo(qt.INITIAL_REPRESENTATION_SELECTED);case qt.INITIAL_REPRESENTATION_SELECTED:return this.videoState.startTransitionTo(qt.METADATA_LOADED),void this.dash.startPlay(this.selectRepresentation());case qt.METADATA_LOADED:return this.videoState.startTransitionTo(qt.READY),void this.dash.seek(null!=o?o:0);case qt.READY:return void(i===$.PAUSED?(this.videoState.setState(qt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):i===$.PLAYING&&(this.videoState.startTransitionTo(qt.PLAYING),this.playIfAllowed()));case qt.PLAYING:return void(i===$.PAUSED?(this.videoState.startTransitionTo(qt.PAUSED),this.video.pause()):(null==a?void 0:a.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case qt.PAUSED:return void(i===$.PLAYING?(this.videoState.startTransitionTo(qt.PLAYING),this.playIfAllowed()):(null==a?void 0:a.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));default:return n(t)}},this.params=a,this.log=this.params.dependencies.logger.createComponentLog("DashProvider"),o(this.videoState.stateChangeStarted$.pipe(h((t=>({transition:t,type:"start"})))),this.videoState.stateChangeEnded$.pipe(h((t=>({transition:t,type:"end"}))))).subscribe((({transition:t,type:e})=>{this.log({message:`[videoState change] ${e}: ${JSON.stringify(t)}`})})),this.video=V(a.container),this.params.output.element$.next(this.video),this.params.output.isLive$.next(!1),"url"===this.params.source.type&&this.params.output.hostname$.next(dt(this.params.source.url)),this.buffer=new q(this.video),this.dash=new Ht({video:this.video,buffer:this.buffer,selectRepresentation:this.selectRepresentation,onIdxRequestPing:t=>this.dashLiteEvents.idxRequestPing$.next(t),onManifestReady:t=>this.dashLiteEvents.manifestReady$.next(t),onRepresentationPlay:t=>this.dashLiteEvents.representationPlay$.next(t),onBandwidthChange:t=>this.params.dependencies.throughputEstimator.addRawSpeed(t.size,t.duration),onError:(t,e,i)=>{this.log({message:`[DashLite error], ${t}`}),this.dashLiteEvents.error$.next({id:t,message:e,thrown:i})},config:{SEEK_IN_SEGMENT_THRESHOLD:this.params.tuning.dashSeekInSegmentDurationThreshold,SEEK_IN_SEGMENT_DELTA:this.params.tuning.dashSeekInSegmentAlwaysSeekDelta,FRONT_CACHE_DURATION:this.params.config.cacheDuration/1e3}}),this.subscribe()}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"DashProvider",message:"DashProvider internal logic error",thrown:e})},r=Y(this.video),n=(t,e)=>this.subscription.add(t.subscribe(e,i));n(r.timeUpdate$,t.position$),n(r.durationChange$,t.duration$),n(r.ended$,t.endedEvent$),n(r.error$,t.error$),n(r.isBuffering$,t.isBuffering$),n(r.firstFrame$,t.firstFrameEvent$),this.subscription.add(r.seeking$.subscribe((()=>{a(this.params.desiredState.seekPosition.getTransition())&&(this.videoState.getState()===qt.PLAYING||this.videoState.getState()===qt.PAUSED)&&this.dash.updateRefsForCurrentTime()}))),this.subscription.add(r.seeked$.subscribe((()=>e.seekPosition.setState(void 0)))),this.subscription.add(O(this.video,e.isLooped,i)),this.subscription.add(B(this.video,e.volume,r.volumeState$,i)),this.subscription.add(r.volumeState$.subscribe(this.params.output.volume$)),this.textTracksManager.connect(this.video,e,t),n(ht(this.video),this.elementSize$),this.subscription.add(r.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===qt.READY&&this.videoState.setState(qt.READY)}),i)).add(r.pause$.subscribe((()=>{this.videoState.setState(qt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)}))).add(r.play$.subscribe((()=>{this.videoState.setState(qt.PLAYING),Q(this.params.desiredState.playbackState,$.PLAYING)}),i)).add(r.loadedMetadata$.subscribe((()=>{this.videoState.setState(qt.METADATA_LOADED)}),i)).add(r.currentBuffer$.subscribe((e=>{this.buffer.fill(),t.currentBuffer$.next(e)}),i)).add(this.dashLiteEvents.error$.pipe(h((({id:t,message:e,thrown:i})=>({id:`DashLite_${t}`,message:e,thrown:i})))).subscribe(this.params.output.error$)).add(o(this.params.desiredState.videoTrack.transitionStarted$,this.params.desiredState.autoVideoTrackSwitching.transitionStarted$,this.representations$,this.params.dependencies.throughputEstimator.rttAdjustedThroughput$,this.params.output.element$,this.elementSize$).pipe(h((()=>{var t,e;const i=this.representations$.getValue(),a=this.params.desiredState.autoVideoTrackSwitching.getState(),r=this.params.desiredState.autoVideoTrackSwitching.getTransition(),n=this.params.desiredState.videoTrack.getState(),o=this.params.desiredState.videoTrack.getTransition(),d=this.params.dependencies.throughputEstimator.rttAdjustedThroughput$.getValue(),h=this.elementSize$.getValue(),u=r?r.to:a;let c;if(r&&this.params.desiredState.autoVideoTrackSwitching.setState(r.to),!u&&s(n))c=n;else{const e=ot(this.video.buffered,1e3*this.video.currentTime),s=Math.min(e/this.params.tuning.dash.forwardBufferTarget,1);c=o?o.to:null===(t=nt(i.map((({track:t})=>t)),{container:h,throughput:d,tuning:this.params.tuning.autoTrackSelection,forwardBufferHealth:s}))||void 0===t?void 0:t.id}return s(c)?null===(e=i.find((({track:t})=>t.id===c)))||void 0===e?void 0:e.representation:void 0})),c()).subscribe(this.currentRepresentation$,i)).add(S({needToSelectRepresentation:this.videoState.stateChangeStarted$.pipe(f((t=>t.to===qt.INITIAL_REPRESENTATION_SELECTED))),currentRepresentationSelected:this.currentRepresentation$.pipe(f(s))}).pipe(m()).subscribe((()=>this.videoState.setState(qt.INITIAL_REPRESENTATION_SELECTED)),i)).add(this.currentRepresentation$.pipe(f(s),c()).subscribe((t=>{this.dash.setQualityByRepresentation(t),this.params.output.hostname$.next(dt(t.baseURL))}),i)).add(this.dashLiteEvents.idxRequestPing$.pipe(m()).subscribe(this.params.output.firstBytesEvent$)).add(this.dashLiteEvents.idxRequestPing$.subscribe((t=>this.params.dependencies.throughputEstimator.addRawRtt(t)))).add(this.dashLiteEvents.manifestReady$.subscribe(this.handleManifestReady,i)).add(this.dashLiteEvents.representationPlay$.pipe(f(s)).subscribe(this.handleRepresentationPlay,i)).add(o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)).subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0),this.buffer.destroy(),this.dash.destroy()}prepare(){const t=this.params.source;switch(t.type){case"url":this.dash.attachSource(t.url);break;case"raw":this.dash.attachManifest(t.raw);break;default:return n(t)}}seek(t){this.log({message:`[seek] position: ${t}`}),this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.dash.seek(t)}playIfAllowed(){C(this.video).then((t=>{t||(this.videoState.setState(qt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}}var Yt=t=>{t.extend("HTTPLoader",(function(){const{parent:t}=this,e=t.load;return{load:t=>{if(t.request&&t.request.range){const[e,i]=t.request.range.split("-").map((t=>parseInt(t,10))),s=new URL(t.request.url,location.href);s.searchParams.append("bytes",`${e}-${i}`),t.request.url=s.toString(),t.request.range=void 0}e(t)}}}),!0)};const zt=t=>t.range?t.range.split("-").map((t=>parseInt(t,10))):[NaN,NaN];class Qt{constructor(t){this.params=t,this.dashJsRequestQueue=new Map,this.activeRequests=new Map}setMetrics(t){this.dashMetrics=t}queueDashJSRequest(t){var e;const{url:i}=t.request,s=null!==(e=this.dashJsRequestQueue.get(i))&&void 0!==e?e:[];s.push(t),this.dashJsRequestQueue.set(i,s)}executeNextRequests(){return R(this,void 0,void 0,(function*(){for(const[t,e]of this.dashJsRequestQueue.entries()){const i=this.activeRequests.get(t);if(i){e.length&&this.onBigRequestProgress(i);const s=e[0];if(!s||!s.request.range)continue;const[a,r]=zt(s.request);if(a>=i.from&&r<=i.to)continue;this.activeRequests.delete(t)}if(e.length){const i=this.sendBigRequest(t,e.map((({request:t})=>t)));this.activeRequests.set(t,i)}}}))}abort(t){var e;if(t){const{request:i}=t,s=(null!==(e=this.dashJsRequestQueue.get(i.url))&&void 0!==e?e:[]).includes(t),a=this.activeRequests.get(i.url);s&&a&&a.abortController.abort()}else for(const{abortController:t}of this.activeRequests.values())t.abort()}destroy(){this.abort(),this.dashMetrics=void 0,this.dashJsRequestQueue.clear(),this.activeRequests.clear()}sendBigRequest(t,e){const i=e.map(zt),s=i[0][0];let a=i[0][1];for(let t=1;t<i.length&&a<this.params.minDataSize;t++){const e=i[t][1];e-s<=2*this.params.minDataSize&&(a=Math.max(a,e))}a=0===s?Math.max(a,s+this.params.minInitSize):Math.max(a,s+this.params.minDataSize);const r=new URL(t,location.href);r.searchParams.append("bytes",`${s}-${a}`);const n=r.toString(),o=new AbortController,d=o.signal,h={url:t,from:s,to:a,loaded:0,data:null,abortController:o};d.addEventListener("abort",(()=>this.onBigRequestAbort(h)));const u=t=>{var e,i;throw null===(i=(e=this.params).onError)||void 0===i||i.call(e,{id:"BigRequestParsing",message:"Error parsing response data",thrown:t}),t};return fetch(n,{signal:d}).then((t=>{var e,i,s;if(!t.ok||!t.body)return void this.onBigRequestError(h);const[a,r]=t.body.tee();null===(i=(e=this.params).onDownloadStream)||void 0===i||i.call(e,r);const n=a.getReader(),o=parseInt(null!==(s=t.headers.get("Content-Length"))&&void 0!==s?s:"",10);h.data=new ArrayBuffer(o);const d=new Uint8Array(h.data),c=({done:t,value:e})=>R(this,void 0,void 0,(function*(){t?this.onBigRequestProgress(h):e&&(d.set(e,h.loaded),h.loaded+=e.byteLength,this.onBigRequestProgress(h),yield null==n?void 0:n.read().then(c,Qt.suppressStreamErrors).catch(u))}));null==n||n.read().then(c,Qt.suppressStreamErrors).catch(u)}),Qt.suppressAbort).catch((t=>this.onBigRequestError(h,t))),h}onBigRequestProgress({url:t,from:e,to:i,loaded:s,data:a}){var r,n,o,d,h,u,c;if(!this.activeRequests.has(t)||!a)return;const l=null!==(r=this.dashJsRequestQueue.get(t))&&void 0!==r?r:[];for(const r of l){const{request:l}=r,[p,m]=zt(l),v=p>=e&&m<=e+s,S=e>=p&&e+s<m,f=a.slice(p-e,Math.min(m-e+1,s));(v||S)&&(l.requestStartDate=null!==(n=l.requestStartDate)&&void 0!==n?n:new Date,l.firstByteDate=null!==(o=l.firstByteDate)&&void 0!==o?o:new Date,l.bytesLoaded=f.byteLength,l.bytesTotal=i-e),v?(l.requestEndDate=new Date,this.dashJsRequestQueue.set(t,(null!==(d=this.dashJsRequestQueue.get(t))&&void 0!==d?d:[]).filter((t=>t!==r))),null===(h=r.success)||void 0===h||h.call(r,f,"",t),null===(u=this.dashMetrics)||void 0===u||u.addHttpRequest(l,t,200,{},[])):S&&(null===(c=r.progress)||void 0===c||c.call(r,{loaded:s,total:i-e,lengthComputable:!0,stream:!0}))}}onBigRequestError({url:t,from:e,to:i},s){var a,r,n,o;if(null===(r=(a=this.params).onError)||void 0===r||r.call(a,{id:"BigRequest",message:"Download error",thrown:s}),!this.activeRequests.has(t))return;const d=null!==(n=this.dashJsRequestQueue.get(t))&&void 0!==n?n:[];for(const t of d){const[a,r]=zt(t.request);(a>=e&&a<i||r>e&&r<=i)&&(null===(o=null==t?void 0:t.error)||void 0===o||o.call(t,t.request,String(s)))}if(this.activeRequests.delete(t),s)throw s}onBigRequestAbort({url:t,from:e,to:i}){var s,a;if(!this.activeRequests.has(t))return;const r=null!==(s=this.dashJsRequestQueue.get(t))&&void 0!==s?s:[];for(const t of r){const[s,r]=zt(t.request);(s>=e&&s<i||r>e&&r<=i)&&(null===(a=null==t?void 0:t.abort)||void 0===a||a.call(t,t.request))}this.activeRequests.delete(t)}static suppressAbort(t){if(!(t instanceof DOMException)||"AbortError"!==t.name&&20!==t.code)throw t}static suppressStreamErrors(){}}class Wt{constructor(t,e,i){this.baseLoader=t,this.config=i,this.bigRequest=e,e.setMetrics(i.dashMetrics)}static shouldDelegateToBase(t){return"download"!==t.action||"text"===t.mediaType||!t.range||"arraybuffer"!==t.responseType}load(t){const{request:e}=t;if(Wt.shouldDelegateToBase(e))return this.baseLoader.load(t);this.bigRequest.queueDashJSRequest(t),this.bigRequest.executeNextRequests()}abort(t){if(!t)return this.baseLoader.abort(),void this.bigRequest.abort();const{request:e}=t;Wt.shouldDelegateToBase(e)?this.baseLoader.abort(t):this.bigRequest.abort(t)}}const Jt=(t,e)=>{const i=new Qt(e);return t.extend("SchemeLoaderFactory",(function(){const{parent:t}=this,e=t.getLoader;return{getLoader:t=>((t,e)=>i=>({create:s=>{const a=t(i).create(s);return new Wt(a,e,s)}}))(e(t),i)}}),!0),()=>i.destroy()};var jt=i=>{const a=new t(1/0),r=new e;let n=NaN,o=!1;return i.extend("XHRLoader",(function(){const{parent:t}=this,e=t.load.bind(t);return{load:function(t){if("MPD"===t.request.type){const e=t.onload,i=t.progress;t.onload=function(...t){return(t=>{var e,i,r;if(!t.getAllResponseHeaders().includes("x-playback-duration"))return;const n=parseInt(null!==(e=t.getResponseHeader("X-Playback-Duration"))&&void 0!==e?e:"",10),o=parseInt(null!==(i=t.getResponseHeader("X-Playback-Duration-Millis"))&&void 0!==i?i:"",10),d=null!==(r=null!=o?o:1e3*n)&&void 0!==r?r:NaN;s(d)&&!isNaN(d)&&a.next(d)})(this),e(...t)},t.progress=function(...t){return this.readyState>=2&&!o&&(o=!0,r.next(Date.now()-n)),i(...t)},n=Date.now(),o=!1}return e(t)}}}),!0),{playbackDuration$:a,ping$:r}};class Xt{constructor(){this.pausedTime=0,this.streamOffset=0,this.pauseTimestamp=0}getTotalPausedTime(){return this.pausedTime+this.getCurrentPausedTime()}getCurrentPausedTime(){return this.pauseTimestamp>0?Date.now()-this.pauseTimestamp:0}getStreamOffset(){return this.streamOffset}getTotalOffset(){return this.getTotalPausedTime()+this.streamOffset}pause(){0===this.pauseTimestamp&&(this.pauseTimestamp=Date.now())}resume(){this.pauseTimestamp>0&&(this.pausedTime+=this.getCurrentPausedTime(),this.pauseTimestamp=0)}resetTo(t){this.streamOffset=t,this.pauseTimestamp=0,this.pausedTime=0}}const Kt={};var Zt;!function(t){t.DOWNLOADING_LIB="downloading_lib",t.STOPPED="stopped",t.STREAM_INITIALIZED="stream_initialized",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(Zt||(Zt={}));const te=(t,e)=>new p((i=>{const s=t=>i.next(t);return t.on(e,s),()=>t.off(e,s)}));class ee{constructor(e){this.subscription=new i,this.videoState=new ut(Zt.DOWNLOADING_LIB),this.textTracksManager=new U,this.videoTracks=[],this.isLive$=new t(void 0),this.maxSeekBackTime$=new t(1/0),this.availableFrom$=new t(void 0),this.liveOffset=new Xt,this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekPosition.getTransition(),r=this.isLive$.getValue();if(this.videoState.getTransition())return;if(t===Zt.DOWNLOADING_LIB||t===Zt.STREAM_INITIALIZED)return;const o=null==a?void 0:a.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(o)&&t!==Zt.STOPPED&&e!==$.STOPPED&&(r?this.seek(o+ie(this.liveOffset.getTotalPausedTime())):this.seek(o)),e){case $.STOPPED:switch(t){case Zt.STOPPED:break;case Zt.PLAYING:case Zt.PAUSED:case Zt.READY:this.stop();break;default:n(t)}break;case $.PLAYING:switch(t){case Zt.PLAYING:break;case Zt.PAUSED:r&&(this.liveOffset.getTotalPausedTime()<this.params.config.maxPausedTime&&this.liveOffset.getTotalOffset()<this.maxSeekBackTime$.getValue()?(this.liveOffset.resume(),this.params.output.position$.next(ie(this.liveOffset.getTotalOffset()))):this.seek(ie(this.liveOffset.getTotalOffset()))),this.play();break;case Zt.READY:this.play();break;case Zt.STOPPED:this.prepare();break;default:n(t)}break;case $.PAUSED:switch(t){case Zt.PLAYING:this.pause(),this.liveOffset.pause();break;case Zt.PAUSED:break;case Zt.READY:this.videoState.setState(Zt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED);break;case Zt.STOPPED:this.prepare();break;default:n(t)}break;default:n(e)}},this.video=V(e.container),this.params=e,this.params.output.element$.next(this.video),this.params.output.availableVideoTracks$.next([]),this.params.output.hostname$.next(dt(this.params.source.url)),this.loadDashJs()}loadDashJs(){let t=!1;const e=e=>{var i,s;t||this.params.output.error$.next({id:"timeout"===e?"DashJSTimedOut":"DashJSLoadingError",message:`Dash.js failed to load: ${null===(s=null===(i=e)||void 0===i?void 0:i.toString)||void 0===s?void 0:s.call(i)}`,thrown:e}),t=!0},i=window.setTimeout((()=>e("timeout")),5e3);import("dashjs/dist/dash.mediaplayer.min.js").then((e=>{t||(Kt.MediaPlayer=e.MediaPlayer,Kt.Debug=e.Debug,this.init())}),e).finally((()=>{window.clearTimeout(i),t=!0}))}init(){l(Kt.MediaPlayer,"dashjs not loaded"),l(Kt.Debug,"dashjs not loaded"),this.player=Kt.MediaPlayer().create(),this.player.updateSettings({debug:{logLevel:3},streaming:{buffer:{fastSwitchEnabled:!0},abr:{limitBitrateByPortal:this.params.tuning.autoTrackSelection.limitByContainer,usePixelRatioInLimitBitrateByPortal:this.params.tuning.autoTrackSelection.usePixelRatio,additionalAbrRules:{insufficientBufferRule:!1}},utcSynchronization:{useManifestDateHeaderTimeSource:!0}}});(this.params.format===P.DASH_WEBM||this.params.format===P.DASH_LIVE_WEBM)&&this.params.tuning.useWebmBigRequest?this.destroyBigRequest=Jt(this.player,{minInitSize:this.params.tuning.bigRequestMinInitSize,minDataSize:this.params.tuning.bigRequestMinDataSize,onError:t=>this.params.output.error$.next(t),onDownloadStream:t=>this.params.dependencies.throughputEstimator.trackStream(t)}):this.params.tuning.stripRangeHeader&&Yt(this.player),this.player.clearDefaultUTCTimingSources(),this.subscribe(),this.videoState.setState(Zt.STOPPED)}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"DashIFProvider",message:"DashIFProvider internal logic error",thrown:e})},r=(t,e)=>this.subscription.add(t.subscribe(e,i));r(te(this.player,"error").pipe(h((t=>({id:`DashJS#${"object"==typeof t.error?t.error.code:t.error}`,message:"object"==typeof t.error?t.error.message:void 0})))),t.error$),r(te(this.player,"playbackError").pipe(h((t=>({id:"DashJSPlayback",message:t.error})))),t.error$);const n=te(this.player,"qualityChangeRendered").pipe(f((({mediaType:t})=>"video"===t)),h((({newQuality:t})=>{var e;return null===(e=this.videoTracks.find((({bitrateInfo:e})=>e.qualityIndex===t)))||void 0===e?void 0:e.track})));n.pipe(f(s)).subscribe(t.currentVideoTrack$),this.subscription.add(this.videoState.transitionEnded$.pipe(f((({to:t})=>t===Zt.STREAM_INITIALIZED)),m()).subscribe((()=>{this.subscription.add(N(e.videoTrack,(()=>{var t,e;const i=this.player.getQualityFor("video");return null===(e=null===(t=this.videoTracks.find((({bitrateInfo:t})=>t.qualityIndex===i)))||void 0===t?void 0:t.track)||void 0===e?void 0:e.id}),(t=>{var e;if(a(t))return;const i=null===(e=this.videoTracks.find((({track:e})=>e.id===t)))||void 0===e?void 0:e.bitrateInfo;i&&this.player.setQualityFor("video",i.qualityIndex)}),{changed$:n.pipe(h((t=>null==t?void 0:t.id))),onError:i}))}),i)),this.subscription.add(N(e.autoVideoTrackSwitching,(()=>{var t,e,i;return null===(i=null===(e=null===(t=this.player.getSettings().streaming)||void 0===t?void 0:t.abr)||void 0===e?void 0:e.autoSwitchBitrate)||void 0===i?void 0:i.video}),(t=>this.player.updateSettings({streaming:{abr:{autoSwitchBitrate:{video:t}}}})),{onError:i})),r(te(this.player,"bufferStateChanged").pipe(f((({mediaType:t})=>"video"===t)),h((({state:t})=>"bufferStalled"===t))),t.isBuffering$),r(te(this.player,"fragmentLoadingStarted").pipe(h((t=>dt(t.request.url)))),t.hostname$),r(te(this.player,"streamInitialized"),(({streamInfo:{duration:e,manifestInfo:{isDynamic:i,availableFrom:s}}})=>{this.isLive$.next(i),this.availableFrom$.next(s.getTime()),i||t.duration$.next(e),this.videoTracks=[];const a=this.player.getQualityFor("video");let r;for(const t of this.player.getBitrateInfoListFor("video")){const e=t.qualityIndex.toString(10),i=K(t),s=t.bitrate/1e3,n={width:t.width,height:t.height};if(i){const o={id:e,quality:i,bitrate:s,size:n};this.videoTracks.push({track:o,bitrateInfo:t}),t.qualityIndex===a&&(r=o)}}t.availableVideoTracks$.next(this.videoTracks.map((({track:t})=>t))),r&&t.currentVideoTrack$.next(r),this.videoState.setState(Zt.STREAM_INITIALIZED),this.videoState.startTransitionTo(Zt.READY)})),r(te(this.player,"fragmentLoadingCompleted"),(({request:t})=>{if(!t.requestEndDate||!t.firstByteDate||!t.bytesLoaded)return;const e=t.requestEndDate.getTime()-t.firstByteDate.getTime(),i=t.bytesLoaded;this.params.dependencies.throughputEstimator.addRawSpeed(i,e)})),r(this.params.dependencies.throughputEstimator.throughput$,(t=>{if(!this.params.desiredState.autoVideoTrackSwitching.getState()||!this.videoTracks.length)return;const e=nt(this.videoTracks.map((({track:t})=>t)),{container:{width:this.video.offsetWidth,height:this.video.offsetHeight},throughput:t,tuning:this.params.tuning.autoTrackSelection}),i=this.videoTracks.find((({track:t})=>t===e));(null==i?void 0:i.bitrateInfo)&&this.player.setQualityFor("video",null==i?void 0:i.bitrateInfo.qualityIndex,!1)})),r(S({maxSeekBackTime:this.maxSeekBackTime$,isLive:this.isLive$.pipe(f(s))}).pipe(f((({isLive:t})=>t)),h((({maxSeekBackTime:t})=>ie(t)))),this.params.output.duration$);const d=te(this.player,"playbackTimeUpdated").pipe(h((({time:t})=>null!=t?t:0)));r(S({availableFrom:this.availableFrom$.pipe(f(s)),currentTime:d}),(({availableFrom:t,currentTime:e})=>this.params.output.liveTime$.next(t+1e3*e))),r(d.pipe(f((()=>!1===this.isLive$.getValue()))),t.position$),r(te(this.player,"playbackSeeked"),(()=>e.seekPosition.setState(void 0))),r(te(this.player,"playbackEnded"),t.endedEvent$),r(te(this.player,"playbackProgress").pipe(h((()=>F(this.video.buffered,this.video.currentTime)))),t.currentBuffer$),r(te(this.player,"playbackPlaying"),(()=>{this.videoState.setState(Zt.PLAYING),Q(e.playbackState,$.PLAYING)})),r(te(this.player,"playbackNotAllowed"),(()=>{this.player.isMuted()?(this.player.setMute(!1),this.videoState.setState(Zt.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0)):(this.player.setMute(!0),this.player.play())})),r(te(this.player,"playbackPaused"),(()=>{this.videoState.setState(Zt.PAUSED),Q(e.playbackState,$.PAUSED)})),r(te(this.player,"canPlay"),(()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===Zt.READY&&this.videoState.setState(Zt.READY)})),r(this.isLive$,t.isLive$),r(ht(this.video),(()=>{this.player.isReady()&&this.player.updatePortalSize()}));r(o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)),this.syncPlayback);const{playbackDuration$:c,ping$:l}=jt(this.player);r(c,this.maxSeekBackTime$),r(l.pipe(m()),t.firstBytesEvent$),this.params.tuning.flushShortLoopedBuffers&&r(S({isLive:this.isLive$,isShort:t.duration$.pipe(h((t=>t<30)))}),(({isLive:t,isShort:e})=>{const i=!t&&e;this.player.updateSettings({streaming:{buffer:{flushBufferAtTrackSwitch:i}}})})),r(d.pipe(f((t=>t>this.params.tuning.insufficientBufferRuleMargin)),m()),(()=>this.player.updateSettings({streaming:{abr:{additionalAbrRules:{insufficientBufferRule:!0}}}}))),this.textTracksManager.connect(this.video,e,t),this.subscription.add(te(this.player,"manifestLoaded").pipe(m()).subscribe((()=>{const e=Date.now();this.subscription.add(te(this.player,"playbackPlaying").pipe(m()).subscribe((()=>t.firstFrameEvent$.next(Date.now()-e)),i))}),i)),this.subscription.add(O(this.video,e.isLooped,i));const{volumeState$:p}=Y(this.video);this.subscription.add(B(this.video,e.volume,p,i)),this.subscription.add(p.subscribe(t.volume$,i))}stop(){this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.player.attachSource(null),this.player.attachView(null),this.player.initialize(),this.player.clearDefaultUTCTimingSources(),this.videoState.setState(Zt.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)}prepare(){this.videoState.startTransitionTo(Zt.STREAM_INITIALIZED),this.player.initialize(),this.player.clearDefaultUTCTimingSources(),this.player.attachView(this.video),this.player.attachSource(this.params.source.url)}seek(t){if(this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.isLive$.getValue()){const e=-Math.round(1e3*t),i=e<this.maxSeekBackTime$.getValue()?e:0;this.liveOffset.resetTo(i),this.params.output.position$.next(ie(i));const s=Ct(this.params.source.url,this.liveOffset.getTotalOffset()/1e3,xt.PLAYBACK_SHIFT);this.player.attachSource(s)}else this.player.seek(t)}play(){this.videoState.startTransitionTo(Zt.PLAYING),this.player.play()}pause(){this.videoState.startTransitionTo(Zt.PAUSED),this.video.pause()}destroy(){var t,e;this.subscription.unsubscribe(),this.textTracksManager.destroy();try{null===(t=this.player)||void 0===t||t.destroy()}catch(t){}this.video.remove(),this.params.output.element$.next(void 0),null===(e=this.destroyBigRequest)||void 0===e||e.call(this)}}const ie=t=>-t/1e3;function se(){return window.performance?window.performance.now():Date.now()}function ae(t){return se()-t}function re(t){const e=t.split("/"),i=e.slice(0,e.length-1).join("/"),s=/^([a-z]+:)?\/\//i;return{resolve:(t,e,a=!1)=>{(t=>s.test(t))(t)||(t.startsWith("/")||(t="/"+t),t=i+t);let r=t.indexOf("?")>-1?"&":"?";return a&&(t+=r+"lowLat=1",r="&"),e&&(t+=r+"_rnd="+Math.floor(999999999*Math.random())),t}}}function ne(t,e,i,a){const r=window.XMLHttpRequest;let n,o,d,h,u,c=!1,p=0,m=!1,v="arraybuffer",S=7e3,f=2e3,g=()=>{if(c)return;l(h);const t=ae(h);let e;if(t<f)return e=f-t,void setTimeout(g,e);f*=2,f>S&&(f=S),o&&o.abort(),o=new r,T()};const b=()=>{if(!c){if(--p>=0)return g(),void(a&&a());c=!0,u&&u(),i&&i()}},T=()=>{h=se(),o=new r,o.open("get",t);let i,s=0,a=0;const p=()=>(l(h),Math.max(h,Math.max(i||0,a||0)));if(n&&o.addEventListener("progress",(t=>{const e=se();n.updateChunk&&t.loaded>s&&(n.updateChunk(p(),t.loaded-s),s=t.loaded,i=e)})),d&&(o.timeout=d,o.addEventListener("timeout",(()=>b()))),o.addEventListener("load",(()=>{if(c)return;l(o);const t=o.status;if(t>=200&&t<300){if(o.response.byteLength&&n){const t=o.response.byteLength-s;t&&n.updateChunk&&n.updateChunk(p(),t)}u&&u(),o&&e(o.response)}else b()})),o.addEventListener("error",(()=>{b()})),m){const t=()=>{l(o),o.readyState===XMLHttpRequest.HEADERS_RECEIVED&&(a=se(),o.removeEventListener("readystatechange",t))};o.addEventListener("readystatechange",t)}return o.responseType=v,o.send(),y},y={withBitrateReporting:t=>(n=t,y),withParallel:t=>(m=t,y),withJSONResponse:()=>(v="json",y),withRetryCount:t=>(p=t,y),withRetryInterval:(t,e)=>(s(t)&&(f=t),s(e)&&(S=e),y),withTimeout:t=>(d=t,y),withFinally:t=>(u=t,y),send:T,abort:()=>{o&&(o.abort(),o=void 0),c=!0,u&&u()}};return y}class oe{constructor(t){this.intervals=[],this.currentRate=0,this.logger=t}_updateRate(t){let e=.2;this.currentRate&&(t<.1*this.currentRate?e=.8:t<.5*this.currentRate?e=.5:t<.7*this.currentRate&&(e=.3)),t=Math.max(1,Math.min(t,104857600)),this.currentRate=this.currentRate?this.currentRate*(1-e)+t*e:t}_createInterval(t,e,i){return{start:t,end:e,bytes:i}}_doMergeIntervals(t,e){t.start=Math.min(e.start,t.start),t.end=Math.max(e.end,t.end),t.bytes+=e.bytes}_mergeIntervals(t,e){return t.start<=e.end&&e.start<=t.end&&(this._doMergeIntervals(t,e),!0)}_flushIntervals(){if(!this.intervals.length)return!1;const t=this.intervals[0].start,e=this.intervals[this.intervals.length-1].end-500;if(e-t>2e3){let i=0,s=0;for(;this.intervals.length>0;){const t=this.intervals[0];if(t.end<=e)i+=t.end-t.start,s+=t.bytes,this.intervals.splice(0,1);else{if(t.start>=e)break;{const a=e-t.start,r=t.end-t.start;i+=a;const n=t.bytes*a/r;s+=n,t.start=e,t.bytes-=n}}}if(s>0&&i>0){const a=8*s/(i/1e3);return this._updateRate(a),this.logger(`rate updated, new=${Math.round(a/1024)}K; average=${Math.round(this.currentRate/1024)}K bytes/ms=${Math.round(s)}/${Math.round(i)} interval=${Math.round(e-t)}`),!0}}return!1}_joinIntervals(){let t;do{t=!1;for(let e=0;e<this.intervals.length-1;++e)this._mergeIntervals(this.intervals[e],this.intervals[e+1])&&(this.intervals.splice(e+1,1),t=!0)}while(t)}addInterval(t,e,i){return this.intervals.push(this._createInterval(t,e,i)),this._joinIntervals(),this.intervals.length>100&&(this.logger(`too many intervals (${this.intervals.length}); will merge`,{type:"warn"}),this._doMergeIntervals(this.intervals[1],this.intervals[0]),this.intervals.splice(0,1)),this._flushIntervals()}getBitRate(){return this.currentRate}}class de{constructor(t,e,i,s,a){this.pendingQueue=[],this.activeRequests={},this.completeRequests={},this.averageSegmentDuration=2e3,this.lastPrefetchStart=0,this.throttleTimeout=null,this.RETRY_COUNT=t,this.TIMEOUT=e,this.BITRATE_ESTIMATOR=i,this.MAX_PARALLEL_REQUESTS=s,this.logger=a}limitCompleteCount(){let t;for(;(t=Object.keys(this.completeRequests)).length>this._getParallelRequestCount()+2;){const e=t[Math.floor(Math.random()*t.length)];this.logger(`Dropping completed request for url ${e}`,{type:"warn"}),delete this.completeRequests[e]}}_sendRequest(t,e){const i=se(),s=i=>{delete this.activeRequests[e],this.limitCompleteCount(),this.completeRequests[e]=t,this._sendPending(),t._error=1,t._errorMsg=i,t._errorCB?t._errorCB(i):(this.limitCompleteCount(),this.completeRequests[e]=t)};t._request=ne(e,(s=>{t._complete=1,t._responseData=s,t._downloadTime=se()-i,delete this.activeRequests[e],this._sendPending(),t._cb?t._cb(s,t._downloadTime):(this.limitCompleteCount(),this.completeRequests[e]=t)}),(()=>s("error")),(()=>{t._retry=1,t._retryCB&&t._retryCB()})),t._request.withRetryCount(this.RETRY_COUNT).withTimeout(this.TIMEOUT).withBitrateReporting(this.BITRATE_ESTIMATOR).withParallel(this._getParallelRequestCount()>1).withFinally((()=>{t._finallyCB&&t._finallyCB()})),this.activeRequests[e]=t,t._request.send(),this.lastPrefetchStart=se()}_getParallelRequestCount(){return Math.min(this.MAX_PARALLEL_REQUESTS,this.averageSegmentDuration<3e3?3:2)}_getPrefetchDelay(){return Math.max(100,Math.min(5e3,this.averageSegmentDuration/3))}_canSendPending(){const t=this._getParallelRequestCount(),e=se();if(Object.keys(this.activeRequests).length>=t)return!1;const i=this._getPrefetchDelay()-(e-this.lastPrefetchStart);return this.throttleTimeout&&clearTimeout(this.throttleTimeout),!(i>0)||(this.throttleTimeout=window.setTimeout((()=>this._sendPending()),i),!1)}_sendPending(){for(;this._canSendPending();){const t=this.pendingQueue.pop();if(!t)return;this.activeRequests[t]||this.completeRequests[t]||(this.logger(`Submitting pending request url=${t}`),this._sendRequest({},t))}}_removeFromActive(t){delete this.completeRequests[t],delete this.activeRequests[t]}abortAll(){Object.values(this.activeRequests).forEach((t=>{t&&t._request&&t._request.abort()})),this.activeRequests={},this.pendingQueue=[],this.completeRequests={}}requestData(t,e,i,s){const a={};return a.send=()=>{const r=this.activeRequests[t]||this.completeRequests[t];if(r)r._cb=e,r._errorCB=i,r._retryCB=s,r._finallyCB=a._finallyCB,r._error||r._complete?(this._removeFromActive(t),setTimeout((()=>{r._complete?(this.logger(`Requested url already prefetched, url=${t}`),e(r._responseData,r._downloadTime)):(this.logger(`Requested url already prefetched with error, url=${t}`),i(r._errorMsg)),a._finallyCB&&a._finallyCB()}),0)):this.logger(`Attached to active request, url=${t}`);else{const e=this.pendingQueue.indexOf(t);-1!==e&&this.pendingQueue.splice(e,1),this.logger(`Request not prefetched, starting new request, url=${t}${-1===e?"":"; removed pending"}`),this._sendRequest(a,t)}},a._cb=e,a._errorCB=i,a._retryCB=s,a.abort=function(){a.request&&a.request.abort()},a.withFinally=t=>(a._finallyCB=t,a),a}prefetch(t){this.activeRequests[t]||this.completeRequests[t]?this.logger(`Request already active for url=${t}`):(this.logger(`Added to pending queue; url=${t}`),this.pendingQueue.unshift(t),this._sendPending())}optimizeForSegDuration(t){this.averageSegmentDuration=t}}class he{constructor(t){this.paused=!1,this.autoQuality=!0,this.buffering=!0,this.destroyed=!1,this.videoPlayStarted=!1,this.lowLatency=!1,this.bitrate=0,this.manifest=[],this.sourceBuffer=0,this.bufferStates=[],this.sourceJitter=-1,this.params=t,this.chunkRateEstimator=new oe(this.params.logger),this._initVideo()}attachSource(t){this.manifestUrl=t,this.urlResolver=re(t),this.bitrateSwitcher=this._initBitrateSwitcher(),this._initManifest()}setAutoQualityEnabled(t){this.autoQuality=t}switchByName(t){let e;for(let i=0;i<this.manifest.length;++i)if(e=this.manifest[i],e.name===t)return void this._switchToQuality(e)}catchUp(){this.rep&&this.rep.stop(),this.currentManifestEntry&&(this.paused=!1,this._initPlayerWith(this.currentManifestEntry),this._notifyBuffering(!0))}stop(){this.params.videoElement.pause(),this.rep&&(this.rep.stop(),this.rep=null)}pause(){this.paused=!0,this.params.videoElement.pause(),this.videoPlayStarted=!1,this._notifyBuffering(!1)}play(t){this.paused=!1;const e=this.lowLatency&&this._getBufferSizeSec()>this.sourceJitter+5;this.rep&&!e?(this.bufferStates=[],this.videoPlayStarted=!1,this.shouldPlay()?this._playVideoElement(t):this._notifyBuffering(!0)):this.catchUp()}startPlay(t,e){this.autoQuality=e,this._initPlayerWith(t)}destroy(){this.destroyed=!0,this.rep&&(this.rep.stop(),this.rep=null),this.manifestRequest&&this.manifestRequest.abort(),this.manifestRefetchTimer&&(clearTimeout(this.manifestRefetchTimer),this.manifestRefetchTimer=void 0)}reinit(t){this.manifestUrl=t,this.urlResolver=re(t),this.catchUp()}_handleNetworkError(){this.params.logger("Fatal network error"),this.params.playerCallback({name:"error",type:"network"})}_retryCallback(){this.params.playerCallback({name:"retry"})}_getBufferSizeSec(){const t=this.params.videoElement;let e=0;const i=t.buffered.length;return 0!==i&&(e=t.buffered.end(i-1)-Math.max(t.currentTime,t.buffered.start(0))),e}_notifyBuffering(t){this.destroyed||(this.params.logger(`buffering: ${t}`),this.params.playerCallback({name:"buffering",isBuffering:t}),this.buffering=t)}_initVideo(){const{videoElement:t,logger:e}=this.params;t.addEventListener("error",(i=>{var s;this.destroyed||(e(`Video element error: ${null===(s=t.error)||void 0===s?void 0:s.code}`),this.params.playerCallback({name:"error",type:"media"}))})),t.addEventListener("timeupdate",(()=>{const e=this._getBufferSizeSec();!this.paused&&e<.3?this.buffering||(this.buffering=!0,window.setTimeout((()=>{!this.paused&&this.buffering&&this._notifyBuffering(!0),t.pause(),this.videoPlayStarted=!1}),1e3*(e+.1))):this.buffering&&this.videoPlayStarted&&this._notifyBuffering(!1)})),t.addEventListener("playing",(()=>{e("playing")})),t.addEventListener("stalled",(()=>this._fixupStall())),t.addEventListener("waiting",(()=>this._fixupStall()))}_fixupStall(){const{logger:t,videoElement:e}=this.params,i=e.buffered.length;let s;0!==i&&(s=e.buffered.start(i-1),e.currentTime<s&&(t("Fixup stall"),e.currentTime=s))}_selectQuality(t){const{videoElement:e}=this.params;let i,s,a;const r=e&&1.62*(window.devicePixelRatio||1)*e.offsetHeight||520;for(let e=0;e<this.manifest.length;++e)a=this.manifest[e],a.bitrate<t&&r>Math.min(a.video.height,a.video.width)?(!s||a.bitrate>s.bitrate)&&(s=a):(!i||i.bitrate>a.bitrate)&&(i=a);return s||i}shouldPlay(){if(this.paused)return!1;const t=this._getBufferSizeSec()-Math.max(1,this.sourceJitter);return t>3||s(this.downloadRate)&&(this.downloadRate>1.5&&t>2||this.downloadRate>2&&t>1)}_setVideoSrc(t,e){const{logger:i,videoElement:s,playerCallback:a}=this.params;this.mediaSource=new window.MediaSource,i("setting video src"),s.src=URL.createObjectURL(this.mediaSource),this.mediaSource.addEventListener("sourceopen",(()=>{l(this.mediaSource),this.sourceBuffer=this.mediaSource.addSourceBuffer(t.codecs),this.bufferStates=[],e()})),this.videoPlayStarted=!1,s.addEventListener("canplay",(()=>{this.shouldPlay()&&(this.videoPlayStarted=!0,this._playVideoElement())}));const r=()=>{!function(t,e,i){const s=(...a)=>{i.apply(null,a),t.removeEventListener(e,s)};t.addEventListener(e,s)}(s,"progress",(()=>{s.buffered.length?(s.currentTime=s.buffered.start(0),a({name:"playing"})):r()}))};r()}_initPlayerWith(t){this.bitrate=0,this.rep=0,this.sourceBuffer=0,this.bufferStates=[],this.filesFetcher&&this.filesFetcher.abortAll(),this.filesFetcher=new de(3,1e4,this.bitrateSwitcher,this.params.config.MAX_PARALLEL_REQUESTS,this.params.logger),this._setVideoSrc(t,(()=>this._switchToQuality(t)))}_representation(t){const{logger:e,videoElement:i,playerCallback:r}=this.params;let n=!1,o=null,d=null,h=null,u=null,c=!1;const p=()=>{const t=n&&(!c||c===this.rep);return t||e("Not running!"),t},m=(t,e,i)=>{h&&h.abort(),h=ne(this.urlResolver.resolve(t,!1),e,i,(()=>this._retryCallback())).withTimeout(1e4).withBitrateReporting(this.bitrateSwitcher).withRetryCount(3).withFinally((()=>{h=null})).send()},v=(t,e,i)=>{l(this.filesFetcher),null==d||d.abort(),d=this.filesFetcher.requestData(this.urlResolver.resolve(t,!1),e,i,(()=>this._retryCallback())).withFinally((()=>{d=null})).send()},S=t=>{const s=i.playbackRate;i.playbackRate!==t&&(e(`Playback rate switch: ${s}=>${t}`),i.playbackRate=t)},f=t=>{this.lowLatency=t,e(`lowLatency changed to ${t}`),g()},g=()=>{if(this.lowLatency){let t=this._getBufferSizeSec();if(this.bufferStates.length<5)return void S(1);const i=se()-6e4;let s=0;for(let e=0;e<this.bufferStates.length;e++){const a=this.bufferStates[e];t=Math.min(t,a.buf),a.ts<i&&s++}this.bufferStates.splice(0,s),e(`update playback rate; minBuffer=${t} drop=${s} jitter=${this.sourceJitter}`);let a=t-1;this.sourceJitter>=0?a-=this.sourceJitter/2:this.sourceJitter-=1,S(a>3?1.15:a>1?1.1:a>.3?1.01:1)}else S(1)},b=t=>{let i;const a=()=>i&&i.start?i.start.length:0,n=t=>i.start[t]/1e3,o=t=>i.dur[t]/1e3,d=t=>i.fragIndex+t,h=(t,e)=>({chunkIdx:d(t),startTS:n(t),dur:o(t),discontinuity:e}),c=()=>{let t=0;if(i&&i.dur){let e=Math.max(this.sourceJitter,1);for(this.lowLatency||(e+=2),t=i.dur.length-1;t>=0&&(e-=i.dur[t]/1e3,!(e<=0));--t);}return h(t,!0)},m=(t,e,i)=>{u&&u.abort(),u=ne(this.urlResolver.resolve(t,!0,this.lowLatency),e,i,(()=>this._retryCallback())).withTimeout(1e4).withRetryCount(3).withFinally((()=>{u=null})).withJSONResponse().send()};return{seek:(e,o)=>{m(t,(t=>{if(!p())return;i=t;const d=Boolean(i.lowLatency);d!==this.lowLatency&&f(d);let u=0;for(let t=0;t<i.dur.length;++t)u+=i.dur[t];u>0&&(l(this.filesFetcher),this.filesFetcher.optimizeForSegDuration(u/i.dur.length)),r({name:"index",zeroTime:i.zeroTime,shiftDuration:i.shiftDuration}),this.sourceJitter=i.hasOwnProperty("jitter")?Math.min(10,Math.max(.01,i.jitter/1e3)):1,e((t=>{const e=a();if(!(e<=0)){if(s(t))for(let i=0;i<e;i++)if(n(i)>t)return h(i);return c()}})(o))}),(()=>this._handleNetworkError()))},nextChunk:t=>{const s=a(),r=t?t.chunkIdx+1:0,n=r-i.fragIndex;if(!(s<=0)){if(!t||n<0||n-s>10)return e(`Resync: offset=${n} bChunks=${s} chunk=`+JSON.stringify(t)),c();if(!(n>=s))return h(r-i.fragIndex,!1)}}}},T=()=>{n=!1,d&&d.abort(),h&&h.abort(),u&&u.abort(),l(this.filesFetcher),this.filesFetcher.abortAll()};return c={start:e=>{const{videoElement:i,logger:s}=this.params;let r,d,h,c,S,f,y,E=b(t.jidxUrl),$=0;const P=()=>{S&&(clearTimeout(S),S=void 0);const t=Math.max(500,1e3*(this._getBufferSizeSec()-this.sourceJitter-5)),e=$+t,i=se(),s=Math.min(1e4,e-i);$=i;const a=()=>{u||p()&&E.seek((()=>{p()&&($=se(),k(),P())}))};s>0?S=window.setTimeout((()=>{this.paused?P():a()}),s):a()},k=()=>{let e;for(;e=E.nextChunk(c);)c=e,I(e);const i=E.nextChunk(h);if(i){if(h&&i.discontinuity)return s("Detected discontinuity; restarting playback"),void(this.paused?P():(T(),this._initPlayerWith(t)));_(i)}else P()},w=(t,e)=>{if(!p()||!this.sourceBuffer)return;let a,r,n;const o=i=>{window.setTimeout((()=>{p()&&w(t,e)}),i)};if(this.sourceBuffer.updating)s("Source buffer is updating; delaying appendBuffer"),o(100);else{const d=se(),h=i.currentTime;!this.paused&&i.buffered.length>1&&f===h&&d-y>500&&(s("Stall suspected; trying to fix"),this._fixupStall()),f!==h&&(f=h,y=d);const u=this._getBufferSizeSec();if(u>30)s(`Buffered ${u} seconds; delaying appendBuffer`),o(2e3);else try{this.sourceBuffer.appendBuffer(t),this.videoPlayStarted?(this.bufferStates.push({ts:d,buf:u}),g(),this.bufferStates.length>200&&this.bufferStates.shift()):this.shouldPlay()&&(this.videoPlayStarted=!0,this._playVideoElement()),e&&e()}catch(t){if("QuotaExceededError"!==t.name)throw t;s("QuotaExceededError; delaying appendBuffer"),n=this.sourceBuffer.buffered.length,0!==n&&(a=this.sourceBuffer.buffered.start(0),r=h,r-a>4&&this.sourceBuffer.remove(a,r-3)),o(1e3)}}},A=()=>{d&&r&&(s([`Appending chunk, sz=${d.byteLength}:`,JSON.stringify(h)]),w(d,(function(){d=null,k()})))},D=e=>t.fragUrlTemplate.replace("%%id%%",e.chunkIdx),_=t=>{p()&&v(D(t),((e,i)=>{if(p()){if(i/=1e3,d=e,h=t,o=t.startTS,i){const e=Math.min(10,t.dur/i);this.downloadRate=this.downloadRate?.7*this.downloadRate+.3*e:e}A()}}),(()=>this._handleNetworkError()))},I=t=>{p()&&(l(this.filesFetcher),this.filesFetcher.prefetch(this.urlResolver.resolve(D(t),!1)))},R=e=>{p()&&(t.cachedHeader=e,w(e,(()=>{r=!0,A()})))};n=!0,E.seek((t=>{p()&&($=se(),t?(c=t,!a(e)||t.startTS>e?_(t):(h=t,k())):P())}),e),t.cachedHeader?R(t.cachedHeader):m(t.headerUrl,R,(()=>this._handleNetworkError()))},stop:T,getTimestampSec:()=>o},c}_switchToQuality(t){const{logger:e,playerCallback:i}=this.params;let a;t.bitrate!==this.bitrate&&(this.rep&&(a=this.rep.getTimestampSec(),s(a)&&(a+=.1),this.rep.stop()),this.currentManifestEntry=t,this.rep=this._representation(t),e(`switch to quality: codecs=${t.codecs}; headerUrl=${t.headerUrl}; bitrate=${t.bitrate}`),this.bitrate=t.bitrate,l(this.bitrateSwitcher),this.bitrateSwitcher.notifySwitch(this.bitrate),this.rep.start(a),i({name:"qualitySwitch",quality:t}))}_qualityAvailable(t){return s(this.manifest.find((e=>e.name===t)))}_initBitrateSwitcher(){const{logger:t,playerCallback:e}=this.params,i=e=>{if(!this.autoQuality)return;let i,s,a;this.currentManifestEntry&&this._qualityAvailable(this.currentManifestEntry.name)&&e<this.bitrate&&(s=this._getBufferSizeSec(),a=e/this.bitrate,s>10&&a>.8||s>15&&a>.5||s>20&&a>.3)?t(`Not switching: buffer=${Math.floor(s)}; bitrate=${this.bitrate}; newRate=${Math.floor(e)}`):(i=this._selectQuality(e),i?this._switchToQuality(i):t(`Could not find quality by bitrate ${e}`))},s=(()=>({updateChunk:(t,i)=>{const s=se();if(this.chunkRateEstimator.addInterval(t,s,i)){const a=this.chunkRateEstimator.getBitRate();return e({name:"bandwidth",size:i,duration:s-t,speed:a}),!0}},get:()=>{const t=this.chunkRateEstimator.getBitRate();return t?.85*t:0}}))();let a,r=-1/0,n=!0;const o=()=>{let t=s.get();if(t&&a&&this.autoQuality){if(n&&t>a&&ae(r)<3e4)return;i(t)}n=this.autoQuality};return{updateChunk:(t,e)=>{const i=s.updateChunk(t,e);return i&&o(),i},notifySwitch:t=>{const e=se();t<a&&(r=e),a=t}}}_fetchManifest(t,e,i){this.manifestRequest=ne(this.urlResolver.resolve(t,!0),e,i,(()=>this._retryCallback())).withJSONResponse().withTimeout(1e4).withRetryCount(3).withRetryInterval(300,2e3).send().withFinally((()=>{this.manifestRequest=void 0}))}_playVideoElement(t){const{videoElement:e}=this.params;C(e).then((e=>{e||null==t||t()}))}_handleManifestUpdate(t){const{logger:e,playerCallback:i,videoElement:s}=this.params;this.manifest=(t=>{const e=[];return(null==t?void 0:t.length)?(t.forEach(((t,i)=>{t.video&&s.canPlayType(t.codecs).replace(/no/,"")&&window.MediaSource.isTypeSupported(t.codecs)&&(t.index=i,e.push(t))})),e.sort((function(t,e){return t.video&&e.video?e.video.height-t.video.height:e.bitrate-t.bitrate})),e):(this.params.playerCallback({name:"error",type:"partial_metadata"}),[])})(t),e(`Valid manifest entries: ${this.manifest.length}/${t.length}`),i({name:"manifest",manifest:this.manifest})}_refetchManifest(t){this.destroyed||(this.manifestRefetchTimer&&clearTimeout(this.manifestRefetchTimer),this.manifestRefetchTimer=window.setTimeout((()=>{this._fetchManifest(t,(e=>{this.destroyed||(this._handleManifestUpdate(e),this._refetchManifest(t))}),(()=>this._refetchManifest(t)))}),6e4))}_initManifest(){this._fetchManifest(this.manifestUrl,(t=>{this.destroyed||(this._handleManifestUpdate(t),this._refetchManifest(this.manifestUrl))}),(()=>this._handleNetworkError()))}}var ue;!function(t){t.STOPPED="stopped",t.MANIFEST_READY="manifest_ready",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}(ue||(ue={}));const ce=[ue.PAUSED,ue.PLAYING,ue.READY],le=[ue.PAUSED,ue.PLAYING,ue.READY];class pe{constructor(e){this.subscription=new i,this.videoState=new ut(ue.STOPPED),this.representations$=new t([]),this.textTracksManager=new U,this.maxSeekBackTime$=new t(1/0),this.zeroTime$=new t(void 0),this.liveOffset=new Xt,this._dashCb=t=>{var e,i,a;switch(t.name){case"buffering":{const e=t.isBuffering;this.params.output.isBuffering$.next(e);break}case"error":this.params.output.error$.next({id:`DashLiveProviderInternal:${t.type}`,message:"LiveDashPlayer reported error"});break;case"manifest":{const s=t.manifest,a=[];for(const t of s){const i=null!==(e=t.name)&&void 0!==e?e:t.index.toString(10),s=K(t.video),r=t.bitrate/1e3,n=Object.assign({},t.video);if(!s)continue;const o={id:i,quality:s,bitrate:r,size:n};a.push({track:o,representation:t})}this.representations$.next(a),this.params.output.availableVideoTracks$.next(a.map((({track:t})=>t))),(null===(i=this.videoState.getTransition())||void 0===i?void 0:i.to)===ue.MANIFEST_READY&&this.videoState.setState(ue.MANIFEST_READY);break}case"qualitySwitch":{const e=t.quality,i=null===(a=this.representations$.getValue().find((({representation:t})=>t===e)))||void 0===a?void 0:a.track;this.params.output.hostname$.next(new URL(e.headerUrl,this.params.source.url).hostname),s(i)&&this.params.output.currentVideoTrack$.next(i);break}case"bandwidth":{const{size:e,duration:i}=t;this.params.dependencies.throughputEstimator.addRawSpeed(e,i);break}case"index":this.maxSeekBackTime$.next(t.shiftDuration),this.zeroTime$.next(t.zeroTime)}},this.syncPlayback=()=>{var t;const e=this.videoState.getState(),i=this.videoState.getTransition(),a=this.params.desiredState.playbackState.getState(),r=this.params.desiredState.playbackState.getTransition(),o=this.params.desiredState.seekPosition.getTransition();if(this.log({message:`[syncPlayback] videoState: ${e}; videoTransition: ${JSON.stringify(i)}; desiredPlaybackState: ${a}; seekPositionTransition: ${JSON.stringify(o)};`}),a===$.STOPPED)return void(e!==ue.STOPPED&&(this.videoState.startTransitionTo(ue.STOPPED),this.dash.destroy(),this.video.setAttribute("src",""),this.video.load(),this.videoState.setState(ue.STOPPED)));if(i)return;if(le.includes(e)){const e=null===(t=this.params.desiredState.videoTrack.getTransition())||void 0===t?void 0:t.to;s(e)&&this.setVideoTrack(e);const i=this.params.desiredState.autoVideoTrackSwitching.getTransition();i&&this.setAutoQuality(i.to)}const d=null==o?void 0:o.to;if((null==r?void 0:r.to)!==$.PAUSED&&s(d)&&ce.includes(e))this.seek(d+me(this.liveOffset.getTotalPausedTime()));else switch(e){case ue.STOPPED:return this.videoState.startTransitionTo(ue.MANIFEST_READY),void this.dash.attachSource(Ct(this.params.source.url));case ue.MANIFEST_READY:this.videoState.startTransitionTo(ue.READY),this.prepare();break;case ue.READY:return void(a===$.PAUSED?this.videoState.setState(ue.PAUSED):a===$.PLAYING&&(this.videoState.startTransitionTo(ue.PLAYING),this.dash.play((()=>{this.liveOffset.pause(),this.videoState.setState(ue.PAUSED)}))));case ue.PLAYING:return void(a===$.PAUSED&&(this.videoState.startTransitionTo(ue.PAUSED),this.liveOffset.pause(),this.dash.pause()));case ue.PAUSED:return void(a===$.PLAYING&&(this.videoState.startTransitionTo(ue.PLAYING),this.liveOffset.getTotalPausedTime()<this.params.config.maxPausedTime&&this.liveOffset.getTotalOffset()<this.maxSeekBackTime$.getValue()?(this.liveOffset.resume(),this.dash.play((()=>{this.liveOffset.pause(),this.videoState.setState(ue.PAUSED)})),this.params.output.position$.next(me(this.liveOffset.getTotalOffset()))):this.seek(me(this.liveOffset.getTotalOffset()))));default:return n(e)}},this.params=e,this.log=this.params.dependencies.logger.createComponentLog("DashLiveProvider");const a=t=>{e.output.error$.next({id:"DashLiveProvider",message:"DashLiveProvider internal logic error",thrown:t})};o(this.videoState.stateChangeStarted$.pipe(h((t=>({transition:t,type:"start"})))),this.videoState.stateChangeEnded$.pipe(h((t=>({transition:t,type:"end"}))))).subscribe((({transition:t,type:e})=>{this.log({message:`[videoState change] ${e}: ${JSON.stringify(t)}`})})),this.video=V(e.container),this.params.output.element$.next(this.video),this.dash=this.createLiveDashPlayer(),this.params.output.duration$.next(1/0),this.params.output.position$.next(0),this.params.output.isLive$.next(!0),this.params.output.hostname$.next(dt(this.params.source.url)),this.textTracksManager.connect(this.video,this.params.desiredState,this.params.output);const r=Y(this.video);this.subscription.add(r.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===ue.READY&&this.videoState.setState(ue.READY)}),a)).add(r.pause$.subscribe((()=>{this.videoState.setState(ue.PAUSED)}),a)).add(r.play$.subscribe((()=>{this.videoState.setState(ue.PLAYING)}),a)).add(r.error$.subscribe(this.params.output.error$)).add(this.maxSeekBackTime$.pipe(c(),h(me)).subscribe(this.params.output.duration$)).add(S({zeroTime:this.zeroTime$.pipe(f(s)),position:r.timeUpdate$}).subscribe((({zeroTime:t,position:e})=>this.params.output.liveTime$.next(t+1e3*e)),a)).add(O(this.video,this.params.desiredState.isLooped,a)).add(B(this.video,this.params.desiredState.volume,r.volumeState$,a)).add(r.volumeState$.subscribe(this.params.output.volume$,a)).add(G(this.video).subscribe(this.params.output.firstBytesEvent$)).add(H(this.video).subscribe(this.params.output.firstFrameEvent$)).add(this.videoState.stateChangeEnded$.subscribe((t=>{switch(t.to){case ue.STOPPED:this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.desiredState.playbackState.setState($.STOPPED);break;case ue.MANIFEST_READY:case ue.READY:break;case ue.PAUSED:this.params.desiredState.playbackState.setState($.PAUSED);break;case ue.PLAYING:this.params.desiredState.playbackState.setState($.PLAYING);break;default:return n(t.to)}}),a)).add(o(e.desiredState.playbackState.stateChangeStarted$,e.desiredState.seekPosition.stateChangeStarted$,e.desiredState.videoTrack.stateChangeStarted$,e.desiredState.autoVideoTrackSwitching.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0)).subscribe(this.syncPlayback,a))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0),this.dash.destroy()}createLiveDashPlayer(){const t=new he({videoElement:this.video,config:{CHUNK_DURATION:this.params.config.chunkDuration,BUFFER_OPTIMAL_DURATION:this.params.config.optimalBufferDuration,MAX_PARALLEL_REQUESTS:this.params.config.maxParallelRequests},playerCallback:this._dashCb,logger:t=>{this.params.dependencies.logger.log({message:String(t),component:"LiveDashPlayer"})}});return t.pause(),t}prepare(){var t,e,i,a,r,n;const o=this.representations$.getValue(),d=null!==(e=null===(t=this.params.desiredState.videoTrack.getTransition())||void 0===t?void 0:t.to)&&void 0!==e?e:this.params.desiredState.videoTrack.getState(),h=null!==(a=null===(i=this.params.desiredState.autoVideoTrackSwitching.getTransition())||void 0===i?void 0:i.to)&&void 0!==a?a:this.params.desiredState.autoVideoTrackSwitching.getState(),u=!h&&s(d)?d:null===(r=nt(o.map((({track:t})=>t)),{container:{width:this.video.offsetWidth,height:this.video.offsetHeight},throughput:this.params.dependencies.throughputEstimator.throughput$.getValue(),tuning:this.params.tuning.autoTrackSelection}))||void 0===r?void 0:r.id,c=null===(n=o.find((({track:t})=>t.id===u)))||void 0===n?void 0:n.representation;l(c),this.dash.startPlay(c,h),this.params.desiredState.videoTrack.getTransition()&&this.params.desiredState.videoTrack.setState(u),this.params.desiredState.autoVideoTrackSwitching.getTransition()&&this.params.desiredState.autoVideoTrackSwitching.setState(h)}setVideoTrack(t){var e;const i=null===(e=this.representations$.getValue().find((({track:e})=>e.id===t)))||void 0===e?void 0:e.representation;l(i),this.dash.switchByName(i.name),this.params.desiredState.videoTrack.setState(t)}setAutoQuality(t){this.dash.setAutoQualityEnabled(t),this.params.desiredState.autoVideoTrackSwitching.setState(t)}seek(t){this.log({message:`[seek] position: ${t}`}),this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0);const e=-Math.round(1e3*t),i=e<this.maxSeekBackTime$.getValue()?e:0;this.liveOffset.resetTo(i),this.params.output.position$.next(me(i)),this.dash.reinit(Ct(this.params.source.url,i)),this.params.desiredState.seekPosition.setState(void 0)}}const me=t=>-t/1e3,ve=t=>{if(t.QUALITY)switch(t.QUALITY){case"mobile":return z.Q_144P;case"lowest":return z.Q_240P;case"low":return z.Q_360P;case"sd":case"medium":return z.Q_480P;case"hd":case"high":return z.Q_720P;case"fullhd":case"full":return z.Q_1080P;case"quadhd":case"quad":return z.Q_1440P;case"ultrahd":case"ultra":return z.Q_2160P}if(t.RESOLUTION){const[e,i]=t.RESOLUTION.split("x").map((t=>parseInt(t,10))),s=K({width:e,height:i});if(s)return s}return null},Se=(t,e=t)=>R(void 0,void 0,void 0,(function*(){var i;const s=yield fetch(t),a=(yield s.text()).split("\n"),r=[];for(let t=0;t<a.length;t++){const s=a[t].match(/^#EXT-X-STREAM-INF:(.+)/);if(!s)continue;const n=Object.fromEntries(s[1].split(",").map((t=>t.split("=")))),o=null!==(i=n.QUALITY)&&void 0!==i?i:`stream-${n.BANDWIDTH}`,d=ve(n);let h,u;if(n.BANDWIDTH&&(h=parseInt(n.BANDWIDTH,10)/1e3||void 0),!h&&n["AVERAGE-BANDWIDTH"]&&(h=parseInt(n["AVERAGE-BANDWIDTH"],10)/1e3||void 0),n.RESOLUTION){const[t,e]=n.RESOLUTION.split("x").map((t=>parseInt(t,10)));t&&e&&(u={width:t,height:e})}const c=new URL(a[++t],e).toString();d&&r.push({id:o,quality:d,url:c,bandwidth:h,size:u})}return r}));var fe;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.CHANGING_MANIFEST="changing_manifest",t.PAUSED="paused"}(fe||(fe={}));class ge{constructor(e){this.subscription=new i,this.videoState=new ut(fe.STOPPED),this.textTracksManager=new U,this.manifests$=new t([]),this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.videoTrack.getTransition(),o=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(e===$.STOPPED)return void(t!==fe.STOPPED&&(this.videoState.startTransitionTo(fe.STOPPED),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(fe.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(this.videoState.getTransition())return;const d=this.params.desiredState.seekPosition.getTransition();if(t===fe.STOPPED)return this.videoState.startTransitionTo(fe.READY),void this.prepare();if(r||o){const t=this.videoState.getState();this.videoState.setState(fe.CHANGING_MANIFEST),this.videoState.startTransitionTo(t);const{currentTime:e}=this.video;return this.prepare(),void(d&&!a(d.to)||this.params.desiredState.seekPosition.startTransitionTo(e))}const h=null==d?void 0:d.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(h)&&this.seek(h),t){case fe.READY:return void(e===$.PAUSED?(this.videoState.setState(fe.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(fe.PLAYING),this.playIfAllowed()));case fe.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(fe.PAUSED),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case fe.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(fe.PLAYING),this.playIfAllowed()):(null==i?void 0:i.to)===$.PAUSED&&Q(this.params.desiredState.playbackState,$.PAUSED));case fe.CHANGING_MANIFEST:break;default:return n(t)}},this.params=e,this.video=V(e.container),this.params.output.element$.next(this.video);const r={id:"master",quality:z.INVARIANT,url:this.params.source.url};this.manifests$.next([r]),this.params.output.isLive$.next(!1),this.params.output.hostname$.next(dt(this.params.source.url)),Se(this.params.source.url).then((t=>{this.manifests$.next([r,...t])}),(t=>this.params.output.error$.next({id:"ExtractHlsQualities",message:"Error fetching manifest and extracting qualities",thrown:t}))),this.subscribe()}selectManifest(){var t,e;const{autoVideoTrackSwitching:i,videoTrack:s}=this.params.desiredState,a=i.getState(),r=s.getTransition(),n=null!==(e=null!==(t=null==r?void 0:r.to)&&void 0!==t?t:s.getState())&&void 0!==e?e:"master",o=this.manifests$.getValue();if(!o)return;const d=a?"master":n;return a&&!r&&s.startTransitionTo("master"),o.find((t=>t.id===d))}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"HlsProvider",message:"HlsProvider internal logic error",thrown:e})},a=Y(this.video),r=(t,e)=>this.subscription.add(t.subscribe(e));r(a.timeUpdate$,t.position$),r(a.durationChange$,t.duration$),r(a.ended$,t.endedEvent$),r(a.error$,t.error$),r(a.isBuffering$,t.isBuffering$),r(a.currentBuffer$,t.currentBuffer$),r(a.firstBytes$,t.firstBytesEvent$),r(a.firstFrame$,t.firstFrameEvent$),this.subscription.add(a.seeked$.subscribe((()=>e.seekPosition.setState(void 0)),i)),this.subscription.add(O(this.video,e.isLooped,i)),this.subscription.add(B(this.video,e.volume,a.volumeState$,i)),this.subscription.add(a.volumeState$.subscribe(this.params.output.volume$,i)),this.textTracksManager.connect(this.video,e,t),this.subscription.add(a.play$.subscribe((()=>{this.videoState.setState(fe.PLAYING),Q(e.playbackState,$.PLAYING)}),i)).add(a.pause$.subscribe((()=>{this.videoState.setState(fe.PAUSED),Q(e.playbackState,$.PAUSED)}),i)).add(a.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===fe.READY&&this.videoState.setState(fe.READY),this.videoState.getState()===fe.PLAYING&&this.playIfAllowed()}),i).add(a.loadedMetadata$.subscribe((()=>{const t=this.params.desiredState.seekPosition.getTransition(),e=this.videoState.getTransition(),i=this.params.desiredState.videoTrack.getTransition(),a=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(i&&s(i.to)){const t=i.to;this.params.desiredState.videoTrack.setState(t);const e=this.manifests$.getValue().find((e=>e.id===t));e&&(this.params.output.currentVideoTrack$.next(e),this.params.output.hostname$.next(dt(e.url)))}a&&this.params.desiredState.autoVideoTrackSwitching.setState(a.to),e&&e.from===fe.CHANGING_MANIFEST&&this.videoState.setState(e.to),t&&s(t.to)&&this.seek(t.to)}),i))),this.subscription.add(this.manifests$.pipe(h((t=>t.map((({id:t,quality:e,size:i,bandwidth:s})=>({id:t,quality:e,size:i,bitrate:s})))))).subscribe(this.params.output.availableVideoTracks$,i));const n=o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,e.videoTrack.stateChangeStarted$,e.autoVideoTrackSwitching.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0)}prepare(){const t=this.selectManifest();a(t)||(this.video.setAttribute("src",t.url),this.video.load())}playIfAllowed(){C(this.video).then((t=>{t||(this.videoState.setState(fe.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.video.currentTime=t}}var be;!function(t){t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.CHANGING_MANIFEST="changing_manifest",t.PAUSED="paused"}(be||(be={}));class Te{constructor(e){var r;this.subscription=new i,this.videoState=new ut(be.STOPPED),this.textTracksManager=new U,this.manifests$=new t([]),this.liveOffset=new Xt,this.manifestStartTime$=new t(void 0),this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),r=this.params.desiredState.videoTrack.getTransition(),o=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(e===$.STOPPED)return void(t!==be.STOPPED&&(this.videoState.startTransitionTo(be.STOPPED),this.video.setAttribute("src",""),this.video.load(),this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.videoState.setState(be.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)));if(this.videoState.getTransition())return;const d=this.params.desiredState.seekPosition.getTransition();if(t===be.STOPPED)return this.videoState.startTransitionTo(be.READY),void this.prepare();if(r||o){const t=this.videoState.getState();this.videoState.setState(be.CHANGING_MANIFEST),this.videoState.startTransitionTo(t);const e=ye(this.liveOffset.getTotalOffset());return this.prepare(),void(d&&!a(d.to)||this.params.desiredState.seekPosition.startTransitionTo(e))}const h=null==d?void 0:d.to;if((null==i?void 0:i.to)!==$.PAUSED&&s(h))return this.videoState.startTransitionTo(be.READY),this.seek(h+ye(this.liveOffset.getTotalPausedTime())),void this.prepare();switch(t){case be.READY:return void(e===$.PAUSED?(this.videoState.setState(be.PAUSED),this.liveOffset.pause(),Q(this.params.desiredState.playbackState,$.PAUSED)):e===$.PLAYING&&(this.videoState.startTransitionTo(be.PLAYING),this.playIfAllowed()));case be.PLAYING:return void(e===$.PAUSED?(this.videoState.startTransitionTo(be.PAUSED),this.liveOffset.pause(),this.video.pause()):(null==i?void 0:i.to)===$.PLAYING&&Q(this.params.desiredState.playbackState,$.PLAYING));case be.PAUSED:return void(e===$.PLAYING?(this.videoState.startTransitionTo(be.PLAYING),this.liveOffset.getTotalPausedTime()<this.params.config.maxPausedTime&&this.liveOffset.getTotalOffset()<this.maxSeekBackTime$.getValue()?(this.liveOffset.resume(),this.playIfAllowed(),this.params.output.position$.next(ye(this.liveOffset.getTotalOffset()))):this.seek(ye(this.liveOffset.getTotalOffset()))):(null==i?void 0:i.to)===$.PAUSED&&(Q(this.params.desiredState.playbackState,$.PAUSED),this.liveOffset.pause()));case be.CHANGING_MANIFEST:break;default:return n(t)}},this.params=e,this.video=V(e.container),this.params.output.element$.next(this.video);const o={id:"master",quality:z.INVARIANT,url:this.params.source.url};this.manifests$.next([o]),Se(Ct(this.params.source.url)).then((t=>{this.manifests$.next([o,...t])}),(t=>this.params.output.error$.next({id:"ExtractHlsQualities",message:"Error fetching manifest and extracting qualities",thrown:t}))),this.params.output.isLive$.next(!0),this.params.output.hostname$.next(dt(this.params.source.url)),this.maxSeekBackTime$=new t(null!==(r=e.source.maxSeekBackTime)&&void 0!==r?r:1/0),this.subscribe()}selectManifest(){var t,e;const{autoVideoTrackSwitching:i,videoTrack:s}=this.params.desiredState,a=i.getState(),r=s.getTransition(),n=null!==(e=null!==(t=null==r?void 0:r.to)&&void 0!==t?t:s.getState())&&void 0!==e?e:"master",o=this.manifests$.getValue();if(!o)return;const d=a?"master":n;return a&&!r&&s.startTransitionTo("master"),o.find((t=>t.id===d))}subscribe(){const{output:t,desiredState:e}=this.params,i=e=>{t.error$.next({id:"HlsLiveProvider",message:"HlsLiveProvider internal logic error",thrown:e})},a=Y(this.video),r=(t,e)=>this.subscription.add(t.subscribe(e,i));r(a.ended$,t.endedEvent$),r(a.error$,t.error$),r(a.isBuffering$,t.isBuffering$),r(a.currentBuffer$,t.currentBuffer$),r(a.firstBytes$,t.firstBytesEvent$),r(a.firstFrame$,t.firstFrameEvent$),this.subscription.add(e.isLooped.stateChangeStarted$.subscribe((()=>e.isLooped.setState(!1)),i)),this.subscription.add(B(this.video,e.volume,a.volumeState$,i)),this.subscription.add(a.volumeState$.subscribe(this.params.output.volume$,i)),this.textTracksManager.connect(this.video,e,t),this.subscription.add(a.play$.subscribe((()=>{this.videoState.setState(be.PLAYING),Q(e.playbackState,$.PLAYING)}),i)).add(a.pause$.subscribe((()=>{this.videoState.setState(be.PAUSED),Q(e.playbackState,$.PAUSED)}),i)).add(a.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===be.READY&&this.videoState.setState(be.READY),this.videoState.getState()===be.PLAYING&&this.playIfAllowed()}),i)),this.subscription.add(this.maxSeekBackTime$.pipe(c(),h(ye)).subscribe(this.params.output.duration$,i)),this.subscription.add(a.loadedMetadata$.subscribe((()=>{const t=this.params.desiredState.seekPosition.getTransition(),e=this.videoState.getTransition(),i=this.params.desiredState.videoTrack.getTransition(),a=this.params.desiredState.autoVideoTrackSwitching.getTransition();if(i&&s(i.to)){const t=i.to;this.params.desiredState.videoTrack.setState(t);const e=this.manifests$.getValue().find((e=>e.id===t));e&&(this.params.output.currentVideoTrack$.next(e),this.params.output.hostname$.next(dt(e.url)))}a&&this.params.desiredState.autoVideoTrackSwitching.setState(a.to),e&&e.from===be.CHANGING_MANIFEST&&this.videoState.setState(e.to),t&&s(t.to)&&this.seek(t.to)}),i)),this.subscription.add(a.loadedData$.subscribe((()=>{var t,e;const i=null===(e=null===(t=this.video)||void 0===t?void 0:t.getStartDate())||void 0===e?void 0:e.getTime();this.manifestStartTime$.next(i||void 0)}),i)),this.subscription.add(S({startTime:this.manifestStartTime$.pipe(f(s)),currentTime:a.timeUpdate$}).subscribe((({startTime:t,currentTime:e})=>this.params.output.liveTime$.next(t+1e3*e)),i)),this.subscription.add(this.manifests$.pipe(h((t=>t.map((({id:t,quality:e,size:i,bandwidth:s})=>({id:t,quality:e,size:i,bitrate:s})))))).subscribe(this.params.output.availableVideoTracks$,i));const n=o(e.playbackState.stateChangeStarted$,e.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,e.videoTrack.stateChangeStarted$,e.autoVideoTrackSwitching.stateChangeStarted$,u(["init"])).pipe(v(0));this.subscription.add(n.subscribe(this.syncPlayback,i))}destroy(){this.subscription.unsubscribe(),this.textTracksManager.destroy(),this.video.remove(),this.params.output.element$.next(void 0)}prepare(){const t=this.selectManifest();if(a(t))return;const e=Ct(t.url,this.liveOffset.getTotalOffset());var i;this.video.setAttribute("src",e),this.video.load(),(i=e,R(void 0,void 0,void 0,(function*(){const t=yield fetch(i,{method:"HEAD"});return t.headers.has("X-Playback-Duration")?parseInt(t.headers.get("X-Playback-Duration"),10):void 0}))).then((t=>{a(t)||this.maxSeekBackTime$.next(t)}))}playIfAllowed(){C(this.video).then((t=>{t||(this.videoState.setState(be.PAUSED),this.liveOffset.pause(),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0);const e=-Math.round(1e3*t),i=e<this.maxSeekBackTime$.getValue()?e:0;this.liveOffset.resetTo(i),this.params.output.position$.next(ye(i)),this.params.desiredState.seekPosition.setState(void 0)}}const ye=t=>-t/1e3,Ee={};var $e;!function(t){t.INITIALIZING="initializing",t.STOPPED="stopped",t.READY="ready",t.PLAYING="playing",t.PAUSED="paused"}($e||($e={}));const Pe=(t,e)=>new p((i=>{const s=(t,e)=>i.next(e);return t.on(e,s),()=>t.off(e,s)}));class ke{constructor(t){this.subscription=new i,this.videoState=new ut($e.INITIALIZING),this.textTracksManager=new U,this.trackLevels=new Map,this.syncPlayback=()=>{const t=this.videoState.getState(),e=this.params.desiredState.playbackState.getState(),i=this.params.desiredState.playbackState.getTransition(),a=this.params.desiredState.seekPosition.getTransition();if(t===$e.INITIALIZING)return;const r=null==a?void 0:a.to;switch((null==i?void 0:i.to)!==$.PAUSED&&s(r)&&this.seek(r),e){case $.STOPPED:switch(t){case $e.STOPPED:break;case $e.READY:case $e.PLAYING:case $e.PAUSED:this.stop();break;default:n(t)}break;case $.PLAYING:switch(t){case $e.PLAYING:break;case $e.STOPPED:this.prepare();break;case $e.READY:case $e.PAUSED:this.playIfAllowed();break;default:n(t)}break;case $.PAUSED:switch(t){case $e.PAUSED:break;case $e.STOPPED:this.prepare();break;case $e.READY:this.videoState.setState($e.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED);break;case $e.PLAYING:this.pause();break;default:n(t)}break;default:n(e)}},this.video=V(t.container),this.params=t,this.params.output.element$.next(this.video),this.params.output.isLive$.next(!1),this.params.output.hostname$.next(dt(this.params.source.url)),this.loadHlsJs()}destroy(){var t,e;this.subscription.unsubscribe(),this.trackLevels.clear(),this.textTracksManager.destroy(),null===(t=this.hls)||void 0===t||t.detachMedia(),null===(e=this.hls)||void 0===e||e.destroy(),this.video.remove(),this.params.output.element$.next(void 0)}loadHlsJs(){let t=!1;const e=e=>{t||this.params.output.error$.next({id:"timeout"===e?"HlsJsTimeout":"HlsJsLoadError",message:"Failed to load Hls.js",thrown:e}),t=!0},i=window.setTimeout((()=>e("timeout")),5e3);import("hls.js").then((e=>{t||(Ee.Hls=e.default,Ee.Events=e.default.Events,this.init())}),e).finally((()=>{window.clearTimeout(i),t=!0}))}init(){l(Ee.Hls,"hls.js not loaded"),this.hls=new Ee.Hls({fragLoadingMaxRetry:5,levelLoadingMaxRetry:2,manifestLoadingMaxRetry:2,fragLoadingMaxRetryTimeout:16e3,manifestLoadingMaxRetryTimeout:2e3,levelLoadingMaxRetryTimeout:2e3}),this.subscribe(),this.videoState.setState($e.STOPPED)}subscribe(){l(Ee.Events,"hls.js not loaded");const{desiredState:t,output:e}=this.params,i=t=>{e.error$.next({id:"HlsJsProvider",message:"HlsJsProvider internal logic error",thrown:t})},r=Y(this.video),n=(t,e)=>this.subscription.add(t.subscribe(e,i));n(r.timeUpdate$,e.position$),n(r.durationChange$,e.duration$),n(r.ended$,e.endedEvent$),n(r.error$,e.error$),n(r.isBuffering$,e.isBuffering$),n(r.currentBuffer$,e.currentBuffer$),n(r.firstBytes$,e.firstBytesEvent$),n(r.firstFrame$,e.firstFrameEvent$),this.subscription.add(r.seeked$.subscribe((()=>t.seekPosition.setState(void 0)),i)),this.subscription.add(O(this.video,t.isLooped,i)),this.subscription.add(B(this.video,t.volume,r.volumeState$,i)),this.subscription.add(r.volumeState$.subscribe(this.params.output.volume$)),this.subscription.add(Pe(this.hls,Ee.Events.ERROR).subscribe((t=>{var i;t.fatal&&e.error$.next({id:["HlsJsFatal",t.type,t.details].join("_"),message:`HlsJs fatal ${t.type} ${t.details}, ${null===(i=t.err)||void 0===i?void 0:i.message} ${t.reason}`,thrown:t.error})}))),this.subscription.add(r.play$.subscribe((()=>{this.videoState.setState($e.PLAYING),Q(t.playbackState,$.PLAYING)}),i)).add(r.pause$.subscribe((()=>{this.videoState.setState($e.PAUSED),Q(t.playbackState,$.PAUSED)}),i)).add(r.canplay$.subscribe((()=>{var t;(null===(t=this.videoState.getTransition())||void 0===t?void 0:t.to)===$e.READY&&this.videoState.setState($e.READY),this.videoState.getState()===$e.PLAYING&&this.playIfAllowed()}),i)),n(Pe(this.hls,Ee.Events.MANIFEST_PARSED).pipe(h((({levels:t})=>t.reduce(((t,e)=>{const i=e.name||e.height.toString(10),{width:s,height:a}=e,r=K({width:s,height:a});if(!r)return t;const n={id:i.toString(),quality:r,bitrate:e.bitrate/1e3,size:{width:s,height:a}};return this.trackLevels.set(i,{track:n,level:e}),t.push(n),t}),[])))),e.availableVideoTracks$),n(Pe(this.hls,Ee.Events.LEVEL_LOADING).pipe(h((({url:t})=>dt(t)))),e.hostname$),this.subscription.add(N(t.autoVideoTrackSwitching,(()=>this.hls.autoLevelEnabled),(t=>{this.hls.nextLevel=t?-1:this.hls.currentLevel,this.hls.loadLevel=t?-1:this.hls.loadLevel}),{onError:i}));const d=t=>{var e;return null===(e=Array.from(this.trackLevels.values()).find((({level:e})=>e===t)))||void 0===e?void 0:e.track},c=Pe(this.hls,Ee.Events.LEVEL_SWITCHED).pipe(h((({level:t})=>d(this.hls.levels[t]))));c.pipe(f(s)).subscribe(e.currentVideoTrack$,i),this.subscription.add(N(t.videoTrack,(()=>{var t;return null===(t=d(this.hls.levels[this.hls.currentLevel]))||void 0===t?void 0:t.id}),(t=>{var e;if(a(t))return;const i=null===(e=this.trackLevels.get(t))||void 0===e?void 0:e.level;if(!i)return;const s=this.hls.levels.indexOf(i),r=this.hls.currentLevel,n=this.hls.levels[r];!n||i.bitrate>n.bitrate?this.hls.nextLevel=s:(this.hls.loadLevel=s,this.hls.loadLevel=s)}),{changed$:c.pipe(h((t=>null==t?void 0:t.id))),onError:i})),n(r.progress$,(()=>{this.params.dependencies.throughputEstimator.addRawThroughput(this.hls.bandwidthEstimate/1e3)})),this.textTracksManager.connect(this.video,t,e);const p=o(t.playbackState.stateChangeStarted$,t.videoTrack.stateChangeStarted$,t.seekPosition.stateChangeStarted$,this.videoState.stateChangeEnded$,u(["init"])).pipe(v(0));this.subscription.add(p.subscribe(this.syncPlayback,i))}prepare(){this.videoState.startTransitionTo($e.READY),this.hls.attachMedia(this.video),this.hls.loadSource(this.params.source.url)}playIfAllowed(){return R(this,void 0,void 0,(function*(){this.videoState.startTransitionTo($e.PLAYING);(yield C(this.video))||(this.videoState.setState($e.PAUSED),Q(this.params.desiredState.playbackState,$.PAUSED,!0))}))}pause(){this.videoState.startTransitionTo($e.PAUSED),this.video.pause()}seek(t){this.params.desiredState.seekPosition.setState(t),this.params.desiredState.seekPosition.startTransitionTo(void 0),this.video.currentTime=t}stop(){this.params.output.position$.next(0),this.params.output.duration$.next(1/0),this.params.output.currentBuffer$.next(void 0),this.params.output.hostname$.next(void 0),this.hls.stopLoad(),this.hls.detachMedia(),this.video.setAttribute("src",""),this.video.load(),this.videoState.setState($e.STOPPED),Q(this.params.desiredState.playbackState,$.STOPPED,!0)}}class we{constructor(t){this.iterator=t[Symbol.iterator](),this.next()}next(){this.current=this.iterator.next()}getValue(){if(this.current.done)throw new Error("Iterable is completed");return this.current.value}isCompleted(){return Boolean(this.current.done)}}var Ae,De,_e,Ie,Re,Le,xe,Ce,Ne,Oe,Be,Me,Ue,Ve,He,qe,Fe,Ge;const Ye=(()=>{const{userAgent:t}=window.navigator;return!/chrome/i.test(t)&&/webkit|safari|khtml/i.test(t)})(),ze=(null===(De=null===(Ae=navigator)||void 0===Ae?void 0:Ae.userAgentData)||void 0===De?void 0:De.mobile)||/Mobile|mini|Fennec|Android|iP(ad|od|hone)/.test(navigator.appVersion),Qe=document.createElement("video"),We={mse:Boolean(window.MediaSource&&window.MediaStreamTrack&&(null===(Ie=null===(_e=window.SourceBuffer)||void 0===_e?void 0:_e.prototype)||void 0===Ie?void 0:Ie.appendBuffer)),hls:Boolean((null===(Re=Qe.canPlayType)||void 0===Re?void 0:Re.call(Qe,"application/x-mpegurl"))||(null===(Le=Qe.canPlayType)||void 0===Le?void 0:Le.call(Qe,"vnd.apple.mpegURL")))},Je={mp4:Boolean(null===(xe=Qe.canPlayType)||void 0===xe?void 0:xe.call(Qe,"video/mp4")),webm:Boolean(null===(Ce=Qe.canPlayType)||void 0===Ce?void 0:Ce.call(Qe,"video/webm"))},je={h264:Boolean(null===(Oe=null===(Ne=window.MediaSource)||void 0===Ne?void 0:Ne.isTypeSupported)||void 0===Oe?void 0:Oe.call(Ne,'video/mp4; codecs="avc1.42000a,mp4a.40.2"')),h265:Boolean(null===(Me=null===(Be=window.MediaSource)||void 0===Be?void 0:Be.isTypeSupported)||void 0===Me?void 0:Me.call(Be,'video/mp4; codecs="hev1.1.6.L93.B0"')),vp9:Boolean(null===(Ve=null===(Ue=window.MediaSource)||void 0===Ue?void 0:Ue.isTypeSupported)||void 0===Ve?void 0:Ve.call(Ue,'video/webm; codecs="vp9"')),aac:Boolean(null===(qe=null===(He=window.MediaSource)||void 0===He?void 0:He.isTypeSupported)||void 0===qe?void 0:qe.call(He,'audio/mp4; codecs="mp4a.40.2"')),opus:Boolean(null===(Ge=null===(Fe=window.MediaSource)||void 0===Fe?void 0:Fe.isTypeSupported)||void 0===Ge?void 0:Ge.call(Fe,'audio/webm; codecs="opus"'))},Xe=(je.h264||je.h265)&&je.aac,Ke=!Ye,Ze=ze||Ye,ti=!We.hls||!Ze,ei=3e4,ii=18e4,si=3,ai=100,ri={cacheDuration:12e4},ni={maxPausedTime:3e4,chunkDuration:5e3,optimalBufferDuration:1e4,maxParallelRequests:5},oi={maxPausedTime:3e4},di={maxPausedTime:3e4};class hi{constructor(a){this.current$=new t({type:void 0}),this.providerError$=new e,this.noAvailableProvidersError$=new e,this.providerOutput={position$:new t(0),duration$:new t(1/0),volume$:new t({muted:!1,volume:1}),currentVideoTrack$:new t(void 0),availableVideoTracks$:new t([]),currentBuffer$:new t(void 0),isBuffering$:new t(!0),error$:new e,endedEvent$:new e,firstBytesEvent$:new e,firstFrameEvent$:new e,isLive$:new t(void 0),liveTime$:new t(void 0),availableTextTracks$:new t([]),currentTextTrack$:new t(void 0),hostname$:new t(void 0),element$:new t(void 0)},this.subscription=new i,this.params=a,this.log=this.params.dependencies.logger.createComponentLog("ProviderContainer");const{formatsToAvoid:r}=this.params.tuning,o=r.length?[...a.screenFormatsPriority.filter((t=>!r.includes(t))),...a.screenFormatsPriority.filter((t=>r.includes(t)))]:a.screenFormatsPriority;this.screenFormatsIterator=new we(o.filter((t=>s(a.sources[t]))).filter((t=>{switch(t){case P.DASH:return We.mse&&Je.mp4&&Xe&&Ke;case P.DASH_SEP:return We.mse&&Je.mp4&&Xe;case P.DASH_WEBM:case P.DASH_WEBM_VK:case P.DASH_LIVE_WEBM:return We.mse&&Je.webm&&je.vp9&&je.opus;case P.DASH_LIVE:case P.DASH_ONDEMAND:return We.mse&&Je.mp4&&Xe;case P.HLS:case P.HLS_LIVE:case P.HLS_ONDEMAND:return We.hls&&Je.mp4&&Ze;case P.HLS_JS:return We.mse&&Je.mp4&&Xe&&ti;case P.MPEG:return Je.mp4;default:return n(t)}}))),this.chromecastFormatsIterator=new we(a.chromecastFormatsPriority.filter((t=>s(a.sources[t]))))}init(){this.subscription.add(this.initProviderErrorHandling()),this.subscription.add(this.params.dependencies.chromecastInitializer.connection$.subscribe((()=>{this.reinitProvider()})))}destroy(){this.destroyProvider(),this.current$.next({type:void 0}),this.subscription.unsubscribe()}initProvider(){const t=this.chooseDestination(),e=this.chooseFormat(t);if(a(e))return void this.handleNoFormatsError(t);const i=this.createProvider(t,e);this.current$.next({type:e,provider:i,destination:t})}reinitProvider(){this.destroyProvider(),this.initProvider()}switchToNextProvider(){this.destroyProvider();const t=this.current$.getValue().destination;l(t),this.skipFormat(t),this.initProvider()}destroyProvider(){const t=this.current$.getValue().provider;if(!t)return;this.log({message:"destroyProvider"});const e=this.params.desiredState.seekPosition;e.getTransition()||e.startTransitionTo(this.providerOutput.position$.getValue()),t.destroy();const i=this.providerOutput.isBuffering$;i.getValue()||i.next(!0)}createProvider(t,e){switch(this.log({message:`createProvider: ${t}:${e}`}),t){case k.SCREEN:return this.createScreenProvider(e);case k.CHROMECAST:return this.createChromecastProvider(e);default:return n(t)}}createScreenProvider(t){const{sources:e,container:i,desiredState:s}=this.params,a=this.providerOutput;switch(t){case P.DASH:{const r=e[t];return l(r),new Gt({container:i,source:r,desiredState:s,output:a,config:ri,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.DASH_WEBM_VK:{const r=e[t];return l(r),new Lt({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.DASH_SEP:case P.DASH_WEBM:case P.DASH_ONDEMAND:case P.DASH_LIVE_WEBM:{const r=e[t];return l(r),new ee({container:i,source:r,desiredState:s,output:a,format:t,config:di,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.HLS:case P.HLS_ONDEMAND:{const r=e[t];return l(r),new ge({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.HLS_LIVE:{const r=e[t];return l(r),new Te({container:i,source:r,desiredState:s,output:a,config:oi,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.HLS_JS:{const r=e[t];return l(r),new ke({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.MPEG:{const r=e[t];return l(r),new Mt({container:i,source:r,desiredState:s,output:a,dependencies:this.params.dependencies,tuning:this.params.tuning})}case P.DASH_LIVE:{const r=e[t];return l(r),new pe({container:i,source:r,desiredState:s,output:a,config:ni,dependencies:this.params.dependencies,tuning:this.params.tuning})}default:return n(t)}}createChromecastProvider(t){const{sources:e,container:i,desiredState:s,meta:a}=this.params,r=this.providerOutput,n=this.params.dependencies.chromecastInitializer.connection$.getValue();return l(n),new Ot({connection:n,meta:a,container:i,source:e,format:t,desiredState:s,output:r,dependencies:this.params.dependencies,tuning:this.params.tuning})}chooseDestination(){return this.params.dependencies.chromecastInitializer.connection$.getValue()?k.CHROMECAST:k.SCREEN}chooseFormat(t){switch(t){case k.SCREEN:return this.screenFormatsIterator.isCompleted()?void 0:this.screenFormatsIterator.getValue();case k.CHROMECAST:return this.chromecastFormatsIterator.isCompleted()?void 0:this.chromecastFormatsIterator.getValue();default:return n(t)}}skipFormat(t){switch(t){case k.SCREEN:return this.screenFormatsIterator.next();case k.CHROMECAST:return this.chromecastFormatsIterator.next();default:return n(t)}}handleNoFormatsError(t){switch(t){case k.SCREEN:return this.noAvailableProvidersError$.next(),void this.current$.next({type:void 0});case k.CHROMECAST:return void this.params.dependencies.chromecastInitializer.disconnect();default:return n(t)}}initProviderErrorHandling(){let e=[],a=0;const r=new i;var n;return r.add(o(this.providerOutput.error$,(n={desiredPlaybackState$:this.params.desiredState.playbackState,maxTransitionInterval:ei,position$:this.providerOutput.position$,providerChanged$:this.current$},new p((e=>{const s=new i,a=g(n.maxTransitionInterval),r=new t(void 0);o(n.desiredPlaybackState$.stateChangeStarted$.pipe(b(a)),n.desiredPlaybackState$.stateChangeEnded$.pipe(b(void 0)),n.providerChanged$.pipe(h((()=>r.getValue())))).subscribe(r);const d=new i;return s.add(d),s.add(r.subscribe((t=>{d.unsubscribe(),t&&d.add(t.subscribe(e))}))),s}))).pipe(b({id:"ProviderHangup",message:"An operation failed to complete within reasonable time"}))).subscribe(this.providerError$)),r.add(this.providerError$.pipe(T(ai,{leading:!1,trailing:!0})).subscribe((()=>{const t=Date.now();this.current$.getValue().destination===k.CHROMECAST?(this.destroyProvider(),this.params.dependencies.chromecastInitializer.stopMedia().then((()=>{this.switchToNextProvider()}),(()=>{this.params.dependencies.chromecastInitializer.disconnect()}))):s(e[a])&&t<e[a]+ii?(e=[],this.switchToNextProvider()):(e[a]=t,this.reinitProvider()),a=(a+1)%si}))),r}}const ui=(t,e,i)=>i*e+(1-i)*t;class ci{constructor(e){var i;this.prevReported=void 0,this.params=e,this.slow=this.fast=this.smoothed=this.prevReported=e.initial,this.smoothed$=new t(e.initial),this.debounced$=new t(e.initial);const s=null!==(i=e.label)&&void 0!==i?i:"value"+Math.random().toString(16).substring(2,6);this.rawSeries$=new at(`raw_${s}`),this.smoothedSeries$=new at(`smoothed_${s}`),this.reportedSeries$=new at(`reported_${s}`)}next(t){this.slow=ui(this.slow,t,this.params.emaAlphaSlow),this.fast=ui(this.fast,t,this.params.emaAlphaFast);const e=this.params.fastDirection>0?Math.max:Math.min;this.smoothed=e(this.slow,this.fast),this.smoothed$.next(this.smoothed),(a(this.prevReported)||Math.abs(this.smoothed-this.prevReported)/this.prevReported>=this.params.changeThreshold)&&(this.prevReported=this.smoothed,this.debounced$.next(this.smoothed),this.reportedSeries$.next(this.smoothed)),this.rawSeries$.next(t),this.smoothedSeries$.next(this.smoothed)}}var li;!function(t){t[t.LOCAL_STORAGE=0]="LOCAL_STORAGE",t[t.SESSION_STORAGE=1]="SESSION_STORAGE",t[t.RUNTIME=2]="RUNTIME"}(li||(li={}));const pi=new Map;let mi=li.RUNTIME;const vi=`vk-videoplayer-dummy-key-${Math.random()}`;(()=>{try{localStorage.setItem(vi,"test"),localStorage.removeItem(vi),mi=li.LOCAL_STORAGE}catch(t){if(!(t instanceof DOMException))throw t;try{sessionStorage.getItem(vi),mi=li.SESSION_STORAGE}catch(t){if(!(t instanceof DOMException))throw t;mi=li.RUNTIME}}})();const Si=(t,e)=>{switch(mi){case li.LOCAL_STORAGE:return localStorage.setItem(t,e);case li.SESSION_STORAGE:return sessionStorage.setItem(t,e);case li.RUNTIME:return void pi.set(t,e);default:n(mi)}};function fi(t){return null!=t}const gi=()=>{var t,e;return null!==(e=null===(t=window.performance)||void 0===t?void 0:t.now())&&void 0!==e?e:Date.now()},bi=window.navigator.connection,Ti=()=>{const t=null==bi?void 0:bi.downlink;if(fi(t)&&10!==t)return 1e3*t},yi=()=>{const t=null==bi?void 0:bi.rtt;if(fi(t)&&3e3!==t)return t},Ei=(t,e,i)=>{const s=8*i;return s/(s/t+e)};class $i{constructor(e){var s,a;this.subscription=new i,this.tuningConfig=e;const n=$i.load("one_video_throughput")||(e.useBrowserEstimation?Ti():void 0)||5e3,o=null!==(a=null!==(s=$i.load("one_video_rtt"))&&void 0!==s?s:e.useBrowserEstimation?yi():void 0)&&void 0!==a?a:0;if(this.throughput$=new t(n),this.rtt$=new t(o),this.rttAdjustedThroughput$=new t(Ei(n,o,e.rttPenaltyRequestSize)),this.throughput=new ci({initial:n,emaAlphaSlow:e.emaAlphaSlow,emaAlphaFast:e.emaAlphaFast,changeThreshold:e.changeThreshold,fastDirection:-1,label:"throughput"}),this.rtt=new ci({initial:o,emaAlphaSlow:e.emaAlphaSlow,emaAlphaFast:e.emaAlphaFast,changeThreshold:e.changeThreshold,fastDirection:1,label:"rtt"}),e.useBrowserEstimation){const t=()=>{const t=Ti();t&&this.throughput.next(t);const e=yi();fi(e)&&this.rtt.next(e)};bi&&"onchange"in bi&&this.subscription.add(r(bi,"change").subscribe(t)),t()}this.subscription.add(this.throughput.smoothed$.subscribe((t=>{Si("one_video_throughput",t.toFixed(0))}))),this.subscription.add(this.rtt.smoothed$.subscribe((t=>{Si("one_video_rtt",t.toFixed(0))}))),this.subscription.add(this.throughput.debounced$.subscribe(this.throughput$)),this.subscription.add(this.rtt.debounced$.subscribe(this.rtt$)),this.subscription.add(S({throughput:this.throughput.smoothed$,rtt:this.rtt.smoothed$}).pipe(h((({throughput:t,rtt:i})=>Ei(t,i,e.rttPenaltyRequestSize))),c(((t,i)=>Math.abs(t-i)/i<e.changeThreshold))).subscribe(this.rttAdjustedThroughput$))}destroy(){this.subscription.unsubscribe()}trackXHR(t){let e=0,s=gi();const a=new i;switch(this.subscription.add(a),t.readyState){case 4:break;case 3:case 2:a.add(r(t,"progress").pipe(m()).subscribe((t=>{e=t.loaded,s=gi()})));break;case 1:case 0:a.add(r(t,"loadstart").subscribe((()=>{e=0,s=gi()})))}a.add(r(t,"loadend").subscribe((i=>{if(200===t.status){const t=i.loaded,a=gi(),r=t-e,n=a-s;this.addRawSpeed(r,n)}a.unsubscribe()})))}trackStream(t){const e=t.getReader();if(!e)return void t.cancel("Could not get reader");let i=0;const s=gi();let a=0,r=gi();const n=i=>{e.releaseLock(),t.cancel(`Throughput Estimator error: ${i}`).catch((()=>{}))},o=({done:t,value:d})=>R(this,void 0,void 0,(function*(){t?this.addRawSpeed(i,gi()-s):d&&(i+=d.byteLength,a+=d.byteLength,a>=this.tuningConfig.streamMinSampleSize&&gi()-r>=this.tuningConfig.streamMinSampleTime&&(this.addRawSpeed(a,gi()-r),a=0,r=gi()),yield null==e?void 0:e.read().then(o,n))}));null==e||e.read().then(o,n)}addRawSpeed(t,e){if($i.sanityCheck(t,e)){const i=8*t/e;this.throughput.next(i)}}addRawThroughput(t){this.throughput.next(t)}addRawRtt(t){this.rtt.next(t)}static sanityCheck(t,e){const i=8*t/e;return!(!i||!isFinite(i))&&(!(i>1e6)&&(!(i<30)&&(!(t<1024)&&!(e<=50))))}static load(t){var e;const i=(t=>{var e,i;switch(mi){case li.LOCAL_STORAGE:return null!==(e=localStorage.getItem(t))&&void 0!==e?e:void 0;case li.SESSION_STORAGE:return null!==(i=sessionStorage.getItem(t))&&void 0!==i?i:void 0;case li.RUNTIME:return pi.get(t);default:n(mi)}})(t);if(fi(i))return null!==(e=parseInt(i,10))&&void 0!==e?e:void 0}}const Pi=(t=(t=>t))=>({playbackState:e,seekPosition:r,playbackAbort$:n,position$:d})=>new p((u=>{let c;const l=e.transitionEnded$.pipe(f((t=>(t.from===$.PAUSED||t.from===$.STOPPED)&&t.to===$.PLAYING))),p=e.stateChangeEnded$.pipe(f((t=>t.from===$.PLAYING&&t.to===$.PAUSED))),m=r.stateChangeEnded$.pipe(f((t=>{var i,a;return s(t.to)&&(null!==(a=null===(i=e.getTransition())||void 0===i?void 0:i.from)&&void 0!==a?a:e.getState())===$.PLAYING}))),v=r.stateChangeEnded$.pipe(f((t=>{var i,s;return a(t.to)&&(null!==(s=null===(i=e.getTransition())||void 0===i?void 0:i.from)&&void 0!==s?s:e.getState())===$.PLAYING}))),S=o(l,v).pipe(h((()=>t(d.getValue())))),g=o(p,m,n).pipe(h((()=>t(d.getValue()))));return(new i).add(S.subscribe((e=>{c=t(e)}))).add(g.subscribe((e=>{if(a(c))return;const i={start:c,end:t(e)};c=void 0,u.next(i)})))})),ki=Pi((t=>t)),wi=Pi((t=>Math.round(1e3*t)+Date.now())),Ai={[k.SCREEN]:{vod:[P.HLS,P.HLS_ONDEMAND,P.DASH_WEBM_VK,P.DASH_WEBM,P.DASH,P.DASH_SEP,P.DASH_ONDEMAND,P.HLS_JS,P.MPEG],live:[P.HLS_LIVE,P.DASH_LIVE,P.DASH_LIVE_WEBM]},[k.CHROMECAST]:{vod:[P.DASH_WEBM_VK,P.DASH_WEBM,P.DASH_SEP,P.DASH_ONDEMAND,P.HLS,P.HLS_ONDEMAND,P.MPEG],live:[P.HLS_LIVE]}};class Di{constructor(s={}){if(this.subscription=new i,this.logger=new y,this.isPlaybackStarted=!1,this.desiredState={playbackState:new ut($.STOPPED),seekPosition:new ut(void 0),volume:new ut({volume:1,muted:!1}),videoTrack:new ut(void 0),autoVideoTrackSwitching:new ut(!0),isLooped:new ut(!1),externalTextTracks:new ut([]),currentTextTrack:new ut(void 0),textTrackCuesSettings:new ut({})},this.info={playbackState$:new t($.STOPPED),position$:new t(0),duration$:new t(1/0),muted$:new t(!1),volume$:new t(1),availableQualities$:new t([]),currentQuality$:new t(void 0),isAutoQualityEnabled$:new t(!0),currentBuffer$:new t(void 0),isBuffering$:new t(!0),isEnded$:new t(!1),isLooped$:new t(!1),isLive$:new t(void 0),liveTime$:new t(void 0),currentFormat$:new t(void 0),availableTextTracks$:new t([]),currentTextTrack$:new t(void 0),throughputEstimation$:new t(void 0),rttEstimation$:new t(void 0),videoBitrate$:new t(void 0),hostname$:new t(void 0),chromecastState$:new t(w.NOT_AVAILABLE),chromecastDeviceName$:new t(void 0)},this.events={started$:new e,startAttempt$:new e,willPause$:new e,willResume$:new e,willDestruct$:new e,watchCoverageRecord$:new e,watchCoverageLive$:new e,managedError$:new e,fatalError$:new e,ended$:new e,seeked$:new e,willSeek$:new e,firstBytes$:new e,firstFrame$:new e,log$:new e},this.experimental={element$:new t(void 0),enableDebugTelemetry$:new t(!1),dumpTelemetry:it},this.initLogs(),this.tuning=(t=>{const e={};for(const i of Object.keys(D)){const s=D[i],a=t[i];Array.isArray(s)&&Array.isArray(a)?e[i]=a:e[i]="object"==typeof s&&"object"==typeof a?Object.assign(Object.assign({},s),a):null!=a?a:s}return e})(s),this.chromecastInitializer=new _({receiverApplicationId:s.chromecastReceiverId,isDisabled:s.disableChromecast,dependencies:{logger:this.logger}}),this.throughputEstimator=new $i(this.tuning.throughputEstimator),this.initChromecastSubscription(),this.initDesiredStateSubscriptions(),Proxy&&Reflect)return new Proxy(this,{get:(t,e,i)=>{const s=Reflect.get(t,e,i);return"function"!=typeof s?s:(...i)=>{try{return s.apply(t,i)}catch(t){const s=i.map((t=>JSON.stringify(t,((t,e)=>{const i=typeof e;return["number","string","boolean"].includes(i)?e:null===e?null:`<${i}>`})))),a=`Player.${String(e)}`,r=`Exception calling ${a} (${s.join(", ")})`;throw this.events.fatalError$.next({id:a,message:r,thrown:t}),t}}}})}initVideo(t){var e,i;return this.config=t,this.domContainer=(t=>{const e="string"==typeof t.container?document.getElementById(t.container):t.container;return l(e,`Wrong container or containerId {${t.container}}`),e})(t),this.chromecastInitializer.contentId=null===(e=t.meta)||void 0===e?void 0:e.videoId,this.providerContainer=new hi({screenFormatsPriority:[...Ai[k.SCREEN].live,...Ai[k.SCREEN].vod],chromecastFormatsPriority:[...Ai[k.CHROMECAST].live,...Ai[k.CHROMECAST].vod],sources:t.sources,meta:null!==(i=t.meta)&&void 0!==i?i:{},container:this.domContainer,desiredState:this.desiredState,dependencies:{throughputEstimator:this.throughputEstimator,chromecastInitializer:this.chromecastInitializer,logger:this.logger},tuning:this.tuning}),this.initProviderContainerSubscription(this.providerContainer),this.initStartingVideoTrack(this.providerContainer),this.providerContainer.init(),this.initDebugTelemetry(),this}destroy(){var t;this.events.willDestruct$.next(),null===(t=this.providerContainer)||void 0===t||t.destroy(),this.throughputEstimator.destroy(),this.chromecastInitializer.destroy(),this.subscription.unsubscribe()}play(){const t=this.desiredState.playbackState;return t.getState()!==$.PLAYING&&t.startTransitionTo($.PLAYING),this}pause(){const t=this.desiredState.playbackState;return t.getState()!==$.PAUSED&&t.startTransitionTo($.PAUSED),this}stop(){const t=this.desiredState.playbackState;return t.getState()!==$.STOPPED&&t.startTransitionTo($.STOPPED),this}seekTime(t){return this.events.willSeek$.next({from:this.getExactTime(),to:t}),this.desiredState.seekPosition.startTransitionTo(t),this}seekPercent(t){const e=this.info.duration$.getValue();return isFinite(e)&&this.seekTime(Math.abs(e)*t),this}setVolume(t){return this.chromecastInitializer.castState$.getValue()===w.CONNECTED?this.chromecastInitializer.setVolume(t):this.desiredState.volume.startTransitionTo({volume:t,muted:this.desiredState.volume.getState().muted}),this}setMuted(t){return this.chromecastInitializer.castState$.getValue()===w.CONNECTED?this.chromecastInitializer.setMuted(t):this.desiredState.volume.startTransitionTo({volume:this.desiredState.volume.getState().volume,muted:t}),this}setQuality(t){l(this.providerContainer);const e=this.providerContainer.providerOutput.availableVideoTracks$.getValue();e.length||(this.explicitInitialQuality=t);const i=e.find((e=>e.quality===t));return i&&this.desiredState.videoTrack.startTransitionTo(i.id),this}setAutoQuality(t){return this.desiredState.autoVideoTrackSwitching.startTransitionTo(t),this}setExternalTextTracks(t){return this.desiredState.externalTextTracks.startTransitionTo(t.map((t=>Object.assign({type:"external"},t)))),this}selectTextTrack(t){var e;return(void 0===t||(null===(e=this.providerContainer)||void 0===e?void 0:e.providerOutput.availableTextTracks$.getValue().find((e=>e.id===t))))&&this.desiredState.currentTextTrack.startTransitionTo(t),this}setTextTrackCueSettings(t){return this.desiredState.textTrackCuesSettings.startTransitionTo(t),this}setLooped(t){return this.desiredState.isLooped.startTransitionTo(t),this}toggleChromecast(){this.chromecastInitializer.toggleConnection()}getExactTime(){var t;l(this.providerContainer);const e=this.providerContainer.providerOutput.element$.getValue();if(a(e))return this.info.position$.getValue();const i=this.desiredState.seekPosition.getTransition(),r=null!==(t=null==i?void 0:i.to)&&void 0!==t?t:null==i?void 0:i.from;return s(r)?r:e.currentTime}getAllLogs(){return this.logger.getAllLogs()}initDesiredStateSubscriptions(){this.subscription.add(o(this.desiredState.playbackState.stateChangeStarted$,this.desiredState.playbackState.forceChanged$).pipe(h((t=>t.to))).subscribe(this.info.playbackState$)).add(this.desiredState.isLooped.stateChangeEnded$.pipe(h((t=>t.to))).subscribe(this.info.isLooped$)).add(this.desiredState.autoVideoTrackSwitching.stateChangeEnded$.pipe(h((t=>t.to))).subscribe(this.info.isAutoQualityEnabled$)).add(this.desiredState.seekPosition.stateChangeEnded$.pipe(f((t=>void 0===t.to)),b(void 0)).subscribe(this.events.seeked$));const t=new i;this.subscription.add(t),this.subscription.add(this.desiredState.playbackState.stateChangeStarted$.pipe(f((t=>t.to===$.PLAYING))).subscribe((()=>{t.unsubscribe(),t.add(this.desiredState.playbackState.stateChangeEnded$.pipe(f((t=>t.to===$.PLAYING||t.to===$.PAUSED)),m()).subscribe((t=>{const e=t.to===$.PLAYING,i=this.info.muted$.getValue(),s=e?i?A.SuccessWithoutSound:A.SuccessWithSound:A.Failed;this.events.startAttempt$.next(s)})))}))),this.subscription.add(this.desiredState.playbackState.stateChangeEnded$.pipe(f((t=>t.to===$.PLAYING))).subscribe((()=>{this.isPlaybackStarted||(this.isPlaybackStarted=!0,this.events.started$.next())}))).add(this.desiredState.playbackState.stateChangeStarted$.subscribe((t=>{switch(t.to){case $.PAUSED:this.events.willPause$.next();break;case $.PLAYING:this.isPlaybackStarted&&this.events.willResume$.next()}})))}initProviderContainerSubscription(t){this.subscription.add(t.current$.pipe(h((t=>t.type))).subscribe(this.info.currentFormat$)).add(t.current$.pipe(h((t=>t.destination)),c()).subscribe((()=>{this.isPlaybackStarted=!1}))).add(t.providerOutput.availableVideoTracks$.pipe(h((t=>t.map((({quality:t})=>t)).sort(((t,e)=>Z(t)?1:Z(e)?-1:J(e,t)?1:-1))))).subscribe(this.info.availableQualities$)).add(t.providerOutput.currentVideoTrack$.subscribe((t=>{this.info.currentQuality$.next(null==t?void 0:t.quality),this.info.videoBitrate$.next(null==t?void 0:t.bitrate)}))).add(t.providerOutput.hostname$.pipe(c()).subscribe(this.info.hostname$)).add(t.providerOutput.currentTextTrack$.subscribe(this.info.currentTextTrack$)).add(t.providerOutput.availableTextTracks$.subscribe(this.info.availableTextTracks$)).add(t.providerOutput.currentBuffer$.subscribe(this.info.currentBuffer$)).add(t.providerOutput.duration$.subscribe(this.info.duration$)).add(t.providerOutput.isBuffering$.subscribe(this.info.isBuffering$)).add(t.providerOutput.isLive$.subscribe(this.info.isLive$)).add(t.providerOutput.liveTime$.subscribe(this.info.liveTime$)).add(t.providerOutput.volume$.pipe(h((t=>t.muted)),c()).subscribe(this.info.muted$)).add(t.providerOutput.volume$.pipe(h((t=>t.volume)),c()).subscribe(this.info.volume$)).add((({seekPosition:t,position$:e})=>o(t.stateChangeStarted$.pipe(h((t=>t.to)),f(s)),e.pipe(f((()=>a(t.getState())&&a(t.getTransition()))))))({seekPosition:this.desiredState.seekPosition,position$:t.providerOutput.position$}).subscribe(this.info.position$)).add(o(t.providerOutput.endedEvent$.pipe(b(!0)),this.desiredState.seekPosition.stateChangeEnded$.pipe(f((t=>void 0!==t.from)),b(!1))).pipe(c()).subscribe(this.info.isEnded$)).add(t.providerOutput.endedEvent$.subscribe(this.events.ended$)).add(t.providerError$.subscribe(this.events.managedError$)).add(t.noAvailableProvidersError$.pipe(h((t=>({id:"NoProviders",message:"No suitable providers or all providers failed"})))).subscribe(this.events.fatalError$)).add(t.providerOutput.element$.subscribe(this.experimental.element$)).add(t.providerOutput.firstBytesEvent$.subscribe(this.events.firstBytes$)).add(t.providerOutput.firstFrameEvent$.subscribe(this.events.firstFrame$)).add(this.throughputEstimator.throughput$.subscribe(this.info.throughputEstimation$)).add(this.throughputEstimator.rtt$.subscribe(this.info.rttEstimation$));const e=new i;this.subscription.add(e);const r=o(this.events.willDestruct$,t.current$.pipe(f((t=>Boolean(null==t?void 0:t.provider)))));t.providerOutput.isLive$.pipe(c()).subscribe((t=>{switch(l(this.providerContainer),e.unsubscribe(),t){case!0:e.add(wi({seekPosition:this.desiredState.seekPosition,playbackState:this.desiredState.playbackState,playbackAbort$:r,position$:this.providerContainer.providerOutput.position$}).subscribe(this.events.watchCoverageLive$));break;case!1:e.add(ki({seekPosition:this.desiredState.seekPosition,playbackState:this.desiredState.playbackState,playbackAbort$:r,position$:this.providerContainer.providerOutput.position$}).subscribe(this.events.watchCoverageRecord$))}}))}initChromecastSubscription(){this.subscription.add(this.chromecastInitializer.castState$.subscribe(this.info.chromecastState$)),this.subscription.add(this.chromecastInitializer.connection$.pipe(h((t=>null==t?void 0:t.castDevice.friendlyName))).subscribe(this.info.chromecastDeviceName$)),this.subscription.add(this.chromecastInitializer.errorEvent$.subscribe(this.events.managedError$))}initStartingVideoTrack(t){const e=new i;this.subscription.add(e),this.subscription.add(t.current$.pipe(c(((t,e)=>t.provider===e.provider))).subscribe((()=>{e.unsubscribe(),e.add(t.providerOutput.availableVideoTracks$.pipe(f((t=>t.length>0)),m()).subscribe((t=>{this.setStartingVideoTrack(t)})))})))}setStartingVideoTrack(t){let e;this.explicitInitialQuality&&(e=t.find((({quality:t})=>t===this.explicitInitialQuality)),this.explicitInitialQuality=void 0),e||(e=nt(t,{container:this.domContainer.getBoundingClientRect(),throughput:this.throughputEstimator.throughput$.getValue(),tuning:this.tuning.autoTrackSelection,forwardBufferHealth:0})),this.desiredState.videoTrack.startTransitionTo(e.id),this.info.currentQuality$.next(e.quality),this.info.videoBitrate$.next(e.bitrate)}initLogs(){this.subscription.add(o(this.desiredState.videoTrack.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"quality",type:"start"})))),this.desiredState.videoTrack.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"quality",type:"end"})))),this.desiredState.autoVideoTrackSwitching.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"autoQualityEnabled",type:"start"})))),this.desiredState.autoVideoTrackSwitching.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"autoQualityEnabled",type:"end"})))),this.desiredState.seekPosition.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"seekPosition",type:"start"})))),this.desiredState.seekPosition.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"seekPosition",type:"end"})))),this.desiredState.playbackState.stateChangeStarted$.pipe(h((t=>({transition:t,entity:"playbackState",type:"start"})))),this.desiredState.playbackState.stateChangeEnded$.pipe(h((t=>({transition:t,entity:"playbackState",type:"end"}))))).pipe(h((t=>({component:"desiredState",message:`[${t.entity} change] ${t.type}: ${JSON.stringify(t.transition)}`})))).subscribe(this.logger.log)),this.subscription.add(this.logger.log$.subscribe(this.events.log$))}initDebugTelemetry(){var t;const e=null===(t=this.providerContainer)||void 0===t?void 0:t.providerOutput;l(this.providerContainer),l(e),et={},this.experimental.enableDebugTelemetry$.next(this.tuning.enableTelemetryAtStart),[this.experimental.enableDebugTelemetry$.subscribe((t=>{tt=t})),this.providerContainer.current$.subscribe((({type:t})=>st("provider",t))),e.duration$.subscribe((t=>st("duration",t))),e.availableVideoTracks$.pipe(f((t=>!!t.length)),m()).subscribe((t=>st("tracks",t))),this.events.fatalError$.subscribe(new at("fatalError")),this.events.managedError$.subscribe(new at("managedError")),e.position$.subscribe(new at("position")),e.currentVideoTrack$.pipe(h((t=>null==t?void 0:t.quality))).subscribe(new at("quality")),e.currentBuffer$.subscribe(new at("buffer")),e.isBuffering$.subscribe(new at("isBuffering"))].forEach((t=>this.subscription.add(t))),st("codecs",Object.keys(je).filter((t=>je[t])))}}const _i="@vkontakte/videoplayer-core@2.0.37";export{w as ChromecastState,$ as PlaybackState,Di as Player,_i as SDK_VERSION,A as StartStatus,P as VideoFormat,z as VideoQuality};