diff --git a/index.html b/index.html new file mode 100644 index 0000000..48d5b4f --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + + + + + + + +
+ + + + +
+ + + \ No newline at end of file diff --git a/sample.mp4 b/sample.mp4 new file mode 100644 index 0000000..81d11df Binary files /dev/null and b/sample.mp4 differ diff --git a/sopplayer.css b/sopplayer.css new file mode 100644 index 0000000..43504b0 --- /dev/null +++ b/sopplayer.css @@ -0,0 +1,1723 @@ +@charset "UTF-8"; +.vjs-modal-dialog .vjs-modal-dialog-content, .video-js .vjs-modal-dialog, .vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vjs-button > .vjs-icon-placeholder:before, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + text-align: center; +} + +@font-face { + font-family: VideoJS; + src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAABDkAAsAAAAAG6gAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAADsAAABUIIslek9TLzIAAAFEAAAAPgAAAFZRiV3hY21hcAAAAYQAAADaAAADPv749/pnbHlmAAACYAAAC3AAABHQZg6OcWhlYWQAAA3QAAAAKwAAADYZw251aGhlYQAADfwAAAAdAAAAJA+RCLFobXR4AAAOHAAAABMAAACM744AAGxvY2EAAA4wAAAASAAAAEhF6kqubWF4cAAADngAAAAfAAAAIAE0AIFuYW1lAAAOmAAAASUAAAIK1cf1oHBvc3QAAA/AAAABJAAAAdPExYuNeJxjYGRgYOBiMGCwY2BycfMJYeDLSSzJY5BiYGGAAJA8MpsxJzM9kYEDxgPKsYBpDiBmg4gCACY7BUgAeJxjYGS7wTiBgZWBgaWQ5RkDA8MvCM0cwxDOeI6BgYmBlZkBKwhIc01hcPjI+FGJHcRdyA4RZgQRADK3CxEAAHic7dFZbsMgAEXRS0ycyZnnOeG7y+qC8pU1dHusIOXxuoxaOlwZYWQB0Aea4quIEN4E9LzKbKjzDeM6H/mua6Lmc/p8yhg0lvdYx15ZG8uOLQOGjMp3EzqmzJizYMmKNRu27Nhz4MiJMxeu3Ljz4Ekqm7T8P52G8PP3lnTOVk++Z6iN6QZzNN1F7ptuN7eGOjDUoaGODHVsuvU8MdTO9Hd5aqgzQ50b6sJQl4a6MtS1oW4MdWuoO0PdG+rBUI+GejLUs6FeDPVqqDdDvRvqw1CfhpqM9At0iFLaAAB4nJ1YDXBTVRZ+5/22TUlJ8we0pHlJm7RJf5O8F2j6EymlSPkpxaL8U2xpa3DKj0CBhc2IW4eWKSokIoLsuMqssM64f+jA4HSdWXXXscBq67IOs3FXZ1ZYWVyRFdo899yXtIBQZ90k7717zz3v3HPPOfd854YCCj9cL9dL0RQFOqCbGJnrHb5EayiKIWN8iA/hWBblo6hUWm8TtCDwE80WMJus/irwyxOdxeB0MDb14VNJHnXYoLLSl6FfCUYO9nYPTA8Epg9090LprfbBbZ2hY0UlJUXHQp3/vtWkS6EBv8+rPMq5u9692f/dNxJNiqwC1xPE9TCUgCsSdQWgE3XQD25lkG4CN2xmTcOXWBOyser6RN6KnGbKSbmQ3+d0OI1m2W8QzLLkI2sykrWAgJJEtA8vGGW/2Q+CmT3n8zS9wZwu2DCvtuZKZN3xkrLh36yCZuUomQSqGpY8t/25VfHVhw8z4ebGBtfLb0ya9PCaDc+8dGTvk2dsh6z7WzvowlXKUSWo9MJ15a3KrEP2loOr2Ojhw6iW6hf2BDdEccQvZGpaAy7YovSwq8kr7HGllxpd71rkS6G0Sf11sl9OvMK1+jwPPODxjUwkOim9CU3ix1wNjXDfmJSEn618Bs6lpWwUpU+8PCqLMY650zjq8VhCIP17NEKTx3eaLL+s5Pi6yJWaWjTHLR1jYzPSV9VF/6Ojdb/1kO3Mk3uhHC0x6gc1BjlKQ+nQFxTYdaJkZ7ySVxLBbhR1dsboNXp1tCYKW2LRaEzpYcIx2BKNxaL0ZaUnSqfFoiNhHKR/GkX6PWUSAaJelQaqZL1EpoHNsajSEyPSoJ9IjhIxTdjHLmwZvhRDOiFTY/YeQnvrVZmiTQtGncECXtFTBZLOVwwMRgoXHAkXzMzPn1nAJJ8jYSbMDaqN2waGLzNhih/bZynUBMpIWSg7VYi7DRx2m8ALkIdRCJwI6ArJx2EI8kaDWeTQKeAFk9fjl/1AvwktjQ1P7NjyMGQyfd4vjipX6M/i52D7Cq80kqlcxEcGXRr/FEcgs0u5uGgB4VWuMFfpdn2Re6Hi3PqzmxWKsz6+ae2Pn9hXXw/fqM859UiGC0oKYYILJBqJrsn1Z1E5qOs9rQCiUQRREjm8yJcbHF5cUJufX1vAHlefw0XgUoboS3ETfQlTxBC4SOtuE8VPRJTBSCQSjZCpk7Gqzu+masaZ2y7Zjehho4F3g82BNDkAHpORG4+OCS+f6JTPmtRn/PH1kch6d04sp7AQb25aQ/pqUyXeQ8vrebG8OYQdXOQ+585u0sdW9rqalzRURiJ+9F4MweRFrKUjl1GUYhH1A27WOHw5cTFSFPMo9EeUIGnQTZHIaJ7AHLaOKsOODaNF9jkBjYG2QEsQ2xjMUAx2bBEbeTBWMHwskBjngq56S/yfgkBnWBa4K9sqKtq2t1UI8S9He5XuBRbawAdatrQEAi30Aks2+LM8WeCbalVZkWNylvJ+dqJnzVb+OHlSoKW8nPCP7Rd+CcZ2DdWAGqJ2CBFOphgywFFCFBNtfAbGtNPBCwxvygHeYMZMY9ZboBqwq/pVrsbgN5tkv152ODlbMfiqwGMBgxa4Exz3QhovRIUp6acqZmQzRq0ypDXS2TPLT02YIkQETnOE445oOGxOmXAqUJNNG7XgupMjPq2ua9asrj5yY/yuKteO1Kx0YNJTufrirLe1mZnat7OL6rnUdCWenpW6I8mAnbsY8KWs1PuSovCW9A/Z25PQ24a7cNOqgmTkLmBMgh4THgc4b9k2IVv1/g/F5nGljwPLfOgHAzJzh45V/4+WenTzmMtR5Z7us2Tys909UHqrPY7KbckoxRvRHhmVc3cJGE97uml0R1S0jdULVl7EvZtDFVBF35N9cEdjpgmAiOlFZ+Dtoh93+D3zzHr8RRNZQhnCNMNbcegOvpEwZoL+06cJQ07h+th3fZ/7PVbVC6ngTAV/KoLFuO6+2KFcU651gEb5ugPSIb1D+Xp8V4+k3sEIGnw5mYe4If4k1lFYr6SCzmM2EQ8iWtmwjnBI9kTwe1TlfAmXh7H02by9fW2gsjKwtv0aaURKil4OdV7rDL1MXIFNrhdxohcZXYTnq47WisrKitaObbf5+yvkLi5J6lCNZZ+B6GC38VNBZBDidSS/+mSvh6s+srgC8pyKMvDtt+de3c9fU76ZPfuM8ud4Kv0fyP/LqfepMT/3oZxSqpZaTa1DaQYLY8TFsHYbWYsPoRhRWfL5eSSQbhUGgGC3YLbVMk6PitTFNGpAsNrC6D1VNBKgBHMejaiuRWEWGgsSDBTJjqWIl8kJLlsaLJ2tXDr6xGfT85bM2Q06a46x2HTgvdnV8z5YDy/27J4zt6x2VtkzjoYpkq36kaBr4eQSg7tyiVweWubXZugtadl58ydapfbORfKsDTuZ0OBgx4cfdjCf5tbWNITnL120fdOi1RV1C3uKGzNdwYLcMvZ3BxoPyTOCD1XvXTp7U10gWCVmTV9b3r2z0SkGWovb2hp9I89O8a2smlyaO8muMU+dRmtzp60IzAoFpjLr1n388boLyf0dRvxhsHZ0qbWqDkwqvvpkj4l0fY6EIXRi5sQSrAvsVYwXRy4qJ2EVtD1AN7a0HWth9ymvL1xc3WTUKK/TAHA/bXDVtVWfOMfuGxGZv4Ln/jVr9jc3j1yMv0tndmyt9Vq88Y9gH1wtLX3KWjot5++jWHgAoZZkQ14wGQ20Fli71UmKJAy4xKMSTGbVdybW7FDDAut9XpD5AzWrYO7zQ8qffqF8+Ynd/clrHcdyxGy3a/3+mfNnzC/cBsveTjnTvXf1o6vzOlZw7WtqtdmPK/Errz/6NNtD72zmNOZfbmYdTGHfoofqI79Oc+R2n1lrnL6pOm0Up7kwxhTW12Amm7WYkXR2qYrF2AmgmbAsxZjwy1xpg/m1Je2vrp8v/nz2xpmlBg4E9hrMU341wVpTOh/OfmGvAnra8q6uctr60ZQHV3Q+WMQJykMj8ZsWn2QBOmmHMB+m5pDIpTFonYigiaKAhGEiAHF7EliVnQkjoLVIMPtJpBKHYd3A8GYH9jJzrWwmHx5Qjp7vDAX0suGRym1vtm/9W1/HyR8vczfMs6Sk8DSv855/5dlX9oQq52hT8syyp2rx5Id17IAyAM3wIjQPMOHzytEB64q6D5zT91yNbnx3V/nqnd017S9Y0605k3izoXLpsxde2n38yoOV9s1LcjwzNjbdX6asnBVaBj/6/DwKwPkpcqbDG7BnsXoSqWnUAmottYF6jMSdVyYZh3zVXCjwTiwwHH6sGuRiEHQGzuRX6whZkp123oy1BWE2mEfJ/tvIRtM4ZM5bDXiMsPMaAKOTyc5uL57rqyyc5y5JE5pm1i2S2iUX0CcaQ6lC6Zog7JqSqZmYlosl2K6pwNA84zRnQW6SaALYZQGW5lhCtU/W34N6o+bKfZ8cf3/Cl/+iTX3wBzpOY4mRkeNf3rptycGSshQWgGbYt5jFc2e0+DglIrwl6DVWQ7BuwaJ3Xk1J4VL5urnLl/Wf+gHU/hZoZdKNym6lG+I34FaNeZKcSpJIo2IeCVvpdsDGfKvzJnAwmeD37Ow65ZWwSowpgwX5T69s/rB55dP5BcpgDKFV8p7q2sn/1uc93bVzT/w6UrCqDTWvfCq/oCD/qZXNoUj8BL5Kp6GU017frfNXkAtiiyf/SOCEeLqnd8R/Ql9GlCRfctS6k5chvIBuQ1zCCjoCHL2DHNHIXxMJ3kQeO8lbsUXONeSfA5EjcG6/E+KdhN4bP04vBhdi883+BFBzQbxFbvZzQeY9LNBZc0FNfn5NwfDn6rCTnTw6R8o+gfpf5hCom33cRuiTlss3KHmZjD+BPN+5gXuA2ziS/Q73mLxUkpbKN/eqwz5uK0X9F3h2d1V4nGNgZGBgAOJd776+iue3+crAzc4AAje5Bfcg0xz9YHEOBiYQBQA8FQlFAHicY2BkYGBnAAGOPgaG//85+hkYGVCBMgBGGwNYAAAAeJxjYGBgYB8EmKOPgQEAQ04BfgAAAAAAAA4AaAB+AMwA4AECAUIBbAGYAcICGAJYArQC4AMwA7AD3gQwBJYE3AUkBWYFigYgBmYGtAbqB1gIEghYCG4IhAi2COh4nGNgZGBgUGYoZWBnAAEmIOYCQgaG/2A+AwAYCQG2AHicXZBNaoNAGIZfE5PQCKFQ2lUps2oXBfOzzAESyDKBQJdGR2NQR3QSSE/QE/QEPUUPUHqsvsrXjTMw83zPvPMNCuAWP3DQDAejdm1GjzwS7pMmwi75XngAD4/CQ/oX4TFe4Qt7uMMbOzjuDc0EmXCP/C7cJ38Iu+RP4QEe8CU8pP8WHmOPX2EPz87TPo202ey2OjlnQSXV/6arOjWFmvszMWtd6CqwOlKHq6ovycLaWMWVydXKFFZnmVFlZU46tP7R2nI5ncbi/dDkfDtFBA2DDXbYkhKc+V0Bqs5Zt9JM1HQGBRTm/EezTmZNKtpcAMs9Yu6AK9caF76zoLWIWcfMGOSkVduvSWechqZsz040Ib2PY3urxBJTzriT95lipz+TN1fmAAAAeJxtkMl2wjAMRfOAhABlKm2h80C3+ajgCKKDY6cegP59TYBzukAL+z1Zsq8ctaJTTKPrsUQLbXQQI0EXKXroY4AbDDHCGBNMcYsZ7nCPB8yxwCOe8IwXvOIN7/jAJ76wxHfUqWX+OzgumWAjJMV17i0Ndlr6irLKO+qftdT7i6y4uFSUvCknay+lFYZIZaQcmfH/xIFdYn98bqhra1aKTM/6lWMnyaYirx1rFUQZFBkb2zJUtoXeJCeg0WnLtHeSFc3OtrnozNwqi0TkSpBMDB1nSde5oJXW23hTS2/T0LilglXX7dmFVxLnq5U0vYATHFk3zX3BOisoQHNDFDeZnqKDy9hRNawN7Vh727hFzcJ5c8TILrKZfH7tIPxAFP0BpLeJPA==) format("woff"); + font-weight: normal; + font-style: normal; +} +.vjs-icon-play, .video-js .vjs-play-control .vjs-icon-placeholder, .video-js .vjs-big-play-button .vjs-icon-placeholder:before { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-play:before, .video-js .vjs-play-control .vjs-icon-placeholder:before, .video-js .vjs-big-play-button-no .vjs-icon-placeholder:before { + content: "\f151"; + background-image: url('svg/play.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-play-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-play-circle:before { + content: "\f102"; +} + +.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before { + content: "\f154"; + background-image: url('svg/pause.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder { + font-family:'Courier New', Courier, monospace; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0 .vjs-icon-placeholder:before { + content: " "; + background-image: url('svg/mute.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1 .vjs-icon-placeholder:before { + content: "\f521"; + background-image: url('svg/volume-low.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2 .vjs-icon-placeholder:before { + content: "\f521"; + background-image: url('svg/volume-mid.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-volume-high, .video-js .vjs-mute-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-volume-high:before, .video-js .vjs-mute-control .vjs-icon-placeholder:before { + content: "\f521"; + background-image: url('svg/volume.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control .vjs-icon-placeholder:before { + content: "\f1d8"; + background-image: url('svg/fullscreen.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; + background-size: 25px; +} + +.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before { + content: "\ffd9"; + background-image: url('svg/unfs.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-square { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-square:before { + content: "\f10a"; +} + +.vjs-icon-spinner { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-spinner:before { + content: "\f10b"; +} + +.vjs-icon-subtitles, .video-js .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-subtitles-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-subtitles:before, .video-js .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-GB) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-IE) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-AU) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js.video-js:lang(en-NZ) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-subtitles-button .vjs-icon-placeholder:before { + content: "\f10c"; +} + +.vjs-icon-captions, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder, +.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder, .video-js .vjs-captions-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-captions:before, .video-js:lang(en) .vjs-subs-caps-button .vjs-icon-placeholder:before, +.video-js:lang(fr-CA) .vjs-subs-caps-button .vjs-icon-placeholder:before, .video-js .vjs-captions-button .vjs-icon-placeholder:before { + content: "\f10d"; +} + +.vjs-icon-chapters, .video-js .vjs-chapters-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-chapters:before, .video-js .vjs-chapters-button .vjs-icon-placeholder:before { + content: "\f10e"; +} + +.vjs-icon-share { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-share:before { + content: "\f10f"; +} + +.vjs-icon-cog { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-cog:before { + content: "\f110"; +} + +.vjs-icon-circle, .vjs-seek-to-live-control .vjs-icon-placeholder, .video-js .vjs-volume-level, .video-js .vjs-play-progress { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle:before, .vjs-seek-to-live-control .vjs-icon-placeholder:before, .video-js .vjs-volume-level:before, .video-js .vjs-play-progress:before { + content: "\ff1"; + background-image: url('svg/dot.svg'); +} + +.vjs-icon-circle-outline { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle-outline:before { + content: "\f112"; +} + +.vjs-icon-circle-inner-circle { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-circle-inner-circle:before { + content: "\f113"; +} + +.vjs-icon-hd { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-hd:before { + content: "\f114"; +} + +.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button .vjs-icon-placeholder:before { + content: "\f115"; +} + +.vjs-icon-replay, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-replay:before, .video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before { + content: "\f116"; +} + +.vjs-icon-facebook { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-facebook:before { + content: "\f117"; +} + +.vjs-icon-gplus { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-gplus:before { + content: "\f118"; +} + +.vjs-icon-linkedin { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-linkedin:before { + content: "\f119"; +} + +.vjs-icon-twitter { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-twitter:before { + content: "\f11a"; +} + +.vjs-icon-tumblr { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-tumblr:before { + content: "\f11b"; +} + +.vjs-icon-pinterest { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-pinterest:before { + content: "\f11c"; +} + +.vjs-icon-audio-description, .video-js .vjs-descriptions-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-audio-description:before, .video-js .vjs-descriptions-button .vjs-icon-placeholder:before { + content: "\f11d"; +} + +.vjs-icon-audio, .video-js .vjs-audio-button .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-audio:before, .video-js .vjs-audio-button .vjs-icon-placeholder:before { + content: "\f11e"; +} + +.vjs-icon-next-item { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-next-item:before { + content: "\f11f"; +} + +.vjs-icon-previous-item { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-previous-item:before { + content: "\f120"; +} + +.vjs-icon-picture-in-picture-enter, .video-js .vjs-picture-in-picture-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-picture-in-picture-enter:before, .video-js .vjs-picture-in-picture-control .vjs-icon-placeholder:before { + content: "\f521"; + background-image: url('svg/pipin.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.vjs-icon-picture-in-picture-exit, .video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder { + font-family: VideoJS; + font-weight: normal; + font-style: normal; +} +.vjs-icon-picture-in-picture-exit:before, .video-js.vjs-picture-in-picture .vjs-picture-in-picture-control .vjs-icon-placeholder:before { + content: "\f521"; + background-image: url('svg/pipout.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + background-size: 25px; +} + +.video-js { + display: block; + vertical-align: top; + box-sizing: border-box; + color: skyblue; + background-color: #000; + position: relative; + padding: 0; + font-size: 10px; + line-height: 1; + font-weight: normal; + font-style: normal; + font-family: Arial, Helvetica, sans-serif; + word-break: initial; +} +.video-js:-moz-full-screen { + position: absolute; +} +.video-js:-webkit-full-screen { + width: 100% !important; + height: 100% !important; +} + +.video-js[tabindex="-1"] { + outline: none; +} + +.video-js *, +.video-js *:before, +.video-js *:after { + box-sizing: inherit; +} + +.video-js ul { + font-family: inherit; + font-size: inherit; + line-height: inherit; + list-style-position: outside; + margin-left: 0; + margin-right: 0; + margin-top: 0; + margin-bottom: 0; +} + +.video-js.vjs-fluid, +.video-js.vjs-16-9, +.video-js.vjs-4-3 { + width: 100%; + max-width: 100%; + height: 0; +} + +.video-js.vjs-16-9 { + padding-top: 56.25%; +} + +.video-js.vjs-4-3 { + padding-top: 75%; +} + +.video-js.vjs-fill { + width: 100%; + height: 100%; +} + +.video-js .vjs-tech { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +body.vjs-full-window { + padding: 0; + margin: 0; + height: 100%; +} + +.vjs-full-window .video-js.vjs-fullscreen { + position: fixed; + overflow: hidden; + z-index: 1000; + left: 0; + top: 0; + bottom: 0; + right: 0; +} + +.video-js.vjs-fullscreen:not(.vjs-ios-native-fs) { + width: 100% !important; + height: 100% !important; + padding-top: 0 !important; +} + +.video-js.vjs-fullscreen.vjs-user-inactive { + cursor: none; +} + +.vjs-hidden { + display: none !important; +} + +.vjs-disabled { + opacity: 0.5; + cursor: default; +} + +.video-js .vjs-offscreen { + height: 1px; + left: -9999px; + position: absolute; + top: 0; + width: 1px; +} + +.vjs-lock-showing { + display: block !important; + opacity: 1; + visibility: visible; +} + +.vjs-no-js { + padding: 20px; + color: #fff; + background-color: #000; + font-size: 18px; + font-family: Arial, Helvetica, sans-serif; + text-align: center; + width: 300px; + height: 150px; + margin: 0px auto; +} + +.vjs-no-js a, +.vjs-no-js a:visited { + color: #66A8CC; +} + +.video-js .vjs-big-play-button { + font-size: 5em; + line-height: 1.5em; + height: 1.63332em; + width: 3em; + display: block; + position: absolute; + top: 10px; + left: 10px; + padding: 0; + cursor: pointer; + opacity: 1; + border: none; + background-color: transparent; + border-radius: 90px; + transition: all 0.4s; + background-image: url('svg/play.svg'); + background-repeat: no-repeat; + background-size: contain ; + background-position: center; + top: 50%; + left: 50%; + margin-top: -0.81666em; + margin-left: -1.5em; +} +.vjs-big-play-centered .vjs-big-play-button { + top: 50%; + left: 50%; + margin-top: -0.81666em; + margin-left: -1.5em; +} + +.video-js:hover .vjs-big-play-button, +.video-js .vjs-big-play-button:focus { + border: rgb(238, 197, 226); + background-color:none; + background-color: none; + transition: all 0s; +} + +.vjs-controls-disabled .vjs-big-play-button, +.vjs-has-started .vjs-big-play-button, +.vjs-using-native-controls .vjs-big-play-button, +.vjs-error .vjs-big-play-button { + display: none; +} + +.vjs-has-started.vjs-paused.vjs-show-big-play-button-on-pause .vjs-big-play-button { + display: block; +} + +.video-js button { + background: none; + border: none; + color: inherit; + display: inline-block; + font-size: inherit; + line-height: inherit; + text-transform: none; + text-decoration: none; + transition: none; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; +} + +.vjs-control .vjs-button { + width: 100%; + height: 100%; +} + +.video-js .vjs-control .vjs-close-button { + cursor: pointer; + height: 3em; + position: absolute; + right: 0; + top: 0.5em; + z-index: 2; +} +.video-js .vjs-modal-dialog { + background: rgba(0, 0, 0, 0.8); + background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); + overflow: auto; +} + +.video-js .vjs-modal-dialog > * { + box-sizing: border-box; +} + +.vjs-modal-dialog .vjs-modal-dialog-content { + font-size: 1.2em; + line-height: 1.5; + padding: 20px 24px; + z-index: 1; +} + +.vjs-menu-button { + cursor: pointer; +} + +.vjs-menu-button.vjs-disabled { + cursor: default; +} + +.vjs-workinghover .vjs-menu-button.vjs-disabled:hover .vjs-menu { + display: none; +} + +.vjs-menu .vjs-menu-content { + display: block; + padding: 0; + margin: 0; + font-family: Arial, Helvetica, sans-serif; + overflow: auto; +} + +.vjs-menu .vjs-menu-content > * { + box-sizing: border-box; +} + +.vjs-scrubbing .vjs-control.vjs-menu-button:hover .vjs-menu { + display: none; +} + +.vjs-menu li { + list-style: none; + margin: 0; + padding: 0.2em 0; + line-height: 1.4em; + font-size: 1.2em; + text-align: center; + text-transform: lowercase; +} + +.vjs-menu li.vjs-menu-item:focus, +.vjs-menu li.vjs-menu-item:hover, +.js-focus-visible .vjs-menu li.vjs-menu-item:hover { + background-color: #73859f; + background-color: rgba(115, 133, 159, 0.5); +} + +.vjs-menu li.vjs-selected, +.vjs-menu li.vjs-selected:focus, +.vjs-menu li.vjs-selected:hover, +.js-focus-visible .vjs-menu li.vjs-selected:hover { + background-color: #fff; + color: #2B333F; +} + +.vjs-menu li.vjs-menu-title { + text-align: center; + text-transform: uppercase; + font-size: 1em; + line-height: 2em; + padding: 0; + margin: 0 0 0.3em 0; + font-weight: bold; + cursor: default; +} + +.vjs-menu-button-popup .vjs-menu { + display: none; + position: absolute; + bottom: 0; + width: 10em; + left: -3em; + height: 0em; + margin-bottom: 1.5em; + border-top-color: rgba(43, 51, 63, 0.7); +} + +.vjs-menu-button-popup .vjs-menu .vjs-menu-content { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); + position: absolute; + width: 100%; + bottom: 1.5em; + max-height: 15em; +} + +.vjs-layout-tiny .vjs-menu-button-popup .vjs-menu .vjs-menu-content, +.vjs-layout-x-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 5em; +} + +.vjs-layout-small .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 10em; +} + +.vjs-layout-medium .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 14em; +} + +.vjs-layout-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, +.vjs-layout-x-large .vjs-menu-button-popup .vjs-menu .vjs-menu-content, +.vjs-layout-huge .vjs-menu-button-popup .vjs-menu .vjs-menu-content { + max-height: 25em; +} + +.vjs-workinghover .vjs-menu-button-popup.vjs-hover .vjs-menu, +.vjs-menu-button-popup .vjs-menu.vjs-lock-showing { + display: block; +} + +.video-js .vjs-menu-button-inline { + transition: all 0.4s; + overflow: hidden; +} + +.video-js .vjs-menu-button-inline:before { + width: 2.222222222em; +} + +.video-js .vjs-menu-button-inline:hover, +.video-js .vjs-menu-button-inline:focus, +.video-js .vjs-menu-button-inline.vjs-slider-active, +.video-js.vjs-no-flex .vjs-menu-button-inline { + width: 12em; +} + +.vjs-menu-button-inline .vjs-menu { + opacity: 0; + height: 100%; + width: auto; + position: absolute; + left: 4em; + top: 0; + padding: 0; + margin: 0; + transition: all 0.4s; +} + +.vjs-menu-button-inline:hover .vjs-menu, +.vjs-menu-button-inline:focus .vjs-menu, +.vjs-menu-button-inline.vjs-slider-active .vjs-menu { + display: block; + opacity: 1; +} + +.vjs-no-flex .vjs-menu-button-inline .vjs-menu { + display: block; + opacity: 1; + position: relative; + width: auto; +} + +.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu, +.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu, +.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu { + width: auto; +} + +.vjs-menu-button-inline .vjs-menu-content { + width: auto; + height: 100%; + margin: 0; + overflow: hidden; +} + +.video-js .vjs-control-bar { + display: none; + width: 100%; + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 3em; + background-color: transparent; + font-size: larger; +} + +.vjs-has-started .vjs-control-bar { + display: flex; + visibility: visible; + opacity: 1; + transition: visibility 0.1s, opacity 0.1s; +} + +.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { + visibility: visible; + opacity: 0; + transition: visibility 1s, opacity 1s; +} + +.vjs-controls-disabled .vjs-control-bar, +.vjs-using-native-controls .vjs-control-bar, +.vjs-error .vjs-control-bar { + display: none !important; +} + +.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { + opacity: 1; + visibility: visible; +} + +.vjs-has-started.vjs-no-flex .vjs-control-bar { + display: table; +} + +.video-js .vjs-control { + position: relative; + text-align: center; + margin: 0; + padding: 0; + height: 100%; + width: 4em; + flex: none; +} + +.vjs-button > .vjs-icon-placeholder:before { + font-size: 1.8em; + line-height: 1.67; +} + +.video-js .vjs-control:focus:before, +.video-js .vjs-control:hover:before, +.video-js .vjs-control:focus { + text-shadow: none; +} + +.video-js .vjs-control-text { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; + cursor: col-resize; +} + +.vjs-no-flex .vjs-control { + display: table-cell; + vertical-align: middle; +} + +.video-js .vjs-custom-control-spacer { + display: none; +} + +.video-js .vjs-progress-control { + cursor: col-resize; + flex: auto; + display: flex; + align-items: center; + min-width: 4em; + touch-action: none; +} + +.video-js .vjs-progress-control.disabled { + cursor: default; +} + +.vjs-live .vjs-progress-control { + display: none; +} + +.vjs-liveui .vjs-progress-control { + display: flex; + align-items: center; +} + +.vjs-no-flex .vjs-progress-control { + width: auto; +} + +.video-js .vjs-progress-holder { + flex: auto; + transition: all 0.2s; + height: 0.3em; +} + +.video-js .vjs-progress-control .vjs-progress-holder { + margin: 0 10px; +} + +.video-js .vjs-progress-control:hover .vjs-progress-holder { + font-size: 1.6666666667em; +} + +.video-js .vjs-progress-control:hover .vjs-progress-holder.disabled { + font-size: 1em; +} + +.video-js .vjs-progress-holder .vjs-play-progress, +.video-js .vjs-progress-holder .vjs-load-progress, +.video-js .vjs-progress-holder .vjs-load-progress div { + position: absolute; + display: block; + height: 100%; + margin: 0; + padding: 0; + width: 0; +} + +.video-js .vjs-play-progress { + background-color: #fff; +} +.video-js .vjs-play-progress:before { + font-size: 0.9em; + position: absolute; + right: -0.5em; + top: -0.3333333333em; + z-index: 1; +} + +.video-js .vjs-load-progress { + background: rgba(73, 214, 167, 0.76); + cursor: col-resize; +} + +.video-js .vjs-load-progress div { + background: rgba(111, 240, 218, 0.836); +} + +.video-js .vjs-time-tooltip { + background-color: #fff; + background-color: rgba(255, 255, 255, 0.8); + border-radius: 0.3em; + color: #000; + float: right; + font-family: Arial, Helvetica, sans-serif; + font-size: 1em; + padding: 6px 8px 8px 8px; + pointer-events: none; + position: absolute; + top: -3.4em; + visibility: hidden; + z-index: 1; +} + +.video-js .vjs-progress-holder:focus .vjs-time-tooltip { + display: none; +} + +.video-js .vjs-progress-control:hover .vjs-time-tooltip, +.video-js .vjs-progress-control:hover .vjs-progress-holder:focus .vjs-time-tooltip { + display: block; + font-size: 0.6em; + visibility: visible; +} + +.video-js .vjs-progress-control.disabled:hover .vjs-time-tooltip { + font-size: 1em; +} + +.video-js .vjs-progress-control .vjs-mouse-display { + display: none; + position: absolute; + width: 1px; + height: 100%; + background-color: rgb(61, 248, 233); + z-index: 1; +} + +.vjs-no-flex .vjs-progress-control .vjs-mouse-display { + z-index: 0; +} + +.video-js .vjs-progress-control:hover .vjs-mouse-display { + display: block; +} + +.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display { + visibility: hidden; + opacity: 0; + transition: visibility 1s, opacity 1s; +} + +.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display { + display: none; +} + +.vjs-mouse-display .vjs-time-tooltip { + color: #fff; + background-color: #000; + background-color: rgba(0, 0, 0, 0.8); +} + +.video-js .vjs-slider { + position: relative; + cursor: col-resize; + padding: 0; + margin: 0 0.45em 0 0.45em; + /* iOS Safari */ + -webkit-touch-callout: none; + /* Safari */ + -webkit-user-select: none; + /* Konqueror HTML */ + /* Firefox */ + -moz-user-select: none; + /* Internet Explorer/Edge */ + -ms-user-select: none; + /* Non-prefixed version, currently supported by Chrome and Opera */ + user-select: none; + background-color: #f78470; +} + +.video-js .vjs-slider.disabled { + cursor: default; +} + +.video-js .vjs-slider:focus { + text-shadow: 0em 0em 1em white; + box-shadow: 0 0 1em #fff; +} + +.video-js .vjs-mute-control { + cursor: pointer; + flex: none; +} +.video-js .vjs-volume-control { + cursor: pointer; + margin-right: 1em; + display: flex; +} + +.video-js .vjs-volume-control.vjs-volume-horizontal { + width: 5em; +} + +.video-js .vjs-volume-panel .vjs-volume-control { + visibility: visible; + opacity: 0; + width: 1px; + height: 1px; + margin-left: -1px; +} + +.video-js .vjs-volume-panel { + transition: width 1s; +} +.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control, .video-js .vjs-volume-panel:active .vjs-volume-control, .video-js .vjs-volume-panel:focus .vjs-volume-control, .video-js .vjs-volume-panel .vjs-volume-control:active, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active { + visibility: visible; + opacity: 1; + position: relative; + transition: visibility 0.1s, opacity 0.1s, height 0.1s, width 0.1s, left 0s, top 0s; +} +.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-horizontal, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-horizontal, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-horizontal { + width: 8em; + height: 3em; + margin-right: 0; +} +.video-js .vjs-volume-panel.vjs-hover .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:active .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel:focus .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control:active.vjs-volume-vertical, .video-js .vjs-volume-panel.vjs-hover .vjs-mute-control ~ .vjs-volume-control.vjs-volume-vertical, .video-js .vjs-volume-panel .vjs-volume-control.vjs-slider-active.vjs-volume-vertical { + left: -3.5em; + transition: left 0s; +} +.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-hover, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal:active, .video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active { + width: 10em; + transition: width 0.1s; +} +.video-js .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-mute-toggle-only { + width: 4em; +} + +.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { + height: 8em; + width: 3em; + left: -3000em; + transition: visibility 1s, opacity 1s, height 1s 1s, width 1s 1s, left 1s 1s, top 1s 1s; +} + +.video-js .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { + transition: visibility 1s, opacity 1s, height 1s 1s, width 1s, left 1s 1s, top 1s 1s; +} + +.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-horizontal { + width: 5em; + height: 3em; + visibility: visible; + opacity: 1; + position: relative; + transition: none; +} + +.video-js.vjs-no-flex .vjs-volume-control.vjs-volume-vertical, +.video-js.vjs-no-flex .vjs-volume-panel .vjs-volume-control.vjs-volume-vertical { + position: absolute; + bottom: 3em; + left: 0.5em; +} + +.video-js .vjs-volume-panel { + display: flex; +} + +.video-js .vjs-volume-bar { + margin: 1.35em 0.45em; +} + +.vjs-volume-bar.vjs-slider-horizontal { + width: 5em; + height: 0.3em; +} + +.vjs-volume-bar.vjs-slider-vertical { + width: 0.3em; + height: 5em; + margin: 1.35em auto; +} + +.video-js .vjs-volume-level { + position: absolute; + bottom: 0; + left: 0; + background-color: rgb(98, 215, 245); +} +.video-js .vjs-volume-level:before { + position: absolute; + font-size: 0.9em; +} + +.vjs-slider-vertical .vjs-volume-level { + width: 0.3em; +} +.vjs-slider-vertical .vjs-volume-level:before { + top: -0.5em; + left: -0.3em; +} + +.vjs-slider-horizontal .vjs-volume-level { + height: 0.3em; +} +.vjs-slider-horizontal .vjs-volume-level:before { + top: -0.3em; + right: -0.5em; +} + +.video-js .vjs-volume-panel.vjs-volume-panel-vertical { + width: 4em; +} + +.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { + height: 100%; +} + +.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { + width: 100%; +} + +.video-js .vjs-volume-vertical { + width: 3em; + height: 8em; + bottom: 8em; + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.7); +} + +.video-js .vjs-volume-horizontal .vjs-menu { + left: -2em; +} + +.vjs-poster { + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; + background-color: #4cd0e7; + cursor: pointer; + margin: 0; + padding: 0; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + height: 100%; +} + +.vjs-has-started .vjs-poster { + display: none; +} + +.vjs-audio.vjs-has-started .vjs-poster { + display: block; +} + +.vjs-using-native-controls .vjs-poster { + display: none; +} + +.video-js .vjs-live-control { + display: flex; + align-items: flex-start; + flex: auto; + font-size: 1em; + line-height: 3em; +} + +.vjs-no-flex .vjs-live-control { + display: table-cell; + width: auto; + text-align: left; +} + +.video-js:not(.vjs-live) .vjs-live-control, +.video-js.vjs-liveui .vjs-live-control { + display: none; +} + +.video-js .vjs-seek-to-live-control { + cursor: pointer; + flex: none; + display: inline-flex; + height: 100%; + padding-left: 0.5em; + padding-right: 0.5em; + font-size: 1em; + line-height: 3em; + width: auto; + min-width: 4em; +} + +.vjs-no-flex .vjs-seek-to-live-control { + display: table-cell; + width: auto; + text-align: left; +} + +.video-js.vjs-live:not(.vjs-liveui) .vjs-seek-to-live-control, +.video-js:not(.vjs-live) .vjs-seek-to-live-control { + display: none; +} + +.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge { + cursor: auto; +} + +.vjs-seek-to-live-control .vjs-icon-placeholder { + margin-right: 0.5em; + color: #888; +} + +.vjs-seek-to-live-control.vjs-control.vjs-at-live-edge .vjs-icon-placeholder { + color: red; +} + +.video-js .vjs-time-control { + flex: none; + font-size: 1em; + line-height: 3em; + min-width: 2em; + width: auto; + padding-left: 1em; + padding-right: 1em; +} + +.vjs-live .vjs-time-control { + display: none; +} + +.video-js .vjs-current-time, +.vjs-no-flex .vjs-current-time { + display: none; +} + +.video-js .vjs-duration, +.vjs-no-flex .vjs-duration { + display: none; +} + +.vjs-time-divider { + display: none; + line-height: 3em; +} + +.vjs-live .vjs-time-divider { + display: none; +} + +.video-js .vjs-play-control { + cursor: pointer; +} + +.video-js .vjs-play-control .vjs-icon-placeholder { + flex: none; +} + +.vjs-text-track-display { + position: absolute; + bottom: 3em; + left: 0; + right: 0; + top: 0; + pointer-events: none; +} + +.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display { + bottom: 1em; +} + +.video-js .vjs-text-track { + font-size: 1.4em; + text-align: center; + margin-bottom: 0.1em; +} + +.vjs-subtitles { + color: #fff; +} + +.vjs-captions { + color: #fc6; +} + +.vjs-tt-cue { + display: block; +} + +video::-webkit-media-text-track-display { + transform: translateY(-3em); +} + +.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display { + transform: translateY(-1.5em); +} + +.video-js .vjs-picture-in-picture-control { + cursor: pointer; + flex: none; +} +.video-js .vjs-fullscreen-control { + cursor: pointer; + flex: none; +} +.vjs-playback-rate > .vjs-menu-button, +.vjs-playback-rate .vjs-playback-rate-value { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} + +.vjs-playback-rate .vjs-playback-rate-value { + pointer-events: none; + font-size: 1.5em; + line-height: 2; + text-align: center; +} + +.vjs-playback-rate .vjs-menu { + width: 4em; + left: 0em; +} + +.vjs-error .vjs-error-display .vjs-modal-dialog-content { + font-size: 1.4em; + text-align: center; +} + +.vjs-error .vjs-error-display:before { + color: #fff; + content: "X"; + font-family: Arial, Helvetica, sans-serif; + font-size: 4em; + left: 0; + line-height: 1; + margin-top: -0.5em; + position: absolute; + text-shadow: 0.05em 0.05em 0.1em #000; + text-align: center; + top: 50%; + vertical-align: middle; + width: 100%; +} + +.vjs-loading-spinner { + display: none; + position: absolute; + top: 50%; + left: 50%; + margin: -25px 0 0 -25px; + opacity: 0.85; + text-align: left; + border: 6px solid rgba(43, 51, 63, 0.7); + box-sizing: border-box; + background-clip: padding-box; + width: 50px; + height: 50px; + border-radius: 25px; + visibility: hidden; +} + +.vjs-seeking .vjs-loading-spinner, +.vjs-waiting .vjs-loading-spinner { + display: block; + -webkit-animation: vjs-spinner-show 0s linear 0.3s forwards; + animation: vjs-spinner-show 0s linear 0.3s forwards; +} + +.vjs-loading-spinner:before, +.vjs-loading-spinner:after { + content: ""; + position: absolute; + margin: -6px; + box-sizing: inherit; + width: inherit; + height: inherit; + border-radius: inherit; + opacity: 1; + border: inherit; + border-color: transparent; + border-top-color: white; +} + +.vjs-seeking .vjs-loading-spinner:before, +.vjs-seeking .vjs-loading-spinner:after, +.vjs-waiting .vjs-loading-spinner:before, +.vjs-waiting .vjs-loading-spinner:after { + -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; + animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; +} + +.vjs-seeking .vjs-loading-spinner:before, +.vjs-waiting .vjs-loading-spinner:before { + border-top-color: white; +} + +.vjs-seeking .vjs-loading-spinner:after, +.vjs-waiting .vjs-loading-spinner:after { + border-top-color: white; + -webkit-animation-delay: 0.44s; + animation-delay: 0.44s; +} + +@keyframes vjs-spinner-show { + to { + visibility: visible; + } +} +@-webkit-keyframes vjs-spinner-show { + to { + visibility: visible; + } +} +@keyframes vjs-spinner-spin { + 100% { + transform: rotate(360deg); + } +} +@-webkit-keyframes vjs-spinner-spin { + 100% { + -webkit-transform: rotate(360deg); + } +} +@keyframes vjs-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} +@-webkit-keyframes vjs-spinner-fade { + 0% { + border-top-color: #73859f; + } + 20% { + border-top-color: #73859f; + } + 35% { + border-top-color: white; + } + 60% { + border-top-color: #73859f; + } + 100% { + border-top-color: #73859f; + } +} +.vjs-chapters-button .vjs-menu ul { + width: 24em; +} + +.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder { + vertical-align: middle; + display: inline-block; + margin-bottom: -0.1em; +} + +.video-js .vjs-subs-caps-button + .vjs-menu .vjs-captions-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before { + font-family: VideoJS; + content: ""; + font-size: 1.5em; + line-height: inherit; +} + +.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder { + vertical-align: middle; + display: inline-block; + margin-bottom: -0.1em; +} + +.video-js .vjs-audio-button + .vjs-menu .vjs-main-desc-menu-item .vjs-menu-item-text .vjs-icon-placeholder:before { + font-family: VideoJS; + content: " "; + font-size: 1.5em; + line-height: inherit; +} + +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-current-time, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-time-divider, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-duration, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-remaining-time, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-playback-rate, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-chapters-button, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-descriptions-button, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-captions-button, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-subtitles-button, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-audio-button, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-control, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-current-time, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-time-divider, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-duration, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-remaining-time, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-playback-rate, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-chapters-button, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-descriptions-button, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-captions-button, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-subtitles-button, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-audio-button, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-control, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-current-time, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-time-divider, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-duration, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-remaining-time, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-playback-rate, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-chapters-button, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-descriptions-button, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-captions-button, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-subtitles-button, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-audio-button, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-control { + display: none; +} +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, +.video-js:not(.vjs-fullscreen).vjs-layout-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:hover, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal:active, +.video-js:not(.vjs-fullscreen).vjs-layout-x-small .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:hover, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal:active, +.video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-volume-panel.vjs-volume-panel-horizontal.vjs-slider-active { + width: auto; + width: initial; +} +.video-js:not(.vjs-fullscreen).vjs-layout-x-small:not(.vjs-liveui) .vjs-subs-caps-button, .video-js:not(.vjs-fullscreen).vjs-layout-x-small:not(.vjs-live) .vjs-subs-caps-button, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-subs-caps-button { + display: none; +} +.video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui .vjs-custom-control-spacer, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-custom-control-spacer { + flex: auto; + display: block; +} +.video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui.vjs-no-flex .vjs-custom-control-spacer, .video-js:not(.vjs-fullscreen).vjs-layout-tiny.vjs-no-flex .vjs-custom-control-spacer { + width: auto; +} +.video-js:not(.vjs-fullscreen).vjs-layout-x-small.vjs-liveui .vjs-progress-control, .video-js:not(.vjs-fullscreen).vjs-layout-tiny .vjs-progress-control { + display: none; +} + +.vjs-modal-dialog.vjs-text-track-settings { + background-color: #2B333F; + background-color: rgba(43, 51, 63, 0.75); + color: #fff; + height: 70%; +} + +.vjs-text-track-settings .vjs-modal-dialog-content { + display: table; +} + +.vjs-text-track-settings .vjs-track-settings-colors, +.vjs-text-track-settings .vjs-track-settings-font, +.vjs-text-track-settings .vjs-track-settings-controls { + display: table-cell; +} + +.vjs-text-track-settings .vjs-track-settings-controls { + text-align: right; + vertical-align: bottom; +} + +@supports (display: grid) { + .vjs-text-track-settings .vjs-modal-dialog-content { + display: grid; + grid-template-columns: 1fr 1fr; + grid-template-rows: 1fr; + padding: 20px 24px 0px 24px; + } + + .vjs-track-settings-controls .vjs-default-button { + margin-bottom: 20px; + } + + .vjs-text-track-settings .vjs-track-settings-controls { + grid-column: 1/-1; + } + + .vjs-layout-small .vjs-text-track-settings .vjs-modal-dialog-content, +.vjs-layout-x-small .vjs-text-track-settings .vjs-modal-dialog-content, +.vjs-layout-tiny .vjs-text-track-settings .vjs-modal-dialog-content { + grid-template-columns: 1fr; + } +} +.vjs-track-setting > select { + margin-right: 1em; + margin-bottom: 0.5em; +} + +.vjs-text-track-settings fieldset { + margin: 5px; + padding: 3px; + border: none; +} + +.vjs-text-track-settings fieldset span { + display: inline-block; +} + +.vjs-text-track-settings fieldset span > select { + max-width: 7.3em; +} + +.vjs-text-track-settings legend { + color: #fff; + margin: 0 0 5px 0; +} + +.vjs-text-track-settings .vjs-label { + position: absolute; + clip: rect(1px 1px 1px 1px); + clip: rect(1px, 1px, 1px, 1px); + display: block; + margin: 0 0 5px 0; + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} + +.vjs-track-settings-controls button:focus, +.vjs-track-settings-controls button:active { + outline-style: solid; + outline-width: medium; + background-image: linear-gradient(0deg, #fff 88%, #73859f 100%); +} + +.vjs-track-settings-controls button:hover { + color: rgba(43, 51, 63, 0.75); +} + +.vjs-track-settings-controls button { + background-color: #fff; + background-image: linear-gradient(-180deg, #fff 88%, #73859f 100%); + color: #2B333F; + cursor: pointer; + border-radius: 2px; +} + +.vjs-track-settings-controls .vjs-default-button { + margin-right: 1em; +} + +@media print { + .video-js > *:not(.vjs-tech):not(.vjs-poster) { + visibility: hidden; + } +} +.vjs-resize-manager { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; + z-index: -1000; +} + +.js-focus-visible .video-js *:focus:not(.focus-visible) { + outline: none; + background: none; +} + +.video-js *:focus:not(:focus-visible), +.video-js .vjs-menu *:focus:not(:focus-visible) { + outline: none; + background: none; +} \ No newline at end of file diff --git a/sopplayer.js b/sopplayer.js new file mode 100644 index 0000000..126750e --- /dev/null +++ b/sopplayer.js @@ -0,0 +1,17304 @@ +/** + * @license + * Video.js 7.10.2 + * Copyright Brightcove, Inc. + * Available under Apache License Version 2.0 + * + * + * Includes vtt.js + * Available under Apache License Version 2.0 + * + */ +document.querySelector("video").addEventListener("contextmenu", (event) => { + event.preventDefault(); + }); + +! function (e, t) { + "object" == typeof exports && "undefined" != typeof module ? module.exports = t(require("global/window"), require("global/document")) : "function" == typeof define && define.amd ? define(["global/window", "global/document"], t) : (e = e || self).videojs = t(e.window, e.document) +}(this, function (T, d) { + "use strict"; + T = T && Object.prototype.hasOwnProperty.call(T, "default") ? T.default : T, d = d && Object.prototype.hasOwnProperty.call(d, "default") ? d.default : d; + var h = "7.10.2", + l = [], + e = function (o, u) { + return function (e, t, i) { + var n = u.levels[t], + r = new RegExp("^(" + n + ")$"); + if ("log" !== e && i.unshift(e.toUpperCase() + ":"), i.unshift(o + ":"), l) { + l.push([].concat(i)); + var a = l.length - 1e3; + l.splice(0, 0 < a ? a : 0) + } + if (T.console) { + var s = T.console[e]; + s || "debug" !== e || (s = T.console.info || T.console.log), s && n && r.test(e) && s[Array.isArray(i) ? "apply" : "call"](T.console, i) + } + } + }; + var p = function t(i) { + function n() { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + r("log", a, t) + } + var r, a = "info"; + return r = e(i, n), n.createLogger = function (e) { + return t(i + ": " + e) + }, n.levels = { + all: "debug|log|warn|error", + off: "", + debug: "debug|log|warn|error", + info: "log|warn|error", + warn: "warn|error", + error: "error", + DEFAULT: a + }, n.level = function (e) { + if ("string" == typeof e) { + if (!n.levels.hasOwnProperty(e)) throw new Error('"' + e + '" in not a valid log level'); + a = e + } + return a + }, (n.history = function () { + return l ? [].concat(l) : [] + }).filter = function (t) { + return (l || []).filter(function (e) { + return new RegExp(".*" + t + ".*").test(e[0]) + }) + }, n.history.clear = function () { + l && (l.length = 0) + }, n.history.disable = function () { + null !== l && (l.length = 0, l = null) + }, n.history.enable = function () { + null === l && (l = []) + }, n.error = function () { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + return r("error", a, t) + }, n.warn = function () { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + return r("warn", a, t) + }, n.debug = function () { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + return r("debug", a, t) + }, n + }("VIDEOJS"), + f = p.createLogger; + + function t(e) { + return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e + } + + function i(e, t) { + return e(t = { + exports: {} + }, t.exports), t.exports + } + var m = i(function (e) { + function t() { + return e.exports = t = Object.assign || function (e) { + for (var t = 1; t < arguments.length; t++) { + var i = arguments[t]; + for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]) + } + return e + }, t.apply(this, arguments) + } + e.exports = t + }), + n = Object.prototype.toString, + a = function (e) { + return s(e) ? Object.keys(e) : [] + }; + + function r(t, i) { + a(t).forEach(function (e) { + return i(t[e], e) + }) + } + + function g(i) { + for (var e = arguments.length, t = new Array(1 < e ? e - 1 : 0), n = 1; n < e; n++) t[n - 1] = arguments[n]; + return Object.assign ? m.apply(void 0, [i].concat(t)) : (t.forEach(function (e) { + e && r(e, function (e, t) { + i[t] = e + }) + }), i) + } + + function s(e) { + return !!e && "object" == typeof e + } + + function o(e) { + return s(e) && "[object Object]" === n.call(e) && e.constructor === Object + } + + function u(e, t) { + if (!e || !t) return ""; + if ("function" != typeof T.getComputedStyle) return ""; + var i = T.getComputedStyle(e); + return i ? i.getPropertyValue(t) || i[t] : "" + } + + function c(e) { + return "string" == typeof e && Boolean(e.trim()) + } + + function v(e) { + if (0 <= e.indexOf(" ")) throw new Error("class has illegal whitespace characters") + } + + function y() { + return d === T.document + } + + function _(e) { + return s(e) && 1 === e.nodeType + } + + function b() { + try { + return T.parent !== T.self + } catch (e) { + return !0 + } + } + + function S(n) { + return function (e, t) { + if (!c(e)) return d[n](null); + c(t) && (t = d.querySelector(t)); + var i = _(t) ? t : d; + return i[n] && i[n](e) + } + } + + function k(e, i, t, n) { + void 0 === e && (e = "div"), void 0 === i && (i = {}), void 0 === t && (t = {}); + var r = d.createElement(e); + return Object.getOwnPropertyNames(i).forEach(function (e) { + var t = i[e]; - 1 !== e.indexOf("aria-") || "role" === e || "type" === e ? (p.warn("Setting attributes in the second argument of createEl()\nhas been deprecated. Use the third argument instead.\ncreateEl(type, properties, attributes). Attempting to set " + e + " to " + t + "."), r.setAttribute(e, t)) : "textContent" === e ? C(r, t) : r[e] !== t && (r[e] = t) + }), Object.getOwnPropertyNames(t).forEach(function (e) { + r.setAttribute(e, t[e]) + }), n && H(r, n), r + } + + function C(e, t) { + return "undefined" == typeof e.textContent ? e.innerText = t : e.textContent = t, e + } + + function E(e, t) { + t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e) + } + + function w(e, t) { + return v(t), e.classList ? e.classList.contains(t) : function (e) { + return new RegExp("(^|\\s)" + e + "($|\\s)") + }(t).test(e.className) + } + + function I(e, t) { + return e.classList ? e.classList.add(t) : w(e, t) || (e.className = (e.className + " " + t).trim()), e + } + + function A(e, t) { + return e.classList ? e.classList.remove(t) : (v(t), e.className = e.className.split(/\s+/).filter(function (e) { + return e !== t + }).join(" ")), e + } + + function x(e, t, i) { + var n = w(e, t); + if ("function" == typeof i && (i = i(e, t)), "boolean" != typeof i && (i = !n), i !== n) return i ? I(e, t) : A(e, t), e + } + + function P(i, n) { + Object.getOwnPropertyNames(n).forEach(function (e) { + var t = n[e]; + null === t || "undefined" == typeof t || !1 === t ? i.removeAttribute(e) : i.setAttribute(e, !0 === t ? "" : t) + }) + } + + function L(e) { + var t = {}, + i = ",autoplay,controls,playsinline,loop,muted,default,defaultMuted,"; + if (e && e.attributes && 0 < e.attributes.length) + for (var n = e.attributes, r = n.length - 1; 0 <= r; r--) { + var a = n[r].name, + s = n[r].value; + "boolean" != typeof e[a] && -1 === i.indexOf("," + a + ",") || (s = null !== s), t[a] = s + } + return t + } + + function O(e, t) { + return e.getAttribute(t) + } + + function D(e, t, i) { + e.setAttribute(t, i) + } + + function M(e, t) { + e.removeAttribute(t) + } + + function R() { + d.body.focus(), d.onselectstart = function () { + return !1 + } + } + + function N() { + d.onselectstart = function () { + return !0 + } + } + + function U(e) { + if (e && e.getBoundingClientRect && e.parentNode) { + var t = e.getBoundingClientRect(), + i = {}; + return ["bottom", "height", "left", "right", "top", "width"].forEach(function (e) { + void 0 !== t[e] && (i[e] = t[e]) + }), i.height || (i.height = parseFloat(u(e, "height"))), i.width || (i.width = parseFloat(u(e, "width"))), i + } + } + + function F(e) { + if (!e || e && !e.offsetParent) return { + left: 0, + top: 0, + width: 0, + height: 0 + }; + for (var t = e.offsetWidth, i = e.offsetHeight, n = 0, r = 0; n += e.offsetLeft, r += e.offsetTop, e = e.offsetParent;); + return { + left: n, + top: r, + width: t, + height: i + } + } + + function B(e, t) { + var i = {}, + n = F(t.target), + r = F(e), + a = r.width, + s = r.height, + o = t.offsetY - (r.top - n.top), + u = t.offsetX - (r.left - n.left); + return t.changedTouches && (u = t.changedTouches[0].pageX - r.left, o = t.changedTouches[0].pageY + r.top), i.y = 1 - Math.max(0, Math.min(1, o / s)), i.x = Math.max(0, Math.min(1, u / a)), i + } + + function j(e) { + return s(e) && 3 === e.nodeType + } + + function V(e) { + for (; e.firstChild;) e.removeChild(e.firstChild); + return e + } + + function q(e) { + return "function" == typeof e && (e = e()), (Array.isArray(e) ? e : [e]).map(function (e) { + return "function" == typeof e && (e = e()), _(e) || j(e) ? e : "string" == typeof e && /\S/.test(e) ? d.createTextNode(e) : void 0 + }).filter(function (e) { + return e + }) + } + + function H(t, e) { + return q(e).forEach(function (e) { + return t.appendChild(e) + }), t + } + + function W(e, t) { + return H(V(e), t) + } + + function z(e) { + return void 0 === e.button && void 0 === e.buttons || (0 === e.button && void 0 === e.buttons || ("mouseup" === e.type && 0 === e.button && 0 === e.buttons || 0 === e.button && 1 === e.buttons)) + } + var G, X = S("querySelector"), + K = S("querySelectorAll"), + Y = Object.freeze({ + __proto__: null, + isReal: y, + isEl: _, + isInFrame: b, + createEl: k, + textContent: C, + prependTo: E, + hasClass: w, + addClass: I, + removeClass: A, + toggleClass: x, + setAttributes: P, + getAttributes: L, + getAttribute: O, + setAttribute: D, + removeAttribute: M, + blockTextSelection: R, + unblockTextSelection: N, + getBoundingClientRect: U, + findPosition: F, + getPointerPosition: B, + isTextNode: j, + emptyEl: V, + normalizeContent: q, + appendContent: H, + insertContent: W, + isSingleLeftClick: z, + $: X, + $$: K + }), + $ = !1, + Q = function () { + if (y() && !1 !== G.options.autoSetup) { + var e = Array.prototype.slice.call(d.getElementsByTagName("video")), + t = Array.prototype.slice.call(d.getElementsByTagName("audio")), + i = Array.prototype.slice.call(d.getElementsByTagName("video-js")), + n = e.concat(t, i); + if (n && 0 < n.length) + for (var r = 0, a = n.length; r < a; r++) { + var s = n[r]; + if (!s || !s.getAttribute) { + J(1); + break + } + void 0 === s.player && null !== s.getAttribute("data-setup") && G(s) + } else $ || J(1) + } + }; + + function J(e, t) { + t && (G = t), T.setTimeout(Q, e) + } + + function Z() { + $ = !0, T.removeEventListener("load", Z) + } + y() && ("complete" === d.readyState ? Z() : T.addEventListener("load", Z)); + + function ee(e) { + var t = d.createElement("style"); + return t.className = e, t + } + + function te(e, t) { + e.styleSheet ? e.styleSheet.cssText = t : e.textContent = t + } + var ie, ne = 3; + + function re() { + return ne++ + } + T.WeakMap || (ie = function () { + function e() { + this.vdata = "vdata" + Math.floor(T.performance && T.performance.now() || Date.now()), this.data = {} + } + var t = e.prototype; + return t.set = function (e, t) { + var i = e[this.vdata] || re(); + return e[this.vdata] || (e[this.vdata] = i), this.data[i] = t, this + }, t.get = function (e) { + var t = e[this.vdata]; + if (t) return this.data[t]; + p("We have no data for this element", e) + }, t.has = function (e) { + return e[this.vdata] in this.data + }, t.delete = function (e) { + var t = e[this.vdata]; + t && (delete this.data[t], delete e[this.vdata]) + }, e + }()); + var ae, se = T.WeakMap ? new WeakMap : new ie; + + function oe(e, t) { + if (se.has(e)) { + var i = se.get(e); + 0 === i.handlers[t].length && (delete i.handlers[t], e.removeEventListener ? e.removeEventListener(t, i.dispatcher, !1) : e.detachEvent && e.detachEvent("on" + t, i.dispatcher)), Object.getOwnPropertyNames(i.handlers).length <= 0 && (delete i.handlers, delete i.dispatcher, delete i.disabled), 0 === Object.getOwnPropertyNames(i).length && se.delete(e) + } + } + + function ue(t, i, e, n) { + e.forEach(function (e) { + t(i, e, n) + }) + } + + function le(e) { + if (e.fixed_) return e; + + function t() { + return !0 + } + + function i() { + return !1 + } + if (!e || !e.isPropagationStopped) { + var n = e || T.event; + for (var r in e = {}, n) "layerX" !== r && "layerY" !== r && "keyLocation" !== r && "webkitMovementX" !== r && "webkitMovementY" !== r && ("returnValue" === r && n.preventDefault || (e[r] = n[r])); + if (e.target || (e.target = e.srcElement || d), e.relatedTarget || (e.relatedTarget = e.fromElement === e.target ? e.toElement : e.fromElement), e.preventDefault = function () { + n.preventDefault && n.preventDefault(), e.returnValue = !1, n.returnValue = !1, e.defaultPrevented = !0 + }, e.defaultPrevented = !1, e.stopPropagation = function () { + n.stopPropagation && n.stopPropagation(), e.cancelBubble = !0, n.cancelBubble = !0, e.isPropagationStopped = t + }, e.isPropagationStopped = i, e.stopImmediatePropagation = function () { + n.stopImmediatePropagation && n.stopImmediatePropagation(), e.isImmediatePropagationStopped = t, e.stopPropagation() + }, e.isImmediatePropagationStopped = i, null !== e.clientX && void 0 !== e.clientX) { + var a = d.documentElement, + s = d.body; + e.pageX = e.clientX + (a && a.scrollLeft || s && s.scrollLeft || 0) - (a && a.clientLeft || s && s.clientLeft || 0), e.pageY = e.clientY + (a && a.scrollTop || s && s.scrollTop || 0) - (a && a.clientTop || s && s.clientTop || 0) + } + e.which = e.charCode || e.keyCode, null !== e.button && void 0 !== e.button && (e.button = 1 & e.button ? 0 : 4 & e.button ? 1 : 2 & e.button ? 2 : 0) + } + return e.fixed_ = !0, e + } + var ce = function () { + if ("boolean" != typeof ae) { + ae = !1; + try { + var e = Object.defineProperty({}, "passive", { + get: function () { + ae = !0 + } + }); + T.addEventListener("test", null, e), T.removeEventListener("test", null, e) + } catch (e) {} + } + return ae + }, + de = ["touchstart", "touchmove"]; + + function he(s, e, t) { + if (Array.isArray(e)) return ue(he, s, e, t); + se.has(s) || se.set(s, {}); + var o = se.get(s); + if (o.handlers || (o.handlers = {}), o.handlers[e] || (o.handlers[e] = []), t.guid || (t.guid = re()), o.handlers[e].push(t), o.dispatcher || (o.disabled = !1, o.dispatcher = function (e, t) { + if (!o.disabled) { + e = le(e); + var i = o.handlers[e.type]; + if (i) + for (var n = i.slice(0), r = 0, a = n.length; r < a && !e.isImmediatePropagationStopped(); r++) try { + n[r].call(s, e, t) + } catch (e) { + p.error(e) + } + } + }), 1 === o.handlers[e].length) + if (s.addEventListener) { + var i = !1; + ce() && -1 < de.indexOf(e) && (i = { + passive: !0 + }), s.addEventListener(e, o.dispatcher, i) + } else s.attachEvent && s.attachEvent("on" + e, o.dispatcher) + } + + function pe(e, t, i) { + if (se.has(e)) { + var n = se.get(e); + if (n.handlers) { + if (Array.isArray(t)) return ue(pe, e, t, i); + var r = function (e, t) { + n.handlers[t] = [], oe(e, t) + }; + if (void 0 !== t) { + var a = n.handlers[t]; + if (a) + if (i) { + if (i.guid) + for (var s = 0; s < a.length; s++) a[s].guid === i.guid && a.splice(s--, 1); + oe(e, t) + } else r(e, t) + } else + for (var o in n.handlers) Object.prototype.hasOwnProperty.call(n.handlers || {}, o) && r(e, o) + } + } + } + + function fe(e, t, i) { + var n = se.has(e) ? se.get(e) : {}, + r = e.parentNode || e.ownerDocument; + if ("string" == typeof t ? t = { + type: t, + target: e + } : t.target || (t.target = e), t = le(t), n.dispatcher && n.dispatcher.call(e, t, i), r && !t.isPropagationStopped() && !0 === t.bubbles) fe.call(null, r, t, i); + else if (!r && !t.defaultPrevented && t.target && t.target[t.type]) { + se.has(t.target) || se.set(t.target, {}); + var a = se.get(t.target); + t.target[t.type] && (a.disabled = !0, "function" == typeof t.target[t.type] && t.target[t.type](), a.disabled = !1) + } + return !t.defaultPrevented + } + + function me(e, t, i) { + if (Array.isArray(t)) return ue(me, e, t, i); + + function n() { + pe(e, t, n), i.apply(this, arguments) + } + n.guid = i.guid = i.guid || re(), he(e, t, n) + } + + function ge(e, t, i) { + function n() { + pe(e, t, n), i.apply(this, arguments) + } + n.guid = i.guid = i.guid || re(), he(e, t, n) + } + + function ve(e, t, i) { + t.guid || (t.guid = re()); + var n = t.bind(e); + return n.guid = i ? i + "_" + t.guid : t.guid, n + } + + function ye(t, i) { + var n = T.performance.now(); + return function () { + var e = T.performance.now(); + i <= e - n && (t.apply(void 0, arguments), n = e) + } + } + + function _e() {} + var be, Te = Object.freeze({ + __proto__: null, + fixEvent: le, + on: he, + off: pe, + trigger: fe, + one: me, + any: ge + }); + _e.prototype.allowedEvents_ = {}, _e.prototype.addEventListener = _e.prototype.on = function (e, t) { + var i = this.addEventListener; + this.addEventListener = function () {}, he(this, e, t), this.addEventListener = i + }, _e.prototype.removeEventListener = _e.prototype.off = function (e, t) { + pe(this, e, t) + }, _e.prototype.one = function (e, t) { + var i = this.addEventListener; + this.addEventListener = function () {}, me(this, e, t), this.addEventListener = i + }, _e.prototype.any = function (e, t) { + var i = this.addEventListener; + this.addEventListener = function () {}, ge(this, e, t), this.addEventListener = i + }, _e.prototype.dispatchEvent = _e.prototype.trigger = function (e) { + var t = e.type || e; + "string" == typeof e && (e = { + type: t + }), e = le(e), this.allowedEvents_[t] && this["on" + t] && this["on" + t](e), fe(this, e) + }, _e.prototype.queueTrigger = function (e) { + var t = this; + be = be || new Map; + var i = e.type || e, + n = be.get(this); + n || (n = new Map, be.set(this, n)); + var r = n.get(i); + n.delete(i), T.clearTimeout(r); + var a = T.setTimeout(function () { + 0 === n.size && (n = null, be.delete(t)), t.trigger(e) + }, 0); + n.set(i, a) + }; + + function Se(e) { + return "string" == typeof e && /\S/.test(e) || Array.isArray(e) && !!e.length + } + + function ke(e) { + if (!e.nodeName && !Ae(e)) throw new Error("Invalid target; must be a DOM node or evented object.") + } + + function Ce(e) { + if (!Se(e)) throw new Error("Invalid event type; must be a non-empty string or array.") + } + + function Ee(e) { + if ("function" != typeof e) throw new Error("Invalid listener; must be a function.") + } + + function we(e, t) { + var i, n, r, a = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_; + return r = a ? (i = e.eventBusEl_, 3 <= t.length && t.shift(), n = t[0], t[1]) : (i = t[0], n = t[1], t[2]), ke(i), Ce(n), Ee(r), { + isTargetingSelf: a, + target: i, + type: n, + listener: r = ve(e, r) + } + } + + function Ie(e, t, i, n) { + ke(e), e.nodeName ? Te[t](e, i, n) : e[t](i, n) + } + var Ae = function (t) { + return t instanceof _e || !!t.eventBusEl_ && ["on", "one", "off", "trigger"].every(function (e) { + return "function" == typeof t[e] + }) + }, + xe = { + on: function () { + for (var e = this, t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]; + var r = we(this, i), + a = r.isTargetingSelf, + s = r.target, + o = r.type, + u = r.listener; + if (Ie(s, "on", o, u), !a) { + var l = function () { + return e.off(s, o, u) + }; + l.guid = u.guid; + var c = function () { + return e.off("dispose", l) + }; + c.guid = u.guid, Ie(this, "on", "dispose", l), Ie(s, "on", "dispose", c) + } + }, + one: function () { + for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + var n = we(this, t), + a = n.isTargetingSelf, + s = n.target, + o = n.type, + u = n.listener; + if (a) Ie(s, "one", o, u); + else { + var l = function e() { + r.off(s, o, e); + for (var t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]; + u.apply(null, i) + }; + l.guid = u.guid, Ie(s, "one", o, l) + } + }, + any: function () { + for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + var n = we(this, t), + a = n.isTargetingSelf, + s = n.target, + o = n.type, + u = n.listener; + if (a) Ie(s, "any", o, u); + else { + var l = function e() { + r.off(s, o, e); + for (var t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]; + u.apply(null, i) + }; + l.guid = u.guid, Ie(s, "any", o, l) + } + }, + off: function (e, t, i) { + if (!e || Se(e)) pe(this.eventBusEl_, e, t); + else { + var n = e, + r = t; + ke(n), Ce(r), Ee(i), i = ve(this, i), this.off("dispose", i), n.nodeName ? (pe(n, r, i), pe(n, "dispose", i)) : Ae(n) && (n.off(r, i), n.off("dispose", i)) + } + }, + trigger: function (e, t) { + return fe(this.eventBusEl_, e, t) + } + }; + + function Pe(e, t) { + void 0 === t && (t = {}); + var i = t.eventBusKey; + if (i) { + if (!e[i].nodeName) throw new Error('The eventBusKey "' + i + '" does not refer to an element.'); + e.eventBusEl_ = e[i] + } else e.eventBusEl_ = k("span", { + className: "vjs-event-bus" + }); + return g(e, xe), e.eventedCallbacks && e.eventedCallbacks.forEach(function (e) { + e() + }), e.on("dispose", function () { + e.off(), T.setTimeout(function () { + e.eventBusEl_ = null + }, 0) + }), e + } + var Le = { + state: {}, + setState: function (e) { + var i, n = this; + return "function" == typeof e && (e = e()), r(e, function (e, t) { + n.state[t] !== e && ((i = i || {})[t] = { + from: n.state[t], + to: e + }), n.state[t] = e + }), i && Ae(this) && this.trigger({ + changes: i, + type: "statechanged" + }), i + } + }; + + function Oe(e, t) { + return g(e, Le), e.state = g({}, e.state, t), "function" == typeof e.handleStateChanged && Ae(e) && e.on("statechanged", e.handleStateChanged), e + } + + function De(e) { + return "string" != typeof e ? e : e.replace(/./, function (e) { + return e.toLowerCase() + }) + } + + function Me(e) { + return "string" != typeof e ? e : e.replace(/./, function (e) { + return e.toUpperCase() + }) + } + + function Re() { + for (var i = {}, e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]; + return t.forEach(function (e) { + e && r(e, function (e, t) { + o(e) ? (o(i[t]) || (i[t] = {}), i[t] = Re(i[t], e)) : i[t] = e + }) + }), i + } + var Ne = function () { + function e() { + this.map_ = {} + } + var t = e.prototype; + return t.has = function (e) { + return e in this.map_ + }, t.delete = function (e) { + var t = this.has(e); + return delete this.map_[e], t + }, t.set = function (e, t) { + return this.set_[e] = t, this + }, t.forEach = function (e, t) { + for (var i in this.map_) e.call(t, this.map_[i], i, this) + }, e + }(), + Ue = T.Map ? T.Map : Ne, + Fe = function () { + function e() { + this.set_ = {} + } + var t = e.prototype; + return t.has = function (e) { + return e in this.set_ + }, t.delete = function (e) { + var t = this.has(e); + return delete this.set_[e], t + }, t.add = function (e) { + return this.set_[e] = 1, this + }, t.forEach = function (e, t) { + for (var i in this.set_) e.call(t, i, i, this) + }, e + }(), + Be = T.Set ? T.Set : Fe, + je = function () { + function l(e, t, i) { + if (!e && this.play ? this.player_ = e = this : this.player_ = e, this.isDisposed_ = !1, this.parentComponent_ = null, this.options_ = Re({}, this.options_), t = this.options_ = Re(this.options_, t), this.id_ = t.id || t.el && t.el.id, !this.id_) { + var n = e && e.id && e.id() || "no_player"; + this.id_ = n + "_component_" + re() + } + this.name_ = t.name || null, t.el ? this.el_ = t.el : !1 !== t.createEl && (this.el_ = this.createEl()), !1 !== t.evented && Pe(this, { + eventBusKey: this.el_ ? "el_" : null + }), Oe(this, this.constructor.defaultState), this.children_ = [], this.childIndex_ = {}, this.childNameIndex_ = {}, this.setTimeoutIds_ = new Be, this.setIntervalIds_ = new Be, this.rafIds_ = new Be, this.namedRafs_ = new Ue, (this.clearingTimersOnDispose_ = !1) !== t.initChildren && this.initChildren(), this.ready(i), !1 !== t.reportTouchActivity && this.enableTouchActivity() + } + var e = l.prototype; + return e.dispose = function () { + if (!this.isDisposed_) { + if (this.trigger({ + type: "dispose", + bubbles: !1 + }), this.isDisposed_ = !0, this.children_) + for (var e = this.children_.length - 1; 0 <= e; e--) this.children_[e].dispose && this.children_[e].dispose(); + this.children_ = null, this.childIndex_ = null, this.childNameIndex_ = null, this.parentComponent_ = null, this.el_ && (this.el_.parentNode && this.el_.parentNode.removeChild(this.el_), se.has(this.el_) && se.delete(this.el_), this.el_ = null), this.player_ = null + } + }, e.isDisposed = function () { + return Boolean(this.isDisposed_) + }, e.player = function () { + return this.player_ + }, e.options = function (e) { + return e && (this.options_ = Re(this.options_, e)), this.options_ + }, e.el = function () { + return this.el_ + }, e.createEl = function (e, t, i) { + return k(e, t, i) + }, e.localize = function (e, r, t) { + void 0 === t && (t = e); + var i = this.player_.language && this.player_.language(), + n = this.player_.languages && this.player_.languages(), + a = n && n[i], + s = i && i.split("-")[0], + o = n && n[s], + u = t; + return a && a[e] ? u = a[e] : o && o[e] && (u = o[e]), r && (u = u.replace(/\{(\d+)\}/g, function (e, t) { + var i = r[t - 1], + n = i; + return "undefined" == typeof i && (n = e), n + })), u + }, e.contentEl = function () { + return this.contentEl_ || this.el_ + }, e.id = function () { + return this.id_ + }, e.name = function () { + return this.name_ + }, e.children = function () { + return this.children_ + }, e.getChildById = function (e) { + return this.childIndex_[e] + }, e.getChild = function (e) { + if (e) return this.childNameIndex_[e] + }, e.getDescendant = function () { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + t = t.reduce(function (e, t) { + return e.concat(t) + }, []); + for (var n = this, r = 0; r < t.length; r++) + if (!(n = n.getChild(t[r])) || !n.getChild) return; + return n + }, e.addChild = function (e, t, i) { + var n, r; + if (void 0 === t && (t = {}), void 0 === i && (i = this.children_.length), "string" == typeof e) { + r = Me(e); + var a = t.componentClass || r; + t.name = r; + var s = l.getComponent(a); + if (!s) throw new Error("Component " + a + " does not exist"); + if ("function" != typeof s) return null; + n = new s(this.player_ || this, t) + } else n = e; + if (n.parentComponent_ && n.parentComponent_.removeChild(n), this.children_.splice(i, 0, n), n.parentComponent_ = this, "function" == typeof n.id && (this.childIndex_[n.id()] = n), (r = r || n.name && Me(n.name())) && (this.childNameIndex_[r] = n, this.childNameIndex_[De(r)] = n), "function" == typeof n.el && n.el()) { + var o = null; + this.children_[i + 1] && (this.children_[i + 1].el_ ? o = this.children_[i + 1].el_ : _(this.children_[i + 1]) && (o = this.children_[i + 1])), this.contentEl().insertBefore(n.el(), o) + } + return n + }, e.removeChild = function (e) { + if ("string" == typeof e && (e = this.getChild(e)), e && this.children_) { + for (var t = !1, i = this.children_.length - 1; 0 <= i; i--) + if (this.children_[i] === e) { + t = !0, this.children_.splice(i, 1); + break + } if (t) { + e.parentComponent_ = null, this.childIndex_[e.id()] = null, this.childNameIndex_[Me(e.name())] = null, this.childNameIndex_[De(e.name())] = null; + var n = e.el(); + n && n.parentNode === this.contentEl() && this.contentEl().removeChild(e.el()) + } + } + }, e.initChildren = function () { + var r = this, + n = this.options_.children; + if (n) { + var e, a = this.options_, + i = l.getComponent("Tech"); + (e = Array.isArray(n) ? n : Object.keys(n)).concat(Object.keys(this.options_).filter(function (t) { + return !e.some(function (e) { + return "string" == typeof e ? t === e : t === e.name + }) + })).map(function (e) { + var t, i; + return i = "string" == typeof e ? n[t = e] || r.options_[t] || {} : (t = e.name, e), { + name: t, + opts: i + } + }).filter(function (e) { + var t = l.getComponent(e.opts.componentClass || Me(e.name)); + return t && !i.isTech(t) + }).forEach(function (e) { + var t = e.name, + i = e.opts; + if (void 0 !== a[t] && (i = a[t]), !1 !== i) { + !0 === i && (i = {}), i.playerOptions = r.options_.playerOptions; + var n = r.addChild(t, i); + n && (r[t] = n) + } + }) + } + }, e.buildCSSClass = function () { + return "" + }, e.ready = function (e, t) { + if (void 0 === t && (t = !1), e) return this.isReady_ ? void(t ? e.call(this) : this.setTimeout(e, 1)) : (this.readyQueue_ = this.readyQueue_ || [], void this.readyQueue_.push(e)) + }, e.triggerReady = function () { + this.isReady_ = !0, this.setTimeout(function () { + var e = this.readyQueue_; + this.readyQueue_ = [], e && 0 < e.length && e.forEach(function (e) { + e.call(this) + }, this), this.trigger("ready") + }, 1) + }, e.$ = function (e, t) { + return X(e, t || this.contentEl()) + }, e.$$ = function (e, t) { + return K(e, t || this.contentEl()) + }, e.hasClass = function (e) { + return w(this.el_, e) + }, e.addClass = function (e) { + I(this.el_, e) + }, e.removeClass = function (e) { + A(this.el_, e) + }, e.toggleClass = function (e, t) { + x(this.el_, e, t) + }, e.show = function () { + this.removeClass("vjs-hidden") + }, e.hide = function () { + this.addClass("vjs-hidden") + }, e.lockShowing = function () { + this.addClass("vjs-lock-showing") + }, e.unlockShowing = function () { + this.removeClass("vjs-lock-showing") + }, e.getAttribute = function (e) { + return O(this.el_, e) + }, e.setAttribute = function (e, t) { + D(this.el_, e, t) + }, e.removeAttribute = function (e) { + M(this.el_, e) + }, e.width = function (e, t) { + return this.dimension("width", e, t) + }, e.height = function (e, t) { + return this.dimension("height", e, t) + }, e.dimensions = function (e, t) { + this.width(e, !0), this.height(t) + }, e.dimension = function (e, t, i) { + if (void 0 !== t) return null !== t && t == t || (t = 0), -1 !== ("" + t).indexOf("%") || -1 !== ("" + t).indexOf("px") ? this.el_.style[e] = t : this.el_.style[e] = "auto" === t ? "" : t + "px", void(i || this.trigger("componentresize")); + if (!this.el_) return 0; + var n = this.el_.style[e], + r = n.indexOf("px"); + return -1 !== r ? parseInt(n.slice(0, r), 10) : parseInt(this.el_["offset" + Me(e)], 10) + }, e.currentDimension = function (e) { + var t = 0; + if ("width" !== e && "height" !== e) throw new Error("currentDimension only accepts width or height value"); + if (t = u(this.el_, e), 0 === (t = parseFloat(t)) || isNaN(t)) { + var i = "offset" + Me(e); + t = this.el_[i] + } + return t + }, e.currentDimensions = function () { + return { + width: this.currentDimension("width"), + height: this.currentDimension("height") + } + }, e.currentWidth = function () { + return this.currentDimension("width") + }, e.currentHeight = function () { + return this.currentDimension("height") + }, e.focus = function () { + this.el_.focus() + }, e.blur = function () { + this.el_.blur() + }, e.handleKeyDown = function (e) { + this.player_ && (e.stopPropagation(), this.player_.handleKeyDown(e)) + }, e.handleKeyPress = function (e) { + this.handleKeyDown(e) + }, e.emitTapEvents = function () { + var n, t = 0, + r = null; + this.on("touchstart", function (e) { + 1 === e.touches.length && (r = { + pageX: e.touches[0].pageX, + pageY: e.touches[0].pageY + }, t = T.performance.now(), n = !0) + }), this.on("touchmove", function (e) { + if (1 < e.touches.length) n = !1; + else if (r) { + var t = e.touches[0].pageX - r.pageX, + i = e.touches[0].pageY - r.pageY; + 10 < Math.sqrt(t * t + i * i) && (n = !1) + } + }); + + function e() { + n = !1 + } + this.on("touchleave", e), this.on("touchcancel", e), this.on("touchend", function (e) { + !(r = null) === n && T.performance.now() - t < 200 && (e.preventDefault(), this.trigger("tap")) + }) + }, e.enableTouchActivity = function () { + if (this.player() && this.player().reportUserActivity) { + var t, i = ve(this.player(), this.player().reportUserActivity); + this.on("touchstart", function () { + i(), this.clearInterval(t), t = this.setInterval(i, 250) + }); + var e = function (e) { + i(), this.clearInterval(t) + }; + this.on("touchmove", i), this.on("touchend", e), this.on("touchcancel", e) + } + }, e.setTimeout = function (e, t) { + var i, n = this; + return e = ve(this, e), this.clearTimersOnDispose_(), i = T.setTimeout(function () { + n.setTimeoutIds_.has(i) && n.setTimeoutIds_.delete(i), e() + }, t), this.setTimeoutIds_.add(i), i + }, e.clearTimeout = function (e) { + return this.setTimeoutIds_.has(e) && (this.setTimeoutIds_.delete(e), T.clearTimeout(e)), e + }, e.setInterval = function (e, t) { + e = ve(this, e), this.clearTimersOnDispose_(); + var i = T.setInterval(e, t); + return this.setIntervalIds_.add(i), i + }, e.clearInterval = function (e) { + return this.setIntervalIds_.has(e) && (this.setIntervalIds_.delete(e), T.clearInterval(e)), e + }, e.requestAnimationFrame = function (e) { + var t, i = this; + return this.supportsRaf_ ? (this.clearTimersOnDispose_(), e = ve(this, e), t = T.requestAnimationFrame(function () { + i.rafIds_.has(t) && i.rafIds_.delete(t), e() + }), this.rafIds_.add(t), t) : this.setTimeout(e, 1e3 / 60) + }, e.requestNamedAnimationFrame = function (e, t) { + var i = this; + if (!this.namedRafs_.has(e)) { + this.clearTimersOnDispose_(), t = ve(this, t); + var n = this.requestAnimationFrame(function () { + t(), i.namedRafs_.has(e) && i.namedRafs_.delete(e) + }); + return this.namedRafs_.set(e, n), e + } + }, e.cancelNamedAnimationFrame = function (e) { + this.namedRafs_.has(e) && (this.cancelAnimationFrame(this.namedRafs_.get(e)), this.namedRafs_.delete(e)) + }, e.cancelAnimationFrame = function (e) { + return this.supportsRaf_ ? (this.rafIds_.has(e) && (this.rafIds_.delete(e), T.cancelAnimationFrame(e)), e) : this.clearTimeout(e) + }, e.clearTimersOnDispose_ = function () { + var n = this; + this.clearingTimersOnDispose_ || (this.clearingTimersOnDispose_ = !0, this.one("dispose", function () { + [ + ["namedRafs_", "cancelNamedAnimationFrame"], + ["rafIds_", "cancelAnimationFrame"], + ["setTimeoutIds_", "clearTimeout"], + ["setIntervalIds_", "clearInterval"] + ].forEach(function (e) { + var t = e[0], + i = e[1]; + n[t].forEach(function (e, t) { + return n[i](t) + }) + }), n.clearingTimersOnDispose_ = !1 + })) + }, l.registerComponent = function (e, t) { + if ("string" != typeof e || !e) throw new Error('Illegal component name, "' + e + '"; must be a non-empty string.'); + var i, n = l.getComponent("Tech"), + r = n && n.isTech(t), + a = l === t || l.prototype.isPrototypeOf(t.prototype); + if (r || !a) throw i = r ? "techs must be registered using Tech.registerTech()" : "must be a Component subclass", new Error('Illegal component, "' + e + '"; ' + i + "."); + e = Me(e), l.components_ || (l.components_ = {}); + var s = l.getComponent("Player"); + if ("Player" === e && s && s.players) { + var o = s.players, + u = Object.keys(o); + if (o && 0 < u.length && u.map(function (e) { + return o[e] + }).every(Boolean)) throw new Error("Can not register Player component after player has been created.") + } + return l.components_[e] = t, l.components_[De(e)] = t + }, l.getComponent = function (e) { + if (e && l.components_) return l.components_[e] + }, l + }(); + je.prototype.supportsRaf_ = "function" == typeof T.requestAnimationFrame && "function" == typeof T.cancelAnimationFrame, je.registerComponent("Component", je); + var Ve = function (e) { + if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + return e + }; + i(function (t) { + function i(e) { + return "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? t.exports = i = function (e) { + return typeof e + } : t.exports = i = function (e) { + return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e + }, i(e) + } + t.exports = i + }), i(function (t) { + function i(e) { + return t.exports = i = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) { + return e.__proto__ || Object.getPrototypeOf(e) + }, i(e) + } + t.exports = i + }); + var qe, He, We, ze, Ge = function (e, t) { + e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t + }, + Xe = T.navigator && T.navigator.userAgent || "", + Ke = /AppleWebKit\/([\d.]+)/i.exec(Xe), + Ye = Ke ? parseFloat(Ke.pop()) : null, + $e = /iPod/i.test(Xe), + Qe = (qe = Xe.match(/OS (\d+)_/i)) && qe[1] ? qe[1] : null, + Je = /Android/i.test(Xe), + Ze = function () { + var e = Xe.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i); + if (!e) return null; + var t = e[1] && parseFloat(e[1]), + i = e[2] && parseFloat(e[2]); + return t && i ? parseFloat(e[1] + "." + e[2]) : t || null + }(), + et = Je && Ze < 5 && Ye < 537, + tt = /Firefox/i.test(Xe), + it = /Edg/i.test(Xe), + nt = !it && (/Chrome/i.test(Xe) || /CriOS/i.test(Xe)), + rt = (He = Xe.match(/(Chrome|CriOS)\/(\d+)/)) && He[2] ? parseFloat(He[2]) : null, + at = (We = /MSIE\s(\d+)\.\d/.exec(Xe), !(ze = We && parseFloat(We[1])) && /Trident\/7.0/i.test(Xe) && /rv:11.0/.test(Xe) && (ze = 11), ze), + st = /Safari/i.test(Xe) && !nt && !Je && !it, + ot = /Windows/i.test(Xe), + ut = y() && ("ontouchstart" in T || T.navigator.maxTouchPoints || T.DocumentTouch && T.document instanceof T.DocumentTouch), + lt = /iPad/i.test(Xe) || st && ut && !/iPhone/i.test(Xe), + ct = /iPhone/i.test(Xe) && !lt, + dt = ct || lt || $e, + ht = (st || dt) && !nt, + pt = Object.freeze({ + __proto__: null, + IS_IPOD: $e, + IOS_VERSION: Qe, + IS_ANDROID: Je, + ANDROID_VERSION: Ze, + IS_NATIVE_ANDROID: et, + IS_FIREFOX: tt, + IS_EDGE: it, + IS_CHROME: nt, + CHROME_VERSION: rt, + IE_VERSION: at, + IS_SAFARI: st, + IS_WINDOWS: ot, + TOUCH_ENABLED: ut, + IS_IPAD: lt, + IS_IPHONE: ct, + IS_IOS: dt, + IS_ANY_SAFARI: ht + }); + + function ft(e, t, i, n) { + return function (e, t, i) { + if ("number" != typeof t || t < 0 || i < t) throw new Error("Failed to execute '" + e + "' on 'TimeRanges': The index provided (" + t + ") is non-numeric or out of bounds (0-" + i + ").") + }(e, n, i.length - 1), i[n][t] + } + + function mt(e) { + return void 0 === e || 0 === e.length ? { + length: 0, + start: function () { + throw new Error("This TimeRanges object is empty") + }, + end: function () { + throw new Error("This TimeRanges object is empty") + } + } : { + length: e.length, + start: ft.bind(null, "start", 0, e), + end: ft.bind(null, "end", 1, e) + } + } + + function gt(e, t) { + return Array.isArray(e) ? mt(e) : void 0 === e || void 0 === t ? mt() : mt([ + [e, t] + ]) + } + + function vt(e, t) { + var i, n, r = 0; + if (!t) return 0; + e && e.length || (e = gt(0, 0)); + for (var a = 0; a < e.length; a++) i = e.start(a), t < (n = e.end(a)) && (n = t), r += n - i; + return r / t + } + for (var yt, _t = { + prefixed: !0 + }, bt = [ + ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror", "fullscreen"], + ["webkitRequestFullscreen", "webkitExitFullscreen", "webkitFullscreenElement", "webkitFullscreenEnabled", "webkitfullscreenchange", "webkitfullscreenerror", "-webkit-full-screen"], + ["mozRequestFullScreen", "mozCancelFullScreen", "mozFullScreenElement", "mozFullScreenEnabled", "mozfullscreenchange", "mozfullscreenerror", "-moz-full-screen"], + ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError", "-ms-fullscreen"] + ], Tt = bt[0], St = 0; St < bt.length; St++) + if (bt[St][1] in d) { + yt = bt[St]; + break + } if (yt) { + for (var kt = 0; kt < yt.length; kt++) _t[Tt[kt]] = yt[kt]; + _t.prefixed = yt[0] !== Tt[0] + } + + function Ct(e) { + if (e instanceof Ct) return e; + "number" == typeof e ? this.code = e : "string" == typeof e ? this.message = e : s(e) && ("number" == typeof e.code && (this.code = e.code), g(this, e)), this.message || (this.message = Ct.defaultMessages[this.code] || "") + } + Ct.prototype.code = 0, Ct.prototype.message = "", Ct.prototype.status = null, Ct.errorTypes = ["MEDIA_ERR_CUSTOM", "MEDIA_ERR_ABORTED", "MEDIA_ERR_NETWORK", "MEDIA_ERR_DECODE", "MEDIA_ERR_SRC_NOT_SUPPORTED", "MEDIA_ERR_ENCRYPTED"], Ct.defaultMessages = { + 1: "You aborted the media playback", + 2: "A network error caused the media download to fail part-way.", + 3: "The media playback was aborted due to a corruption problem or because the media used features your browser did not support.", + 4: "The media could not be loaded, either because the server or network failed or because the format is not supported.", + 5: "The media is encrypted and we do not have the keys to decrypt it." + }; + for (var Et = 0; Et < Ct.errorTypes.length; Et++) Ct[Ct.errorTypes[Et]] = Et, Ct.prototype[Ct.errorTypes[Et]] = Et; + var wt = function (e, t) { + var i, n = null; + try { + i = JSON.parse(e, t) + } catch (e) { + n = e + } + return [n, i] + }; + + function It(e) { + return null != e && "function" == typeof e.then + } + + function At(e) { + It(e) && e.then(null, function (e) {}) + } + + function xt(n) { + return ["kind", "label", "language", "id", "inBandMetadataTrackDispatchType", "mode", "src"].reduce(function (e, t, i) { + return n[t] && (e[t] = n[t]), e + }, { + cues: n.cues && Array.prototype.map.call(n.cues, function (e) { + return { + startTime: e.startTime, + endTime: e.endTime, + text: e.text, + id: e.id + } + }) + }) + } + var Pt = function (e) { + var t = e.$$("track"), + i = Array.prototype.map.call(t, function (e) { + return e.track + }); + return Array.prototype.map.call(t, function (e) { + var t = xt(e.track); + return e.src && (t.src = e.src), t + }).concat(Array.prototype.filter.call(e.textTracks(), function (e) { + return -1 === i.indexOf(e) + }).map(xt)) + }, + Lt = function (e, i) { + return e.forEach(function (e) { + var t = i.addRemoteTextTrack(e).track; + !e.src && e.cues && e.cues.forEach(function (e) { + return t.addCue(e) + }) + }), i.textTracks() + }, + Ot = i(function (e, t) { + function i(e) { + if (e && "object" == typeof e) { + var t = e.which || e.keyCode || e.charCode; + t && (e = t) + } + if ("number" == typeof e) return s[e]; + var i, n = String(e); + return (i = r[n.toLowerCase()]) ? i : (i = a[n.toLowerCase()]) || (1 === n.length ? n.charCodeAt(0) : void 0) + } + i.isEventKey = function (e, t) { + if (e && "object" == typeof e) { + var i = e.which || e.keyCode || e.charCode; + if (null == i) return !1; + if ("string" == typeof t) { + var n; + if (n = r[t.toLowerCase()]) return n === i; + if (n = a[t.toLowerCase()]) return n === i + } else if ("number" == typeof t) return t === i; + return !1 + } + }; + var r = (t = e.exports = i).code = t.codes = { + backspace: 8, + tab: 9, + enter: 13, + shift: 16, + ctrl: 17, + alt: 18, + "pause/break": 19, + "caps lock": 20, + esc: 27, + space: 32, + "page up": 33, + "page down": 34, + end: 35, + home: 36, + left: 37, + up: 38, + right: 39, + down: 40, + insert: 45, + delete: 46, + command: 91, + "left command": 91, + "right command": 93, + "numpad *": 106, + "numpad +": 107, + "numpad -": 109, + "numpad .": 110, + "numpad /": 111, + "num lock": 144, + "scroll lock": 145, + "my computer": 182, + "my calculator": 183, + ";": 186, + "=": 187, + ",": 188, + "-": 189, + ".": 190, + "/": 191, + "`": 192, + "[": 219, + "\\": 220, + "]": 221, + "'": 222 + }, + a = t.aliases = { + windows: 91, + "⇧": 16, + "⌥": 18, + "⌃": 17, + "⌘": 91, + ctl: 17, + control: 17, + option: 18, + pause: 19, + break: 19, + caps: 20, + return: 13, + escape: 27, + spc: 32, + spacebar: 32, + pgup: 33, + pgdn: 34, + ins: 45, + del: 46, + cmd: 91 + }; + for (n = 97; n < 123; n++) r[String.fromCharCode(n)] = n - 32; + for (var n = 48; n < 58; n++) r[n - 48] = n; + for (n = 1; n < 13; n++) r["f" + n] = n + 111; + for (n = 0; n < 10; n++) r["numpad " + n] = n + 96; + var s = t.names = t.title = {}; + for (n in r) s[r[n]] = n; + for (var o in a) r[o] = a[o] + }), + Dt = (Ot.code, Ot.codes, Ot.aliases, Ot.names, Ot.title, "vjs-modal-dialog"), + Mt = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).opened_ = i.hasBeenOpened_ = i.hasBeenFilled_ = !1, i.closeable(!i.options_.uncloseable), i.content(i.options_.content), i.contentEl_ = k("div", { + className: Dt + "-content" + }, { + role: "document" + }), i.descEl_ = k("p", { + className: Dt + "-description vjs-control-text", + id: i.el().getAttribute("aria-describedby") + }), C(i.descEl_, i.description()), i.el_.appendChild(i.descEl_), i.el_.appendChild(i.contentEl_), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + return n.prototype.createEl.call(this, "div", { + className: this.buildCSSClass(), + tabIndex: -1 + }, { + "aria-describedby": this.id() + "_description", + "aria-hidden": "true", + "aria-label": this.label(), + role: "dialog" + }) + }, t.dispose = function () { + this.contentEl_ = null, this.descEl_ = null, this.previouslyActiveEl_ = null, n.prototype.dispose.call(this) + }, t.buildCSSClass = function () { + return Dt + " vjs-hidden " + n.prototype.buildCSSClass.call(this) + }, t.label = function () { + return this.localize(this.options_.label || "Modal Window") + }, t.description = function () { + var e = this.options_.description || this.localize("This is a modal window."); + return this.closeable() && (e += " " + this.localize("This modal can be closed by pressing the Escape key or activating the close button.")), e + }, t.open = function () { + if (!this.opened_) { + var e = this.player(); + this.trigger("beforemodalopen"), this.opened_ = !0, !this.options_.fillAlways && (this.hasBeenOpened_ || this.hasBeenFilled_) || this.fill(), this.wasPlaying_ = !e.paused(), this.options_.pauseOnOpen && this.wasPlaying_ && e.pause(), this.on("keydown", this.handleKeyDown), this.hadControls_ = e.controls(), e.controls(!1), this.show(), this.conditionalFocus_(), this.el().setAttribute("aria-hidden", "false"), this.trigger("modalopen"), this.hasBeenOpened_ = !0 + } + }, t.opened = function (e) { + return "boolean" == typeof e && this[e ? "open" : "close"](), this.opened_ + }, t.close = function () { + if (this.opened_) { + var e = this.player(); + this.trigger("beforemodalclose"), this.opened_ = !1, this.wasPlaying_ && this.options_.pauseOnOpen && e.play(), this.off("keydown", this.handleKeyDown), this.hadControls_ && e.controls(!0), this.hide(), this.el().setAttribute("aria-hidden", "true"), this.trigger("modalclose"), this.conditionalBlur_(), this.options_.temporary && this.dispose() + } + }, t.closeable = function (e) { + if ("boolean" == typeof e) { + var t = this.closeable_ = !!e, + i = this.getChild("closeButton"); + if (t && !i) { + var n = this.contentEl_; + this.contentEl_ = this.el_, i = this.addChild("closeButton", { + controlText: "Close Modal Dialog" + }), this.contentEl_ = n, this.on(i, "close", this.close) + }!t && i && (this.off(i, "close", this.close), this.removeChild(i), i.dispose()) + } + return this.closeable_ + }, t.fill = function () { + this.fillWith(this.content()) + }, t.fillWith = function (e) { + var t = this.contentEl(), + i = t.parentNode, + n = t.nextSibling; + this.trigger("beforemodalfill"), this.hasBeenFilled_ = !0, i.removeChild(t), this.empty(), W(t, e), this.trigger("modalfill"), n ? i.insertBefore(t, n) : i.appendChild(t); + var r = this.getChild("closeButton"); + r && i.appendChild(r.el_) + }, t.empty = function () { + this.trigger("beforemodalempty"), V(this.contentEl()), this.trigger("modalempty") + }, t.content = function (e) { + return "undefined" != typeof e && (this.content_ = e), this.content_ + }, t.conditionalFocus_ = function () { + var e = d.activeElement, + t = this.player_.el_; + this.previouslyActiveEl_ = null, !t.contains(e) && t !== e || (this.previouslyActiveEl_ = e, this.focus()) + }, t.conditionalBlur_ = function () { + this.previouslyActiveEl_ && (this.previouslyActiveEl_.focus(), this.previouslyActiveEl_ = null) + }, t.handleKeyDown = function (e) { + if (e.stopPropagation(), Ot.isEventKey(e, "Escape") && this.closeable()) return e.preventDefault(), void this.close(); + if (Ot.isEventKey(e, "Tab")) { + for (var t, i = this.focusableEls_(), n = this.el_.querySelector(":focus"), r = 0; r < i.length; r++) + if (n === i[r]) { + t = r; + break + } d.activeElement === this.el_ && (t = 0), e.shiftKey && 0 === t ? (i[i.length - 1].focus(), e.preventDefault()) : e.shiftKey || t !== i.length - 1 || (i[0].focus(), e.preventDefault()) + } + }, t.focusableEls_ = function () { + var e = this.el_.querySelectorAll("*"); + return Array.prototype.filter.call(e, function (e) { + return (e instanceof T.HTMLAnchorElement || e instanceof T.HTMLAreaElement) && e.hasAttribute("href") || (e instanceof T.HTMLInputElement || e instanceof T.HTMLSelectElement || e instanceof T.HTMLTextAreaElement || e instanceof T.HTMLButtonElement) && !e.hasAttribute("disabled") || e instanceof T.HTMLIFrameElement || e instanceof T.HTMLObjectElement || e instanceof T.HTMLEmbedElement || e.hasAttribute("tabindex") && -1 !== e.getAttribute("tabindex") || e.hasAttribute("contenteditable") + }) + }, e + }(je); + Mt.prototype.options_ = { + pauseOnOpen: !0, + temporary: !0 + }, je.registerComponent("ModalDialog", Mt); + var Rt = function (n) { + function e(e) { + var t; + void 0 === e && (e = []), (t = n.call(this) || this).tracks_ = [], Object.defineProperty(Ve(t), "length", { + get: function () { + return this.tracks_.length + } + }); + for (var i = 0; i < e.length; i++) t.addTrack(e[i]); + return t + } + Ge(e, n); + var t = e.prototype; + return t.addTrack = function (e) { + var t = this.tracks_.length; + "" + t in this || Object.defineProperty(this, t, { + get: function () { + return this.tracks_[t] + } + }), -1 === this.tracks_.indexOf(e) && (this.tracks_.push(e), this.trigger({ + track: e, + type: "addtrack", + target: this + })) + }, t.removeTrack = function (e) { + for (var t, i = 0, n = this.length; i < n; i++) + if (this[i] === e) { + (t = this[i]).off && t.off(), this.tracks_.splice(i, 1); + break + } t && this.trigger({ + track: t, + type: "removetrack", + target: this + }) + }, t.getTrackById = function (e) { + for (var t = null, i = 0, n = this.length; i < n; i++) { + var r = this[i]; + if (r.id === e) { + t = r; + break + } + } + return t + }, e + }(_e); + for (var Nt in Rt.prototype.allowedEvents_ = { + change: "change", + addtrack: "addtrack", + removetrack: "removetrack" + }, Rt.prototype.allowedEvents_) Rt.prototype["on" + Nt] = null; + + function Ut(e, t) { + for (var i = 0; i < e.length; i++) Object.keys(e[i]).length && t.id !== e[i].id && (e[i].enabled = !1) + } + + function Ft(e, t) { + for (var i = 0; i < e.length; i++) Object.keys(e[i]).length && t.id !== e[i].id && (e[i].selected = !1) + } + + function Bt(e) { + var t = ["protocol", "hostname", "port", "pathname", "search", "hash", "host"], + i = d.createElement("a"); + i.href = e; + var n, r = "" === i.host && "file:" !== i.protocol; + r && ((n = d.createElement("div")).innerHTML = '', i = n.firstChild, n.setAttribute("style", "display:none; position:absolute;"), d.body.appendChild(n)); + for (var a = {}, s = 0; s < t.length; s++) a[t[s]] = i[t[s]]; + return "http:" === a.protocol && (a.host = a.host.replace(/:80$/, "")), "https:" === a.protocol && (a.host = a.host.replace(/:443$/, "")), a.protocol || (a.protocol = T.location.protocol), r && d.body.removeChild(n), a + } + + function jt(e) { + if (!e.match(/^https?:\/\//)) { + var t = d.createElement("div"); + t.innerHTML = 'x', e = t.firstChild.href + } + return e + } + + function Vt(e) { + if ("string" == typeof e) { + var t = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/.exec(e); + if (t) return t.pop().toLowerCase() + } + return "" + } + + function qt(e, t) { + void 0 === t && (t = T.location); + var i = Bt(e); + return (":" === i.protocol ? t.protocol : i.protocol) + i.host !== t.protocol + t.host + } + var Ht = function (n) { + function e(e) { + var t; + void 0 === e && (e = []); + for (var i = e.length - 1; 0 <= i; i--) + if (e[i].enabled) { + Ut(e, e[i]); + break + } return (t = n.call(this, e) || this).changing_ = !1, t + } + Ge(e, n); + var t = e.prototype; + return t.addTrack = function (e) { + var t = this; + e.enabled && Ut(this, e), n.prototype.addTrack.call(this, e), e.addEventListener && (e.enabledChange_ = function () { + t.changing_ || (t.changing_ = !0, Ut(t, e), t.changing_ = !1, t.trigger("change")) + }, e.addEventListener("enabledchange", e.enabledChange_)) + }, t.removeTrack = function (e) { + n.prototype.removeTrack.call(this, e), e.removeEventListener && e.enabledChange_ && (e.removeEventListener("enabledchange", e.enabledChange_), e.enabledChange_ = null) + }, e + }(Rt), + Wt = function (n) { + function e(e) { + var t; + void 0 === e && (e = []); + for (var i = e.length - 1; 0 <= i; i--) + if (e[i].selected) { + Ft(e, e[i]); + break + } return (t = n.call(this, e) || this).changing_ = !1, Object.defineProperty(Ve(t), "selectedIndex", { + get: function () { + for (var e = 0; e < this.length; e++) + if (this[e].selected) return e; + return -1 + }, + set: function () {} + }), t + } + Ge(e, n); + var t = e.prototype; + return t.addTrack = function (e) { + var t = this; + e.selected && Ft(this, e), n.prototype.addTrack.call(this, e), e.addEventListener && (e.selectedChange_ = function () { + t.changing_ || (t.changing_ = !0, Ft(t, e), t.changing_ = !1, t.trigger("change")) + }, e.addEventListener("selectedchange", e.selectedChange_)) + }, t.removeTrack = function (e) { + n.prototype.removeTrack.call(this, e), e.removeEventListener && e.selectedChange_ && (e.removeEventListener("selectedchange", e.selectedChange_), e.selectedChange_ = null) + }, e + }(Rt), + zt = function (i) { + function e() { + return i.apply(this, arguments) || this + } + Ge(e, i); + var t = e.prototype; + return t.addTrack = function (e) { + var t = this; + i.prototype.addTrack.call(this, e), this.queueChange_ || (this.queueChange_ = function () { + return t.queueTrigger("change") + }), this.triggerSelectedlanguagechange || (this.triggerSelectedlanguagechange_ = function () { + return t.trigger("selectedlanguagechange") + }), e.addEventListener("modechange", this.queueChange_); - 1 === ["metadata", "chapters"].indexOf(e.kind) && e.addEventListener("modechange", this.triggerSelectedlanguagechange_) + }, t.removeTrack = function (e) { + i.prototype.removeTrack.call(this, e), e.removeEventListener && (this.queueChange_ && e.removeEventListener("modechange", this.queueChange_), this.selectedlanguagechange_ && e.removeEventListener("modechange", this.triggerSelectedlanguagechange_)) + }, e + }(Rt), + Gt = function () { + function e(e) { + void 0 === e && (e = []), this.trackElements_ = [], Object.defineProperty(this, "length", { + get: function () { + return this.trackElements_.length + } + }); + for (var t = 0, i = e.length; t < i; t++) this.addTrackElement_(e[t]) + } + var t = e.prototype; + return t.addTrackElement_ = function (e) { + var t = this.trackElements_.length; + "" + t in this || Object.defineProperty(this, t, { + get: function () { + return this.trackElements_[t] + } + }), -1 === this.trackElements_.indexOf(e) && this.trackElements_.push(e) + }, t.getTrackElementByTrack_ = function (e) { + for (var t, i = 0, n = this.trackElements_.length; i < n; i++) + if (e === this.trackElements_[i].track) { + t = this.trackElements_[i]; + break + } return t + }, t.removeTrackElement_ = function (e) { + for (var t = 0, i = this.trackElements_.length; t < i; t++) + if (e === this.trackElements_[t]) { + this.trackElements_[t].track && "function" == typeof this.trackElements_[t].track.off && this.trackElements_[t].track.off(), "function" == typeof this.trackElements_[t].off && this.trackElements_[t].off(), this.trackElements_.splice(t, 1); + break + } + }, e + }(), + Xt = function () { + function t(e) { + t.prototype.setCues_.call(this, e), Object.defineProperty(this, "length", { + get: function () { + return this.length_ + } + }) + } + var e = t.prototype; + return e.setCues_ = function (e) { + var t = this.length || 0, + i = 0, + n = e.length; + this.cues_ = e, this.length_ = e.length; + + function r(e) { + "" + e in this || Object.defineProperty(this, "" + e, { + get: function () { + return this.cues_[e] + } + }) + } + if (t < n) + for (i = t; i < n; i++) r.call(this, i) + }, e.getCueById = function (e) { + for (var t = null, i = 0, n = this.length; i < n; i++) { + var r = this[i]; + if (r.id === e) { + t = r; + break + } + } + return t + }, t + }(), + Kt = { + alternative: "alternative", + captions: "captions", + main: "main", + sign: "sign", + subtitles: "subtitles", + commentary: "commentary" + }, + Yt = { + alternative: "alternative", + descriptions: "descriptions", + main: "main", + "main-desc": "main-desc", + translation: "translation", + commentary: "commentary" + }, + $t = { + subtitles: "subtitles", + captions: "captions", + descriptions: "descriptions", + chapters: "chapters", + metadata: "metadata" + }, + Qt = { + disabled: "disabled", + hidden: "hidden", + showing: "showing" + }, + Jt = function (a) { + function e(e) { + var t; + void 0 === e && (e = {}), t = a.call(this) || this; + + function i(e) { + Object.defineProperty(Ve(t), e, { + get: function () { + return n[e] + }, + set: function () {} + }) + } + var n = { + id: e.id || "vjs_track_" + re(), + kind: e.kind || "", + label: e.label || "", + language: e.language || "" + }; + for (var r in n) i(r); + return t + } + return Ge(e, a), e + }(_e), + Zt = Object.freeze({ + __proto__: null, + parseUrl: Bt, + getAbsoluteURL: jt, + getFileExtension: Vt, + isCrossOrigin: qt + }), + ei = function (e) { + var t = ti.call(e); + return "[object Function]" === t || "function" == typeof e && "[object RegExp]" !== t || "undefined" != typeof window && (e === window.setTimeout || e === window.alert || e === window.confirm || e === window.prompt) + } + /** + * @license + * slighly modified parse-headers 2.0.2 + * Copyright (c) 2014 David Björklund + * Available under the MIT license + * + */ + , + ti = Object.prototype.toString; + var ii = function (e) { + var r = {}; + return e && e.trim().split("\n").forEach(function (e) { + var t = e.indexOf(":"), + i = e.slice(0, t).trim().toLowerCase(), + n = e.slice(t + 1).trim(); + "undefined" == typeof r[i] ? r[i] = n : Array.isArray(r[i]) ? r[i].push(n) : r[i] = [r[i], n] + }), r + }, + ni = si, + ri = si; + + function ai(e, t, i) { + var n = e; + return ei(t) ? (i = t, "string" == typeof e && (n = { + uri: e + })) : n = m({}, t, { + uri: e + }), n.callback = i, n + } + + function si(e, t, i) { + return oi(t = ai(e, t, i)) + } + + function oi(n) { + if ("undefined" == typeof n.callback) throw new Error("callback argument missing"); + var r = !1, + a = function (e, t, i) { + r || (r = !0, n.callback(e, t, i)) + }; + + function t(e) { + return clearTimeout(o), e instanceof Error || (e = new Error("" + (e || "Unknown XMLHttpRequest Error"))), e.statusCode = 0, a(e, m) + } + + function e() { + if (!s) { + var e; + clearTimeout(o), e = n.useXDR && void 0 === u.status ? 200 : 1223 === u.status ? 204 : u.status; + var t = m, + i = null; + return 0 !== e ? (t = { + body: function () { + var e = void 0; + if (e = u.response ? u.response : u.responseText || function (e) { + try { + if ("document" === e.responseType) return e.responseXML; + var t = e.responseXML && "parsererror" === e.responseXML.documentElement.nodeName; + if ("" === e.responseType && !t) return e.responseXML + } catch (e) {} + return null + }(u), f) try { + e = JSON.parse(e) + } catch (e) {} + return e + }(), + statusCode: e, + method: c, + headers: {}, + url: l, + rawRequest: u + }, u.getAllResponseHeaders && (t.headers = ii(u.getAllResponseHeaders()))) : i = new Error("Internal XMLHttpRequest Error"), a(i, t, t.body) + } + } + var i, s, o, u = n.xhr || null, + l = (u = u || (n.cors || n.useXDR ? new si.XDomainRequest : new si.XMLHttpRequest)).url = n.uri || n.url, + c = u.method = n.method || "GET", + d = n.body || n.data, + h = u.headers = n.headers || {}, + p = !!n.sync, + f = !1, + m = { + body: void 0, + headers: {}, + statusCode: 0, + method: c, + url: l, + rawRequest: u + }; + if ("json" in n && !1 !== n.json && (f = !0, h.accept || h.Accept || (h.Accept = "application/json"), "GET" !== c && "HEAD" !== c && (h["content-type"] || h["Content-Type"] || (h["Content-Type"] = "application/json"), d = JSON.stringify(!0 === n.json ? d : n.json))), u.onreadystatechange = function () { + 4 === u.readyState && setTimeout(e, 0) + }, u.onload = e, u.onerror = t, u.onprogress = function () {}, u.onabort = function () { + s = !0 + }, u.ontimeout = t, u.open(c, l, !p, n.username, n.password), p || (u.withCredentials = !!n.withCredentials), !p && 0 < n.timeout && (o = setTimeout(function () { + if (!s) { + s = !0, u.abort("timeout"); + var e = new Error("XMLHttpRequest timeout"); + e.code = "ETIMEDOUT", t(e) + } + }, n.timeout)), u.setRequestHeader) + for (i in h) h.hasOwnProperty(i) && u.setRequestHeader(i, h[i]); + else if (n.headers && ! function (e) { + for (var t in e) + if (e.hasOwnProperty(t)) return !1; + return !0 + }(n.headers)) throw new Error("Headers cannot be set on an XDomainRequest object"); + return "responseType" in n && (u.responseType = n.responseType), "beforeSend" in n && "function" == typeof n.beforeSend && n.beforeSend(u), u.send(d || null), u + } + si.XMLHttpRequest = T.XMLHttpRequest || function () {}, si.XDomainRequest = "withCredentials" in new si.XMLHttpRequest ? si.XMLHttpRequest : T.XDomainRequest, + function (e, t) { + for (var i = 0; i < e.length; i++) t(e[i]) + }(["get", "put", "post", "patch", "head", "delete"], function (n) { + si["delete" === n ? "del" : n] = function (e, t, i) { + return (t = ai(e, t, i)).method = n.toUpperCase(), oi(t) + } + }), ni.default = ri; + + function ui(e, t) { + var i = new T.WebVTT.Parser(T, T.vttjs, T.WebVTT.StringDecoder()), + n = []; + i.oncue = function (e) { + t.addCue(e) + }, i.onparsingerror = function (e) { + n.push(e) + }, i.onflush = function () { + t.trigger({ + type: "loadeddata", + target: t + }) + }, i.parse(e), 0 < n.length && (T.console && T.console.groupCollapsed && T.console.groupCollapsed("Text Track parsing errors for " + t.src), n.forEach(function (e) { + return p.error(e) + }), T.console && T.console.groupEnd && T.console.groupEnd()), i.flush() + } + + function li(e, n) { + var t = { + uri: e + }, + i = qt(e); + i && (t.cors = i); + var r = "use-credentials" === n.tech_.crossOrigin(); + r && (t.withCredentials = r), ni(t, ve(this, function (e, t, i) { + if (e) return p.error(e, t); + n.loaded_ = !0, "function" != typeof T.WebVTT ? n.tech_ && n.tech_.any(["vttjsloaded", "vttjserror"], function (e) { + if ("vttjserror" !== e.type) return ui(i, n); + p.error("vttjs failed to load, stopping trying to process " + n.src) + }) : ui(i, n) + })) + } + var ci = function (l) { + function e(e) { + var t; + if (void 0 === e && (e = {}), !e.tech) throw new Error("A tech was not provided."); + var i = Re(e, { + kind: $t[e.kind] || "subtitles", + language: e.language || e.srclang || "" + }), + n = Qt[i.mode] || "disabled", + r = i.default; + "metadata" !== i.kind && "chapters" !== i.kind || (n = "hidden"), (t = l.call(this, i) || this).tech_ = i.tech, t.cues_ = [], t.activeCues_ = [], t.preload_ = !1 !== t.tech_.preloadTextTracks; + var a = new Xt(t.cues_), + s = new Xt(t.activeCues_), + o = !1, + u = ve(Ve(t), function () { + this.activeCues = this.activeCues, o && (this.trigger("cuechange"), o = !1) + }); + return "disabled" !== n && t.tech_.ready(function () { + t.tech_.on("timeupdate", u) + }, !0), Object.defineProperties(Ve(t), { + default: { + get: function () { + return r + }, + set: function () {} + }, + mode: { + get: function () { + return n + }, + set: function (e) { + var t = this; + Qt[e] && (n = e, this.preload_ || "disabled" === n || 0 !== this.cues.length || li(this.src, this), "disabled" !== n ? this.tech_.ready(function () { + t.tech_.on("timeupdate", u) + }, !0) : this.tech_.off("timeupdate", u), this.trigger("modechange")) + } + }, + cues: { + get: function () { + return this.loaded_ ? a : null + }, + set: function () {} + }, + activeCues: { + get: function () { + if (!this.loaded_) return null; + if (0 === this.cues.length) return s; + for (var e = this.tech_.currentTime(), t = [], i = 0, n = this.cues.length; i < n; i++) { + var r = this.cues[i]; + r.startTime <= e && r.endTime >= e ? t.push(r) : r.startTime === r.endTime && r.startTime <= e && r.startTime + .5 >= e && t.push(r) + } + if (o = !1, t.length !== this.activeCues_.length) o = !0; + else + for (var a = 0; a < t.length; a++) - 1 === this.activeCues_.indexOf(t[a]) && (o = !0); + return this.activeCues_ = t, s.setCues_(this.activeCues_), s + }, + set: function () {} + } + }), i.src ? (t.src = i.src, t.preload_ || (t.loaded_ = !0), (t.preload_ || r || "subtitles" !== i.kind && "captions" !== i.kind) && li(t.src, Ve(t))) : t.loaded_ = !0, t + } + Ge(e, l); + var t = e.prototype; + return t.addCue = function (e) { + var t = e; + if (T.vttjs && !(e instanceof T.vttjs.VTTCue)) { + for (var i in t = new T.vttjs.VTTCue(e.startTime, e.endTime, e.text), e) i in t || (t[i] = e[i]); + t.id = e.id, t.originalCue_ = e + } + for (var n = this.tech_.textTracks(), r = 0; r < n.length; r++) n[r] !== this && n[r].removeCue(t); + this.cues_.push(t), this.cues.setCues_(this.cues_) + }, t.removeCue = function (e) { + for (var t = this.cues_.length; t--;) { + var i = this.cues_[t]; + if (i === e || i.originalCue_ && i.originalCue_ === e) { + this.cues_.splice(t, 1), this.cues.setCues_(this.cues_); + break + } + } + }, e + }(Jt); + ci.prototype.allowedEvents_ = { + cuechange: "cuechange" + }; + var di = function (r) { + function e(e) { + var t; + void 0 === e && (e = {}); + var i = Re(e, { + kind: Yt[e.kind] || "" + }); + t = r.call(this, i) || this; + var n = !1; + return Object.defineProperty(Ve(t), "enabled", { + get: function () { + return n + }, + set: function (e) { + "boolean" == typeof e && e !== n && (n = e, this.trigger("enabledchange")) + } + }), i.enabled && (t.enabled = i.enabled), t.loaded_ = !0, t + } + return Ge(e, r), e + }(Jt), + hi = function (r) { + function e(e) { + var t; + void 0 === e && (e = {}); + var i = Re(e, { + kind: Kt[e.kind] || "" + }); + t = r.call(this, i) || this; + var n = !1; + return Object.defineProperty(Ve(t), "selected", { + get: function () { + return n + }, + set: function (e) { + "boolean" == typeof e && e !== n && (n = e, this.trigger("selectedchange")) + } + }), i.selected && (t.selected = i.selected), t + } + return Ge(e, r), e + }(Jt), + pi = function (r) { + function e(e) { + var t, i; + void 0 === e && (e = {}), t = r.call(this) || this; + var n = new ci(e); + return t.kind = n.kind, t.src = n.src, t.srclang = n.language, t.label = n.label, t.default = n.default, Object.defineProperties(Ve(t), { + readyState: { + get: function () { + return i + } + }, + track: { + get: function () { + return n + } + } + }), i = 0, n.addEventListener("loadeddata", function () { + i = 2, t.trigger({ + type: "load", + target: Ve(t) + }) + }), t + } + return Ge(e, r), e + }(_e); + pi.prototype.allowedEvents_ = { + load: "load" + }, pi.NONE = 0, pi.LOADING = 1, pi.LOADED = 2, pi.ERROR = 3; + var fi = { + audio: { + ListClass: Ht, + TrackClass: di, + capitalName: "Audio" + }, + video: { + ListClass: Wt, + TrackClass: hi, + capitalName: "Video" + }, + text: { + ListClass: zt, + TrackClass: ci, + capitalName: "Text" + } + }; + Object.keys(fi).forEach(function (e) { + fi[e].getterName = e + "Tracks", fi[e].privateName = e + "Tracks_" + }); + var mi = { + remoteText: { + ListClass: zt, + TrackClass: ci, + capitalName: "RemoteText", + getterName: "remoteTextTracks", + privateName: "remoteTextTracks_" + }, + remoteTextEl: { + ListClass: Gt, + TrackClass: pi, + capitalName: "RemoteTextTrackEls", + getterName: "remoteTextTrackEls", + privateName: "remoteTextTrackEls_" + } + }, + gi = m({}, fi, mi); + mi.names = Object.keys(mi), fi.names = Object.keys(fi), gi.names = [].concat(mi.names).concat(fi.names); + var vi = Object.create || function (e) { + if (1 !== arguments.length) throw new Error("Object.create shim only accepts one parameter."); + return yi.prototype = e, new yi + }; + + function yi() {} + + function _i(e, t) { + this.name = "ParsingError", this.code = e.code, this.message = t || e.message + } + + function bi(e) { + function t(e, t, i, n) { + return 3600 * (0 | e) + 60 * (0 | t) + (0 | i) + (0 | n) / 1e3 + } + var i = e.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/); + return i ? i[3] ? t(i[1], i[2], i[3].replace(":", ""), i[4]) : 59 < i[1] ? t(i[1], i[2], 0, i[4]) : t(0, i[1], i[2], i[4]) : null + } + + function Ti() { + this.values = vi(null) + } + + function Si(e, t, i, n) { + var r = n ? e.split(n) : [e]; + for (var a in r) + if ("string" == typeof r[a]) { + var s = r[a].split(i); + if (2 === s.length) t(s[0], s[1]) + } + } + + function ki(t, e, s) { + var i = t; + + function n() { + var e = bi(t); + if (null === e) throw new _i(_i.Errors.BadTimeStamp, "Malformed timestamp: " + i); + return t = t.replace(/^[^\sa-zA-Z-]+/, ""), e + } + + function r() { + t = t.replace(/^\s+/, "") + } + if (r(), e.startTime = n(), r(), "--\x3e" !== t.substr(0, 3)) throw new _i(_i.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '--\x3e'): " + i); + t = t.substr(3), r(), e.endTime = n(), r(), + function (e, t) { + var a = new Ti; + Si(e, function (e, t) { + switch (e) { + case "region": + for (var i = s.length - 1; 0 <= i; i--) + if (s[i].id === t) { + a.set(e, s[i].region); + break + } break; + case "vertical": + a.alt(e, t, ["rl", "lr"]); + break; + case "line": + var n = t.split(","), + r = n[0]; + a.integer(e, r), a.percent(e, r) && a.set("snapToLines", !1), a.alt(e, r, ["auto"]), 2 === n.length && a.alt("lineAlign", n[1], ["start", "center", "end"]); + break; + case "position": + n = t.split(","), a.percent(e, n[0]), 2 === n.length && a.alt("positionAlign", n[1], ["start", "center", "end"]); + break; + case "size": + a.percent(e, t); + break; + case "align": + a.alt(e, t, ["start", "center", "end", "left", "right"]) + } + }, /:/, /\s/), t.region = a.get("region", null), t.vertical = a.get("vertical", ""); + try { + t.line = a.get("line", "auto") + } catch (e) {} + t.lineAlign = a.get("lineAlign", "start"), t.snapToLines = a.get("snapToLines", !0), t.size = a.get("size", 100); + try { + t.align = a.get("align", "center") + } catch (e) { + t.align = a.get("align", "middle") + } + try { + t.position = a.get("position", "auto") + } catch (e) { + t.position = a.get("position", { + start: 0, + left: 0, + center: 50, + middle: 50, + end: 100, + right: 100 + }, t.align) + } + t.positionAlign = a.get("positionAlign", { + start: "start", + left: "start", + center: "center", + middle: "center", + end: "end", + right: "end" + }, t.align) + }(t, e) + }((_i.prototype = vi(Error.prototype)).constructor = _i).Errors = { + BadSignature: { + code: 0, + message: "Malformed WebVTT signature." + }, + BadTimeStamp: { + code: 1, + message: "Malformed time stamp." + } + }, Ti.prototype = { + set: function (e, t) { + this.get(e) || "" === t || (this.values[e] = t) + }, + get: function (e, t, i) { + return i ? this.has(e) ? this.values[e] : t[i] : this.has(e) ? this.values[e] : t + }, + has: function (e) { + return e in this.values + }, + alt: function (e, t, i) { + for (var n = 0; n < i.length; ++n) + if (t === i[n]) { + this.set(e, t); + break + } + }, + integer: function (e, t) { + /^-?\d+$/.test(t) && this.set(e, parseInt(t, 10)) + }, + percent: function (e, t) { + return !!(t.match(/^([\d]{1,3})(\.[\d]*)?%$/) && 0 <= (t = parseFloat(t)) && t <= 100) && (this.set(e, t), !0) + } + }; + var Ci = d.createElement("textarea"), + Ei = { + c: "span", + i: "i", + b: "b", + u: "u", + ruby: "ruby", + rt: "rt", + v: "span", + lang: "span" + }, + wi = { + white: "rgba(255,255,255,1)", + lime: "rgba(0,255,0,1)", + cyan: "rgba(0,255,255,1)", + red: "rgba(255,0,0,1)", + yellow: "rgba(255,255,0,1)", + magenta: "rgba(255,0,255,1)", + blue: "rgba(0,0,255,1)", + black: "rgba(0,0,0,1)" + }, + Ii = { + v: "title", + lang: "lang" + }, + Ai = { + rt: "ruby" + }; + + function xi(a, i) { + function e() { + if (!i) return null; + var e, t = i.match(/^([^<]*)(<[^>]*>?)?/); + return e = t[1] ? t[1] : t[2], i = i.substr(e.length), e + } + + function t(e, t) { + var i = Ei[e]; + if (!i) return null; + var n = a.document.createElement(i), + r = Ii[e]; + return r && t && (n[r] = t.trim()), n + } + for (var n, r, s, o, u = a.document.createElement("div"), l = u, c = []; null !== (n = e());) + if ("<" !== n[0]) l.appendChild(a.document.createTextNode((r = n, Ci.innerHTML = r, r = Ci.textContent, Ci.textContent = "", r))); + else { + if ("/" === n[1]) { + c.length && c[c.length - 1] === n.substr(2).replace(">", "") && (c.pop(), l = l.parentNode); + continue + } + var d, h = bi(n.substr(1, n.length - 2)); + if (h) { + d = a.document.createProcessingInstruction("timestamp", h), l.appendChild(d); + continue + } + var p = n.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/); + if (!p) continue; + if (!(d = t(p[1], p[3]))) continue; + if (s = l, Ai[(o = d).localName] && Ai[o.localName] !== s.localName) continue; + if (p[2]) { + var f = p[2].split("."); + f.forEach(function (e) { + var t = /^bg_/.test(e), + i = t ? e.slice(3) : e; + if (wi.hasOwnProperty(i)) { + var n = t ? "background-color" : "color", + r = wi[i]; + d.style[n] = r + } + }), d.className = f.join(" ") + } + c.push(p[1]), l.appendChild(d), l = d + } return u + } + var Pi = [ + [1470, 1470], + [1472, 1472], + [1475, 1475], + [1478, 1478], + [1488, 1514], + [1520, 1524], + [1544, 1544], + [1547, 1547], + [1549, 1549], + [1563, 1563], + [1566, 1610], + [1645, 1647], + [1649, 1749], + [1765, 1766], + [1774, 1775], + [1786, 1805], + [1807, 1808], + [1810, 1839], + [1869, 1957], + [1969, 1969], + [1984, 2026], + [2036, 2037], + [2042, 2042], + [2048, 2069], + [2074, 2074], + [2084, 2084], + [2088, 2088], + [2096, 2110], + [2112, 2136], + [2142, 2142], + [2208, 2208], + [2210, 2220], + [8207, 8207], + [64285, 64285], + [64287, 64296], + [64298, 64310], + [64312, 64316], + [64318, 64318], + [64320, 64321], + [64323, 64324], + [64326, 64449], + [64467, 64829], + [64848, 64911], + [64914, 64967], + [65008, 65020], + [65136, 65140], + [65142, 65276], + [67584, 67589], + [67592, 67592], + [67594, 67637], + [67639, 67640], + [67644, 67644], + [67647, 67669], + [67671, 67679], + [67840, 67867], + [67872, 67897], + [67903, 67903], + [67968, 68023], + [68030, 68031], + [68096, 68096], + [68112, 68115], + [68117, 68119], + [68121, 68147], + [68160, 68167], + [68176, 68184], + [68192, 68223], + [68352, 68405], + [68416, 68437], + [68440, 68466], + [68472, 68479], + [68608, 68680], + [126464, 126467], + [126469, 126495], + [126497, 126498], + [126500, 126500], + [126503, 126503], + [126505, 126514], + [126516, 126519], + [126521, 126521], + [126523, 126523], + [126530, 126530], + [126535, 126535], + [126537, 126537], + [126539, 126539], + [126541, 126543], + [126545, 126546], + [126548, 126548], + [126551, 126551], + [126553, 126553], + [126555, 126555], + [126557, 126557], + [126559, 126559], + [126561, 126562], + [126564, 126564], + [126567, 126570], + [126572, 126578], + [126580, 126583], + [126585, 126588], + [126590, 126590], + [126592, 126601], + [126603, 126619], + [126625, 126627], + [126629, 126633], + [126635, 126651], + [1114109, 1114109] + ]; + + function Li(e) { + for (var t = 0; t < Pi.length; t++) { + var i = Pi[t]; + if (e >= i[0] && e <= i[1]) return !0 + } + return !1 + } + + function Oi() {} + + function Di(e, t, i) { + Oi.call(this), this.cue = t, this.cueDiv = xi(e, t.text); + var n = { + color: "rgba(255, 255, 255, 1)", + backgroundColor: "rgba(0, 0, 0, 0.8)", + position: "relative", + left: 0, + right: 0, + top: 0, + bottom: 0, + display: "inline", + writingMode: "" === t.vertical ? "horizontal-tb" : "lr" === t.vertical ? "vertical-lr" : "vertical-rl", + unicodeBidi: "plaintext" + }; + this.applyStyles(n, this.cueDiv), this.div = e.document.createElement("div"), n = { + direction: function (e) { + var t = [], + i = ""; + if (!e || !e.childNodes) return "ltr"; + + function r(e, t) { + for (var i = t.childNodes.length - 1; 0 <= i; i--) e.push(t.childNodes[i]) + } + + function a(e) { + if (!e || !e.length) return null; + var t = e.pop(), + i = t.textContent || t.innerText; + if (i) { + var n = i.match(/^.*(\n|\r)/); + return n ? n[e.length = 0] : i + } + return "ruby" === t.tagName ? a(e) : t.childNodes ? (r(e, t), a(e)) : void 0 + } + for (r(t, e); i = a(t);) + for (var n = 0; n < i.length; n++) + if (Li(i.charCodeAt(n))) return "rtl"; + return "ltr" + }(this.cueDiv), + writingMode: "" === t.vertical ? "horizontal-tb" : "lr" === t.vertical ? "vertical-lr" : "vertical-rl", + unicodeBidi: "plaintext", + textAlign: "middle" === t.align ? "center" : t.align, + font: i.font, + whiteSpace: "pre-line", + position: "absolute" + }, this.applyStyles(n), this.div.appendChild(this.cueDiv); + var r = 0; + switch (t.positionAlign) { + case "start": + r = t.position; + break; + case "center": + r = t.position - t.size / 2; + break; + case "end": + r = t.position - t.size + } + "" === t.vertical ? this.applyStyles({ + left: this.formatStyle(r, "%"), + width: this.formatStyle(t.size, "%") + }) : this.applyStyles({ + top: this.formatStyle(r, "%"), + height: this.formatStyle(t.size, "%") + }), this.move = function (e) { + this.applyStyles({ + top: this.formatStyle(e.top, "px"), + bottom: this.formatStyle(e.bottom, "px"), + left: this.formatStyle(e.left, "px"), + right: this.formatStyle(e.right, "px"), + height: this.formatStyle(e.height, "px"), + width: this.formatStyle(e.width, "px") + }) + } + } + + function Mi(e) { + var t, i, n, r; + if (e.div) { + i = e.div.offsetHeight, n = e.div.offsetWidth, r = e.div.offsetTop; + var a = (a = e.div.childNodes) && (a = a[0]) && a.getClientRects && a.getClientRects(); + e = e.div.getBoundingClientRect(), t = a ? Math.max(a[0] && a[0].height || 0, e.height / a.length) : 0 + } + this.left = e.left, this.right = e.right, this.top = e.top || r, this.height = e.height || i, this.bottom = e.bottom || r + (e.height || i), this.width = e.width || n, this.lineHeight = void 0 !== t ? t : e.lineHeight + } + + function Ri(e, t, o, u) { + var i = new Mi(t), + n = t.cue, + r = function (e) { + if ("number" == typeof e.line && (e.snapToLines || 0 <= e.line && e.line <= 100)) return e.line; + if (!e.track || !e.track.textTrackList || !e.track.textTrackList.mediaElement) return -1; + for (var t = e.track, i = t.textTrackList, n = 0, r = 0; r < i.length && i[r] !== t; r++) "showing" === i[r].mode && n++; + return -1 * ++n + }(n), + a = []; + if (n.snapToLines) { + var s; + switch (n.vertical) { + case "": + a = ["+y", "-y"], s = "height"; + break; + case "rl": + a = ["+x", "-x"], s = "width"; + break; + case "lr": + a = ["-x", "+x"], s = "width" + } + var l = i.lineHeight, + c = l * Math.round(r), + d = o[s] + l, + h = a[0]; + Math.abs(c) > d && (c = c < 0 ? -1 : 1, c *= Math.ceil(d / l) * l), r < 0 && (c += "" === n.vertical ? o.height : o.width, a = a.reverse()), i.move(h, c) + } else { + var p = i.lineHeight / o.height * 100; + switch (n.lineAlign) { + case "center": + r -= p / 2; + break; + case "end": + r -= p + } + switch (n.vertical) { + case "": + t.applyStyles({ + top: t.formatStyle(r, "%") + }); + break; + case "rl": + t.applyStyles({ + left: t.formatStyle(r, "%") + }); + break; + case "lr": + t.applyStyles({ + right: t.formatStyle(r, "%") + }) + } + a = ["+y", "-x", "+x", "-y"], i = new Mi(t) + } + var f = function (e, t) { + for (var i, n = new Mi(e), r = 1, a = 0; a < t.length; a++) { + for (; e.overlapsOppositeAxis(o, t[a]) || e.within(o) && e.overlapsAny(u);) e.move(t[a]); + if (e.within(o)) return e; + var s = e.intersectPercentage(o); + s < r && (i = new Mi(e), r = s), e = new Mi(n) + } + return i || n + }(i, a); + t.move(f.toCSSCompatValues(o)) + } + + function Ni() {} + Oi.prototype.applyStyles = function (e, t) { + for (var i in t = t || this.div, e) e.hasOwnProperty(i) && (t.style[i] = e[i]) + }, Oi.prototype.formatStyle = function (e, t) { + return 0 === e ? 0 : e + t + }, (Di.prototype = vi(Oi.prototype)).constructor = Di, Mi.prototype.move = function (e, t) { + switch (t = void 0 !== t ? t : this.lineHeight, e) { + case "+x": + this.left += t, this.right += t; + break; + case "-x": + this.left -= t, this.right -= t; + break; + case "+y": + this.top += t, this.bottom += t; + break; + case "-y": + this.top -= t, this.bottom -= t + } + }, Mi.prototype.overlaps = function (e) { + return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top + }, Mi.prototype.overlapsAny = function (e) { + for (var t = 0; t < e.length; t++) + if (this.overlaps(e[t])) return !0; + return !1 + }, Mi.prototype.within = function (e) { + return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right + }, Mi.prototype.overlapsOppositeAxis = function (e, t) { + switch (t) { + case "+x": + return this.left < e.left; + case "-x": + return this.right > e.right; + case "+y": + return this.top < e.top; + case "-y": + return this.bottom > e.bottom + } + }, Mi.prototype.intersectPercentage = function (e) { + return Math.max(0, Math.min(this.right, e.right) - Math.max(this.left, e.left)) * Math.max(0, Math.min(this.bottom, e.bottom) - Math.max(this.top, e.top)) / (this.height * this.width) + }, Mi.prototype.toCSSCompatValues = function (e) { + return { + top: this.top - e.top, + bottom: e.bottom - this.bottom, + left: this.left - e.left, + right: e.right - this.right, + height: this.height, + width: this.width + } + }, Mi.getSimpleBoxPosition = function (e) { + var t = e.div ? e.div.offsetHeight : e.tagName ? e.offsetHeight : 0, + i = e.div ? e.div.offsetWidth : e.tagName ? e.offsetWidth : 0, + n = e.div ? e.div.offsetTop : e.tagName ? e.offsetTop : 0; + return { + left: (e = e.div ? e.div.getBoundingClientRect() : e.tagName ? e.getBoundingClientRect() : e).left, + right: e.right, + top: e.top || n, + height: e.height || t, + bottom: e.bottom || n + (e.height || t), + width: e.width || i + } + }, Ni.StringDecoder = function () { + return { + decode: function (e) { + if (!e) return ""; + if ("string" != typeof e) throw new Error("Error - expected string data."); + return decodeURIComponent(encodeURIComponent(e)) + } + } + }, Ni.convertCueToDOMTree = function (e, t) { + return e && t ? xi(e, t) : null + }; + Ni.processCues = function (n, r, e) { + if (!n || !r || !e) return null; + for (; e.firstChild;) e.removeChild(e.firstChild); + var a = n.document.createElement("div"); + if (a.style.position = "absolute", a.style.left = "0", a.style.right = "0", a.style.top = "0", a.style.bottom = "0", a.style.margin = "1.5%", e.appendChild(a), function (e) { + for (var t = 0; t < e.length; t++) + if (e[t].hasBeenReset || !e[t].displayState) return !0; + return !1 + }(r)) { + var s = [], + o = Mi.getSimpleBoxPosition(a), + u = { + font: Math.round(.05 * o.height * 100) / 100 + "px sans-serif" + }; + ! function () { + for (var e, t, i = 0; i < r.length; i++) t = r[i], e = new Di(n, t, u), a.appendChild(e.div), Ri(0, e, o, s), t.displayState = e.div, s.push(Mi.getSimpleBoxPosition(e)) + }() + } else + for (var t = 0; t < r.length; t++) a.appendChild(r[t].displayState) + }, (Ni.Parser = function (e, t, i) { + i || (i = t, t = {}), t = t || {}, this.window = e, this.vttjs = t, this.state = "INITIAL", this.buffer = "", this.decoder = i || new TextDecoder("utf8"), this.regionList = [] + }).prototype = { + reportOrThrowError: function (e) { + if (!(e instanceof _i)) throw e; + this.onparsingerror && this.onparsingerror(e) + }, + parse: function (e) { + var n = this; + + function t() { + for (var e = n.buffer, t = 0; t < e.length && "\r" !== e[t] && "\n" !== e[t];) ++t; + var i = e.substr(0, t); + return "\r" === e[t] && ++t, "\n" === e[t] && ++t, n.buffer = e.substr(t), i + } + + function i(e) { + e.match(/X-TIMESTAMP-MAP/) ? Si(e, function (e, t) { + switch (e) { + case "X-TIMESTAMP-MAP": + ! function (e) { + var i = new Ti; + Si(e, function (e, t) { + switch (e) { + case "MPEGT": + i.integer(e + "S", t); + break; + case "LOCA": + i.set(e + "L", bi(t)) + } + }, /[^\d]:/, /,/), n.ontimestampmap && n.ontimestampmap({ + MPEGTS: i.get("MPEGTS"), + LOCAL: i.get("LOCAL") + }) + }(t) + } + }, /=/) : Si(e, function (e, t) { + switch (e) { + case "Region": + ! function (e) { + var r = new Ti; + if (Si(e, function (e, t) { + switch (e) { + case "id": + r.set(e, t); + break; + case "width": + r.percent(e, t); + break; + case "lines": + r.integer(e, t); + break; + case "regionanchor": + case "viewportanchor": + var i = t.split(","); + if (2 !== i.length) break; + var n = new Ti; + if (n.percent("x", i[0]), n.percent("y", i[1]), !n.has("x") || !n.has("y")) break; + r.set(e + "X", n.get("x")), r.set(e + "Y", n.get("y")); + break; + case "scroll": + r.alt(e, t, ["up"]) + } + }, /=/, /\s/), r.has("id")) { + var t = new(n.vttjs.VTTRegion || n.window.VTTRegion); + t.width = r.get("width", 100), t.lines = r.get("lines", 3), t.regionAnchorX = r.get("regionanchorX", 0), t.regionAnchorY = r.get("regionanchorY", 100), t.viewportAnchorX = r.get("viewportanchorX", 0), t.viewportAnchorY = r.get("viewportanchorY", 100), t.scroll = r.get("scroll", ""), n.onregion && n.onregion(t), n.regionList.push({ + id: r.get("id"), + region: t + }) + } + }(t) + } + }, /:/) + } + e && (n.buffer += n.decoder.decode(e, { + stream: !0 + })); + try { + var r; + if ("INITIAL" === n.state) { + if (!/\r\n|\n/.test(n.buffer)) return this; + var a = (r = t()).match(/^WEBVTT([ \t].*)?$/); + if (!a || !a[0]) throw new _i(_i.Errors.BadSignature); + n.state = "HEADER" + } + for (var s = !1; n.buffer;) { + if (!/\r\n|\n/.test(n.buffer)) return this; + switch (s ? s = !1 : r = t(), n.state) { + case "HEADER": + /:/.test(r) ? i(r) : r || (n.state = "ID"); + continue; + case "NOTE": + r || (n.state = "ID"); + continue; + case "ID": + if (/^NOTE($|[ \t])/.test(r)) { + n.state = "NOTE"; + break + } + if (!r) continue; + n.cue = new(n.vttjs.VTTCue || n.window.VTTCue)(0, 0, ""); + try { + n.cue.align = "center" + } catch (e) { + n.cue.align = "middle" + } + if (n.state = "CUE", -1 === r.indexOf("--\x3e")) { + n.cue.id = r; + continue + } + case "CUE": + try { + ki(r, n.cue, n.regionList) + } catch (e) { + n.reportOrThrowError(e), n.cue = null, n.state = "BADCUE"; + continue + } + n.state = "CUETEXT"; + continue; + case "CUETEXT": + var o = -1 !== r.indexOf("--\x3e"); + if (!r || o && (s = !0)) { + n.oncue && n.oncue(n.cue), n.cue = null, n.state = "ID"; + continue + } + n.cue.text && (n.cue.text += "\n"), n.cue.text += r.replace(/\u2028/g, "\n").replace(/u2029/g, "\n"); + continue; + case "BADCUE": + r || (n.state = "ID"); + continue + } + } + } catch (e) { + n.reportOrThrowError(e), "CUETEXT" === n.state && n.cue && n.oncue && n.oncue(n.cue), n.cue = null, n.state = "INITIAL" === n.state ? "BADWEBVTT" : "BADCUE" + } + return this + }, + flush: function () { + var t = this; + try { + if (t.buffer += t.decoder.decode(), !t.cue && "HEADER" !== t.state || (t.buffer += "\n\n", t.parse()), "INITIAL" === t.state) throw new _i(_i.Errors.BadSignature) + } catch (e) { + t.reportOrThrowError(e) + } + return t.onflush && t.onflush(), this + } + }; + var Ui = Ni, + Fi = { + "": 1, + lr: 1, + rl: 1 + }, + Bi = { + start: 1, + center: 1, + end: 1, + left: 1, + right: 1, + auto: 1, + "line-left": 1, + "line-right": 1 + }; + + function ji(e) { + return "string" == typeof e && (!!Bi[e.toLowerCase()] && e.toLowerCase()) + } + + function Vi(e, t, i) { + this.hasBeenReset = !1; + var n = "", + r = !1, + a = e, + s = t, + o = i, + u = null, + l = "", + c = !0, + d = "auto", + h = "start", + p = "auto", + f = "auto", + m = 100, + g = "center"; + Object.defineProperties(this, { + id: { + enumerable: !0, + get: function () { + return n + }, + set: function (e) { + n = "" + e + } + }, + pauseOnExit: { + enumerable: !0, + get: function () { + return r + }, + set: function (e) { + r = !!e + } + }, + startTime: { + enumerable: !0, + get: function () { + return a + }, + set: function (e) { + if ("number" != typeof e) throw new TypeError("Start time must be set to a number."); + a = e, this.hasBeenReset = !0 + } + }, + endTime: { + enumerable: !0, + get: function () { + return s + }, + set: function (e) { + if ("number" != typeof e) throw new TypeError("End time must be set to a number."); + s = e, this.hasBeenReset = !0 + } + }, + text: { + enumerable: !0, + get: function () { + return o + }, + set: function (e) { + o = "" + e, this.hasBeenReset = !0 + } + }, + region: { + enumerable: !0, + get: function () { + return u + }, + set: function (e) { + u = e, this.hasBeenReset = !0 + } + }, + vertical: { + enumerable: !0, + get: function () { + return l + }, + set: function (e) { + var t = function (e) { + return "string" == typeof e && (!!Fi[e.toLowerCase()] && e.toLowerCase()) + }(e); + if (!1 === t) throw new SyntaxError("Vertical: an invalid or illegal direction string was specified."); + l = t, this.hasBeenReset = !0 + } + }, + snapToLines: { + enumerable: !0, + get: function () { + return c + }, + set: function (e) { + c = !!e, this.hasBeenReset = !0 + } + }, + line: { + enumerable: !0, + get: function () { + return d + }, + set: function (e) { + if ("number" != typeof e && "auto" !== e) throw new SyntaxError("Line: an invalid number or illegal string was specified."); + d = e, this.hasBeenReset = !0 + } + }, + lineAlign: { + enumerable: !0, + get: function () { + return h + }, + set: function (e) { + var t = ji(e); + t && (h = t, this.hasBeenReset = !0) + } + }, + position: { + enumerable: !0, + get: function () { + return p + }, + set: function (e) { + if (e < 0 || 100 < e) throw new Error("Position must be between 0 and 100."); + p = e, this.hasBeenReset = !0 + } + }, + positionAlign: { + enumerable: !0, + get: function () { + return f + }, + set: function (e) { + var t = ji(e); + t && (f = t, this.hasBeenReset = !0) + } + }, + size: { + enumerable: !0, + get: function () { + return m + }, + set: function (e) { + if (e < 0 || 100 < e) throw new Error("Size must be between 0 and 100."); + m = e, this.hasBeenReset = !0 + } + }, + align: { + enumerable: !0, + get: function () { + return g + }, + set: function (e) { + var t = ji(e); + if (!t) throw new SyntaxError("align: an invalid or illegal alignment string was specified."); + g = t, this.hasBeenReset = !0 + } + } + }), this.displayState = void 0 + } + Vi.prototype.getCueAsHTML = function () { + return WebVTT.convertCueToDOMTree(window, this.text) + }; + var qi = Vi, + Hi = { + "": !0, + up: !0 + }; + + function Wi(e) { + return "number" == typeof e && 0 <= e && e <= 100 + } + + function zi() { + var t = 100, + i = 3, + n = 0, + r = 100, + a = 0, + s = 100, + o = ""; + Object.defineProperties(this, { + width: { + enumerable: !0, + get: function () { + return t + }, + set: function (e) { + if (!Wi(e)) throw new Error("Width must be between 0 and 100."); + t = e + } + }, + lines: { + enumerable: !0, + get: function () { + return i + }, + set: function (e) { + if ("number" != typeof e) throw new TypeError("Lines must be set to a number."); + i = e + } + }, + regionAnchorY: { + enumerable: !0, + get: function () { + return r + }, + set: function (e) { + if (!Wi(e)) throw new Error("RegionAnchorX must be between 0 and 100."); + r = e + } + }, + regionAnchorX: { + enumerable: !0, + get: function () { + return n + }, + set: function (e) { + if (!Wi(e)) throw new Error("RegionAnchorY must be between 0 and 100."); + n = e + } + }, + viewportAnchorY: { + enumerable: !0, + get: function () { + return s + }, + set: function (e) { + if (!Wi(e)) throw new Error("ViewportAnchorY must be between 0 and 100."); + s = e + } + }, + viewportAnchorX: { + enumerable: !0, + get: function () { + return a + }, + set: function (e) { + if (!Wi(e)) throw new Error("ViewportAnchorX must be between 0 and 100."); + a = e + } + }, + scroll: { + enumerable: !0, + get: function () { + return o + }, + set: function (e) { + var t = function (e) { + return "string" == typeof e && (!!Hi[e.toLowerCase()] && e.toLowerCase()) + }(e); + !1 === t || (o = t) + } + } + }) + } + var Gi = i(function (e) { + var t = e.exports = { + WebVTT: Ui, + VTTCue: qi, + VTTRegion: zi + }; + T.vttjs = t, T.WebVTT = t.WebVTT; + var i = t.VTTCue, + n = t.VTTRegion, + r = T.VTTCue, + a = T.VTTRegion; + t.shim = function () { + T.VTTCue = i, T.VTTRegion = n + }, t.restore = function () { + T.VTTCue = r, T.VTTRegion = a + }, T.VTTCue || t.shim() + }); + Gi.WebVTT, Gi.VTTCue, Gi.VTTRegion; + var Xi = function (t) { + function i(i, e) { + var n; + return void 0 === i && (i = {}), void 0 === e && (e = function () {}), i.reportTouchActivity = !1, (n = t.call(this, null, i, e) || this).hasStarted_ = !1, n.on("playing", function () { + this.hasStarted_ = !0 + }), n.on("loadstart", function () { + this.hasStarted_ = !1 + }), gi.names.forEach(function (e) { + var t = gi[e]; + i && i[t.getterName] && (n[t.privateName] = i[t.getterName]) + }), n.featuresProgressEvents || n.manualProgressOn(), n.featuresTimeupdateEvents || n.manualTimeUpdatesOn(), ["Text", "Audio", "Video"].forEach(function (e) { + !1 === i["native" + e + "Tracks"] && (n["featuresNative" + e + "Tracks"] = !1) + }), !1 === i.nativeCaptions || !1 === i.nativeTextTracks ? n.featuresNativeTextTracks = !1 : !0 !== i.nativeCaptions && !0 !== i.nativeTextTracks || (n.featuresNativeTextTracks = !0), n.featuresNativeTextTracks || n.emulateTextTracks(), n.preloadTextTracks = !1 !== i.preloadTextTracks, n.autoRemoteTextTracks_ = new gi.text.ListClass, n.initTrackListeners(), i.nativeControlsForTouch || n.emitTapEvents(), n.constructor && (n.name_ = n.constructor.name || "Unknown Tech"), n + } + Ge(i, t); + var e = i.prototype; + return e.triggerSourceset = function (e) { + var t = this; + this.isReady_ || this.one("ready", function () { + return t.setTimeout(function () { + return t.triggerSourceset(e) + }, 1) + }), this.trigger({ + src: e, + type: "sourceset" + }) + }, e.manualProgressOn = function () { + this.on("durationchange", this.onDurationChange), this.manualProgress = !0, this.one("ready", this.trackProgress) + }, e.manualProgressOff = function () { + this.manualProgress = !1, this.stopTrackingProgress(), this.off("durationchange", this.onDurationChange) + }, e.trackProgress = function (e) { + this.stopTrackingProgress(), this.progressInterval = this.setInterval(ve(this, function () { + var e = this.bufferedPercent(); + this.bufferedPercent_ !== e && this.trigger("progress"), 1 === (this.bufferedPercent_ = e) && this.stopTrackingProgress() + }), 500) + }, e.onDurationChange = function (e) { + this.duration_ = this.duration() + }, e.buffered = function () { + return gt(0, 0) + }, e.bufferedPercent = function () { + return vt(this.buffered(), this.duration_) + }, e.stopTrackingProgress = function () { + this.clearInterval(this.progressInterval) + }, e.manualTimeUpdatesOn = function () { + this.manualTimeUpdates = !0, this.on("play", this.trackCurrentTime), this.on("pause", this.stopTrackingCurrentTime) + }, e.manualTimeUpdatesOff = function () { + this.manualTimeUpdates = !1, this.stopTrackingCurrentTime(), this.off("play", this.trackCurrentTime), this.off("pause", this.stopTrackingCurrentTime) + }, e.trackCurrentTime = function () { + this.currentTimeInterval && this.stopTrackingCurrentTime(), this.currentTimeInterval = this.setInterval(function () { + this.trigger({ + type: "timeupdate", + target: this, + manuallyTriggered: !0 + }) + }, 250) + }, e.stopTrackingCurrentTime = function () { + this.clearInterval(this.currentTimeInterval), this.trigger({ + type: "timeupdate", + target: this, + manuallyTriggered: !0 + }) + }, e.dispose = function () { + this.clearTracks(fi.names), this.manualProgress && this.manualProgressOff(), this.manualTimeUpdates && this.manualTimeUpdatesOff(), t.prototype.dispose.call(this) + }, e.clearTracks = function (e) { + var r = this; + (e = [].concat(e)).forEach(function (e) { + for (var t = r[e + "Tracks"]() || [], i = t.length; i--;) { + var n = t[i]; + "text" === e && r.removeRemoteTextTrack(n), t.removeTrack(n) + } + }) + }, e.cleanupAutoTextTracks = function () { + for (var e = this.autoRemoteTextTracks_ || [], t = e.length; t--;) { + var i = e[t]; + this.removeRemoteTextTrack(i) + } + }, e.reset = function () {}, e.crossOrigin = function () {}, e.setCrossOrigin = function () {}, e.error = function (e) { + return void 0 !== e && (this.error_ = new Ct(e), this.trigger("error")), this.error_ + }, e.played = function () { + return this.hasStarted_ ? gt(0, 0) : gt() + }, e.setScrubbing = function () {}, e.setCurrentTime = function () { + this.manualTimeUpdates && this.trigger({ + type: "timeupdate", + target: this, + manuallyTriggered: !0 + }) + }, e.initTrackListeners = function () { + var r = this; + fi.names.forEach(function (e) { + function t() { + r.trigger(e + "trackchange") + } + var i = fi[e], + n = r[i.getterName](); + n.addEventListener("removetrack", t), n.addEventListener("addtrack", t), r.on("dispose", function () { + n.removeEventListener("removetrack", t), n.removeEventListener("addtrack", t) + }) + }) + }, e.addWebVttScript_ = function () { + var e = this; + if (!T.WebVTT) + if (d.body.contains(this.el())) { + if (!this.options_["vtt.js"] && o(Gi) && 0 < Object.keys(Gi).length) return void this.trigger("vttjsloaded"); + var t = d.createElement("script"); + t.src = this.options_["vtt.js"] || "https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js", t.onload = function () { + e.trigger("vttjsloaded") + }, t.onerror = function () { + e.trigger("vttjserror") + }, this.on("dispose", function () { + t.onload = null, t.onerror = null + }), T.WebVTT = !0, this.el().parentNode.appendChild(t) + } else this.ready(this.addWebVttScript_) + }, e.emulateTextTracks = function () { + function t(e) { + return n.addTrack(e.track) + } + + function i(e) { + return n.removeTrack(e.track) + } + var e = this, + n = this.textTracks(), + r = this.remoteTextTracks(); + r.on("addtrack", t), r.on("removetrack", i), this.addWebVttScript_(); + + function a() { + return e.trigger("texttrackchange") + } + + function s() { + a(); + for (var e = 0; e < n.length; e++) { + var t = n[e]; + t.removeEventListener("cuechange", a), "showing" === t.mode && t.addEventListener("cuechange", a) + } + } + s(), n.addEventListener("change", s), n.addEventListener("addtrack", s), n.addEventListener("removetrack", s), this.on("dispose", function () { + r.off("addtrack", t), r.off("removetrack", i), n.removeEventListener("change", s), n.removeEventListener("addtrack", s), n.removeEventListener("removetrack", s); + for (var e = 0; e < n.length; e++) { + n[e].removeEventListener("cuechange", a) + } + }) + }, e.addTextTrack = function (e, t, i) { + if (!e) throw new Error("TextTrack kind is required but was not provided"); + return function (e, t, i, n, r) { + void 0 === r && (r = {}); + var a = e.textTracks(); + r.kind = t, i && (r.label = i), n && (r.language = n), r.tech = e; + var s = new gi.text.TrackClass(r); + return a.addTrack(s), s + }(this, e, t, i) + }, e.createRemoteTextTrack = function (e) { + var t = Re(e, { + tech: this + }); + return new mi.remoteTextEl.TrackClass(t) + }, e.addRemoteTextTrack = function (e, t) { + var i = this; + void 0 === e && (e = {}); + var n = this.createRemoteTextTrack(e); + return !0 !== t && !1 !== t && (p.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'), t = !0), this.remoteTextTrackEls().addTrackElement_(n), this.remoteTextTracks().addTrack(n.track), !0 !== t && this.ready(function () { + return i.autoRemoteTextTracks_.addTrack(n.track) + }), n + }, e.removeRemoteTextTrack = function (e) { + var t = this.remoteTextTrackEls().getTrackElementByTrack_(e); + this.remoteTextTrackEls().removeTrackElement_(t), this.remoteTextTracks().removeTrack(e), this.autoRemoteTextTracks_.removeTrack(e) + }, e.getVideoPlaybackQuality = function () { + return {} + }, e.requestPictureInPicture = function () { + var e = this.options_.Promise || T.Promise; + if (e) return e.reject() + }, e.disablePictureInPicture = function () { + return !0 + }, e.setDisablePictureInPicture = function () {}, e.setPoster = function () {}, e.playsinline = function () {}, e.setPlaysinline = function () {}, e.overrideNativeAudioTracks = function () {}, e.overrideNativeVideoTracks = function () {}, e.canPlayType = function () { + return "" + }, i.canPlayType = function () { + return "" + }, i.canPlaySource = function (e, t) { + return i.canPlayType(e.type) + }, i.isTech = function (e) { + return e.prototype instanceof i || e instanceof i || e === i + }, i.registerTech = function (e, t) { + if (i.techs_ || (i.techs_ = {}), !i.isTech(t)) throw new Error("Tech " + e + " must be a Tech"); + if (!i.canPlayType) throw new Error("Techs must have a static canPlayType method on them"); + if (!i.canPlaySource) throw new Error("Techs must have a static canPlaySource method on them"); + return e = Me(e), i.techs_[e] = t, i.techs_[De(e)] = t, "Tech" !== e && i.defaultTechOrder_.push(e), t + }, i.getTech = function (e) { + if (e) return i.techs_ && i.techs_[e] ? i.techs_[e] : (e = Me(e), T && T.videojs && T.videojs[e] ? (p.warn("The " + e + " tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)"), T.videojs[e]) : void 0) + }, i + }(je); + gi.names.forEach(function (e) { + var t = gi[e]; + Xi.prototype[t.getterName] = function () { + return this[t.privateName] = this[t.privateName] || new t.ListClass, this[t.privateName] + } + }), Xi.prototype.featuresVolumeControl = !0, Xi.prototype.featuresMuteControl = !0, Xi.prototype.featuresFullscreenResize = !1, Xi.prototype.featuresPlaybackRate = !1, Xi.prototype.featuresProgressEvents = !1, Xi.prototype.featuresSourceset = !1, Xi.prototype.featuresTimeupdateEvents = !1, Xi.prototype.featuresNativeTextTracks = !1, Xi.withSourceHandlers = function (r) { + r.registerSourceHandler = function (e, t) { + var i = r.sourceHandlers; + i = i || (r.sourceHandlers = []), void 0 === t && (t = i.length), i.splice(t, 0, e) + }, r.canPlayType = function (e) { + for (var t, i = r.sourceHandlers || [], n = 0; n < i.length; n++) + if (t = i[n].canPlayType(e)) return t; + return "" + }, r.selectSourceHandler = function (e, t) { + for (var i = r.sourceHandlers || [], n = 0; n < i.length; n++) + if (i[n].canHandleSource(e, t)) return i[n]; + return null + }, r.canPlaySource = function (e, t) { + var i = r.selectSourceHandler(e, t); + return i ? i.canHandleSource(e, t) : "" + }; + ["seekable", "seeking", "duration"].forEach(function (e) { + var t = this[e]; + "function" == typeof t && (this[e] = function () { + return this.sourceHandler_ && this.sourceHandler_[e] ? this.sourceHandler_[e].apply(this.sourceHandler_, arguments) : t.apply(this, arguments) + }) + }, r.prototype), r.prototype.setSource = function (e) { + var t = r.selectSourceHandler(e, this.options_); + t || (r.nativeSourceHandler ? t = r.nativeSourceHandler : p.error("No source handler found for the current source.")), this.disposeSourceHandler(), this.off("dispose", this.disposeSourceHandler), t !== r.nativeSourceHandler && (this.currentSource_ = e), this.sourceHandler_ = t.handleSource(e, this, this.options_), this.one("dispose", this.disposeSourceHandler) + }, r.prototype.disposeSourceHandler = function () { + this.currentSource_ && (this.clearTracks(["audio", "video"]), this.currentSource_ = null), this.cleanupAutoTextTracks(), this.sourceHandler_ && (this.sourceHandler_.dispose && this.sourceHandler_.dispose(), this.sourceHandler_ = null) + } + }, je.registerComponent("Tech", Xi), Xi.registerTech("Tech", Xi), Xi.defaultTechOrder_ = []; + var Ki = {}, + Yi = {}, + $i = {}; + + function Qi(e, t, i) { + e.setTimeout(function () { + return function i(n, e, r, a, s, o) { + void 0 === n && (n = {}); + void 0 === e && (e = []); + void 0 === s && (s = []); + void 0 === o && (o = !1); + var t = e, + u = t[0], + l = t.slice(1); + if ("string" == typeof u) i(n, Ki[u], r, a, s, o); + else if (u) { + var c = rn(a, u); + if (!c.setSource) return s.push(c), i(n, l, r, a, s, o); + c.setSource(g({}, n), function (e, t) { + if (e) return i(n, l, r, a, s, o); + s.push(c), i(t, n.type === t.type ? l : Ki[t.type], r, a, s, o) + }) + } else l.length ? i(n, l, r, a, s, o) : o ? r(n, s) : i(n, Ki["*"], r, a, s, !0) + }(t, Ki[t.type], i, e) + }, 1) + } + + function Ji(e, t, i, n) { + void 0 === n && (n = null); + var r = "call" + Me(i), + a = e.reduce(nn(r), n), + s = a === $i, + o = s ? null : t[i](a); + return function (e, t, i, n) { + for (var r = e.length - 1; 0 <= r; r--) { + var a = e[r]; + a[t] && a[t](n, i) + } + }(e, i, o, s), o + } + var Zi = { + buffered: 1, + currentTime: 1, + duration: 1, + muted: 1, + played: 1, + paused: 1, + seekable: 1, + volume: 1 + }, + en = { + setCurrentTime: 1, + setMuted: 1, + setVolume: 1 + }, + tn = { + play: 1, + pause: 1 + }; + + function nn(i) { + return function (e, t) { + return e === $i ? $i : t[i] ? t[i](e) : e + } + } + + function rn(e, t) { + var i = Yi[e.id()], + n = null; + if (null == i) return n = t(e), Yi[e.id()] = [ + [t, n] + ], n; + for (var r = 0; r < i.length; r++) { + var a = i[r], + s = a[0], + o = a[1]; + s === t && (n = o) + } + return null === n && (n = t(e), i.push([t, n])), n + } + + function an(e) { + void 0 === e && (e = ""); + var t = Vt(e); + return sn[t.toLowerCase()] || "" + } + var sn = { + opus: "video/ogg", + ogv: "video/ogg", + mp4: "video/mp4", + mov: "video/mp4", + m4v: "video/mp4", + mkv: "video/x-matroska", + m4a: "audio/mp4", + mp3: "audio/mpeg", + aac: "audio/aac", + caf: "audio/x-caf", + flac: "audio/flac", + oga: "audio/ogg", + wav: "audio/wav", + m3u8: "application/x-mpegURL", + jpg: "image/jpeg", + jpeg: "image/jpeg", + gif: "image/gif", + png: "image/png", + svg: "image/svg+xml", + webp: "image/webp" + }; + + function on(e) { + if (!e.type) { + var t = an(e.src); + t && (e.type = t) + } + return e + } + var un = function (l) { + function e(e, t, i) { + var n, r = Re({ + createEl: !1 + }, t); + if (n = l.call(this, e, r, i) || this, t.playerOptions.sources && 0 !== t.playerOptions.sources.length) e.src(t.playerOptions.sources); + else + for (var a = 0, s = t.playerOptions.techOrder; a < s.length; a++) { + var o = Me(s[a]), + u = Xi.getTech(o); + if (o || (u = je.getComponent(o)), u && u.isSupported()) { + e.loadTech_(o); + break + } + } + return n + } + return Ge(e, l), e + }(je); + je.registerComponent("MediaLoader", un); + var ln = function (r) { + function e(e, t) { + var i; + return (i = r.call(this, e, t) || this).emitTapEvents(), i.enable(), i + } + Ge(e, r); + var t = e.prototype; + return t.createEl = function (e, t, i) { + void 0 === e && (e = "div"), void 0 === t && (t = {}), void 0 === i && (i = {}), t = g({ + innerHTML: '', + className: this.buildCSSClass(), + tabIndex: 0 + }, t), "button" === e && p.error("Creating a ClickableComponent with an HTML element of " + e + " is not supported; use a Button instead."), i = g({ + role: "button" + }, i), this.tabIndex_ = t.tabIndex; + var n = r.prototype.createEl.call(this, e, t, i); + return this.createControlTextEl(n), n + }, t.dispose = function () { + this.controlTextEl_ = null, r.prototype.dispose.call(this) + }, t.createControlTextEl = function (e) { + return this.controlTextEl_ = k("span", { + className: "vjs-control-text" + }, { + "aria-live": "polite" + }), e && e.appendChild(this.controlTextEl_), this.controlText(this.controlText_, e), this.controlTextEl_ + }, t.controlText = function (e, t) { + if (void 0 === t && (t = this.el()), void 0 === e) return this.controlText_ || "Need Text"; + var i = this.localize(e); + this.controlText_ = e, C(this.controlTextEl_, i), this.nonIconControl || t.setAttribute("title", i) + }, t.buildCSSClass = function () { + return "vjs-control vjs-button " + r.prototype.buildCSSClass.call(this) + }, t.enable = function () { + this.enabled_ || (this.enabled_ = !0, this.removeClass("vjs-disabled"), this.el_.setAttribute("aria-disabled", "false"), "undefined" != typeof this.tabIndex_ && this.el_.setAttribute("tabIndex", this.tabIndex_), this.on(["tap", "click"], this.handleClick), this.on("keydown", this.handleKeyDown)) + }, t.disable = function () { + this.enabled_ = !1, this.addClass("vjs-disabled"), this.el_.setAttribute("aria-disabled", "true"), "undefined" != typeof this.tabIndex_ && this.el_.removeAttribute("tabIndex"), this.off("mouseover", this.handleMouseOver), this.off("mouseout", this.handleMouseOut), this.off(["tap", "click"], this.handleClick), this.off("keydown", this.handleKeyDown) + }, t.handleClick = function (e) { + this.options_.clickHandler && this.options_.clickHandler.call(this, arguments) + }, t.handleKeyDown = function (e) { + Ot.isEventKey(e, "Space") || Ot.isEventKey(e, "Enter") ? (e.preventDefault(), e.stopPropagation(), this.trigger("click")) : r.prototype.handleKeyDown.call(this, e) + }, e + }(je); + je.registerComponent("ClickableComponent", ln); + var cn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).update(), e.on("posterchange", ve(Ve(i), i.update)), i + } + Ge(e, n); + var t = e.prototype; + return t.dispose = function () { + this.player().off("posterchange", this.update), n.prototype.dispose.call(this) + }, t.createEl = function () { + return k("div", { + className: "vjs-poster", + tabIndex: -1 + }) + }, t.update = function (e) { + var t = this.player().poster(); + this.setSrc(t), t ? this.show() : this.hide() + }, t.setSrc = function (e) { + var t = ""; + e && (t = 'url("' + e + '")'), this.el_.style.backgroundImage = t + }, t.handleClick = function (e) { + if (this.player_.controls()) { + var t = this.player_.usingPlugin("eme") && this.player_.eme.sessions && 0 < this.player_.eme.sessions.length; + !this.player_.tech(!0) || (at || it) && t || this.player_.tech(!0).focus(), this.player_.paused() ? At(this.player_.play()) : this.player_.pause() + } + }, e + }(ln); + je.registerComponent("PosterImage", cn); + var dn = "#222", + hn = { + monospace: "monospace", + sansSerif: "sans-serif", + serif: "serif", + monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace', + monospaceSerif: '"Courier New", monospace', + proportionalSansSerif: "sans-serif", + proportionalSerif: "serif", + casual: '"Comic Sans MS", Impact, fantasy', + script: '"Monotype Corsiva", cursive', + smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif' + }; + + function pn(e, t) { + var i; + if (4 === e.length) i = e[1] + e[1] + e[2] + e[2] + e[3] + e[3]; + else { + if (7 !== e.length) throw new Error("Invalid color code provided, " + e + "; must be formatted as e.g. #f0e or #f604e2."); + i = e.slice(1) + } + return "rgba(" + parseInt(i.slice(0, 2), 16) + "," + parseInt(i.slice(2, 4), 16) + "," + parseInt(i.slice(4, 6), 16) + "," + t + ")" + } + + function fn(e, t, i) { + try { + e.style[t] = i + } catch (e) { + return + } + } + var mn = function (a) { + function e(i, e, t) { + var n; + n = a.call(this, i, e, t) || this; + var r = ve(Ve(n), n.updateDisplay); + return i.on("loadstart", ve(Ve(n), n.toggleDisplay)), i.on("texttrackchange", r), i.on("loadedmetadata", ve(Ve(n), n.preselectTrack)), i.ready(ve(Ve(n), function () { + if (i.tech_ && i.tech_.featuresNativeTextTracks) this.hide(); + else { + i.on("fullscreenchange", r), i.on("playerresize", r), T.addEventListener("orientationchange", r), i.on("dispose", function () { + return T.removeEventListener("orientationchange", r) + }); + for (var e = this.options_.playerOptions.tracks || [], t = 0; t < e.length; t++) this.player_.addRemoteTextTrack(e[t], !0); + this.preselectTrack() + } + })), n + } + Ge(e, a); + var t = e.prototype; + return t.preselectTrack = function () { + for (var e, t, i, n = { + captions: 1, + subtitles: 1 + }, r = this.player_.textTracks(), a = this.player_.cache_.selectedLanguage, s = 0; s < r.length; s++) { + var o = r[s]; + a && a.enabled && a.language && a.language === o.language && o.kind in n ? i = o.kind === a.kind ? o : i || o : a && !a.enabled ? t = e = i = null : o.default && ("descriptions" !== o.kind || e ? o.kind in n && !t && (t = o) : e = o) + } + i ? i.mode = "showing" : t ? t.mode = "showing" : e && (e.mode = "showing") + }, t.toggleDisplay = function () { + this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks ? this.hide() : this.show() + }, t.createEl = function () { + return a.prototype.createEl.call(this, "div", { + className: "vjs-text-track-display" + }, { + "aria-live": "off", + "aria-atomic": "true" + }) + }, t.clearDisplay = function () { + "function" == typeof T.WebVTT && T.WebVTT.processCues(T, [], this.el_) + }, t.updateDisplay = function () { + var e = this.player_.textTracks(), + t = this.options_.allowMultipleShowingTracks; + if (this.clearDisplay(), t) { + for (var i = [], n = 0; n < e.length; ++n) { + var r = e[n]; + "showing" === r.mode && i.push(r) + } + this.updateForTrack(i) + } else { + for (var a = null, s = null, o = e.length; o--;) { + var u = e[o]; + "showing" === u.mode && ("descriptions" === u.kind ? a = u : s = u) + } + s ? ("off" !== this.getAttribute("aria-live") && this.setAttribute("aria-live", "off"), this.updateForTrack(s)) : a && ("assertive" !== this.getAttribute("aria-live") && this.setAttribute("aria-live", "assertive"), this.updateForTrack(a)) + } + }, t.updateDisplayState = function (e) { + for (var t = this.player_.textTrackSettings.getValues(), i = e.activeCues, n = i.length; n--;) { + var r = i[n]; + if (r) { + var a = r.displayState; + if (t.color && (a.firstChild.style.color = t.color), t.textOpacity && fn(a.firstChild, "color", pn(t.color || "#fff", t.textOpacity)), t.backgroundColor && (a.firstChild.style.backgroundColor = t.backgroundColor), t.backgroundOpacity && fn(a.firstChild, "backgroundColor", pn(t.backgroundColor || "#000", t.backgroundOpacity)), t.windowColor && (t.windowOpacity ? fn(a, "backgroundColor", pn(t.windowColor, t.windowOpacity)) : a.style.backgroundColor = t.windowColor), t.edgeStyle && ("dropshadow" === t.edgeStyle ? a.firstChild.style.textShadow = "2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px " + dn : "raised" === t.edgeStyle ? a.firstChild.style.textShadow = "1px 1px #222, 2px 2px #222, 3px 3px " + dn : "depressed" === t.edgeStyle ? a.firstChild.style.textShadow = "1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px " + dn : "uniform" === t.edgeStyle && (a.firstChild.style.textShadow = "0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px " + dn)), t.fontPercent && 1 !== t.fontPercent) { + var s = T.parseFloat(a.style.fontSize); + a.style.fontSize = s * t.fontPercent + "px", a.style.height = "auto", a.style.top = "auto" + } + t.fontFamily && "default" !== t.fontFamily && ("small-caps" === t.fontFamily ? a.firstChild.style.fontVariant = "small-caps" : a.firstChild.style.fontFamily = hn[t.fontFamily]) + } + } + }, t.updateForTrack = function (e) { + if (Array.isArray(e) || (e = [e]), "function" == typeof T.WebVTT && !e.every(function (e) { + return !e.activeCues + })) { + for (var t = [], i = 0; i < e.length; ++i) + for (var n = e[i], r = 0; r < n.activeCues.length; ++r) t.push(n.activeCues[r]); + T.WebVTT.processCues(T, t, this.el_); + for (var a = 0; a < e.length; ++a) { + for (var s = e[a], o = 0; o < s.activeCues.length; ++o) { + var u = s.activeCues[o].displayState; + I(u, "vjs-text-track-cue"), I(u, "vjs-text-track-cue-" + (s.language ? s.language : a)) + } + this.player_.textTrackSettings && this.updateDisplayState(s) + } + } + }, e + }(je); + je.registerComponent("TextTrackDisplay", mn); + var gn = function (r) { + function e() { + return r.apply(this, arguments) || this + } + return Ge(e, r), e.prototype.createEl = function () { + var e = this.player_.isAudio(), + t = this.localize(e ? "Audio Player" : "Video Player"), + i = k("span", { + className: "vjs-control-text", + innerHTML: this.localize("{1} is loading.", [t]) + }), + n = r.prototype.createEl.call(this, "div", { + className: "vjs-loading-spinner", + dir: "ltr" + }); + return n.appendChild(i), n + }, e + }(je); + je.registerComponent("LoadingSpinner", gn); + var vn = function (t) { + function e() { + return t.apply(this, arguments) || this + } + Ge(e, t); + var i = e.prototype; + return i.createEl = function (e, t, i) { + void 0 === t && (t = {}), void 0 === i && (i = {}), t = g({ + innerHTML: '', + className: this.buildCSSClass() + }, t), i = g({ + type: "button" + }, i); + var n = je.prototype.createEl.call(this, "button", t, i); + return this.createControlTextEl(n), n + }, i.addChild = function (e, t) { + void 0 === t && (t = {}); + var i = this.constructor.name; + return p.warn("Adding an actionable (user controllable) child to a Button (" + i + ") is not supported; use a ClickableComponent instead."), je.prototype.addChild.call(this, e, t) + }, i.enable = function () { + t.prototype.enable.call(this), this.el_.removeAttribute("disabled") + }, i.disable = function () { + t.prototype.disable.call(this), this.el_.setAttribute("disabled", "disabled") + }, i.handleKeyDown = function (e) { + Ot.isEventKey(e, "Space") || Ot.isEventKey(e, "Enter") ? e.stopPropagation() : t.prototype.handleKeyDown.call(this, e) + }, e + }(ln); + je.registerComponent("Button", vn); + var yn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).mouseused_ = !1, i.on("mousedown", i.handleMouseDown), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-big-play-button" + }, t.handleClick = function (e) { + var t = this.player_.play(); + if (this.mouseused_ && e.clientX && e.clientY) { + var i = this.player_.usingPlugin("eme") && this.player_.eme.sessions && 0 < this.player_.eme.sessions.length; + return At(t), void(!this.player_.tech(!0) || (at || it) && i || this.player_.tech(!0).focus()) + } + var n = this.player_.getChild("controlBar"), + r = n && n.getChild("playToggle"); + if (r) { + var a = function () { + return r.focus() + }; + It(t) ? t.then(a, function () {}) : this.setTimeout(a, 1) + } else this.player_.tech(!0).focus() + }, t.handleKeyDown = function (e) { + this.mouseused_ = !1, n.prototype.handleKeyDown.call(this, e) + }, t.handleMouseDown = function (e) { + this.mouseused_ = !0 + }, e + }(vn); + yn.prototype.controlText_ = "Play Video", je.registerComponent("BigPlayButton", yn); + var _n = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).controlText(t && t.controlText || i.localize("Close")), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-close-button " + n.prototype.buildCSSClass.call(this) + }, t.handleClick = function (e) { + this.trigger({ + type: "close", + bubbles: !1 + }) + }, t.handleKeyDown = function (e) { + Ot.isEventKey(e, "Esc") ? (e.preventDefault(), e.stopPropagation(), this.trigger("click")) : n.prototype.handleKeyDown.call(this, e) + }, e + }(vn); + je.registerComponent("CloseButton", _n); + var bn = function (n) { + function e(e, t) { + var i; + return void 0 === t && (t = {}), i = n.call(this, e, t) || this, t.replay = void 0 === t.replay || t.replay, i.on(e, "play", i.handlePlay), i.on(e, "pause", i.handlePause), t.replay && i.on(e, "ended", i.handleEnded), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-play-control " + n.prototype.buildCSSClass.call(this) + }, t.handleClick = function (e) { + this.player_.paused() ? this.player_.play() : this.player_.pause() + }, t.handleSeeked = function (e) { + this.removeClass("vjs-ended"), this.player_.paused() ? this.handlePause(e) : this.handlePlay(e) + }, t.handlePlay = function (e) { + this.removeClass("vjs-ended"), this.removeClass("vjs-paused"), this.addClass("vjs-playing"), this.controlText("Pause") + }, t.handlePause = function (e) { + this.removeClass("vjs-playing"), this.addClass("vjs-paused"), this.controlText("Play") + }, t.handleEnded = function (e) { + this.removeClass("vjs-playing"), this.addClass("vjs-ended"), this.controlText("Replay"), this.one(this.player_, "seeked", this.handleSeeked) + }, e + }(vn); + bn.prototype.controlText_ = "Play", je.registerComponent("PlayToggle", bn); + + function Tn(e, t) { + e = e < 0 ? 0 : e; + var i = Math.floor(e % 60), + n = Math.floor(e / 60 % 60), + r = Math.floor(e / 3600), + a = Math.floor(t / 60 % 60), + s = Math.floor(t / 3600); + return !isNaN(e) && e !== 1 / 0 || (r = n = i = "-"), (r = 0 < r || 0 < s ? r + ":" : "") + (n = ((r || 10 <= a) && n < 10 ? "0" + n : n) + ":") + (i = i < 10 ? "0" + i : i) + } + var Sn = Tn; + + function kn(e, t) { + return void 0 === t && (t = e), Sn(e, t) + } + var Cn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on(e, ["timeupdate", "ended"], i.updateContent), i.updateTextNode_(), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + var e = this.buildCSSClass(), + t = n.prototype.createEl.call(this, "div", { + className: e + " vjs-time-control vjs-control", + innerHTML: '' + this.localize(this.labelText_) + " " + }); + return this.contentEl_ = k("span", { + className: e + "-display" + }, { + "aria-live": "off", + role: "presentation" + }), t.appendChild(this.contentEl_), t + }, t.dispose = function () { + this.contentEl_ = null, this.textNode_ = null, n.prototype.dispose.call(this) + }, t.updateTextNode_ = function (e) { + var t = this; + void 0 === e && (e = 0), e = kn(e), this.formattedTime_ !== e && (this.formattedTime_ = e, this.requestNamedAnimationFrame("TimeDisplay#updateTextNode_", function () { + if (t.contentEl_) { + var e = t.textNode_; + t.textNode_ = d.createTextNode(t.formattedTime_), t.textNode_ && (e ? t.contentEl_.replaceChild(t.textNode_, e) : t.contentEl_.appendChild(t.textNode_)) + } + })) + }, t.updateContent = function (e) {}, e + }(je); + Cn.prototype.labelText_ = "Time", Cn.prototype.controlText_ = "Time", je.registerComponent("TimeDisplay", Cn); + var En = function (e) { + function t() { + return e.apply(this, arguments) || this + } + Ge(t, e); + var i = t.prototype; + return i.buildCSSClass = function () { + return "vjs-current-time" + }, i.updateContent = function (e) { + var t; + t = this.player_.ended() ? this.player_.duration() : this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(), this.updateTextNode_(t) + }, t + }(Cn); + En.prototype.labelText_ = "Current Time", En.prototype.controlText_ = "Current Time", je.registerComponent("CurrentTimeDisplay", En); + var wn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on(e, "durationchange", i.updateContent), i.on(e, "loadstart", i.updateContent), i.on(e, "loadedmetadata", i.updateContent), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-duration" + }, t.updateContent = function (e) { + var t = this.player_.duration(); + this.updateTextNode_(t) + }, e + }(Cn); + wn.prototype.labelText_ = "Duration", wn.prototype.controlText_ = "Duration", je.registerComponent("DurationDisplay", wn); + var In = function (e) { + function t() { + return e.apply(this, arguments) || this + } + return Ge(t, e), t.prototype.createEl = function () { + return e.prototype.createEl.call(this, "div", { + className: "vjs-time-control vjs-time-divider", + innerHTML: "
/
" + }, { + "aria-hidden": !0 + }) + }, t + }(je); + je.registerComponent("TimeDivider", In); + var An = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on(e, "durationchange", i.updateContent), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-remaining-time" + }, t.createEl = function () { + var e = n.prototype.createEl.call(this); + return e.insertBefore(k("span", {}, { + "aria-hidden": !0 + }, "-"), this.contentEl_), e + }, t.updateContent = function (e) { + var t; + "number" == typeof this.player_.duration() && (t = this.player_.ended() ? 0 : this.player_.remainingTimeDisplay ? this.player_.remainingTimeDisplay() : this.player_.remainingTime(), this.updateTextNode_(t)) + }, e + }(Cn); + An.prototype.labelText_ = "Remaining Time", An.prototype.controlText_ = "Remaining Time", je.registerComponent("RemainingTimeDisplay", An); + var xn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).updateShowing(), i.on(i.player(), "durationchange", i.updateShowing), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + var e = n.prototype.createEl.call(this, "div", { + className: "vjs-live-control vjs-control" + }); + return this.contentEl_ = k("div", { + className: "vjs-live-display", + innerHTML: '' + this.localize("Stream Type") + " " + this.localize("LIVE") + }, { + "aria-live": "off" + }), e.appendChild(this.contentEl_), e + }, t.dispose = function () { + this.contentEl_ = null, n.prototype.dispose.call(this) + }, t.updateShowing = function (e) { + this.player().duration() === 1 / 0 ? this.show() : this.hide() + }, e + }(je); + je.registerComponent("LiveDisplay", xn); + var Pn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).updateLiveEdgeStatus(), i.player_.liveTracker && i.on(i.player_.liveTracker, "liveedgechange", i.updateLiveEdgeStatus), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + var e = n.prototype.createEl.call(this, "button", { + className: "vjs-seek-to-live-control vjs-control" + }); + return this.textEl_ = k("span", { + className: "vjs-seek-to-live-text", + innerHTML: this.localize("LIVE") + }, { + "aria-hidden": "true" + }), e.appendChild(this.textEl_), e + }, t.updateLiveEdgeStatus = function () { + !this.player_.liveTracker || this.player_.liveTracker.atLiveEdge() ? (this.setAttribute("aria-disabled", !0), this.addClass("vjs-at-live-edge"), this.controlText("Seek to live, currently playing live")) : (this.setAttribute("aria-disabled", !1), this.removeClass("vjs-at-live-edge"), this.controlText("Seek to live, currently behind live")) + }, t.handleClick = function () { + this.player_.liveTracker.seekToLiveEdge() + }, t.dispose = function () { + this.player_.liveTracker && this.off(this.player_.liveTracker, "liveedgechange", this.updateLiveEdgeStatus), this.textEl_ = null, n.prototype.dispose.call(this) + }, e + }(vn); + Pn.prototype.controlText_ = "Seek to live, currently playing live", je.registerComponent("SeekToLive", Pn); + + function Ln(e, t, i) { + return e = Number(e), Math.min(i, Math.max(t, isNaN(e) ? t : e)) + } + var On = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).bar = i.getChild(i.options_.barName), i.vertical(!!i.options_.vertical), i.enable(), i + } + Ge(e, n); + var t = e.prototype; + return t.enabled = function () { + return this.enabled_ + }, t.enable = function () { + this.enabled() || (this.on("mousedown", this.handleMouseDown), this.on("touchstart", this.handleMouseDown), this.on("keydown", this.handleKeyDown), this.on("click", this.handleClick), this.on(this.player_, "controlsvisible", this.update), this.playerEvent && this.on(this.player_, this.playerEvent, this.update), this.removeClass("disabled"), this.setAttribute("tabindex", 0), this.enabled_ = !0) + }, t.disable = function () { + if (this.enabled()) { + var e = this.bar.el_.ownerDocument; + this.off("mousedown", this.handleMouseDown), this.off("touchstart", this.handleMouseDown), this.off("keydown", this.handleKeyDown), this.off("click", this.handleClick), this.off(this.player_, "controlsvisible", this.update), this.off(e, "mousemove", this.handleMouseMove), this.off(e, "mouseup", this.handleMouseUp), this.off(e, "touchmove", this.handleMouseMove), this.off(e, "touchend", this.handleMouseUp), this.removeAttribute("tabindex"), this.addClass("disabled"), this.playerEvent && this.off(this.player_, this.playerEvent, this.update), this.enabled_ = !1 + } + }, t.createEl = function (e, t, i) { + return void 0 === t && (t = {}), void 0 === i && (i = {}), t.className = t.className + " vjs-slider", t = g({ + tabIndex: 0 + }, t), i = g({ + role: "slider", + "aria-valuenow": 0, + "aria-valuemin": 0, + "aria-valuemax": 100, + tabIndex: 0 + }, i), n.prototype.createEl.call(this, e, t, i) + }, t.handleMouseDown = function (e) { + var t = this.bar.el_.ownerDocument; + "mousedown" === e.type && e.preventDefault(), "touchstart" !== e.type || nt || e.preventDefault(), R(), this.addClass("vjs-sliding"), this.trigger("slideractive"), this.on(t, "mousemove", this.handleMouseMove), this.on(t, "mouseup", this.handleMouseUp), this.on(t, "touchmove", this.handleMouseMove), this.on(t, "touchend", this.handleMouseUp), this.handleMouseMove(e) + }, t.handleMouseMove = function (e) {}, t.handleMouseUp = function () { + var e = this.bar.el_.ownerDocument; + N(), this.removeClass("vjs-sliding"), this.trigger("sliderinactive"), this.off(e, "mousemove", this.handleMouseMove), this.off(e, "mouseup", this.handleMouseUp), this.off(e, "touchmove", this.handleMouseMove), this.off(e, "touchend", this.handleMouseUp), this.update() + }, t.update = function () { + var t = this; + if (this.el_ && this.bar) { + var i = this.getProgress(); + return i === this.progress_ || (this.progress_ = i, this.requestNamedAnimationFrame("Slider#update", function () { + var e = t.vertical() ? "height" : "width"; + t.bar.el().style[e] = (100 * i).toFixed(2) + "%" + })), i + } + }, t.getProgress = function () { + return Number(Ln(this.getPercent(), 0, 1).toFixed(4)) + }, t.calculateDistance = function (e) { + var t = B(this.el_, e); + return this.vertical() ? t.y : t.x + }, t.handleKeyDown = function (e) { + Ot.isEventKey(e, "Left") || Ot.isEventKey(e, "Down") ? (e.preventDefault(), e.stopPropagation(), this.stepBack()) : Ot.isEventKey(e, "Right") || Ot.isEventKey(e, "Up") ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) : n.prototype.handleKeyDown.call(this, e) + }, t.handleClick = function (e) { + e.stopPropagation(), e.preventDefault() + }, t.vertical = function (e) { + if (void 0 === e) return this.vertical_ || !1; + this.vertical_ = !!e, this.vertical_ ? this.addClass("vjs-slider-vertical") : this.addClass("vjs-slider-horizontal") + }, e + }(je); + je.registerComponent("Slider", On); + + function Dn(e, t) { + return Ln(e / t * 100, 0, 100).toFixed(2) + "%" + } + var Mn = function (r) { + function e(e, t) { + var i; + return (i = r.call(this, e, t) || this).partEls_ = [], i.on(e, "progress", i.update), i + } + Ge(e, r); + var t = e.prototype; + return t.createEl = function () { + var e = r.prototype.createEl.call(this, "div", { + className: "vjs-load-progress" + }), + t = k("span", { + className: "vjs-control-text" + }), + i = k("span", { + textContent: this.localize("Loaded") + }), + n = d.createTextNode(": "); + return this.percentageEl_ = k("span", { + className: "vjs-control-text-loaded-percentage", + textContent: "0%" + }), e.appendChild(t), t.appendChild(i), t.appendChild(n), t.appendChild(this.percentageEl_), e + }, t.dispose = function () { + this.partEls_ = null, this.percentageEl_ = null, r.prototype.dispose.call(this) + }, t.update = function (e) { + var d = this; + this.requestNamedAnimationFrame("LoadProgressBar#update", function () { + var e = d.player_.liveTracker, + t = d.player_.buffered(), + i = e && e.isLive() ? e.seekableEnd() : d.player_.duration(), + n = d.player_.bufferedEnd(), + r = d.partEls_, + a = Dn(n, i); + d.percent_ !== a && (d.el_.style.width = a, C(d.percentageEl_, a), d.percent_ = a); + for (var s = 0; s < t.length; s++) { + var o = t.start(s), + u = t.end(s), + l = r[s]; + l || (l = d.el_.appendChild(k()), r[s] = l), l.dataset.start === o && l.dataset.end === u || (l.dataset.start = o, l.dataset.end = u, l.style.left = Dn(o, n), l.style.width = Dn(u - o, n)) + } + for (var c = r.length; c > t.length; c--) d.el_.removeChild(r[c - 1]); + r.length = t.length + }) + }, e + }(je); + je.registerComponent("LoadProgressBar", Mn); + var Rn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).update = ye(ve(Ve(i), i.update), 30), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + return n.prototype.createEl.call(this, "div", { + className: "vjs-time-tooltip" + }, { + "aria-hidden": "true" + }) + }, t.update = function (e, t, i) { + var n = F(this.el_), + r = U(this.player_.el()), + a = e.width * t; + if (r && n) { + var s = e.left - r.left + a, + o = e.width - a + (r.right - e.right), + u = n.width / 2; + s < u ? u += u - s : o < u && (u = o), u < 0 ? u = 0 : u > n.width && (u = n.width), this.el_.style.right = "-" + u + "px", this.write(i) + } + }, t.write = function (e) { + C(this.el_, e) + }, t.updateTime = function (r, a, s, o) { + var u = this; + this.requestNamedAnimationFrame("TimeTooltip#updateTime", function () { + var e, t = u.player_.duration(); + if (u.player_.liveTracker && u.player_.liveTracker.isLive()) { + var i = u.player_.liveTracker.liveWindow(), + n = i - a * i; + e = (n < 1 ? "" : "-") + kn(n, i) + } else e = kn(s, t); + u.update(r, a, e), o && o() + }) + }, e + }(je); + je.registerComponent("TimeTooltip", Rn); + var Nn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).update = ye(ve(Ve(i), i.update), 30), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + return n.prototype.createEl.call(this, "div", { + className: "vjs-play-progress vjs-slider-bar" + }, { + "aria-hidden": "true" + }) + }, t.update = function (e, t) { + var i = this.getChild("timeTooltip"); + if (i) { + var n = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(); + i.updateTime(e, t, n) + } + }, e + }(je); + Nn.prototype.options_ = { + children: [] + }, dt || Je || Nn.prototype.options_.children.push("timeTooltip"), je.registerComponent("PlayProgressBar", Nn); + var Un = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).update = ye(ve(Ve(i), i.update), 30), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + return n.prototype.createEl.call(this, "div", { + className: "vjs-mouse-display" + }) + }, t.update = function (e, t) { + var i = this, + n = t * this.player_.duration(); + this.getChild("timeTooltip").updateTime(e, t, n, function () { + i.el_.style.left = e.width * t + "px" + }) + }, e + }(je); + Un.prototype.options_ = { + children: ["timeTooltip"] + }, je.registerComponent("MouseTimeDisplay", Un); + var Fn = function (a) { + function e(e, t) { + var i; + return (i = a.call(this, e, t) || this).setEventHandlers_(), i + } + Ge(e, a); + var t = e.prototype; + return t.setEventHandlers_ = function () { + this.update_ = ve(this, this.update), this.update = ye(this.update_, 30), this.on(this.player_, ["ended", "durationchange", "timeupdate"], this.update), this.player_.liveTracker && this.on(this.player_.liveTracker, "liveedgechange", this.update), this.updateInterval = null, this.on(this.player_, ["playing"], this.enableInterval_), this.on(this.player_, ["ended", "pause", "waiting"], this.disableInterval_), "hidden" in d && "visibilityState" in d && this.on(d, "visibilitychange", this.toggleVisibility_) + }, t.toggleVisibility_ = function (e) { + d.hidden ? this.disableInterval_(e) : (this.enableInterval_(), this.update()) + }, t.enableInterval_ = function () { + this.updateInterval || (this.updateInterval = this.setInterval(this.update, 30)) + }, t.disableInterval_ = function (e) { + this.player_.liveTracker && this.player_.liveTracker.isLive() && e && "ended" !== e.type || this.updateInterval && (this.clearInterval(this.updateInterval), this.updateInterval = null) + }, t.createEl = function () { + return a.prototype.createEl.call(this, "div", { + className: "vjs-progress-holder" + }, { + "aria-label": this.localize("Progress Bar") + }) + }, t.update = function (e) { + var n = this, + r = a.prototype.update.call(this); + return this.requestNamedAnimationFrame("SeekBar#update", function () { + var e = n.player_.ended() ? n.player_.duration() : n.getCurrentTime_(), + t = n.player_.liveTracker, + i = n.player_.duration(); + t && t.isLive() && (i = n.player_.liveTracker.liveCurrentTime()), n.percent_ !== r && (n.el_.setAttribute("aria-valuenow", (100 * r).toFixed(2)), n.percent_ = r), n.currentTime_ === e && n.duration_ === i || (n.el_.setAttribute("aria-valuetext", n.localize("progress bar timing: currentTime={1} duration={2}", [kn(e, i), kn(i, i)], "{1} of {2}")), n.currentTime_ = e, n.duration_ = i), n.bar && n.bar.update(U(n.el()), n.getProgress()) + }), r + }, t.getCurrentTime_ = function () { + return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime() + }, t.getPercent = function () { + var e, t = this.getCurrentTime_(), + i = this.player_.liveTracker; + return i && i.isLive() ? (e = (t - i.seekableStart()) / i.liveWindow(), i.atLiveEdge() && (e = 1)) : e = t / this.player_.duration(), e + }, t.handleMouseDown = function (e) { + z(e) && (e.stopPropagation(), this.player_.scrubbing(!0), this.videoWasPlaying = !this.player_.paused(), this.player_.pause(), a.prototype.handleMouseDown.call(this, e)) + }, t.handleMouseMove = function (e) { + if (z(e)) { + var t, i = this.calculateDistance(e), + n = this.player_.liveTracker; + if (n && n.isLive()) { + if (.99 <= i) return void n.seekToLiveEdge(); + var r = n.seekableStart(), + a = n.liveCurrentTime(); + if (a <= (t = r + i * n.liveWindow()) && (t = a), t <= r && (t = r + .1), t === 1 / 0) return + } else(t = i * this.player_.duration()) === this.player_.duration() && (t -= .1); + this.player_.currentTime(t) + } + }, t.enable = function () { + a.prototype.enable.call(this); + var e = this.getChild("mouseTimeDisplay"); + e && e.show() + }, t.disable = function () { + a.prototype.disable.call(this); + var e = this.getChild("mouseTimeDisplay"); + e && e.hide() + }, t.handleMouseUp = function (e) { + a.prototype.handleMouseUp.call(this, e), e && e.stopPropagation(), this.player_.scrubbing(!1), this.player_.trigger({ + type: "timeupdate", + target: this, + manuallyTriggered: !0 + }), this.videoWasPlaying ? At(this.player_.play()) : this.update_() + }, t.stepForward = function () { + this.player_.currentTime(this.player_.currentTime() + 5) + }, t.stepBack = function () { + this.player_.currentTime(this.player_.currentTime() - 5) + }, t.handleAction = function (e) { + this.player_.paused() ? this.player_.play() : this.player_.pause() + }, t.handleKeyDown = function (e) { + if (Ot.isEventKey(e, "Space") || Ot.isEventKey(e, "Enter")) e.preventDefault(), e.stopPropagation(), this.handleAction(e); + else if (Ot.isEventKey(e, "Home")) e.preventDefault(), e.stopPropagation(), this.player_.currentTime(0); + else if (Ot.isEventKey(e, "End")) e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.duration()); + else if (/^[0-9]$/.test(Ot(e))) { + e.preventDefault(), e.stopPropagation(); + var t = 10 * (Ot.codes[Ot(e)] - Ot.codes[0]) / 100; + this.player_.currentTime(this.player_.duration() * t) + } else Ot.isEventKey(e, "PgDn") ? (e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.currentTime() - 60)) : Ot.isEventKey(e, "PgUp") ? (e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.currentTime() + 60)) : a.prototype.handleKeyDown.call(this, e) + }, t.dispose = function () { + this.disableInterval_(), this.off(this.player_, ["ended", "durationchange", "timeupdate"], this.update), this.player_.liveTracker && this.on(this.player_.liveTracker, "liveedgechange", this.update), this.off(this.player_, ["playing"], this.enableInterval_), this.off(this.player_, ["ended", "pause", "waiting"], this.disableInterval_), "hidden" in d && "visibilityState" in d && this.off(d, "visibilitychange", this.toggleVisibility_), a.prototype.dispose.call(this) + }, e + }(On); + Fn.prototype.options_ = { + children: ["loadProgressBar", "playProgressBar"], + barName: "playProgressBar" + }, dt || Je || Fn.prototype.options_.children.splice(1, 0, "mouseTimeDisplay"), je.registerComponent("SeekBar", Fn); + var Bn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).handleMouseMove = ye(ve(Ve(i), i.handleMouseMove), 30), i.throttledHandleMouseSeek = ye(ve(Ve(i), i.handleMouseSeek), 30), i.enable(), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + return n.prototype.createEl.call(this, "div", { + className: "vjs-progress-control vjs-control" + }) + }, t.handleMouseMove = function (e) { + var t = this.getChild("seekBar"); + if (t) { + var i = t.getChild("playProgressBar"), + n = t.getChild("mouseTimeDisplay"); + if (i || n) { + var r = t.el(), + a = F(r), + s = B(r, e).x; + s = Ln(s, 0, 1), n && n.update(a, s), i && i.update(a, t.getProgress()) + } + } + }, t.handleMouseSeek = function (e) { + var t = this.getChild("seekBar"); + t && t.handleMouseMove(e) + }, t.enabled = function () { + return this.enabled_ + }, t.disable = function () { + this.children().forEach(function (e) { + return e.disable && e.disable() + }), this.enabled() && (this.off(["mousedown", "touchstart"], this.handleMouseDown), this.off(this.el_, "mousemove", this.handleMouseMove), this.handleMouseUp(), this.addClass("disabled"), this.enabled_ = !1) + }, t.enable = function () { + this.children().forEach(function (e) { + return e.enable && e.enable() + }), this.enabled() || (this.on(["mousedown", "touchstart"], this.handleMouseDown), this.on(this.el_, "mousemove", this.handleMouseMove), this.removeClass("disabled"), this.enabled_ = !0) + }, t.handleMouseDown = function (e) { + var t = this.el_.ownerDocument, + i = this.getChild("seekBar"); + i && i.handleMouseDown(e), this.on(t, "mousemove", this.throttledHandleMouseSeek), this.on(t, "touchmove", this.throttledHandleMouseSeek), this.on(t, "mouseup", this.handleMouseUp), this.on(t, "touchend", this.handleMouseUp) + }, t.handleMouseUp = function (e) { + var t = this.el_.ownerDocument, + i = this.getChild("seekBar"); + i && i.handleMouseUp(e), this.off(t, "mousemove", this.throttledHandleMouseSeek), this.off(t, "touchmove", this.throttledHandleMouseSeek), this.off(t, "mouseup", this.handleMouseUp), this.off(t, "touchend", this.handleMouseUp) + }, e + }(je); + Bn.prototype.options_ = { + children: ["seekBar"] + }, je.registerComponent("ProgressControl", Bn); + var jn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on(e, ["enterpictureinpicture", "leavepictureinpicture"], i.handlePictureInPictureChange), i.on(e, ["disablepictureinpicturechanged", "loadedmetadata"], i.handlePictureInPictureEnabledChange), i.disable(), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-picture-in-picture-control " + n.prototype.buildCSSClass.call(this) + }, t.handlePictureInPictureEnabledChange = function () { + d.pictureInPictureEnabled && !1 === this.player_.disablePictureInPicture() ? this.enable() : this.disable() + }, t.handlePictureInPictureChange = function (e) { + this.player_.isInPictureInPicture() ? this.controlText("Exit Picture-in-Picture") : this.controlText("Picture-in-Picture"), this.handlePictureInPictureEnabledChange() + }, t.handleClick = function (e) { + this.player_.isInPictureInPicture() ? this.player_.exitPictureInPicture() : this.player_.requestPictureInPicture() + }, e + }(vn); + jn.prototype.controlText_ = "Picture-in-Picture", je.registerComponent("PictureInPictureToggle", jn); + var Vn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on(e, "fullscreenchange", i.handleFullscreenChange), !1 === d[e.fsApi_.fullscreenEnabled] && i.disable(), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-fullscreen-control " + n.prototype.buildCSSClass.call(this) + }, t.handleFullscreenChange = function (e) { + this.player_.isFullscreen() ? this.controlText("Non-Fullscreen") : this.controlText("Fullscreen") + }, t.handleClick = function (e) { + this.player_.isFullscreen() ? this.player_.exitFullscreen() : this.player_.requestFullscreen() + }, e + }(vn); + Vn.prototype.controlText_ = "Fullscreen", je.registerComponent("FullscreenToggle", Vn); + var qn = function (e) { + function t() { + return e.apply(this, arguments) || this + } + return Ge(t, e), t.prototype.createEl = function () { + return e.prototype.createEl.call(this, "div", { + className: "vjs-volume-level", + innerHTML: '' + }) + }, t + }(je); + je.registerComponent("VolumeLevel", qn); + var Hn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on("slideractive", i.updateLastVolume_), i.on(e, "volumechange", i.updateARIAAttributes), e.ready(function () { + return i.updateARIAAttributes() + }), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + return n.prototype.createEl.call(this, "div", { + className: "vjs-volume-bar vjs-slider-bar" + }, { + "aria-label": this.localize("Volume Level"), + "aria-live": "polite" + }) + }, t.handleMouseDown = function (e) { + z(e) && n.prototype.handleMouseDown.call(this, e) + }, t.handleMouseMove = function (e) { + z(e) && (this.checkMuted(), this.player_.volume(this.calculateDistance(e))) + }, t.checkMuted = function () { + this.player_.muted() && this.player_.muted(!1) + }, t.getPercent = function () { + return this.player_.muted() ? 0 : this.player_.volume() + }, t.stepForward = function () { + this.checkMuted(), this.player_.volume(this.player_.volume() + .1) + }, t.stepBack = function () { + this.checkMuted(), this.player_.volume(this.player_.volume() - .1) + }, t.updateARIAAttributes = function (e) { + var t = this.player_.muted() ? 0 : this.volumeAsPercentage_(); + this.el_.setAttribute("aria-valuenow", t), this.el_.setAttribute("aria-valuetext", t + "%") + }, t.volumeAsPercentage_ = function () { + return Math.round(100 * this.player_.volume()) + }, t.updateLastVolume_ = function () { + var e = this, + t = this.player_.volume(); + this.one("sliderinactive", function () { + 0 === e.player_.volume() && e.player_.lastVolume_(t) + }) + }, e + }(On); + Hn.prototype.options_ = { + children: ["volumeLevel"], + barName: "volumeLevel" + }, Hn.prototype.playerEvent = "volumechange", je.registerComponent("VolumeBar", Hn); + var Wn = function (n) { + function e(e, t) { + var i; + return void 0 === t && (t = {}), t.vertical = t.vertical || !1, "undefined" != typeof t.volumeBar && !o(t.volumeBar) || (t.volumeBar = t.volumeBar || {}, t.volumeBar.vertical = t.vertical), i = n.call(this, e, t) || this, + function (e, t) { + t.tech_ && !t.tech_.featuresVolumeControl && e.addClass("vjs-hidden"), e.on(t, "loadstart", function () { + t.tech_.featuresVolumeControl ? e.removeClass("vjs-hidden") : e.addClass("vjs-hidden") + }) + }(Ve(i), e), i.throttledHandleMouseMove = ye(ve(Ve(i), i.handleMouseMove), 30), i.on("mousedown", i.handleMouseDown), i.on("touchstart", i.handleMouseDown), i.on(i.volumeBar, ["focus", "slideractive"], function () { + i.volumeBar.addClass("vjs-slider-active"), i.addClass("vjs-slider-active"), i.trigger("slideractive") + }), i.on(i.volumeBar, ["blur", "sliderinactive"], function () { + i.volumeBar.removeClass("vjs-slider-active"), i.removeClass("vjs-slider-active"), i.trigger("sliderinactive") + }), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + var e = "vjs-volume-horizontal"; + return this.options_.vertical && (e = "vjs-volume-vertical"), n.prototype.createEl.call(this, "div", { + className: "vjs-volume-control vjs-control " + e + }) + }, t.handleMouseDown = function (e) { + var t = this.el_.ownerDocument; + this.on(t, "mousemove", this.throttledHandleMouseMove), this.on(t, "touchmove", this.throttledHandleMouseMove), this.on(t, "mouseup", this.handleMouseUp), this.on(t, "touchend", this.handleMouseUp) + }, t.handleMouseUp = function (e) { + var t = this.el_.ownerDocument; + this.off(t, "mousemove", this.throttledHandleMouseMove), this.off(t, "touchmove", this.throttledHandleMouseMove), this.off(t, "mouseup", this.handleMouseUp), this.off(t, "touchend", this.handleMouseUp) + }, t.handleMouseMove = function (e) { + this.volumeBar.handleMouseMove(e) + }, e + }(je); + Wn.prototype.options_ = { + children: ["volumeBar"] + }, je.registerComponent("VolumeControl", Wn); + var zn = function (n) { + function e(e, t) { + var i; + return i = n.call(this, e, t) || this, + function (e, t) { + t.tech_ && !t.tech_.featuresMuteControl && e.addClass("vjs-hidden"), e.on(t, "loadstart", function () { + t.tech_.featuresMuteControl ? e.removeClass("vjs-hidden") : e.addClass("vjs-hidden") + }) + }(Ve(i), e), i.on(e, ["loadstart", "volumechange"], i.update), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-mute-control " + n.prototype.buildCSSClass.call(this) + }, t.handleClick = function (e) { + var t = this.player_.volume(), + i = this.player_.lastVolume_(); + if (0 === t) { + var n = i < .1 ? .1 : i; + this.player_.volume(n), this.player_.muted(!1) + } else this.player_.muted(!this.player_.muted()) + }, t.update = function (e) { + this.updateIcon_(), this.updateControlText_() + }, t.updateIcon_ = function () { + var e = this.player_.volume(), + t = 3; + dt && this.player_.tech_ && this.player_.tech_.el_ && this.player_.muted(this.player_.tech_.el_.muted), 0 === e || this.player_.muted() ? t = 0 : e < .33 ? t = 1 : e < .67 && (t = 2); + for (var i = 0; i < 4; i++) A(this.el_, "vjs-vol-" + i); + I(this.el_, "vjs-vol-" + t) + }, t.updateControlText_ = function () { + var e = this.player_.muted() || 0 === this.player_.volume() ? "Unmute" : "Mute"; + this.controlText() !== e && this.controlText(e) + }, e + }(vn); + zn.prototype.controlText_ = "Mute", je.registerComponent("MuteToggle", zn); + var Gn = function (n) { + function e(e, t) { + var i; + return void 0 === t && (t = {}), "undefined" != typeof t.inline ? t.inline = t.inline : t.inline = !0, "undefined" != typeof t.volumeControl && !o(t.volumeControl) || (t.volumeControl = t.volumeControl || {}, t.volumeControl.vertical = !t.inline), (i = n.call(this, e, t) || this).on(e, ["loadstart"], i.volumePanelState_), i.on(i.muteToggle, "keyup", i.handleKeyPress), i.on(i.volumeControl, "keyup", i.handleVolumeControlKeyUp), i.on("keydown", i.handleKeyPress), i.on("mouseover", i.handleMouseOver), i.on("mouseout", i.handleMouseOut), i.on(i.volumeControl, ["slideractive"], i.sliderActive_), i.on(i.volumeControl, ["sliderinactive"], i.sliderInactive_), i + } + Ge(e, n); + var t = e.prototype; + return t.sliderActive_ = function () { + this.addClass("vjs-slider-active") + }, t.sliderInactive_ = function () { + this.removeClass("vjs-slider-active") + }, t.volumePanelState_ = function () { + this.volumeControl.hasClass("vjs-hidden") && this.muteToggle.hasClass("vjs-hidden") && this.addClass("vjs-hidden"), this.volumeControl.hasClass("vjs-hidden") && !this.muteToggle.hasClass("vjs-hidden") && this.addClass("vjs-mute-toggle-only") + }, t.createEl = function () { + var e = "vjs-volume-panel-horizontal"; + return this.options_.inline || (e = "vjs-volume-panel-vertical"), n.prototype.createEl.call(this, "div", { + className: "vjs-volume-panel vjs-control " + e + }) + }, t.dispose = function () { + this.handleMouseOut(), n.prototype.dispose.call(this) + }, t.handleVolumeControlKeyUp = function (e) { + Ot.isEventKey(e, "Esc") && this.muteToggle.focus() + }, t.handleMouseOver = function (e) { + this.addClass("vjs-hover"), he(d, "keyup", ve(this, this.handleKeyPress)) + }, t.handleMouseOut = function (e) { + this.removeClass("vjs-hover"), pe(d, "keyup", ve(this, this.handleKeyPress)) + }, t.handleKeyPress = function (e) { + Ot.isEventKey(e, "Esc") && this.handleMouseOut() + }, e + }(je); + Gn.prototype.options_ = { + children: ["muteToggle", "volumeControl"] + }, je.registerComponent("VolumePanel", Gn); + var Xn = function (n) { + function e(e, t) { + var i; + return i = n.call(this, e, t) || this, t && (i.menuButton_ = t.menuButton), i.focusedChild_ = -1, i.on("keydown", i.handleKeyDown), i.boundHandleBlur_ = ve(Ve(i), i.handleBlur), i.boundHandleTapClick_ = ve(Ve(i), i.handleTapClick), i + } + Ge(e, n); + var t = e.prototype; + return t.addEventListenerForItem = function (e) { + e instanceof je && (this.on(e, "blur", this.boundHandleBlur_), this.on(e, ["tap", "click"], this.boundHandleTapClick_)) + }, t.removeEventListenerForItem = function (e) { + e instanceof je && (this.off(e, "blur", this.boundHandleBlur_), this.off(e, ["tap", "click"], this.boundHandleTapClick_)) + }, t.removeChild = function (e) { + "string" == typeof e && (e = this.getChild(e)), this.removeEventListenerForItem(e), n.prototype.removeChild.call(this, e) + }, t.addItem = function (e) { + var t = this.addChild(e); + t && this.addEventListenerForItem(t) + }, t.createEl = function () { + var e = this.options_.contentElType || "ul"; + this.contentEl_ = k(e, { + className: "vjs-menu-content" + }), this.contentEl_.setAttribute("role", "menu"); + var t = n.prototype.createEl.call(this, "div", { + append: this.contentEl_, + className: "vjs-menu" + }); + return t.appendChild(this.contentEl_), he(t, "click", function (e) { + e.preventDefault(), e.stopImmediatePropagation() + }), t + }, t.dispose = function () { + this.contentEl_ = null, this.boundHandleBlur_ = null, this.boundHandleTapClick_ = null, n.prototype.dispose.call(this) + }, t.handleBlur = function (e) { + var t = e.relatedTarget || d.activeElement; + if (!this.children().some(function (e) { + return e.el() === t + })) { + var i = this.menuButton_; + i && i.buttonPressed_ && t !== i.el().firstChild && i.unpressButton() + } + }, t.handleTapClick = function (t) { + if (this.menuButton_) { + this.menuButton_.unpressButton(); + var e = this.children(); + if (!Array.isArray(e)) return; + var i = e.filter(function (e) { + return e.el() === t.target + })[0]; + if (!i) return; + "CaptionSettingsMenuItem" !== i.name() && this.menuButton_.focus() + } + }, t.handleKeyDown = function (e) { + Ot.isEventKey(e, "Left") || Ot.isEventKey(e, "Down") ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) : (Ot.isEventKey(e, "Right") || Ot.isEventKey(e, "Up")) && (e.preventDefault(), e.stopPropagation(), this.stepBack()) + }, t.stepForward = function () { + var e = 0; + void 0 !== this.focusedChild_ && (e = this.focusedChild_ + 1), this.focus(e) + }, t.stepBack = function () { + var e = 0; + void 0 !== this.focusedChild_ && (e = this.focusedChild_ - 1), this.focus(e) + }, t.focus = function (e) { + void 0 === e && (e = 0); + var t = this.children().slice(); + t.length && t[0].className && /vjs-menu-title/.test(t[0].className) && t.shift(), 0 < t.length && (e < 0 ? e = 0 : e >= t.length && (e = t.length - 1), t[this.focusedChild_ = e].el_.focus()) + }, e + }(je); + je.registerComponent("Menu", Xn); + var Kn = function (r) { + function e(e, t) { + var i; + void 0 === t && (t = {}), (i = r.call(this, e, t) || this).menuButton_ = new vn(e, t), i.menuButton_.controlText(i.controlText_), i.menuButton_.el_.setAttribute("aria-haspopup", "true"); + var n = vn.prototype.buildCSSClass(); + return i.menuButton_.el_.className = i.buildCSSClass() + " " + n, i.menuButton_.removeClass("vjs-control"), i.addChild(i.menuButton_), i.update(), i.enabled_ = !0, i.on(i.menuButton_, "tap", i.handleClick), i.on(i.menuButton_, "click", i.handleClick), i.on(i.menuButton_, "keydown", i.handleKeyDown), i.on(i.menuButton_, "mouseenter", function () { + i.addClass("vjs-hover"), i.menu.show(), he(d, "keyup", ve(Ve(i), i.handleMenuKeyUp)) + }), i.on("mouseleave", i.handleMouseLeave), i.on("keydown", i.handleSubmenuKeyDown), i + } + Ge(e, r); + var t = e.prototype; + return t.update = function () { + var e = this.createMenu(); + this.menu && (this.menu.dispose(), this.removeChild(this.menu)), this.menu = e, this.addChild(e), this.buttonPressed_ = !1, this.menuButton_.el_.setAttribute("aria-expanded", "false"), this.items && this.items.length <= this.hideThreshold_ ? this.hide() : this.show() + }, t.createMenu = function () { + var e = new Xn(this.player_, { + menuButton: this + }); + if (this.hideThreshold_ = 0, this.options_.title) { + var t = k("li", { + className: "vjs-menu-title", + innerHTML: Me(this.options_.title), + tabIndex: -1 + }); + this.hideThreshold_ += 1; + var i = new je(this.player_, { + el: t + }); + e.addItem(i) + } + if (this.items = this.createItems(), this.items) + for (var n = 0; n < this.items.length; n++) e.addItem(this.items[n]); + return e + }, t.createItems = function () {}, t.createEl = function () { + return r.prototype.createEl.call(this, "div", { + className: this.buildWrapperCSSClass() + }, {}) + }, t.buildWrapperCSSClass = function () { + var e = "vjs-menu-button"; + return !0 === this.options_.inline ? e += "-inline" : e += "-popup", "vjs-menu-button " + e + " " + vn.prototype.buildCSSClass() + " " + r.prototype.buildCSSClass.call(this) + }, t.buildCSSClass = function () { + var e = "vjs-menu-button"; + return !0 === this.options_.inline ? e += "-inline" : e += "-popup", "vjs-menu-button " + e + " " + r.prototype.buildCSSClass.call(this) + }, t.controlText = function (e, t) { + return void 0 === t && (t = this.menuButton_.el()), this.menuButton_.controlText(e, t) + }, t.dispose = function () { + this.handleMouseLeave(), r.prototype.dispose.call(this) + }, t.handleClick = function (e) { + this.buttonPressed_ ? this.unpressButton() : this.pressButton() + }, t.handleMouseLeave = function (e) { + this.removeClass("vjs-hover"), pe(d, "keyup", ve(this, this.handleMenuKeyUp)) + }, t.focus = function () { + this.menuButton_.focus() + }, t.blur = function () { + this.menuButton_.blur() + }, t.handleKeyDown = function (e) { + Ot.isEventKey(e, "Esc") || Ot.isEventKey(e, "Tab") ? (this.buttonPressed_ && this.unpressButton(), Ot.isEventKey(e, "Tab") || (e.preventDefault(), this.menuButton_.focus())) : (Ot.isEventKey(e, "Up") || Ot.isEventKey(e, "Down")) && (this.buttonPressed_ || (e.preventDefault(), this.pressButton())) + }, t.handleMenuKeyUp = function (e) { + (Ot.isEventKey(e, "Esc") || Ot.isEventKey(e, "Tab")) && this.removeClass("vjs-hover") + }, t.handleSubmenuKeyPress = function (e) { + this.handleSubmenuKeyDown(e) + }, t.handleSubmenuKeyDown = function (e) { + (Ot.isEventKey(e, "Esc") || Ot.isEventKey(e, "Tab")) && (this.buttonPressed_ && this.unpressButton(), Ot.isEventKey(e, "Tab") || (e.preventDefault(), this.menuButton_.focus())) + }, t.pressButton = function () { + if (this.enabled_) { + if (this.buttonPressed_ = !0, this.menu.show(), this.menu.lockShowing(), this.menuButton_.el_.setAttribute("aria-expanded", "true"), dt && b()) return; + this.menu.focus() + } + }, t.unpressButton = function () { + this.enabled_ && (this.buttonPressed_ = !1, this.menu.unlockShowing(), this.menu.hide(), this.menuButton_.el_.setAttribute("aria-expanded", "false")) + }, t.disable = function () { + this.unpressButton(), this.enabled_ = !1, this.addClass("vjs-disabled"), this.menuButton_.disable() + }, t.enable = function () { + this.enabled_ = !0, this.removeClass("vjs-disabled"), this.menuButton_.enable() + }, e + }(je); + je.registerComponent("MenuButton", Kn); + var Yn = function (a) { + function e(e, t) { + var i, n = t.tracks; + if ((i = a.call(this, e, t) || this).items.length <= 1 && i.hide(), !n) return Ve(i); + var r = ve(Ve(i), i.update); + return n.addEventListener("removetrack", r), n.addEventListener("addtrack", r), i.player_.on("ready", r), i.player_.on("dispose", function () { + n.removeEventListener("removetrack", r), n.removeEventListener("addtrack", r) + }), i + } + return Ge(e, a), e + }(Kn); + je.registerComponent("TrackButton", Yn); + var $n = ["Tab", "Esc", "Up", "Down", "Right", "Left"], + Qn = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).selectable = t.selectable, i.isSelected_ = t.selected || !1, i.multiSelectable = t.multiSelectable, i.selected(i.isSelected_), i.selectable ? i.multiSelectable ? i.el_.setAttribute("role", "menuitemcheckbox") : i.el_.setAttribute("role", "menuitemradio") : i.el_.setAttribute("role", "menuitem"), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function (e, t, i) { + return this.nonIconControl = !0, n.prototype.createEl.call(this, "li", g({ + className: "vjs-menu-item", + innerHTML: '' + this.localize(this.options_.label) + "", + tabIndex: -1 + }, t), i) + }, t.handleKeyDown = function (t) { + $n.some(function (e) { + return Ot.isEventKey(t, e) + }) || n.prototype.handleKeyDown.call(this, t) + }, t.handleClick = function (e) { + this.selected(!0) + }, t.selected = function (e) { + this.selectable && (e ? (this.addClass("vjs-selected"), this.el_.setAttribute("aria-checked", "true"), this.controlText(", selected"), this.isSelected_ = !0) : (this.removeClass("vjs-selected"), this.el_.setAttribute("aria-checked", "false"), this.controlText(""), this.isSelected_ = !1)) + }, e + }(ln); + je.registerComponent("MenuItem", Qn); + var Jn = function (u) { + function e(e, t) { + var n, i = t.track, + r = e.textTracks(); + t.label = i.label || i.language || "Unknown", t.selected = "showing" === i.mode, (n = u.call(this, e, t) || this).track = i, n.kinds = (t.kinds || [t.kind || n.track.kind]).filter(Boolean); + + function a() { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + n.handleTracksChange.apply(Ve(n), t) + } + + function s() { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + n.handleSelectedLanguageChange.apply(Ve(n), t) + } + var o; + e.on(["loadstart", "texttrackchange"], a), r.addEventListener("change", a), r.addEventListener("selectedlanguagechange", s), n.on("dispose", function () { + e.off(["loadstart", "texttrackchange"], a), r.removeEventListener("change", a), r.removeEventListener("selectedlanguagechange", s) + }), void 0 === r.onchange && n.on(["tap", "click"], function () { + if ("object" != typeof T.Event) try { + o = new T.Event("change") + } catch (e) {} + o || (o = d.createEvent("Event")).initEvent("change", !0, !0), r.dispatchEvent(o) + }); + return n.handleTracksChange(), n + } + Ge(e, u); + var t = e.prototype; + return t.handleClick = function (e) { + var t = this.track, + i = this.player_.textTracks(); + if (u.prototype.handleClick.call(this, e), i) + for (var n = 0; n < i.length; n++) { + var r = i[n]; - 1 !== this.kinds.indexOf(r.kind) && (r === t ? "showing" !== r.mode && (r.mode = "showing") : "disabled" !== r.mode && (r.mode = "disabled")) + } + }, t.handleTracksChange = function (e) { + var t = "showing" === this.track.mode; + t !== this.isSelected_ && this.selected(t) + }, t.handleSelectedLanguageChange = function (e) { + if ("showing" === this.track.mode) { + var t = this.player_.cache_.selectedLanguage; + if (t && t.enabled && t.language === this.track.language && t.kind !== this.track.kind) return; + this.player_.cache_.selectedLanguage = { + enabled: !0, + language: this.track.language, + kind: this.track.kind + } + } + }, t.dispose = function () { + this.track = null, u.prototype.dispose.call(this) + }, e + }(Qn); + je.registerComponent("TextTrackMenuItem", Jn); + var Zn = function (i) { + function e(e, t) { + return t.track = { + player: e, + kind: t.kind, + kinds: t.kinds, + default: !1, + mode: "disabled" + }, t.kinds || (t.kinds = [t.kind]), t.label ? t.track.label = t.label : t.track.label = t.kinds.join(" and ") + " off", t.selectable = !0, t.multiSelectable = !1, i.call(this, e, t) || this + } + Ge(e, i); + var t = e.prototype; + return t.handleTracksChange = function (e) { + for (var t = this.player().textTracks(), i = !0, n = 0, r = t.length; n < r; n++) { + var a = t[n]; + if (-1 < this.options_.kinds.indexOf(a.kind) && "showing" === a.mode) { + i = !1; + break + } + } + i !== this.isSelected_ && this.selected(i) + }, t.handleSelectedLanguageChange = function (e) { + for (var t = this.player().textTracks(), i = !0, n = 0, r = t.length; n < r; n++) { + var a = t[n]; + if (-1 < ["captions", "descriptions", "subtitles"].indexOf(a.kind) && "showing" === a.mode) { + i = !1; + break + } + } + i && (this.player_.cache_.selectedLanguage = { + enabled: !1 + }) + }, e + }(Jn); + je.registerComponent("OffTextTrackMenuItem", Zn); + var er = function (i) { + function e(e, t) { + return void 0 === t && (t = {}), t.tracks = e.textTracks(), i.call(this, e, t) || this + } + return Ge(e, i), e.prototype.createItems = function (e, t) { + var i; + void 0 === e && (e = []), void 0 === t && (t = Jn), this.label_ && (i = this.label_ + " off"), e.push(new Zn(this.player_, { + kinds: this.kinds_, + kind: this.kind_, + label: i + })), this.hideThreshold_ += 1; + var n = this.player_.textTracks(); + Array.isArray(this.kinds_) || (this.kinds_ = [this.kind_]); + for (var r = 0; r < n.length; r++) { + var a = n[r]; + if (-1 < this.kinds_.indexOf(a.kind)) { + var s = new t(this.player_, { + track: a, + kinds: this.kinds_, + kind: this.kind_, + selectable: !0, + multiSelectable: !1 + }); + s.addClass("vjs-" + a.kind + "-menu-item"), e.push(s) + } + } + return e + }, e + }(Yn); + je.registerComponent("TextTrackButton", er); + var tr = function (s) { + function e(e, t) { + var i, n = t.track, + r = t.cue, + a = e.currentTime(); + return t.selectable = !0, t.multiSelectable = !1, t.label = r.text, t.selected = r.startTime <= a && a < r.endTime, (i = s.call(this, e, t) || this).track = n, i.cue = r, n.addEventListener("cuechange", ve(Ve(i), i.update)), i + } + Ge(e, s); + var t = e.prototype; + return t.handleClick = function (e) { + s.prototype.handleClick.call(this), this.player_.currentTime(this.cue.startTime), this.update(this.cue.startTime) + }, t.update = function (e) { + var t = this.cue, + i = this.player_.currentTime(); + this.selected(t.startTime <= i && i < t.endTime) + }, e + }(Qn); + je.registerComponent("ChaptersTrackMenuItem", tr); + var ir = function (n) { + function e(e, t, i) { + return n.call(this, e, t, i) || this + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-chapters-button " + n.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-chapters-button " + n.prototype.buildWrapperCSSClass.call(this) + }, t.update = function (e) { + this.track_ && (!e || "addtrack" !== e.type && "removetrack" !== e.type) || this.setTrack(this.findChaptersTrack()), n.prototype.update.call(this) + }, t.setTrack = function (e) { + if (this.track_ !== e) { + if (this.updateHandler_ || (this.updateHandler_ = this.update.bind(this)), this.track_) { + var t = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); + t && t.removeEventListener("load", this.updateHandler_), this.track_ = null + } + if (this.track_ = e, this.track_) { + this.track_.mode = "hidden"; + var i = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_); + i && i.addEventListener("load", this.updateHandler_) + } + } + }, t.findChaptersTrack = function () { + for (var e = this.player_.textTracks() || [], t = e.length - 1; 0 <= t; t--) { + var i = e[t]; + if (i.kind === this.kind_) return i + } + }, t.getMenuCaption = function () { + return this.track_ && this.track_.label ? this.track_.label : this.localize(Me(this.kind_)) + }, t.createMenu = function () { + return this.options_.title = this.getMenuCaption(), n.prototype.createMenu.call(this) + }, t.createItems = function () { + var e = []; + if (!this.track_) return e; + var t = this.track_.cues; + if (!t) return e; + for (var i = 0, n = t.length; i < n; i++) { + var r = t[i], + a = new tr(this.player_, { + track: this.track_, + cue: r + }); + e.push(a) + } + return e + }, e + }(er); + ir.prototype.kind_ = "chapters", ir.prototype.controlText_ = "Chapters", je.registerComponent("ChaptersButton", ir); + var nr = function (s) { + function e(e, t, i) { + var n; + n = s.call(this, e, t, i) || this; + var r = e.textTracks(), + a = ve(Ve(n), n.handleTracksChange); + return r.addEventListener("change", a), n.on("dispose", function () { + r.removeEventListener("change", a) + }), n + } + Ge(e, s); + var t = e.prototype; + return t.handleTracksChange = function (e) { + for (var t = this.player().textTracks(), i = !1, n = 0, r = t.length; n < r; n++) { + var a = t[n]; + if (a.kind !== this.kind_ && "showing" === a.mode) { + i = !0; + break + } + } + i ? this.disable() : this.enable() + }, t.buildCSSClass = function () { + return "vjs-descriptions-button " + s.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-descriptions-button " + s.prototype.buildWrapperCSSClass.call(this) + }, e + }(er); + nr.prototype.kind_ = "descriptions", nr.prototype.controlText_ = "Descriptions", je.registerComponent("DescriptionsButton", nr); + var rr = function (n) { + function e(e, t, i) { + return n.call(this, e, t, i) || this + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-subtitles-button " + n.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-subtitles-button " + n.prototype.buildWrapperCSSClass.call(this) + }, e + }(er); + rr.prototype.kind_ = "subtitles", rr.prototype.controlText_ = "Subtitles", je.registerComponent("SubtitlesButton", rr); + var ar = function (n) { + function e(e, t) { + var i; + return t.track = { + player: e, + kind: t.kind, + label: t.kind + " settings", + selectable: !1, + default: !1, + mode: "disabled" + }, t.selectable = !1, t.name = "CaptionSettingsMenuItem", (i = n.call(this, e, t) || this).addClass("vjs-texttrack-settings"), i.controlText(", opens " + t.kind + " settings dialog"), i + } + return Ge(e, n), e.prototype.handleClick = function (e) { + this.player().getChild("textTrackSettings").open() + }, e + }(Jn); + je.registerComponent("CaptionSettingsMenuItem", ar); + var sr = function (n) { + function e(e, t, i) { + return n.call(this, e, t, i) || this + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-captions-button " + n.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-captions-button " + n.prototype.buildWrapperCSSClass.call(this) + }, t.createItems = function () { + var e = []; + return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || !this.player().getChild("textTrackSettings") || (e.push(new ar(this.player_, { + kind: this.kind_ + })), this.hideThreshold_ += 1), n.prototype.createItems.call(this, e) + }, e + }(er); + sr.prototype.kind_ = "captions", sr.prototype.controlText_ = "Captions", je.registerComponent("CaptionsButton", sr); + var or = function (r) { + function e() { + return r.apply(this, arguments) || this + } + return Ge(e, r), e.prototype.createEl = function (e, t, i) { + var n = '' + this.localize(this.options_.label); + return "captions" === this.options_.track.kind && (n += '\n \n ' + this.localize("Captions") + "\n "), n += "", r.prototype.createEl.call(this, e, g({ + innerHTML: n + }, t), i) + }, e + }(Jn); + je.registerComponent("SubsCapsMenuItem", or); + var ur = function (n) { + function e(e, t) { + var i; + return void 0 === t && (t = {}), (i = n.call(this, e, t) || this).label_ = "subtitles", -1 < ["en", "en-us", "en-ca", "fr-ca"].indexOf(i.player_.language_) && (i.label_ = "captions"), i.menuButton_.controlText(Me(i.label_)), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-subs-caps-button " + n.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-subs-caps-button " + n.prototype.buildWrapperCSSClass.call(this) + }, t.createItems = function () { + var e = []; + return this.player().tech_ && this.player().tech_.featuresNativeTextTracks || !this.player().getChild("textTrackSettings") || (e.push(new ar(this.player_, { + kind: this.label_ + })), this.hideThreshold_ += 1), e = n.prototype.createItems.call(this, e, or) + }, e + }(er); + ur.prototype.kinds_ = ["captions", "subtitles"], ur.prototype.controlText_ = "Subtitles", je.registerComponent("SubsCapsButton", ur); + var lr = function (s) { + function e(e, t) { + var n, i = t.track, + r = e.audioTracks(); + t.label = i.label || i.language || "Unknown", t.selected = i.enabled, (n = s.call(this, e, t) || this).track = i, n.addClass("vjs-" + i.kind + "-menu-item"); + + function a() { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + n.handleTracksChange.apply(Ve(n), t) + } + return r.addEventListener("change", a), n.on("dispose", function () { + r.removeEventListener("change", a) + }), n + } + Ge(e, s); + var t = e.prototype; + return t.createEl = function (e, t, i) { + var n = '' + this.localize(this.options_.label); + return "main-desc" === this.options_.track.kind && (n += '\n \n ' + this.localize("Descriptions") + "\n "), n += "", s.prototype.createEl.call(this, e, g({ + innerHTML: n + }, t), i) + }, t.handleClick = function (e) { + var t = this.player_.audioTracks(); + s.prototype.handleClick.call(this, e); + for (var i = 0; i < t.length; i++) { + var n = t[i]; + n.enabled = n === this.track + } + }, t.handleTracksChange = function (e) { + this.selected(this.track.enabled) + }, e + }(Qn); + je.registerComponent("AudioTrackMenuItem", lr); + var cr = function (i) { + function e(e, t) { + return void 0 === t && (t = {}), t.tracks = e.audioTracks(), i.call(this, e, t) || this + } + Ge(e, i); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-audio-button " + i.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-audio-button " + i.prototype.buildWrapperCSSClass.call(this) + }, t.createItems = function (e) { + void 0 === e && (e = []), this.hideThreshold_ = 1; + for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) { + var n = t[i]; + e.push(new lr(this.player_, { + track: n, + selectable: !0, + multiSelectable: !1 + })) + } + return e + }, e + }(Yn); + cr.prototype.controlText_ = "Audio Track", je.registerComponent("AudioTrackButton", cr); + var dr = function (a) { + function e(e, t) { + var i, n = t.rate, + r = parseFloat(n, 10); + return t.label = n, t.selected = 1 === r, t.selectable = !0, t.multiSelectable = !1, (i = a.call(this, e, t) || this).label = n, i.rate = r, i.on(e, "ratechange", i.update), i + } + Ge(e, a); + var t = e.prototype; + return t.handleClick = function (e) { + a.prototype.handleClick.call(this), this.player().playbackRate(this.rate) + }, t.update = function (e) { + this.selected(this.player().playbackRate() === this.rate) + }, e + }(Qn); + dr.prototype.contentElType = "button", je.registerComponent("PlaybackRateMenuItem", dr); + var hr = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).updateVisibility(), i.updateLabel(), i.on(e, "loadstart", i.updateVisibility), i.on(e, "ratechange", i.updateLabel), i + } + Ge(e, n); + var t = e.prototype; + return t.createEl = function () { + var e = n.prototype.createEl.call(this); + return this.labelEl_ = k("div", { + className: "vjs-playback-rate-value", + innerHTML: "1x" + }), e.appendChild(this.labelEl_), e + }, t.dispose = function () { + this.labelEl_ = null, n.prototype.dispose.call(this) + }, t.buildCSSClass = function () { + return "vjs-playback-rate " + n.prototype.buildCSSClass.call(this) + }, t.buildWrapperCSSClass = function () { + return "vjs-playback-rate " + n.prototype.buildWrapperCSSClass.call(this) + }, t.createMenu = function () { + var e = new Xn(this.player()), + t = this.playbackRates(); + if (t) + for (var i = t.length - 1; 0 <= i; i--) e.addChild(new dr(this.player(), { + rate: t[i] + "x" + })); + return e + }, t.updateARIAAttributes = function () { + this.el().setAttribute("aria-valuenow", this.player().playbackRate()) + }, t.handleClick = function (e) { + for (var t = this.player().playbackRate(), i = this.playbackRates(), n = i[0], r = 0; r < i.length; r++) + if (i[r] > t) { + n = i[r]; + break + } this.player().playbackRate(n) + }, t.playbackRates = function () { + return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.playbackRates + }, t.playbackRateSupported = function () { + return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && 0 < this.playbackRates().length + }, t.updateVisibility = function (e) { + this.playbackRateSupported() ? this.removeClass("vjs-hidden") : this.addClass("vjs-hidden") + }, t.updateLabel = function (e) { + this.playbackRateSupported() && (this.labelEl_.innerHTML = this.player().playbackRate() + "x") + }, e + }(Kn); + hr.prototype.controlText_ = "Playback Rate", je.registerComponent("PlaybackRateMenuButton", hr); + var pr = function (e) { + function t() { + return e.apply(this, arguments) || this + } + Ge(t, e); + var i = t.prototype; + return i.buildCSSClass = function () { + return "vjs-spacer " + e.prototype.buildCSSClass.call(this) + }, i.createEl = function () { + return e.prototype.createEl.call(this, "div", { + className: this.buildCSSClass() + }) + }, t + }(je); + je.registerComponent("Spacer", pr); + var fr = function (t) { + function e() { + return t.apply(this, arguments) || this + } + Ge(e, t); + var i = e.prototype; + return i.buildCSSClass = function () { + return "vjs-custom-control-spacer " + t.prototype.buildCSSClass.call(this) + }, i.createEl = function () { + var e = t.prototype.createEl.call(this, { + className: this.buildCSSClass() + }); + return e.innerHTML = " ", e + }, e + }(pr); + je.registerComponent("CustomControlSpacer", fr); + var mr = function (e) { + function t() { + return e.apply(this, arguments) || this + } + return Ge(t, e), t.prototype.createEl = function () { + return e.prototype.createEl.call(this, "div", { + className: "vjs-control-bar", + dir: "ltr" + }) + }, t + }(je); + mr.prototype.options_ = { + children: ["playToggle", "volumePanel", "currentTimeDisplay", "timeDivider", "durationDisplay", "progressControl", "liveDisplay", "seekToLive", "remainingTimeDisplay", "customControlSpacer", "playbackRateMenuButton", "chaptersButton", "descriptionsButton", "subsCapsButton", "audioTrackButton", "fullscreenToggle"] + }, "exitPictureInPicture" in d && mr.prototype.options_.children.splice(mr.prototype.options_.children.length - 1, 0, "pictureInPictureToggle"), je.registerComponent("ControlBar", mr); + var gr = function (n) { + function e(e, t) { + var i; + return (i = n.call(this, e, t) || this).on(e, "error", i.open), i + } + Ge(e, n); + var t = e.prototype; + return t.buildCSSClass = function () { + return "vjs-error-display " + n.prototype.buildCSSClass.call(this) + }, t.content = function () { + var e = this.player().error(); + return e ? this.localize(e.message) : "" + }, e + }(Mt); + gr.prototype.options_ = m({}, Mt.prototype.options_, { + pauseOnOpen: !1, + fillAlways: !0, + temporary: !1, + uncloseable: !0 + }), je.registerComponent("ErrorDisplay", gr); + var vr = "vjs-text-track-settings", + yr = ["#000", "Black"], + _r = ["#00F", "Blue"], + br = ["#0FF", "Cyan"], + Tr = ["#0F0", "Green"], + Sr = ["#F0F", "Magenta"], + kr = ["#F00", "Red"], + Cr = ["#FFF", "White"], + Er = ["#FF0", "Yellow"], + wr = ["1", "Opaque"], + Ir = ["0.5", "Semi-Transparent"], + Ar = ["0", "Transparent"], + xr = { + backgroundColor: { + selector: ".vjs-bg-color > select", + id: "captions-background-color-%s", + label: "Color", + options: [yr, Cr, kr, Tr, _r, Er, Sr, br] + }, + backgroundOpacity: { + selector: ".vjs-bg-opacity > select", + id: "captions-background-opacity-%s", + label: "Transparency", + options: [wr, Ir, Ar] + }, + color: { + selector: ".vjs-fg-color > select", + id: "captions-foreground-color-%s", + label: "Color", + options: [Cr, yr, kr, Tr, _r, Er, Sr, br] + }, + edgeStyle: { + selector: ".vjs-edge-style > select", + id: "%s", + label: "Text Edge Style", + options: [ + ["none", "None"], + ["raised", "Raised"], + ["depressed", "Depressed"], + ["uniform", "Uniform"], + ["dropshadow", "Dropshadow"] + ] + }, + fontFamily: { + selector: ".vjs-font-family > select", + id: "captions-font-family-%s", + label: "Font Family", + options: [ + ["proportionalSansSerif", "Proportional Sans-Serif"], + ["monospaceSansSerif", "Monospace Sans-Serif"], + ["proportionalSerif", "Proportional Serif"], + ["monospaceSerif", "Monospace Serif"], + ["casual", "Casual"], + ["script", "Script"], + ["small-caps", "Small Caps"] + ] + }, + fontPercent: { + selector: ".vjs-font-percent > select", + id: "captions-font-size-%s", + label: "Font Size", + options: [ + ["0.50", "50%"], + ["0.75", "75%"], + ["1.00", "100%"], + ["1.25", "125%"], + ["1.50", "150%"], + ["1.75", "175%"], + ["2.00", "200%"], + ["3.00", "300%"], + ["4.00", "400%"] + ], + default: 2, + parser: function (e) { + return "1.00" === e ? null : Number(e) + } + }, + textOpacity: { + selector: ".vjs-text-opacity > select", + id: "captions-foreground-opacity-%s", + label: "Transparency", + options: [wr, Ir] + }, + windowColor: { + selector: ".vjs-window-color > select", + id: "captions-window-color-%s", + label: "Color" + }, + windowOpacity: { + selector: ".vjs-window-opacity > select", + id: "captions-window-opacity-%s", + label: "Transparency", + options: [Ar, Ir, wr] + } + }; + + function Pr(e, t) { + if (t && (e = t(e)), e && "none" !== e) return e + } + xr.windowColor.options = xr.backgroundColor.options; + var Lr = function (n) { + function e(e, t) { + var i; + return t.temporary = !1, (i = n.call(this, e, t) || this).updateDisplay = ve(Ve(i), i.updateDisplay), i.fill(), i.hasBeenOpened_ = i.hasBeenFilled_ = !0, i.endDialog = k("p", { + className: "vjs-control-text", + textContent: i.localize("End of dialog window.") + }), i.el().appendChild(i.endDialog), i.setDefaults(), void 0 === t.persistTextTrackSettings && (i.options_.persistTextTrackSettings = i.options_.playerOptions.persistTextTrackSettings), i.on(i.$(".vjs-done-button"), "click", function () { + i.saveSettings(), i.close() + }), i.on(i.$(".vjs-default-button"), "click", function () { + i.setDefaults(), i.updateDisplay() + }), r(xr, function (e) { + i.on(i.$(e.selector), "change", i.updateDisplay) + }), i.options_.persistTextTrackSettings && i.restoreSettings(), i + } + Ge(e, n); + var t = e.prototype; + return t.dispose = function () { + this.endDialog = null, n.prototype.dispose.call(this) + }, t.createElSelect_ = function (e, t, i) { + var n = this; + void 0 === t && (t = ""), void 0 === i && (i = "label"); + var r = xr[e], + a = r.id.replace("%s", this.id_), + s = [t, a].join(" ").trim(); + return ["<" + i + ' id="' + a + '" class="' + ("label" === i ? "vjs-label" : "") + '">', this.localize(r.label), "", '").join("") + }, t.createElFgColor_ = function () { + var e = "captions-text-legend-" + this.id_; + return ['
', '', this.localize("Text"), "", this.createElSelect_("color", e), '', this.createElSelect_("textOpacity", e), "", "
"].join("") + }, t.createElBgColor_ = function () { + var e = "captions-background-" + this.id_; + return ['
', '', this.localize("Background"), "", this.createElSelect_("backgroundColor", e), '', this.createElSelect_("backgroundOpacity", e), "", "
"].join("") + }, t.createElWinColor_ = function () { + var e = "captions-window-" + this.id_; + return ['
', '', this.localize("Window"), "", this.createElSelect_("windowColor", e), '', this.createElSelect_("windowOpacity", e), "", "
"].join("") + }, t.createElColors_ = function () { + return k("div", { + className: "vjs-track-settings-colors", + innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join("") + }) + }, t.createElFont_ = function () { + return k("div", { + className: "vjs-track-settings-font", + innerHTML: ['
', this.createElSelect_("fontPercent", "", "legend"), "
", '
', this.createElSelect_("edgeStyle", "", "legend"), "
", '
', this.createElSelect_("fontFamily", "", "legend"), "
"].join("") + }) + }, t.createElControls_ = function () { + var e = this.localize("restore all settings to the default values"); + return k("div", { + className: "vjs-track-settings-controls", + innerHTML: ['", '"].join("") + }) + }, t.content = function () { + return [this.createElColors_(), this.createElFont_(), this.createElControls_()] + }, t.label = function () { + return this.localize("Caption Settings Dialog") + }, t.description = function () { + return this.localize("Beginning of dialog window. Escape will cancel and close the window.") + }, t.buildCSSClass = function () { + return n.prototype.buildCSSClass.call(this) + " vjs-text-track-settings" + }, t.getValues = function () { + var r = this; + return function (i, n, e) { + return void 0 === e && (e = 0), a(i).reduce(function (e, t) { + return n(e, i[t], t) + }, e) + }(xr, function (e, t, i) { + var n = function (e, t) { + return Pr(e.options[e.options.selectedIndex].value, t) + }(r.$(t.selector), t.parser); + return void 0 !== n && (e[i] = n), e + }, {}) + }, t.setValues = function (i) { + var n = this; + r(xr, function (e, t) { + ! function (e, t, i) { + if (t) + for (var n = 0; n < e.options.length; n++) + if (Pr(e.options[n].value, i) === t) { + e.selectedIndex = n; + break + } + }(n.$(e.selector), i[t], e.parser) + }) + }, t.setDefaults = function () { + var i = this; + r(xr, function (e) { + var t = e.hasOwnProperty("default") ? e.default : 0; + i.$(e.selector).selectedIndex = t + }) + }, t.restoreSettings = function () { + var e; + try { + e = JSON.parse(T.localStorage.getItem(vr)) + } catch (e) { + p.warn(e) + } + e && this.setValues(e) + }, t.saveSettings = function () { + if (this.options_.persistTextTrackSettings) { + var e = this.getValues(); + try { + Object.keys(e).length ? T.localStorage.setItem(vr, JSON.stringify(e)) : T.localStorage.removeItem(vr) + } catch (e) { + p.warn(e) + } + } + }, t.updateDisplay = function () { + var e = this.player_.getChild("textTrackDisplay"); + e && e.updateDisplay() + }, t.conditionalBlur_ = function () { + this.previouslyActiveEl_ = null; + var e = this.player_.controlBar, + t = e && e.subsCapsButton, + i = e && e.captionsButton; + t ? t.focus() : i && i.focus() + }, e + }(Mt); + je.registerComponent("TextTrackSettings", Lr); + var Or = function (a) { + function e(e, t) { + var i, n = t.ResizeObserver || T.ResizeObserver; + null === t.ResizeObserver && (n = !1); + var r = Re({ + createEl: !n, + reportTouchActivity: !1 + }, t); + return (i = a.call(this, e, r) || this).ResizeObserver = t.ResizeObserver || T.ResizeObserver, i.loadListener_ = null, i.resizeObserver_ = null, i.debouncedHandler_ = function (n, r, a, s) { + var o; + void 0 === s && (s = T); + + function e() { + var e = this, + t = arguments, + i = function () { + i = o = null, a || n.apply(e, t) + }; + !o && a && n.apply(e, t), s.clearTimeout(o), o = s.setTimeout(i, r) + } + return e.cancel = function () { + s.clearTimeout(o), o = null + }, e + }(function () { + i.resizeHandler() + }, 100, !1, Ve(i)), n ? (i.resizeObserver_ = new i.ResizeObserver(i.debouncedHandler_), i.resizeObserver_.observe(e.el())) : (i.loadListener_ = function () { + if (i.el_ && i.el_.contentWindow) { + var e = i.debouncedHandler_, + t = i.unloadListener_ = function () { + pe(this, "resize", e), pe(this, "unload", t), t = null + }; + he(i.el_.contentWindow, "unload", t), he(i.el_.contentWindow, "resize", e) + } + }, i.one("load", i.loadListener_)), i + } + Ge(e, a); + var t = e.prototype; + return t.createEl = function () { + return a.prototype.createEl.call(this, "iframe", { + className: "vjs-resize-manager", + tabIndex: -1 + }, { + "aria-hidden": "true" + }) + }, t.resizeHandler = function () { + this.player_ && this.player_.trigger && this.player_.trigger("playerresize") + }, t.dispose = function () { + this.debouncedHandler_ && this.debouncedHandler_.cancel(), this.resizeObserver_ && (this.player_.el() && this.resizeObserver_.unobserve(this.player_.el()), this.resizeObserver_.disconnect()), this.loadListener_ && this.off("load", this.loadListener_), this.el_ && this.el_.contentWindow && this.unloadListener_ && this.unloadListener_.call(this.el_.contentWindow), this.ResizeObserver = null, this.resizeObserver = null, this.debouncedHandler_ = null, this.loadListener_ = null, a.prototype.dispose.call(this) + }, e + }(je); + je.registerComponent("ResizeManager", Or); + var Dr = { + trackingThreshold: 30, + liveTolerance: 15 + }, + Mr = function (r) { + function e(e, t) { + var i, n = Re(Dr, t, { + createEl: !1 + }); + return (i = r.call(this, e, n) || this).reset_(), i.on(i.player_, "durationchange", i.handleDurationchange), at && "hidden" in d && "visibilityState" in d && i.on(d, "visibilitychange", i.handleVisibilityChange), i + } + Ge(e, r); + var t = e.prototype; + return t.handleVisibilityChange = function () { + this.player_.duration() === 1 / 0 && (d.hidden ? this.stopTracking() : this.startTracking()) + }, t.trackLive_ = function () { + var e = this.player_.seekable(); + if (e && e.length) { + var t = Number(T.performance.now().toFixed(4)), + i = -1 === this.lastTime_ ? 0 : (t - this.lastTime_) / 1e3; + this.lastTime_ = t, this.pastSeekEnd_ = this.pastSeekEnd() + i; + var n = this.liveCurrentTime(), + r = this.player_.currentTime(), + a = this.player_.paused() || this.seekedBehindLive_ || Math.abs(n - r) > this.options_.liveTolerance; + this.timeupdateSeen_ && n !== 1 / 0 || (a = !1), a !== this.behindLiveEdge_ && (this.behindLiveEdge_ = a, this.trigger("liveedgechange")) + } + }, t.handleDurationchange = function () { + this.player_.duration() === 1 / 0 && this.liveWindow() >= this.options_.trackingThreshold ? (this.player_.options_.liveui && this.player_.addClass("vjs-liveui"), this.startTracking()) : (this.player_.removeClass("vjs-liveui"), this.stopTracking()) + }, t.startTracking = function () { + this.isTracking() || (this.timeupdateSeen_ || (this.timeupdateSeen_ = this.player_.hasStarted()), this.trackingInterval_ = this.setInterval(this.trackLive_, 30), this.trackLive_(), this.on(this.player_, ["play", "pause"], this.trackLive_), this.timeupdateSeen_ ? this.on(this.player_, "seeked", this.handleSeeked) : (this.one(this.player_, "play", this.handlePlay), this.one(this.player_, "timeupdate", this.handleFirstTimeupdate))) + }, t.handleFirstTimeupdate = function () { + this.timeupdateSeen_ = !0, this.on(this.player_, "seeked", this.handleSeeked) + }, t.handleSeeked = function () { + var e = Math.abs(this.liveCurrentTime() - this.player_.currentTime()); + this.seekedBehindLive_ = !this.skipNextSeeked_ && 2 < e, this.skipNextSeeked_ = !1, this.trackLive_() + }, t.handlePlay = function () { + this.one(this.player_, "timeupdate", this.seekToLiveEdge) + }, t.reset_ = function () { + this.lastTime_ = -1, this.pastSeekEnd_ = 0, this.lastSeekEnd_ = -1, this.behindLiveEdge_ = !0, this.timeupdateSeen_ = !1, this.seekedBehindLive_ = !1, this.skipNextSeeked_ = !1, this.clearInterval(this.trackingInterval_), this.trackingInterval_ = null, this.off(this.player_, ["play", "pause"], this.trackLive_), this.off(this.player_, "seeked", this.handleSeeked), this.off(this.player_, "play", this.handlePlay), this.off(this.player_, "timeupdate", this.handleFirstTimeupdate), this.off(this.player_, "timeupdate", this.seekToLiveEdge) + }, t.stopTracking = function () { + this.isTracking() && (this.reset_(), this.trigger("liveedgechange")) + }, t.seekableEnd = function () { + for (var e = this.player_.seekable(), t = [], i = e ? e.length : 0; i--;) t.push(e.end(i)); + return t.length ? t.sort()[t.length - 1] : 1 / 0 + }, t.seekableStart = function () { + for (var e = this.player_.seekable(), t = [], i = e ? e.length : 0; i--;) t.push(e.start(i)); + return t.length ? t.sort()[0] : 0 + }, t.liveWindow = function () { + var e = this.liveCurrentTime(); + return e === 1 / 0 ? 1 / 0 : e - this.seekableStart() + }, t.isLive = function () { + return this.isTracking() + }, t.atLiveEdge = function () { + return !this.behindLiveEdge() + }, t.liveCurrentTime = function () { + return this.pastSeekEnd() + this.seekableEnd() + }, t.pastSeekEnd = function () { + var e = this.seekableEnd(); + return -1 !== this.lastSeekEnd_ && e !== this.lastSeekEnd_ && (this.pastSeekEnd_ = 0), this.lastSeekEnd_ = e, this.pastSeekEnd_ + }, t.behindLiveEdge = function () { + return this.behindLiveEdge_ + }, t.isTracking = function () { + return "number" == typeof this.trackingInterval_ + }, t.seekToLiveEdge = function () { + this.seekedBehindLive_ = !1, this.atLiveEdge() || (this.skipNextSeeked_ = !0, this.player_.currentTime(this.liveCurrentTime())) + }, t.dispose = function () { + this.off(d, "visibilitychange", this.handleVisibilityChange), this.stopTracking(), r.prototype.dispose.call(this) + }, e + }(je); + je.registerComponent("LiveTracker", Mr); + + function Rr(e) { + var t = e.el(); + if (t.hasAttribute("src")) return e.triggerSourceset(t.src), !0; + var i = e.$$("source"), + n = [], + r = ""; + if (!i.length) return !1; + for (var a = 0; a < i.length; a++) { + var s = i[a].src; + s && -1 === n.indexOf(s) && n.push(s) + } + return !!n.length && (1 === n.length && (r = n[0]), e.triggerSourceset(r), !0) + } + + function Nr(e, t) { + for (var i = {}, n = 0; n < e.length && !((i = Object.getOwnPropertyDescriptor(e[n], t)) && i.set && i.get); n++); + return i.enumerable = !0, i.configurable = !0, i + } + + function Ur(a) { + var s = a.el(); + if (!s.resetSourceWatch_) { + var t = {}, + e = function (e) { + return Nr([e.el(), T.HTMLMediaElement.prototype, T.Element.prototype, Vr], "innerHTML") + }(a), + i = function (r) { + return function () { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + var n = r.apply(s, t); + return Rr(a), n + } + }; + ["append", "appendChild", "insertAdjacentHTML"].forEach(function (e) { + s[e] && (t[e] = s[e], s[e] = i(t[e])) + }), Object.defineProperty(s, "innerHTML", Re(e, { + set: i(e.set) + })), s.resetSourceWatch_ = function () { + s.resetSourceWatch_ = null, Object.keys(t).forEach(function (e) { + s[e] = t[e] + }), Object.defineProperty(s, "innerHTML", e) + }, a.one("sourceset", s.resetSourceWatch_) + } + } + + function Fr(n) { + if (n.featuresSourceset) { + var r = n.el(); + if (!r.resetSourceset_) { + var i = function (e) { + return Nr([e.el(), T.HTMLMediaElement.prototype, qr], "src") + }(n), + a = r.setAttribute, + t = r.load; + Object.defineProperty(r, "src", Re(i, { + set: function (e) { + var t = i.set.call(r, e); + return n.triggerSourceset(r.src), t + } + })), r.setAttribute = function (e, t) { + var i = a.call(r, e, t); + return /src/i.test(e) && n.triggerSourceset(r.src), i + }, r.load = function () { + var e = t.call(r); + return Rr(n) || (n.triggerSourceset(""), Ur(n)), e + }, r.currentSrc ? n.triggerSourceset(r.currentSrc) : Rr(n) || Ur(n), r.resetSourceset_ = function () { + r.resetSourceset_ = null, r.load = t, r.setAttribute = a, Object.defineProperty(r, "src", i), r.resetSourceWatch_ && r.resetSourceWatch_() + } + } + } + } + + function Br(t, i, n, e) { + function r(e) { + return Object.defineProperty(t, i, { + value: e, + enumerable: !0, + writable: !0 + }) + } + void 0 === e && (e = !0); + var a = { + configurable: !0, + enumerable: !0, + get: function () { + var e = n(); + return r(e), e + } + }; + return e && (a.set = r), Object.defineProperty(t, i, a) + } + var jr, Vr = Object.defineProperty({}, "innerHTML", { + get: function () { + return this.cloneNode(!0).innerHTML + }, + set: function (e) { + var t = d.createElement(this.nodeName.toLowerCase()); + t.innerHTML = e; + for (var i = d.createDocumentFragment(); t.childNodes.length;) i.appendChild(t.childNodes[0]); + return this.innerText = "", T.Element.prototype.appendChild.call(this, i), this.innerHTML + } + }), + qr = Object.defineProperty({}, "src", { + get: function () { + return this.hasAttribute("src") ? jt(T.Element.prototype.getAttribute.call(this, "src")) : "" + }, + set: function (e) { + return T.Element.prototype.setAttribute.call(this, "src", e), e + } + }), + Hr = function (c) { + function o(e, t) { + var i; + i = c.call(this, e, t) || this; + var n = e.source, + r = !1; + if (n && (i.el_.currentSrc !== n.src || e.tag && 3 === e.tag.initNetworkState_) ? i.setSource(n) : i.handleLateInit_(i.el_), e.enableSourceset && i.setupSourcesetHandling_(), i.el_.hasChildNodes()) { + for (var a = i.el_.childNodes, s = a.length, o = []; s--;) { + var u = a[s]; + "track" === u.nodeName.toLowerCase() && (i.featuresNativeTextTracks ? (i.remoteTextTrackEls().addTrackElement_(u), i.remoteTextTracks().addTrack(u.track), i.textTracks().addTrack(u.track), r || i.el_.hasAttribute("crossorigin") || !qt(u.src) || (r = !0)) : o.push(u)) + } + for (var l = 0; l < o.length; l++) i.el_.removeChild(o[l]) + } + return i.proxyNativeTracks_(), i.featuresNativeTextTracks && r && p.warn("Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\nThis may prevent text tracks from loading."), i.restoreMetadataTracksInIOSNativePlayer_(), (ut || ct || et) && !0 === e.nativeControlsForTouch && i.setControls(!0), i.proxyWebkitFullscreen_(), i.triggerReady(), i + } + Ge(o, c); + var e = o.prototype; + return e.dispose = function () { + this.el_ && this.el_.resetSourceset_ && this.el_.resetSourceset_(), o.disposeMediaElement(this.el_), this.options_ = null, c.prototype.dispose.call(this) + }, e.setupSourcesetHandling_ = function () { + Fr(this) + }, e.restoreMetadataTracksInIOSNativePlayer_ = function () { + function e() { + i = []; + for (var e = 0; e < n.length; e++) { + var t = n[e]; + "metadata" === t.kind && i.push({ + track: t, + storedMode: t.mode + }) + } + } + var i, n = this.textTracks(); + e(), n.addEventListener("change", e), this.on("dispose", function () { + return n.removeEventListener("change", e) + }); + + function r() { + for (var e = 0; e < i.length; e++) { + var t = i[e]; + "disabled" === t.track.mode && t.track.mode !== t.storedMode && (t.track.mode = t.storedMode) + } + n.removeEventListener("change", r) + } + this.on("webkitbeginfullscreen", function () { + n.removeEventListener("change", e), n.removeEventListener("change", r), n.addEventListener("change", r) + }), this.on("webkitendfullscreen", function () { + n.removeEventListener("change", e), n.addEventListener("change", e), n.removeEventListener("change", r) + }) + }, e.overrideNative_ = function (e, t) { + var i = this; + if (t === this["featuresNative" + e + "Tracks"]) { + var n = e.toLowerCase(); + this[n + "TracksListeners_"] && Object.keys(this[n + "TracksListeners_"]).forEach(function (e) { + i.el()[n + "Tracks"].removeEventListener(e, i[n + "TracksListeners_"][e]) + }), this["featuresNative" + e + "Tracks"] = !t, this[n + "TracksListeners_"] = null, this.proxyNativeTracksForType_(n) + } + }, e.overrideNativeAudioTracks = function (e) { + this.overrideNative_("Audio", e) + }, e.overrideNativeVideoTracks = function (e) { + this.overrideNative_("Video", e) + }, e.proxyNativeTracksForType_ = function (i) { + var n = this, + e = fi[i], + r = this.el()[e.getterName], + a = this[e.getterName](); + if (this["featuresNative" + e.capitalName + "Tracks"] && r && r.addEventListener) { + var s = { + change: function (e) { + var t = { + type: "change", + target: a, + currentTarget: a, + srcElement: a + }; + a.trigger(t), "text" === i && n[mi.remoteText.getterName]().trigger(t) + }, + addtrack: function (e) { + a.addTrack(e.track) + }, + removetrack: function (e) { + a.removeTrack(e.track) + } + }, + t = function () { + for (var e = [], t = 0; t < a.length; t++) { + for (var i = !1, n = 0; n < r.length; n++) + if (r[n] === a[t]) { + i = !0; + break + } i || e.push(a[t]) + } + for (; e.length;) a.removeTrack(e.shift()) + }; + this[e.getterName + "Listeners_"] = s, Object.keys(s).forEach(function (t) { + var i = s[t]; + r.addEventListener(t, i), n.on("dispose", function (e) { + return r.removeEventListener(t, i) + }) + }), this.on("loadstart", t), this.on("dispose", function (e) { + return n.off("loadstart", t) + }) + } + }, e.proxyNativeTracks_ = function () { + var t = this; + fi.names.forEach(function (e) { + t.proxyNativeTracksForType_(e) + }) + }, e.createEl = function () { + var e = this.options_.tag; + if (!e || !this.options_.playerElIngest && !this.movingMediaElementInDOM) { + if (e) { + var t = e.cloneNode(!0); + e.parentNode && e.parentNode.insertBefore(t, e), o.disposeMediaElement(e), e = t + } else { + e = d.createElement("video"); + var i = Re({}, this.options_.tag && L(this.options_.tag)); + ut && !0 === this.options_.nativeControlsForTouch || delete i.controls, P(e, g(i, { + id: this.options_.techId, + class: "vjs-tech" + })) + } + e.playerId = this.options_.playerId + } + "undefined" != typeof this.options_.preload && D(e, "preload", this.options_.preload), void 0 !== this.options_.disablePictureInPicture && (e.disablePictureInPicture = this.options_.disablePictureInPicture); + for (var n = ["loop", "muted", "playsinline", "autoplay"], r = 0; r < n.length; r++) { + var a = n[r], + s = this.options_[a]; + "undefined" != typeof s && (s ? D(e, a, a) : M(e, a), e[a] = s) + } + return e + }, e.handleLateInit_ = function (e) { + if (0 !== e.networkState && 3 !== e.networkState) { + if (0 === e.readyState) { + var t = !1, + i = function () { + t = !0 + }; + this.on("loadstart", i); + var n = function () { + t || this.trigger("loadstart") + }; + return this.on("loadedmetadata", n), void this.ready(function () { + this.off("loadstart", i), this.off("loadedmetadata", n), t || this.trigger("loadstart") + }) + } + var r = ["loadstart"]; + r.push("loadedmetadata"), 2 <= e.readyState && r.push("loadeddata"), 3 <= e.readyState && r.push("canplay"), 4 <= e.readyState && r.push("canplaythrough"), this.ready(function () { + r.forEach(function (e) { + this.trigger(e) + }, this) + }) + } + }, e.setScrubbing = function (e) { + this.isScrubbing_ = e + }, e.setCurrentTime = function (e) { + try { + this.isScrubbing_ && this.el_.fastSeek && ht ? this.el_.fastSeek(e) : this.el_.currentTime = e + } catch (e) { + p(e, "Video is not ready. (Video.js)") + } + }, e.duration = function () { + var t = this; + if (this.el_.duration === 1 / 0 && Je && nt && 0 === this.el_.currentTime) { + return this.on("timeupdate", function e() { + 0 < t.el_.currentTime && (t.el_.duration === 1 / 0 && t.trigger("durationchange"), t.off("timeupdate", e)) + }), NaN + } + return this.el_.duration || NaN + }, e.width = function () { + return this.el_.offsetWidth + }, e.height = function () { + return this.el_.offsetHeight + }, e.proxyWebkitFullscreen_ = function () { + var e = this; + if ("webkitDisplayingFullscreen" in this.el_) { + var t = function () { + this.trigger("fullscreenchange", { + isFullscreen: !1 + }) + }, + i = function () { + "webkitPresentationMode" in this.el_ && "picture-in-picture" !== this.el_.webkitPresentationMode && (this.one("webkitendfullscreen", t), this.trigger("fullscreenchange", { + isFullscreen: !0, + nativeIOSFullscreen: !0 + })) + }; + this.on("webkitbeginfullscreen", i), this.on("dispose", function () { + e.off("webkitbeginfullscreen", i), e.off("webkitendfullscreen", t) + }) + } + }, e.supportsFullScreen = function () { + if ("function" == typeof this.el_.webkitEnterFullScreen) { + var e = T.navigator && T.navigator.userAgent || ""; + if (/Android/.test(e) || !/Chrome|Mac OS X 10.5/.test(e)) return !0 + } + return !1 + }, e.enterFullScreen = function () { + var e = this.el_; + if (e.paused && e.networkState <= e.HAVE_METADATA) At(this.el_.play()), this.setTimeout(function () { + e.pause(); + try { + e.webkitEnterFullScreen() + } catch (e) { + this.trigger("fullscreenerror", e) + } + }, 0); + else try { + e.webkitEnterFullScreen() + } catch (e) { + this.trigger("fullscreenerror", e) + } + }, e.exitFullScreen = function () { + this.el_.webkitDisplayingFullscreen ? this.el_.webkitExitFullScreen() : this.trigger("fullscreenerror", new Error("The video is not fullscreen")) + }, e.requestPictureInPicture = function () { + return this.el_.requestPictureInPicture() + }, e.src = function (e) { + if (void 0 === e) return this.el_.src; + this.setSrc(e) + }, e.reset = function () { + o.resetMediaElement(this.el_) + }, e.currentSrc = function () { + return this.currentSource_ ? this.currentSource_.src : this.el_.currentSrc + }, e.setControls = function (e) { + this.el_.controls = !!e + }, e.addTextTrack = function (e, t, i) { + return this.featuresNativeTextTracks ? this.el_.addTextTrack(e, t, i) : c.prototype.addTextTrack.call(this, e, t, i) + }, e.createRemoteTextTrack = function (e) { + if (!this.featuresNativeTextTracks) return c.prototype.createRemoteTextTrack.call(this, e); + var t = d.createElement("track"); + return e.kind && (t.kind = e.kind), e.label && (t.label = e.label), (e.language || e.srclang) && (t.srclang = e.language || e.srclang), e.default && (t.default = e.default), e.id && (t.id = e.id), e.src && (t.src = e.src), t + }, e.addRemoteTextTrack = function (e, t) { + var i = c.prototype.addRemoteTextTrack.call(this, e, t); + return this.featuresNativeTextTracks && this.el().appendChild(i), i + }, e.removeRemoteTextTrack = function (e) { + if (c.prototype.removeRemoteTextTrack.call(this, e), this.featuresNativeTextTracks) + for (var t = this.$$("track"), i = t.length; i--;) e !== t[i] && e !== t[i].track || this.el().removeChild(t[i]) + }, e.getVideoPlaybackQuality = function () { + if ("function" == typeof this.el().getVideoPlaybackQuality) return this.el().getVideoPlaybackQuality(); + var e = {}; + return "undefined" != typeof this.el().webkitDroppedFrameCount && "undefined" != typeof this.el().webkitDecodedFrameCount && (e.droppedVideoFrames = this.el().webkitDroppedFrameCount, e.totalVideoFrames = this.el().webkitDecodedFrameCount), T.performance && "function" == typeof T.performance.now ? e.creationTime = T.performance.now() : T.performance && T.performance.timing && "number" == typeof T.performance.timing.navigationStart && (e.creationTime = T.Date.now() - T.performance.timing.navigationStart), e + }, o + }(Xi); + Br(Hr, "TEST_VID", function () { + if (y()) { + var e = d.createElement("video"), + t = d.createElement("track"); + return t.kind = "captions", t.srclang = "en", t.label = "English", e.appendChild(t), e + } + }), Hr.isSupported = function () { + try { + Hr.TEST_VID.volume = .5 + } catch (e) { + return !1 + } + return !(!Hr.TEST_VID || !Hr.TEST_VID.canPlayType) + }, Hr.canPlayType = function (e) { + return Hr.TEST_VID.canPlayType(e) + }, Hr.canPlaySource = function (e, t) { + return Hr.canPlayType(e.type) + }, Hr.canControlVolume = function () { + try { + var e = Hr.TEST_VID.volume; + return Hr.TEST_VID.volume = e / 2 + .1, e !== Hr.TEST_VID.volume + } catch (e) { + return !1 + } + }, Hr.canMuteVolume = function () { + try { + var e = Hr.TEST_VID.muted; + return Hr.TEST_VID.muted = !e, Hr.TEST_VID.muted ? D(Hr.TEST_VID, "muted", "muted") : M(Hr.TEST_VID, "muted"), e !== Hr.TEST_VID.muted + } catch (e) { + return !1 + } + }, Hr.canControlPlaybackRate = function () { + if (Je && nt && rt < 58) return !1; + try { + var e = Hr.TEST_VID.playbackRate; + return Hr.TEST_VID.playbackRate = e / 2 + .1, e !== Hr.TEST_VID.playbackRate + } catch (e) { + return !1 + } + }, Hr.canOverrideAttributes = function () { + try { + var e = function () {}; + Object.defineProperty(d.createElement("video"), "src", { + get: e, + set: e + }), Object.defineProperty(d.createElement("audio"), "src", { + get: e, + set: e + }), Object.defineProperty(d.createElement("video"), "innerHTML", { + get: e, + set: e + }), Object.defineProperty(d.createElement("audio"), "innerHTML", { + get: e, + set: e + }) + } catch (e) { + return !1 + } + return !0 + }, Hr.supportsNativeTextTracks = function () { + return ht || dt && nt + }, Hr.supportsNativeVideoTracks = function () { + return !(!Hr.TEST_VID || !Hr.TEST_VID.videoTracks) + }, Hr.supportsNativeAudioTracks = function () { + return !(!Hr.TEST_VID || !Hr.TEST_VID.audioTracks) + }, Hr.Events = ["loadstart", "suspend", "abort", "error", "emptied", "stalled", "loadedmetadata", "loadeddata", "canplay", "canplaythrough", "playing", "waiting", "seeking", "seeked", "ended", "durationchange", "timeupdate", "progress", "play", "pause", "ratechange", "resize", "volumechange"], [ + ["featuresVolumeControl", "canControlVolume"], + ["featuresMuteControl", "canMuteVolume"], + ["featuresPlaybackRate", "canControlPlaybackRate"], + ["featuresSourceset", "canOverrideAttributes"], + ["featuresNativeTextTracks", "supportsNativeTextTracks"], + ["featuresNativeVideoTracks", "supportsNativeVideoTracks"], + ["featuresNativeAudioTracks", "supportsNativeAudioTracks"] + ].forEach(function (e) { + var t = e[0], + i = e[1]; + Br(Hr.prototype, t, function () { + return Hr[i]() + }, !0) + }), Hr.prototype.movingMediaElementInDOM = !dt, Hr.prototype.featuresFullscreenResize = !0, Hr.prototype.featuresProgressEvents = !0, Hr.prototype.featuresTimeupdateEvents = !0, Hr.patchCanPlayType = function () { + 4 <= Ze && !tt && !nt && (jr = Hr.TEST_VID && Hr.TEST_VID.constructor.prototype.canPlayType, Hr.TEST_VID.constructor.prototype.canPlayType = function (e) { + return e && /^application\/(?:x-|vnd\.apple\.)mpegurl/i.test(e) ? "maybe" : jr.call(this, e) + }) + }, Hr.unpatchCanPlayType = function () { + var e = Hr.TEST_VID.constructor.prototype.canPlayType; + return jr && (Hr.TEST_VID.constructor.prototype.canPlayType = jr), e + }, Hr.patchCanPlayType(), Hr.disposeMediaElement = function (e) { + if (e) { + for (e.parentNode && e.parentNode.removeChild(e); e.hasChildNodes();) e.removeChild(e.firstChild); + e.removeAttribute("src"), "function" == typeof e.load && function () { + try { + e.load() + } catch (e) {} + }() + } + }, Hr.resetMediaElement = function (e) { + if (e) { + for (var t = e.querySelectorAll("source"), i = t.length; i--;) e.removeChild(t[i]); + e.removeAttribute("src"), "function" == typeof e.load && function () { + try { + e.load() + } catch (e) {} + }() + } + }, ["muted", "defaultMuted", "autoplay", "controls", "loop", "playsinline"].forEach(function (e) { + Hr.prototype[e] = function () { + return this.el_[e] || this.el_.hasAttribute(e) + } + }), ["muted", "defaultMuted", "autoplay", "loop", "playsinline"].forEach(function (t) { + Hr.prototype["set" + Me(t)] = function (e) { + (this.el_[t] = e) ? this.el_.setAttribute(t, t): this.el_.removeAttribute(t) + } + }), ["paused", "currentTime", "buffered", "volume", "poster", "preload", "error", "seeking", "seekable", "ended", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "played", "networkState", "readyState", "videoWidth", "videoHeight", "crossOrigin"].forEach(function (e) { + Hr.prototype[e] = function () { + return this.el_[e] + } + }), ["volume", "src", "poster", "preload", "playbackRate", "defaultPlaybackRate", "disablePictureInPicture", "crossOrigin"].forEach(function (t) { + Hr.prototype["set" + Me(t)] = function (e) { + this.el_[t] = e + } + }), ["pause", "load", "play"].forEach(function (e) { + Hr.prototype[e] = function () { + return this.el_[e]() + } + }), Xi.withSourceHandlers(Hr), Hr.nativeSourceHandler = {}, Hr.nativeSourceHandler.canPlayType = function (e) { + try { + return Hr.TEST_VID.canPlayType(e) + } catch (e) { + return "" + } + }, Hr.nativeSourceHandler.canHandleSource = function (e, t) { + if (e.type) return Hr.nativeSourceHandler.canPlayType(e.type); + if (e.src) { + var i = Vt(e.src); + return Hr.nativeSourceHandler.canPlayType("video/" + i) + } + return "" + }, Hr.nativeSourceHandler.handleSource = function (e, t, i) { + t.setSrc(e.src) + }, Hr.nativeSourceHandler.dispose = function () {}, Hr.registerSourceHandler(Hr.nativeSourceHandler), Xi.registerTech("Html5", Hr); + var Wr = ["progress", "abort", "suspend", "emptied", "stalled", "loadedmetadata", "loadeddata", "timeupdate", "resize", "volumechange", "texttrackchange"], + zr = { + canplay: "CanPlay", + canplaythrough: "CanPlayThrough", + playing: "Playing", + seeked: "Seeked" + }, + Gr = ["tiny", "xsmall", "small", "medium", "large", "xlarge", "huge"], + Xr = {}; + Gr.forEach(function (e) { + var t = "x" === e.charAt(0) ? "x-" + e.substring(1) : e; + Xr[e] = "vjs-layout-" + t + }); + var Kr = { + tiny: 210, + xsmall: 320, + small: 425, + medium: 768, + large: 1440, + xlarge: 2560, + huge: 1 / 0 + }, + Yr = function (c) { + function l(e, t, i) { + var n; + if (e.id = e.id || t.id || "vjs_video_" + re(), (t = g(l.getTagSettings(e), t)).initChildren = !1, t.createEl = !1, t.evented = !1, t.reportTouchActivity = !1, !t.language) + if ("function" == typeof e.closest) { + var r = e.closest("[lang]"); + r && r.getAttribute && (t.language = r.getAttribute("lang")) + } else + for (var a = e; a && 1 === a.nodeType;) { + if (L(a).hasOwnProperty("lang")) { + t.language = a.getAttribute("lang"); + break + } + a = a.parentNode + } + if ((n = c.call(this, null, t, i) || this).boundDocumentFullscreenChange_ = ve(Ve(n), n.documentFullscreenChange_), n.boundFullWindowOnEscKey_ = ve(Ve(n), n.fullWindowOnEscKey), n.isFullscreen_ = !1, n.log = f(n.id_), n.fsApi_ = _t, n.isPosterFromTech_ = !1, n.queuedCallbacks_ = [], n.isReady_ = !1, n.hasStarted_ = !1, n.userActive_ = !1, n.debugEnabled_ = !1, !n.options_ || !n.options_.techOrder || !n.options_.techOrder.length) throw new Error("No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?"); + if (n.tag = e, n.tagAttributes = e && L(e), n.language(n.options_.language), t.languages) { + var s = {}; + Object.getOwnPropertyNames(t.languages).forEach(function (e) { + s[e.toLowerCase()] = t.languages[e] + }), n.languages_ = s + } else n.languages_ = l.prototype.options_.languages; + n.resetCache_(), n.poster_ = t.poster || "", n.controls_ = !!t.controls, e.controls = !1, e.removeAttribute("controls"), n.changingSrc_ = !1, n.playCallbacks_ = [], n.playTerminatedQueue_ = [], e.hasAttribute("autoplay") ? n.autoplay(!0) : n.autoplay(n.options_.autoplay), t.plugins && Object.keys(t.plugins).forEach(function (e) { + if ("function" != typeof n[e]) throw new Error('plugin "' + e + '" does not exist') + }), n.scrubbing_ = !1, n.el_ = n.createEl(), Pe(Ve(n), { + eventBusKey: "el_" + }), n.fsApi_.requestFullscreen && (he(d, n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_), n.on(n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_)), n.fluid_ && n.on("playerreset", n.updateStyleEl_); + var o = Re(n.options_); + t.plugins && Object.keys(t.plugins).forEach(function (e) { + n[e](t.plugins[e]) + }), t.debug && n.debug(!0), n.options_.playerOptions = o, n.middleware_ = [], n.initChildren(), n.isAudio("audio" === e.nodeName.toLowerCase()), n.controls() ? n.addClass("vjs-controls-enabled") : n.addClass("vjs-controls-disabled"), n.el_.setAttribute("role", "region"), n.isAudio() ? n.el_.setAttribute("aria-label", n.localize("Audio Player")) : n.el_.setAttribute("aria-label", n.localize("Video Player")), n.isAudio() && n.addClass("vjs-audio"), n.flexNotSupported_() && n.addClass("vjs-no-flex"), ut && n.addClass("vjs-touch-enabled"), dt || n.addClass("vjs-workinghover"), l.players[n.id_] = Ve(n); + var u = h.split(".")[0]; + return n.addClass("vjs-v" + u), n.userActive(!0), n.reportUserActivity(), n.one("play", n.listenForUserActivity_), n.on("stageclick", n.handleStageClick_), n.on("keydown", n.handleKeyDown), n.breakpoints(n.options_.breakpoints), n.responsive(n.options_.responsive), n + } + Ge(l, c); + var e = l.prototype; + return e.dispose = function () { + var n = this; + this.trigger("dispose"), this.off("dispose"), pe(d, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_), pe(d, "keydown", this.boundFullWindowOnEscKey_), this.styleEl_ && this.styleEl_.parentNode && (this.styleEl_.parentNode.removeChild(this.styleEl_), this.styleEl_ = null), l.players[this.id_] = null, this.tag && this.tag.player && (this.tag.player = null), this.el_ && this.el_.player && (this.el_.player = null), this.tech_ && (this.tech_.dispose(), this.isPosterFromTech_ = !1, this.poster_ = ""), this.playerElIngest_ && (this.playerElIngest_ = null), this.tag && (this.tag = null), + function (e) { + Yi[e.id()] = null + }(this), gi.names.forEach(function (e) { + var t = gi[e], + i = n[t.getterName](); + i && i.off && i.off() + }), c.prototype.dispose.call(this) + }, e.createEl = function () { + var t, i = this.tag, + e = this.playerElIngest_ = i.parentNode && i.parentNode.hasAttribute && i.parentNode.hasAttribute("data-vjs-player"), + n = "video-js" === this.tag.tagName.toLowerCase(); + e ? t = this.el_ = i.parentNode : n || (t = this.el_ = c.prototype.createEl.call(this, "div")); + var r = L(i); + if (n) { + for (t = this.el_ = i, i = this.tag = d.createElement("video"); t.children.length;) i.appendChild(t.firstChild); + w(t, "video-js") || I(t, "video-js"), t.appendChild(i), e = this.playerElIngest_ = t, Object.keys(t).forEach(function (e) { + try { + i[e] = t[e] + } catch (e) {} + }) + } + if (i.setAttribute("tabindex", "-1"), r.tabindex = "-1", (at || nt && ot) && (i.setAttribute("role", "application"), r.role = "application"), i.removeAttribute("width"), i.removeAttribute("height"), "width" in r && delete r.width, "height" in r && delete r.height, Object.getOwnPropertyNames(r).forEach(function (e) { + n && "class" === e || t.setAttribute(e, r[e]), n && i.setAttribute(e, r[e]) + }), i.playerId = i.id, i.id += "_html5_api", i.className = "vjs-tech", i.player = t.player = this, this.addClass("vjs-paused"), !0 !== T.VIDEOJS_NO_DYNAMIC_STYLE) { + this.styleEl_ = ee("vjs-styles-dimensions"); + var a = X(".vjs-styles-defaults"), + s = X("head"); + s.insertBefore(this.styleEl_, a ? a.nextSibling : s.firstChild) + } + this.fill_ = !1, this.fluid_ = !1, this.width(this.options_.width), this.height(this.options_.height), this.fill(this.options_.fill), this.fluid(this.options_.fluid), this.aspectRatio(this.options_.aspectRatio), this.crossOrigin(this.options_.crossOrigin || this.options_.crossorigin); + for (var o = i.getElementsByTagName("a"), u = 0; u < o.length; u++) { + var l = o.item(u); + I(l, "vjs-hidden"), l.setAttribute("hidden", "hidden") + } + return i.initNetworkState_ = i.networkState, i.parentNode && !e && i.parentNode.insertBefore(t, i), E(i, t), this.children_.unshift(i), this.el_.setAttribute("lang", this.language_), this.el_ = t + }, e.crossOrigin = function (e) { + if (!e) return this.techGet_("crossOrigin"); + "anonymous" === e || "use-credentials" === e ? this.techCall_("setCrossOrigin", e) : p.warn('crossOrigin must be "anonymous" or "use-credentials", given "' + e + '"') + }, e.width = function (e) { + return this.dimension("width", e) + }, e.height = function (e) { + return this.dimension("height", e) + }, e.dimension = function (e, t) { + var i = e + "_"; + if (void 0 === t) return this[i] || 0; + if ("" === t || "auto" === t) return this[i] = void 0, void this.updateStyleEl_(); + var n = parseFloat(t); + isNaN(n) ? p.error('Improper value "' + t + '" supplied for for ' + e) : (this[i] = n, this.updateStyleEl_()) + }, e.fluid = function (e) { + if (void 0 === e) return !!this.fluid_; + this.fluid_ = !!e, Ae(this) && this.off("playerreset", this.updateStyleEl_), e ? (this.addClass("vjs-fluid"), this.fill(!1), function (e, t) { + Ae(e) ? t() : (e.eventedCallbacks || (e.eventedCallbacks = []), e.eventedCallbacks.push(t)) + }(function () { + this.on("playerreset", this.updateStyleEl_) + })) : this.removeClass("vjs-fluid"), this.updateStyleEl_() + }, e.fill = function (e) { + if (void 0 === e) return !!this.fill_; + this.fill_ = !!e, e ? (this.addClass("vjs-fill"), this.fluid(!1)) : this.removeClass("vjs-fill") + }, e.aspectRatio = function (e) { + if (void 0 === e) return this.aspectRatio_; + if (!/^\d+\:\d+$/.test(e)) throw new Error("Improper value supplied for aspect ratio. The format should be width:height, for example 16:9."); + this.aspectRatio_ = e, this.fluid(!0), this.updateStyleEl_() + }, e.updateStyleEl_ = function () { + if (!0 !== T.VIDEOJS_NO_DYNAMIC_STYLE) { + var e, t, i, n = (void 0 !== this.aspectRatio_ && "auto" !== this.aspectRatio_ ? this.aspectRatio_ : 0 < this.videoWidth() ? this.videoWidth() + ":" + this.videoHeight() : "16:9").split(":"), + r = n[1] / n[0]; + e = void 0 !== this.width_ ? this.width_ : void 0 !== this.height_ ? this.height_ / r : this.videoWidth() || 300, t = void 0 !== this.height_ ? this.height_ : e * r, i = /^[^a-zA-Z]/.test(this.id()) ? "dimensions-" + this.id() : this.id() + "-dimensions", this.addClass(i), te(this.styleEl_, "\n ." + i + " {\n width: " + e + "px;\n height: " + t + "px;\n }\n\n ." + i + ".vjs-fluid {\n padding-top: " + 100 * r + "%;\n }\n ") + } else { + var a = "number" == typeof this.width_ ? this.width_ : this.options_.width, + s = "number" == typeof this.height_ ? this.height_ : this.options_.height, + o = this.tech_ && this.tech_.el(); + o && (0 <= a && (o.width = a), 0 <= s && (o.height = s)) + } + }, e.loadTech_ = function (e, t) { + var i = this; + this.tech_ && this.unloadTech_(); + var n = Me(e), + r = e.charAt(0).toLowerCase() + e.slice(1); + "Html5" !== n && this.tag && (Xi.getTech("Html5").disposeMediaElement(this.tag), this.tag.player = null, this.tag = null), this.techName_ = n, this.isReady_ = !1; + var a = { + source: t, + autoplay: "string" != typeof this.autoplay() && this.autoplay(), + nativeControlsForTouch: this.options_.nativeControlsForTouch, + playerId: this.id(), + techId: this.id() + "_" + r + "_api", + playsinline: this.options_.playsinline, + preload: this.options_.preload, + loop: this.options_.loop, + disablePictureInPicture: this.options_.disablePictureInPicture, + muted: this.options_.muted, + poster: this.poster(), + language: this.language(), + playerElIngest: this.playerElIngest_ || !1, + "vtt.js": this.options_["vtt.js"], + canOverridePoster: !!this.options_.techCanOverridePoster, + enableSourceset: this.options_.enableSourceset, + Promise: this.options_.Promise + }; + gi.names.forEach(function (e) { + var t = gi[e]; + a[t.getterName] = i[t.privateName] + }), g(a, this.options_[n]), g(a, this.options_[r]), g(a, this.options_[e.toLowerCase()]), this.tag && (a.tag = this.tag), t && t.src === this.cache_.src && 0 < this.cache_.currentTime && (a.startTime = this.cache_.currentTime); + var s = Xi.getTech(e); + if (!s) throw new Error("No Tech named '" + n + "' exists! '" + n + "' should be registered using videojs.registerTech()'"); + this.tech_ = new s(a), this.tech_.ready(ve(this, this.handleTechReady_), !0), Lt(this.textTracksJson_ || [], this.tech_), Wr.forEach(function (e) { + i.on(i.tech_, e, i["handleTech" + Me(e) + "_"]) + }), Object.keys(zr).forEach(function (t) { + i.on(i.tech_, t, function (e) { + 0 === i.tech_.playbackRate() && i.tech_.seeking() ? i.queuedCallbacks_.push({ + callback: i["handleTech" + zr[t] + "_"].bind(i), + event: e + }) : i["handleTech" + zr[t] + "_"](e) + }) + }), this.on(this.tech_, "loadstart", this.handleTechLoadStart_), this.on(this.tech_, "sourceset", this.handleTechSourceset_), this.on(this.tech_, "waiting", this.handleTechWaiting_), this.on(this.tech_, "ended", this.handleTechEnded_), this.on(this.tech_, "seeking", this.handleTechSeeking_), this.on(this.tech_, "play", this.handleTechPlay_), this.on(this.tech_, "firstplay", this.handleTechFirstPlay_), this.on(this.tech_, "pause", this.handleTechPause_), this.on(this.tech_, "durationchange", this.handleTechDurationChange_), this.on(this.tech_, "fullscreenchange", this.handleTechFullscreenChange_), this.on(this.tech_, "fullscreenerror", this.handleTechFullscreenError_), this.on(this.tech_, "enterpictureinpicture", this.handleTechEnterPictureInPicture_), this.on(this.tech_, "leavepictureinpicture", this.handleTechLeavePictureInPicture_), this.on(this.tech_, "error", this.handleTechError_), this.on(this.tech_, "loadedmetadata", this.updateStyleEl_), this.on(this.tech_, "posterchange", this.handleTechPosterChange_), this.on(this.tech_, "textdata", this.handleTechTextData_), this.on(this.tech_, "ratechange", this.handleTechRateChange_), this.usingNativeControls(this.techGet_("controls")), this.controls() && !this.usingNativeControls() && this.addTechControlsListeners_(), this.tech_.el().parentNode === this.el() || "Html5" === n && this.tag || E(this.tech_.el(), this.el()), this.tag && (this.tag.player = null, this.tag = null) + }, e.unloadTech_ = function () { + var i = this; + gi.names.forEach(function (e) { + var t = gi[e]; + i[t.privateName] = i[t.getterName]() + }), this.textTracksJson_ = Pt(this.tech_), this.isReady_ = !1, this.tech_.dispose(), this.tech_ = !1, this.isPosterFromTech_ && (this.poster_ = "", this.trigger("posterchange")), this.isPosterFromTech_ = !1 + }, e.tech = function (e) { + return void 0 === e && p.warn("Using the tech directly can be dangerous. I hope you know what you're doing.\nSee https://github.com/videojs/video.js/issues/2617 for more info.\n"), this.tech_ + }, e.addTechControlsListeners_ = function () { + this.removeTechControlsListeners_(), this.on(this.tech_, "mouseup", this.handleTechClick_), this.on(this.tech_, "dblclick", this.handleTechDoubleClick_), this.on(this.tech_, "touchstart", this.handleTechTouchStart_), this.on(this.tech_, "touchmove", this.handleTechTouchMove_), this.on(this.tech_, "touchend", this.handleTechTouchEnd_), this.on(this.tech_, "tap", this.handleTechTap_) + }, e.removeTechControlsListeners_ = function () { + this.off(this.tech_, "tap", this.handleTechTap_), this.off(this.tech_, "touchstart", this.handleTechTouchStart_), this.off(this.tech_, "touchmove", this.handleTechTouchMove_), this.off(this.tech_, "touchend", this.handleTechTouchEnd_), this.off(this.tech_, "mouseup", this.handleTechClick_), this.off(this.tech_, "dblclick", this.handleTechDoubleClick_) + }, e.handleTechReady_ = function () { + this.triggerReady(), this.cache_.volume && this.techCall_("setVolume", this.cache_.volume), this.handleTechPosterChange_(), this.handleTechDurationChange_() + }, e.handleTechLoadStart_ = function () { + this.removeClass("vjs-ended"), this.removeClass("vjs-seeking"), this.error(null), this.handleTechDurationChange_(), this.paused() ? (this.hasStarted(!1), this.trigger("loadstart")) : (this.trigger("loadstart"), this.trigger("firstplay")), this.manualAutoplay_(this.autoplay()) + }, e.manualAutoplay_ = function (t) { + var n = this; + if (this.tech_ && "string" == typeof t) { + var e, i = function () { + var e = n.muted(); + n.muted(!0); + + function t() { + n.muted(e) + } + n.playTerminatedQueue_.push(t); + var i = n.play(); + if (It(i)) return i.catch(t) + }; + if ("any" === t && !0 !== this.muted() ? It(e = this.play()) && (e = e.catch(i)) : e = "muted" === t && !0 !== this.muted() ? i() : this.play(), It(e)) return e.then(function () { + n.trigger({ + type: "autoplay-success", + autoplay: t + }) + }).catch(function (e) { + n.trigger({ + type: "autoplay-failure", + autoplay: t + }) + }) + } + }, e.updateSourceCaches_ = function (e) { + void 0 === e && (e = ""); + var t = e, + i = ""; + "string" != typeof t && (t = e.src, i = e.type), this.cache_.source = this.cache_.source || {}, this.cache_.sources = this.cache_.sources || [], t && !i && (i = function (e, t) { + if (!t) return ""; + if (e.cache_.source.src === t && e.cache_.source.type) return e.cache_.source.type; + var i = e.cache_.sources.filter(function (e) { + return e.src === t + }); + if (i.length) return i[0].type; + for (var n = e.$$("source"), r = 0; r < n.length; r++) { + var a = n[r]; + if (a.type && a.src && a.src === t) return a.type + } + return an(t) + }(this, t)), this.cache_.source = Re({}, e, { + src: t, + type: i + }); + for (var n = this.cache_.sources.filter(function (e) { + return e.src && e.src === t + }), r = [], a = this.$$("source"), s = [], o = 0; o < a.length; o++) { + var u = L(a[o]); + r.push(u), u.src && u.src === t && s.push(u.src) + } + s.length && !n.length ? this.cache_.sources = r : n.length || (this.cache_.sources = [this.cache_.source]), this.cache_.src = t + }, e.handleTechSourceset_ = function (e) { + var i = this; + if (!this.changingSrc_) { + var t = function (e) { + return i.updateSourceCaches_(e) + }, + n = this.currentSource().src, + r = e.src; + n && !/^blob:/.test(n) && /^blob:/.test(r) && (this.lastSource_ && (this.lastSource_.tech === r || this.lastSource_.player === n) || (t = function () {})), t(r), e.src || this.tech_.any(["sourceset", "loadstart"], function (e) { + if ("sourceset" !== e.type) { + var t = i.techGet("currentSrc"); + i.lastSource_.tech = t, i.updateSourceCaches_(t) + } + }) + } + this.lastSource_ = { + player: this.currentSource().src, + tech: e.src + }, this.trigger({ + src: e.src, + type: "sourceset" + }) + }, e.hasStarted = function (e) { + if (void 0 === e) return this.hasStarted_; + e !== this.hasStarted_ && (this.hasStarted_ = e, this.hasStarted_ ? (this.addClass("vjs-has-started"), this.trigger("firstplay")) : this.removeClass("vjs-has-started")) + }, e.handleTechPlay_ = function () { + this.removeClass("vjs-ended"), this.removeClass("vjs-paused"), this.addClass("vjs-playing"), this.hasStarted(!0), this.trigger("play") + }, e.handleTechRateChange_ = function () { + 0 < this.tech_.playbackRate() && 0 === this.cache_.lastPlaybackRate && (this.queuedCallbacks_.forEach(function (e) { + return e.callback(e.event) + }), this.queuedCallbacks_ = []), this.cache_.lastPlaybackRate = this.tech_.playbackRate(), this.trigger("ratechange") + }, e.handleTechWaiting_ = function () { + var t = this; + this.addClass("vjs-waiting"), this.trigger("waiting"); + var i = this.currentTime(); + this.on("timeupdate", function e() { + i !== t.currentTime() && (t.removeClass("vjs-waiting"), t.off("timeupdate", e)) + }) + }, e.handleTechCanPlay_ = function () { + this.removeClass("vjs-waiting"), this.trigger("canplay") + }, e.handleTechCanPlayThrough_ = function () { + this.removeClass("vjs-waiting"), this.trigger("canplaythrough") + }, e.handleTechPlaying_ = function () { + this.removeClass("vjs-waiting"), this.trigger("playing") + }, e.handleTechSeeking_ = function () { + this.addClass("vjs-seeking"), this.trigger("seeking") + }, e.handleTechSeeked_ = function () { + this.removeClass("vjs-seeking"), this.removeClass("vjs-ended"), this.trigger("seeked") + }, e.handleTechFirstPlay_ = function () { + this.options_.starttime && (p.warn("Passing the `starttime` option to the player will be deprecated in 6.0"), this.currentTime(this.options_.starttime)), this.addClass("vjs-has-started"), this.trigger("firstplay") + }, e.handleTechPause_ = function () { + this.removeClass("vjs-playing"), this.addClass("vjs-paused"), this.trigger("pause") + }, e.handleTechEnded_ = function () { + this.addClass("vjs-ended"), this.options_.loop ? (this.currentTime(0), this.play()) : this.paused() || this.pause(), this.trigger("ended") + }, e.handleTechDurationChange_ = function () { + this.duration(this.techGet_("duration")) + }, e.handleTechClick_ = function (e) { + z(e) && this.controls_ && (this.paused() ? At(this.play()) : this.pause()) + }, e.handleTechDoubleClick_ = function (t) { + this.controls_ && (Array.prototype.some.call(this.$$(".vjs-control-bar, .vjs-modal-dialog"), function (e) { + return e.contains(t.target) + }) || void 0 !== this.options_ && void 0 !== this.options_.userActions && void 0 !== this.options_.userActions.doubleClick && !1 === this.options_.userActions.doubleClick || (void 0 !== this.options_ && void 0 !== this.options_.userActions && "function" == typeof this.options_.userActions.doubleClick ? this.options_.userActions.doubleClick.call(this, t) : this.isFullscreen() ? this.exitFullscreen() : this.requestFullscreen())) + }, e.handleTechTap_ = function () { + this.userActive(!this.userActive()) + }, e.handleTechTouchStart_ = function () { + this.userWasActive = this.userActive() + }, e.handleTechTouchMove_ = function () { + this.userWasActive && this.reportUserActivity() + }, e.handleTechTouchEnd_ = function (e) { + e.preventDefault() + }, e.handleStageClick_ = function () { + this.reportUserActivity() + }, e.toggleFullscreenClass_ = function () { + this.isFullscreen() ? this.addClass("vjs-fullscreen") : this.removeClass("vjs-fullscreen") + }, e.documentFullscreenChange_ = function (e) { + var t = e.target.player; + if (!t || t === this) { + var i = this.el(), + n = d[this.fsApi_.fullscreenElement] === i; + !n && i.matches ? n = i.matches(":" + this.fsApi_.fullscreen) : !n && i.msMatchesSelector && (n = i.msMatchesSelector(":" + this.fsApi_.fullscreen)), this.isFullscreen(n) + } + }, e.handleTechFullscreenChange_ = function (e, t) { + t && (t.nativeIOSFullscreen && this.toggleClass("vjs-ios-native-fs"), this.isFullscreen(t.isFullscreen)) + }, e.handleTechFullscreenError_ = function (e, t) { + this.trigger("fullscreenerror", t) + }, e.togglePictureInPictureClass_ = function () { + this.isInPictureInPicture() ? this.addClass("vjs-picture-in-picture") : this.removeClass("vjs-picture-in-picture") + }, e.handleTechEnterPictureInPicture_ = function (e) { + this.isInPictureInPicture(!0) + }, e.handleTechLeavePictureInPicture_ = function (e) { + this.isInPictureInPicture(!1) + }, e.handleTechError_ = function () { + var e = this.tech_.error(); + this.error(e) + }, e.handleTechTextData_ = function (e, t) { + var i = null; + 1 < arguments.length && (i = t), this.trigger("textdata", i) + }, e.getCache = function () { + return this.cache_ + }, e.resetCache_ = function () { + this.cache_ = { + currentTime: 0, + initTime: 0, + inactivityTimeout: this.options_.inactivityTimeout, + duration: NaN, + lastVolume: 1, + lastPlaybackRate: this.defaultPlaybackRate(), + media: null, + src: "", + source: {}, + sources: [], + volume: 1 + } + }, e.techCall_ = function (e, t) { + this.ready(function () { + if (e in en) return function (e, t, i, n) { + return t[i](e.reduce(nn(i), n)) + }(this.middleware_, this.tech_, e, t); + if (e in tn) return Ji(this.middleware_, this.tech_, e, t); + try { + this.tech_ && this.tech_[e](t) + } catch (e) { + throw p(e), e + } + }, !0) + }, e.techGet_ = function (t) { + if (this.tech_ && this.tech_.isReady_) { + if (t in Zi) return function (e, t, i) { + return e.reduceRight(nn(i), t[i]()) + }(this.middleware_, this.tech_, t); + if (t in tn) return Ji(this.middleware_, this.tech_, t); + try { + return this.tech_[t]() + } catch (e) { + if (void 0 === this.tech_[t]) throw p("Video.js: " + t + " method not defined for " + this.techName_ + " playback technology.", e), e; + if ("TypeError" === e.name) throw p("Video.js: " + t + " unavailable on " + this.techName_ + " playback technology element.", e), this.tech_.isReady_ = !1, e; + throw p(e), e + } + } + }, e.play = function () { + var t = this, + e = this.options_.Promise || T.Promise; + return e ? new e(function (e) { + t.play_(e) + }) : this.play_() + }, e.play_ = function (e) { + var t = this; + void 0 === e && (e = At), this.playCallbacks_.push(e); + var i = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc())); + if (this.waitToPlay_ && (this.off(["ready", "loadstart"], this.waitToPlay_), this.waitToPlay_ = null), !this.isReady_ || !i) return this.waitToPlay_ = function (e) { + t.play_() + }, this.one(["ready", "loadstart"], this.waitToPlay_), void(i || !ht && !dt || this.load()); + var n = this.techGet_("play"); + null === n ? this.runPlayTerminatedQueue_() : this.runPlayCallbacks_(n) + }, e.runPlayTerminatedQueue_ = function () { + var e = this.playTerminatedQueue_.slice(0); + this.playTerminatedQueue_ = [], e.forEach(function (e) { + e() + }) + }, e.runPlayCallbacks_ = function (t) { + var e = this.playCallbacks_.slice(0); + this.playCallbacks_ = [], this.playTerminatedQueue_ = [], e.forEach(function (e) { + e(t) + }) + }, e.pause = function () { + this.techCall_("pause") + }, e.paused = function () { + return !1 !== this.techGet_("paused") + }, e.played = function () { + return this.techGet_("played") || gt(0, 0) + }, e.scrubbing = function (e) { + if ("undefined" == typeof e) return this.scrubbing_; + this.scrubbing_ = !!e, this.techCall_("setScrubbing", this.scrubbing_), e ? this.addClass("vjs-scrubbing") : this.removeClass("vjs-scrubbing") + }, e.currentTime = function (e) { + return "undefined" != typeof e ? (e < 0 && (e = 0), this.isReady_ && !this.changingSrc_ && this.tech_ && this.tech_.isReady_ ? (this.techCall_("setCurrentTime", e), void(this.cache_.initTime = 0)) : (this.cache_.initTime = e, this.off("canplay", this.applyInitTime_), void this.one("canplay", this.applyInitTime_))) : (this.cache_.currentTime = this.techGet_("currentTime") || 0, this.cache_.currentTime) + }, e.applyInitTime_ = function () { + this.currentTime(this.cache_.initTime) + }, e.duration = function (e) { + if (void 0 === e) return void 0 !== this.cache_.duration ? this.cache_.duration : NaN; + (e = parseFloat(e)) < 0 && (e = 1 / 0), e !== this.cache_.duration && ((this.cache_.duration = e) === 1 / 0 ? this.addClass("vjs-live") : this.removeClass("vjs-live"), isNaN(e) || this.trigger("durationchange")) + }, e.remainingTime = function () { + return this.duration() - this.currentTime() + }, e.remainingTimeDisplay = function () { + return Math.floor(this.duration()) - Math.floor(this.currentTime()) + }, e.buffered = function () { + var e = this.techGet_("buffered"); + return e && e.length || (e = gt(0, 0)), e + }, e.bufferedPercent = function () { + return vt(this.buffered(), this.duration()) + }, e.bufferedEnd = function () { + var e = this.buffered(), + t = this.duration(), + i = e.end(e.length - 1); + return t < i && (i = t), i + }, e.volume = function (e) { + var t; + return void 0 !== e ? (t = Math.max(0, Math.min(1, parseFloat(e))), this.cache_.volume = t, this.techCall_("setVolume", t), void(0 < t && this.lastVolume_(t))) : (t = parseFloat(this.techGet_("volume")), isNaN(t) ? 1 : t) + }, e.muted = function (e) { + if (void 0 === e) return this.techGet_("muted") || !1; + this.techCall_("setMuted", e) + }, e.defaultMuted = function (e) { + return void 0 !== e ? this.techCall_("setDefaultMuted", e) : this.techGet_("defaultMuted") || !1 + }, e.lastVolume_ = function (e) { + if (void 0 === e || 0 === e) return this.cache_.lastVolume; + this.cache_.lastVolume = e + }, e.supportsFullScreen = function () { + return this.techGet_("supportsFullScreen") || !1 + }, e.isFullscreen = function (e) { + if (void 0 === e) return this.isFullscreen_; + var t = this.isFullscreen_; + return this.isFullscreen_ = Boolean(e), this.isFullscreen_ !== t && this.fsApi_.prefixed && this.trigger("fullscreenchange"), void this.toggleFullscreenClass_() + }, e.requestFullscreen = function (s) { + var e = this.options_.Promise || T.Promise; + if (e) { + var o = this; + return new e(function (e, i) { + function n() { + o.off("fullscreenerror", r), o.off("fullscreenchange", t) + } + + function t() { + n(), e() + } + + function r(e, t) { + n(), i(t) + } + o.one("fullscreenchange", t), o.one("fullscreenerror", r); + var a = o.requestFullscreenHelper_(s); + if (a) return a.then(n, n), a + }) + } + return this.requestFullscreenHelper_() + }, e.requestFullscreenHelper_ = function (e) { + var t, i = this; + if (this.fsApi_.prefixed || (t = this.options_.fullscreen && this.options_.fullscreen.options || {}, void 0 !== e && (t = e)), this.fsApi_.requestFullscreen) { + var n = this.el_[this.fsApi_.requestFullscreen](t); + return n && n.then(function () { + return i.isFullscreen(!0) + }, function () { + return i.isFullscreen(!1) + }), n + } + this.tech_.supportsFullScreen() ? this.techCall_("enterFullScreen") : this.enterFullWindow() + }, e.exitFullscreen = function () { + var e = this.options_.Promise || T.Promise; + if (e) { + var s = this; + return new e(function (e, i) { + function n() { + s.off("fullscreenerror", r), s.off("fullscreenchange", t) + } + + function t() { + n(), e() + } + + function r(e, t) { + n(), i(t) + } + s.one("fullscreenchange", t), s.one("fullscreenerror", r); + var a = s.exitFullscreenHelper_(); + if (a) return a.then(n, n), a + }) + } + return this.exitFullscreenHelper_() + }, e.exitFullscreenHelper_ = function () { + var e = this; + if (this.fsApi_.requestFullscreen) { + var t = d[this.fsApi_.exitFullscreen](); + return t && t.then(function () { + return e.isFullscreen(!1) + }), t + } + this.tech_.supportsFullScreen() ? this.techCall_("exitFullScreen") : this.exitFullWindow() + }, e.enterFullWindow = function () { + this.isFullscreen(!0), this.isFullWindow = !0, this.docOrigOverflow = d.documentElement.style.overflow, he(d, "keydown", this.boundFullWindowOnEscKey_), d.documentElement.style.overflow = "hidden", I(d.body, "vjs-full-window"), this.trigger("enterFullWindow") + }, e.fullWindowOnEscKey = function (e) { + Ot.isEventKey(e, "Esc") && (!0 === this.isFullscreen() ? this.exitFullscreen() : this.exitFullWindow()) + }, e.exitFullWindow = function () { + this.isFullscreen(!1), this.isFullWindow = !1, pe(d, "keydown", this.boundFullWindowOnEscKey_), d.documentElement.style.overflow = this.docOrigOverflow, A(d.body, "vjs-full-window"), this.trigger("exitFullWindow") + }, e.disablePictureInPicture = function (e) { + if (void 0 === e) return this.techGet_("disablePictureInPicture"); + this.techCall_("setDisablePictureInPicture", e), this.options_.disablePictureInPicture = e, this.trigger("disablepictureinpicturechanged") + }, e.isInPictureInPicture = function (e) { + return void 0 !== e ? (this.isInPictureInPicture_ = !!e, void this.togglePictureInPictureClass_()) : !!this.isInPictureInPicture_ + }, e.requestPictureInPicture = function () { + if ("pictureInPictureEnabled" in d && !1 === this.disablePictureInPicture()) return this.techGet_("requestPictureInPicture") + }, e.exitPictureInPicture = function () { + if ("pictureInPictureEnabled" in d) return d.exitPictureInPicture() + }, e.handleKeyDown = function (e) { + var t = this.options_.userActions; + if (t && t.hotkeys) { + ! function (e) { + var t = e.tagName.toLowerCase(); + if (e.isContentEditable) return !0; + if ("input" === t) return -1 === ["button", "checkbox", "hidden", "radio", "reset", "submit"].indexOf(e.type); + return -1 !== ["textarea"].indexOf(t) + }(this.el_.ownerDocument.activeElement) && ("function" == typeof t.hotkeys ? t.hotkeys.call(this, e) : this.handleHotkeys(e)) + } + }, e.handleHotkeys = function (e) { + var t = this.options_.userActions ? this.options_.userActions.hotkeys : {}, + i = t.fullscreenKey, + n = void 0 === i ? function (e) { + return Ot.isEventKey(e, "f") + } : i, + r = t.muteKey, + a = void 0 === r ? function (e) { + return Ot.isEventKey(e, "m") + } : r, + s = t.playPauseKey, + o = void 0 === s ? function (e) { + return Ot.isEventKey(e, "k") || Ot.isEventKey(e, "Space") + } : s; + if (n.call(this, e)) { + e.preventDefault(), e.stopPropagation(); + var u = je.getComponent("FullscreenToggle"); + !1 !== d[this.fsApi_.fullscreenEnabled] && u.prototype.handleClick.call(this, e) + } else if (a.call(this, e)) { + e.preventDefault(), e.stopPropagation(), je.getComponent("MuteToggle").prototype.handleClick.call(this, e) + } else if (o.call(this, e)) { + e.preventDefault(), e.stopPropagation(), je.getComponent("PlayToggle").prototype.handleClick.call(this, e) + } + }, e.canPlayType = function (e) { + for (var t, i = 0, n = this.options_.techOrder; i < n.length; i++) { + var r = n[i], + a = Xi.getTech(r); + if (a = a || je.getComponent(r)) { + if (a.isSupported() && (t = a.canPlayType(e))) return t + } else p.error('The "' + r + '" tech is undefined. Skipped browser support check for that tech.') + } + return "" + }, e.selectSource = function (e) { + function t(e, i, n) { + var r; + return e.some(function (t) { + return i.some(function (e) { + if (r = n(t, e)) return !0 + }) + }), r + } + + function i(e, t) { + var i = e[0]; + if (e[1].canPlaySource(t, r.options_[i.toLowerCase()])) return { + source: t, + tech: i + } + } + var n, r = this, + a = this.options_.techOrder.map(function (e) { + return [e, Xi.getTech(e)] + }).filter(function (e) { + var t = e[0], + i = e[1]; + return i ? i.isSupported() : (p.error('The "' + t + '" tech is undefined. Skipped browser support check for that tech.'), !1) + }); + return (this.options_.sourceOrder ? t(e, a, (n = i, function (e, t) { + return n(t, e) + })) : t(a, e, i)) || !1 + }, e.src = function (e) { + var i = this; + if ("undefined" == typeof e) return this.cache_.src || ""; + var n = function t(e) { + if (Array.isArray(e)) { + var i = []; + e.forEach(function (e) { + e = t(e), Array.isArray(e) ? i = i.concat(e) : s(e) && i.push(e) + }), e = i + } else e = "string" == typeof e && e.trim() ? [on({ + src: e + })] : s(e) && "string" == typeof e.src && e.src && e.src.trim() ? [on(e)] : []; + return e + }(e); + n.length ? (this.changingSrc_ = !0, this.cache_.sources = n, this.updateSourceCaches_(n[0]), Qi(this, n[0], function (e, t) { + if (i.middleware_ = t, i.cache_.sources = n, i.updateSourceCaches_(e), i.src_(e)) return 1 < n.length ? i.src(n.slice(1)) : (i.changingSrc_ = !1, i.setTimeout(function () { + this.error({ + code: 4, + message: this.localize(this.options_.notSupportedMessage) + }) + }, 0), void i.triggerReady()); + ! function (e, t) { + e.forEach(function (e) { + return e.setTech && e.setTech(t) + }) + }(t, i.tech_) + })) : this.setTimeout(function () { + this.error({ + code: 4, + message: this.localize(this.options_.notSupportedMessage) + }) + }, 0) + }, e.src_ = function (e) { + var t = this, + i = this.selectSource([e]); + return !i || (function (e, t) { + return Me(e) === Me(t) + }(i.tech, this.techName_) ? this.ready(function () { + this.tech_.constructor.prototype.hasOwnProperty("setSource") ? this.techCall_("setSource", e) : this.techCall_("src", e.src), this.changingSrc_ = !1 + }, !0) : (this.changingSrc_ = !0, this.loadTech_(i.tech, i.source), this.tech_.ready(function () { + t.changingSrc_ = !1 + })), !1) + }, e.load = function () { + this.techCall_("load") + }, e.reset = function () { + var e = this, + t = this.options_.Promise || T.Promise; + this.paused() || !t ? this.doReset_() : At(this.play().then(function () { + return e.doReset_() + })) + }, e.doReset_ = function () { + this.tech_ && this.tech_.clearTracks("text"), this.resetCache_(), this.poster(""), this.loadTech_(this.options_.techOrder[0], null), this.techCall_("reset"), this.resetControlBarUI_(), Ae(this) && this.trigger("playerreset") + }, e.resetControlBarUI_ = function () { + this.resetProgressBar_(), this.resetPlaybackRate_(), this.resetVolumeBar_() + }, e.resetProgressBar_ = function () { + this.currentTime(0); + var e = this.controlBar, + t = e.durationDisplay, + i = e.remainingTimeDisplay; + t && t.updateContent(), i && i.updateContent() + }, e.resetPlaybackRate_ = function () { + this.playbackRate(this.defaultPlaybackRate()), this.handleTechRateChange_() + }, e.resetVolumeBar_ = function () { + this.volume(1), this.trigger("volumechange") + }, e.currentSources = function () { + var e = this.currentSource(), + t = []; + return 0 !== Object.keys(e).length && t.push(e), this.cache_.sources || t + }, e.currentSource = function () { + return this.cache_.source || {} + }, e.currentSrc = function () { + return this.currentSource() && this.currentSource().src || "" + }, e.currentType = function () { + return this.currentSource() && this.currentSource().type || "" + }, e.preload = function (e) { + return void 0 !== e ? (this.techCall_("setPreload", e), void(this.options_.preload = e)) : this.techGet_("preload") + }, e.autoplay = function (e) { + if (void 0 === e) return this.options_.autoplay || !1; + var t; + "string" == typeof e && /(any|play|muted)/.test(e) ? (this.options_.autoplay = e, this.manualAutoplay_(e), t = !1) : this.options_.autoplay = !!e, t = "undefined" == typeof t ? this.options_.autoplay : t, this.tech_ && this.techCall_("setAutoplay", t) + }, e.playsinline = function (e) { + return void 0 !== e ? (this.techCall_("setPlaysinline", e), this.options_.playsinline = e, this) : this.techGet_("playsinline") + }, e.loop = function (e) { + return void 0 !== e ? (this.techCall_("setLoop", e), void(this.options_.loop = e)) : this.techGet_("loop") + }, e.poster = function (e) { + if (void 0 === e) return this.poster_; + (e = e || "") !== this.poster_ && (this.poster_ = e, this.techCall_("setPoster", e), this.isPosterFromTech_ = !1, this.trigger("posterchange")) + }, e.handleTechPosterChange_ = function () { + if ((!this.poster_ || this.options_.techCanOverridePoster) && this.tech_ && this.tech_.poster) { + var e = this.tech_.poster() || ""; + e !== this.poster_ && (this.poster_ = e, this.isPosterFromTech_ = !0, this.trigger("posterchange")) + } + }, e.controls = function (e) { + if (void 0 === e) return !!this.controls_; + e = !!e, this.controls_ !== e && (this.controls_ = e, this.usingNativeControls() && this.techCall_("setControls", e), this.controls_ ? (this.removeClass("vjs-controls-disabled"), this.addClass("vjs-controls-enabled"), this.trigger("controlsenabled"), this.usingNativeControls() || this.addTechControlsListeners_()) : (this.removeClass("vjs-controls-enabled"), this.addClass("vjs-controls-disabled"), this.trigger("controlsdisabled"), this.usingNativeControls() || this.removeTechControlsListeners_())) + }, e.usingNativeControls = function (e) { + if (void 0 === e) return !!this.usingNativeControls_; + e = !!e, this.usingNativeControls_ !== e && (this.usingNativeControls_ = e, this.usingNativeControls_ ? (this.addClass("vjs-using-native-controls"), this.trigger("usingnativecontrols")) : (this.removeClass("vjs-using-native-controls"), this.trigger("usingcustomcontrols"))) + }, e.error = function (e) { + if (void 0 === e) return this.error_ || null; + if (this.options_.suppressNotSupportedError && e && 4 === e.code) { + var t = function () { + this.error(e) + }; + return this.options_.suppressNotSupportedError = !1, this.any(["click", "touchstart"], t), void this.one("loadstart", function () { + this.off(["click", "touchstart"], t) + }) + } + if (null === e) return this.error_ = e, this.removeClass("vjs-error"), void(this.errorDisplay && this.errorDisplay.close()); + this.error_ = new Ct(e), this.addClass("vjs-error"), p.error("(CODE:" + this.error_.code + " " + Ct.errorTypes[this.error_.code] + ")", this.error_.message, this.error_), this.trigger("error") + }, e.reportUserActivity = function (e) { + this.userActivity_ = !0 + }, e.userActive = function (e) { + if (void 0 === e) return this.userActive_; + if ((e = !!e) !== this.userActive_) { + if (this.userActive_ = e, this.userActive_) return this.userActivity_ = !0, this.removeClass("vjs-user-inactive"), this.addClass("vjs-user-active"), void this.trigger("useractive"); + this.tech_ && this.tech_.one("mousemove", function (e) { + e.stopPropagation(), e.preventDefault() + }), this.userActivity_ = !1, this.removeClass("vjs-user-active"), this.addClass("vjs-user-inactive"), this.trigger("userinactive") + } + }, e.listenForUserActivity_ = function () { + function e(e) { + r(), this.clearInterval(t) + } + var t, i, n, r = ve(this, this.reportUserActivity); + this.on("mousedown", function () { + r(), this.clearInterval(t), t = this.setInterval(r, 250) + }), this.on("mousemove", function (e) { + e.screenX === i && e.screenY === n || (i = e.screenX, n = e.screenY, r()) + }), this.on("mouseup", e), this.on("mouseleave", e); + var a, s = this.getChild("controlBar"); + !s || dt || Je || (s.on("mouseenter", function (e) { + this.player().cache_.inactivityTimeout = this.player().options_.inactivityTimeout, this.player().options_.inactivityTimeout = 0 + }), s.on("mouseleave", function (e) { + this.player().options_.inactivityTimeout = this.player().cache_.inactivityTimeout + })), this.on("keydown", r), this.on("keyup", r), this.setInterval(function () { + if (this.userActivity_) { + this.userActivity_ = !1, this.userActive(!0), this.clearTimeout(a); + var e = this.options_.inactivityTimeout; + e <= 0 || (a = this.setTimeout(function () { + this.userActivity_ || this.userActive(!1) + }, e)) + } + }, 250) + }, e.playbackRate = function (e) { + if (void 0 === e) return this.tech_ && this.tech_.featuresPlaybackRate ? this.cache_.lastPlaybackRate || this.techGet_("playbackRate") : 1; + this.techCall_("setPlaybackRate", e) + }, e.defaultPlaybackRate = function (e) { + return void 0 !== e ? this.techCall_("setDefaultPlaybackRate", e) : this.tech_ && this.tech_.featuresPlaybackRate ? this.techGet_("defaultPlaybackRate") : 1 + }, e.isAudio = function (e) { + if (void 0 === e) return !!this.isAudio_; + this.isAudio_ = !!e + }, e.addTextTrack = function (e, t, i) { + if (this.tech_) return this.tech_.addTextTrack(e, t, i) + }, e.addRemoteTextTrack = function (e, t) { + if (this.tech_) return this.tech_.addRemoteTextTrack(e, t) + }, e.removeRemoteTextTrack = function (e) { + void 0 === e && (e = {}); + var t = e.track; + if (t = t || e, this.tech_) return this.tech_.removeRemoteTextTrack(t) + }, e.getVideoPlaybackQuality = function () { + return this.techGet_("getVideoPlaybackQuality") + }, e.videoWidth = function () { + return this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth() || 0 + }, e.videoHeight = function () { + return this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight() || 0 + }, e.language = function (e) { + if (void 0 === e) return this.language_; + this.language_ = String(e).toLowerCase() + }, e.languages = function () { + return Re(l.prototype.options_.languages, this.languages_) + }, e.toJSON = function () { + var e = Re(this.options_), + t = e.tracks; + e.tracks = []; + for (var i = 0; i < t.length; i++) { + var n = t[i]; + (n = Re(n)).player = void 0, e.tracks[i] = n + } + return e + }, e.createModal = function (e, t) { + var i = this; + (t = t || {}).content = e || ""; + var n = new Mt(this, t); + return this.addChild(n), n.on("dispose", function () { + i.removeChild(n) + }), n.open(), n + }, e.updateCurrentBreakpoint_ = function () { + if (this.responsive()) + for (var e = this.currentBreakpoint(), t = this.currentWidth(), i = 0; i < Gr.length; i++) { + var n = Gr[i]; + if (t <= this.breakpoints_[n]) { + if (e === n) return; + e && this.removeClass(Xr[e]), this.addClass(Xr[n]), this.breakpoint_ = n; + break + } + } + }, e.removeCurrentBreakpoint_ = function () { + var e = this.currentBreakpointClass(); + this.breakpoint_ = "", e && this.removeClass(e) + }, e.breakpoints = function (e) { + return void 0 === e || (this.breakpoint_ = "", this.breakpoints_ = g({}, Kr, e), this.updateCurrentBreakpoint_()), g(this.breakpoints_) + }, e.responsive = function (e) { + return void 0 === e ? this.responsive_ : (e = Boolean(e)) !== this.responsive_ ? ((this.responsive_ = e) ? (this.on("playerresize", this.updateCurrentBreakpoint_), this.updateCurrentBreakpoint_()) : (this.off("playerresize", this.updateCurrentBreakpoint_), this.removeCurrentBreakpoint_()), e) : void 0 + }, e.currentBreakpoint = function () { + return this.breakpoint_ + }, e.currentBreakpointClass = function () { + return Xr[this.breakpoint_] || "" + }, e.loadMedia = function (e, t) { + var i = this; + if (e && "object" == typeof e) { + this.reset(), this.cache_.media = Re(e); + var n = this.cache_.media, + r = n.artwork, + a = n.poster, + s = n.src, + o = n.textTracks; + !r && a && (this.cache_.media.artwork = [{ + src: a, + type: an(a) + }]), s && this.src(s), a && this.poster(a), Array.isArray(o) && o.forEach(function (e) { + return i.addRemoteTextTrack(e, !1) + }), this.ready(t) + } + }, e.getMedia = function () { + if (this.cache_.media) return Re(this.cache_.media); + var e = this.poster(), + t = { + src: this.currentSources(), + textTracks: Array.prototype.map.call(this.remoteTextTracks(), function (e) { + return { + kind: e.kind, + label: e.label, + language: e.language, + src: e.src + } + }) + }; + return e && (t.poster = e, t.artwork = [{ + src: t.poster, + type: an(t.poster) + }]), t + }, l.getTagSettings = function (e) { + var t = { + sources: [], + tracks: [] + }, + i = L(e), + n = i["data-setup"]; + if (w(e, "vjs-fill") && (i.fill = !0), w(e, "vjs-fluid") && (i.fluid = !0), null !== n) { + var r = wt(n || "{}"), + a = r[0], + s = r[1]; + a && p.error(a), g(i, s) + } + if (g(t, i), e.hasChildNodes()) + for (var o = e.childNodes, u = 0, l = o.length; u < l; u++) { + var c = o[u], + d = c.nodeName.toLowerCase(); + "source" === d ? t.sources.push(L(c)) : "track" === d && t.tracks.push(L(c)) + } + return t + }, e.flexNotSupported_ = function () { + var e = d.createElement("i"); + return !("flexBasis" in e.style || "webkitFlexBasis" in e.style || "mozFlexBasis" in e.style || "msFlexBasis" in e.style || "msFlexOrder" in e.style) + }, e.debug = function (e) { + if (void 0 === e) return this.debugEnabled_; + e ? (this.trigger("debugon"), this.previousLogLevel_ = this.log.level, this.log.level("debug"), this.debugEnabled_ = !0) : (this.trigger("debugoff"), this.log.level(this.previousLogLevel_), this.previousLogLevel_ = void 0, this.debugEnabled_ = !1) + }, l + }(je); + gi.names.forEach(function (e) { + var t = gi[e]; + Yr.prototype[t.getterName] = function () { + return this.tech_ ? this.tech_[t.getterName]() : (this[t.privateName] = this[t.privateName] || new t.ListClass, this[t.privateName]) + } + }), Yr.prototype.crossorigin = Yr.prototype.crossOrigin, Yr.players = {}; + var $r = T.navigator; + Yr.prototype.options_ = { + techOrder: Xi.defaultTechOrder_, + html5: {}, + flash: {}, + inactivityTimeout: 2e3, + playbackRates: [], + liveui: !1, + children: ["mediaLoader", "posterImage", "textTrackDisplay", "loadingSpinner", "bigPlayButton", "liveTracker", "controlBar", "errorDisplay", "textTrackSettings", "resizeManager"], + language: $r && ($r.languages && $r.languages[0] || $r.userLanguage || $r.language) || "en", + languages: {}, + notSupportedMessage: "No compatible source was found for this media.", + fullscreen: { + options: { + navigationUI: "hide" + } + }, + breakpoints: {}, + responsive: !1 + }, ["ended", "seeking", "seekable", "networkState", "readyState"].forEach(function (e) { + Yr.prototype[e] = function () { + return this.techGet_(e) + } + }), Wr.forEach(function (e) { + Yr.prototype["handleTech" + Me(e) + "_"] = function () { + return this.trigger(e) + } + }), je.registerComponent("Player", Yr); + var Qr = i(function (i) { + function n(e, t) { + return i.exports = n = Object.setPrototypeOf || function (e, t) { + return e.__proto__ = t, e + }, n(e, t) + } + i.exports = n + }); + + function Jr(e) { + return oa.hasOwnProperty(e) + } + + function Zr(e) { + return Jr(e) ? oa[e] : void 0 + } + + function ea(e, t) { + e[sa] = e[sa] || {}, e[sa][t] = !0 + } + + function ta(e, t, i) { + var n = (i ? "before" : "") + "pluginsetup"; + e.trigger(n, t), e.trigger(n + ":" + t.name, t) + } + + function ia(r, a) { + return a.prototype.name = r, + function () { + ta(this, { + name: r, + plugin: a, + instance: null + }, !0); + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + var n = ra(a, [this].concat(t)); + return this[r] = function () { + return n + }, ta(this, n.getEventHash()), n + } + } + var na = function () { + if ("undefined" == typeof Reflect || !Reflect.construct) return !1; + if (Reflect.construct.sham) return !1; + if ("function" == typeof Proxy) return !0; + try { + return Date.prototype.toString.call(Reflect.construct(Date, [], function () {})), !0 + } catch (e) { + return !1 + } + }, + ra = i(function (n) { + function r(e, t, i) { + return na() ? n.exports = r = Reflect.construct : n.exports = r = function (e, t, i) { + var n = [null]; + n.push.apply(n, t); + var r = new(Function.bind.apply(e, n)); + return i && Qr(r, i.prototype), r + }, r.apply(null, arguments) + } + n.exports = r + }), + aa = "plugin", + sa = "activePlugins_", + oa = {}, + ua = function () { + function i(e) { + if (this.constructor === i) throw new Error("Plugin must be sub-classed; not directly instantiated."); + this.player = e, this.log || (this.log = this.player.log.createLogger(this.name)), Pe(this), delete this.trigger, Oe(this, this.constructor.defaultState), ea(e, this.name), this.dispose = ve(this, this.dispose), e.on("dispose", this.dispose) + } + var e = i.prototype; + return e.version = function () { + return this.constructor.VERSION + }, e.getEventHash = function (e) { + return void 0 === e && (e = {}), e.name = this.name, e.plugin = this.constructor, e.instance = this, e + }, e.trigger = function (e, t) { + return void 0 === t && (t = {}), fe(this.eventBusEl_, e, this.getEventHash(t)) + }, e.handleStateChanged = function (e) {}, e.dispose = function () { + var e = this.name, + t = this.player; + this.trigger("dispose"), this.off(), t.off("dispose", this.dispose), t[sa][e] = !1, this.player = this.state = null, t[e] = ia(e, oa[e]) + }, i.isBasic = function (e) { + var t = "string" == typeof e ? Zr(e) : e; + return "function" == typeof t && !i.prototype.isPrototypeOf(t.prototype) + }, i.registerPlugin = function (e, t) { + if ("string" != typeof e) throw new Error('Illegal plugin name, "' + e + '", must be a string, was ' + typeof e + "."); + if (Jr(e)) p.warn('A plugin named "' + e + '" already exists. You may want to avoid re-registering plugins!'); + else if (Yr.prototype.hasOwnProperty(e)) throw new Error('Illegal plugin name, "' + e + '", cannot share a name with an existing player method!'); + if ("function" != typeof t) throw new Error('Illegal plugin for "' + e + '", must be a function, was ' + typeof t + "."); + return oa[e] = t, e !== aa && (i.isBasic(t) ? Yr.prototype[e] = function (t, i) { + function n() { + ta(this, { + name: t, + plugin: i, + instance: null + }, !0); + var e = i.apply(this, arguments); + return ea(this, t), ta(this, { + name: t, + plugin: i, + instance: e + }), e + } + return Object.keys(i).forEach(function (e) { + n[e] = i[e] + }), n + }(e, t) : Yr.prototype[e] = ia(e, t)), t + }, i.deregisterPlugin = function (e) { + if (e === aa) throw new Error("Cannot de-register base plugin."); + Jr(e) && (delete oa[e], delete Yr.prototype[e]) + }, i.getPlugins = function (e) { + var i; + return void 0 === e && (e = Object.keys(oa)), e.forEach(function (e) { + var t = Zr(e); + t && ((i = i || {})[e] = t) + }), i + }, i.getPluginVersion = function (e) { + var t = Zr(e); + return t && t.VERSION || "" + }, i + }(); + ua.getPlugin = Zr, ua.BASE_PLUGIN_NAME = aa, ua.registerPlugin(aa, ua), Yr.prototype.usingPlugin = function (e) { + return !!this[sa] && !0 === this[sa][e] + }, Yr.prototype.hasPlugin = function (e) { + return !!Jr(e) + }; + var la = function (e, t) { + if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function"); + e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, + writable: !0, + configurable: !0 + } + }), t && Qr(e, t) + }, + ca = function (e) { + return 0 === e.indexOf("#") ? e.slice(1) : e + }; + + function da(e, i, t) { + var n = da.getPlayer(e); + if (n) return i && p.warn('Player "' + e + '" is already initialised. Options will not be applied.'), t && n.ready(t), n; + var r = "string" == typeof e ? X("#" + ca(e)) : e; + if (!_(r)) throw new TypeError("The element or ID supplied is not valid. (videojs)"); + r.ownerDocument.defaultView && r.ownerDocument.body.contains(r) || p.warn("The element supplied is not included in the DOM"), i = i || {}, da.hooks("beforesetup").forEach(function (e) { + var t = e(r, Re(i)); + s(t) && !Array.isArray(t) ? i = Re(i, t) : p.error("please return an object in beforesetup hooks") + }); + var a = je.getComponent("Player"); + return n = new a(r, i, t), da.hooks("setup").forEach(function (e) { + return e(n) + }), n + } + if (da.hooks_ = {}, da.hooks = function (e, t) { + return da.hooks_[e] = da.hooks_[e] || [], t && (da.hooks_[e] = da.hooks_[e].concat(t)), da.hooks_[e] + }, da.hook = function (e, t) { + da.hooks(e, t) + }, da.hookOnce = function (i, e) { + da.hooks(i, [].concat(e).map(function (t) { + return function e() { + return da.removeHook(i, e), t.apply(void 0, arguments) + } + })) + }, da.removeHook = function (e, t) { + var i = da.hooks(e).indexOf(t); + return !(i <= -1) && (da.hooks_[e] = da.hooks_[e].slice(), da.hooks_[e].splice(i, 1), !0) + }, !0 !== T.VIDEOJS_NO_DYNAMIC_STYLE && y()) { + var ha = X(".vjs-styles-defaults"); + if (!ha) { + ha = ee("vjs-styles-defaults"); + var pa = X("head"); + pa && pa.insertBefore(ha, pa.firstChild), te(ha, "\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ") + } + } + + function fa(e) { + return e && "object" == typeof e && "default" in e ? e : { + default: e + } + } + J(1, da), da.VERSION = h, da.options = Yr.prototype.options_, da.getPlayers = function () { + return Yr.players + }, da.getPlayer = function (e) { + var t, i = Yr.players; + if ("string" == typeof e) { + var n = ca(e), + r = i[n]; + if (r) return r; + t = X("#" + n) + } else t = e; + if (_(t)) { + var a = t, + s = a.player, + o = a.playerId; + if (s || i[o]) return s || i[o] + } + }, da.getAllPlayers = function () { + return Object.keys(Yr.players).map(function (e) { + return Yr.players[e] + }).filter(Boolean) + }, da.players = Yr.players, da.getComponent = je.getComponent, da.registerComponent = function (e, t) { + Xi.isTech(t) && p.warn("The " + e + " tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)"), je.registerComponent.call(je, e, t) + }, da.getTech = Xi.getTech, da.registerTech = Xi.registerTech, da.use = function (e, t) { + Ki[e] = Ki[e] || [], Ki[e].push(t) + }, Object.defineProperty(da, "middleware", { + value: {}, + writeable: !1, + enumerable: !0 + }), Object.defineProperty(da.middleware, "TERMINATOR", { + value: $i, + writeable: !1, + enumerable: !0 + }), da.browser = pt, da.TOUCH_ENABLED = ut, da.extend = function (e, t) { + void 0 === t && (t = {}); + var i = function () { + e.apply(this, arguments) + }, + n = {}; + for (var r in "object" == typeof t ? (t.constructor !== Object.prototype.constructor && (i = t.constructor), n = t) : "function" == typeof t && (i = t), la(i, e), e && (i.super_ = e), n) n.hasOwnProperty(r) && (i.prototype[r] = n[r]); + return i + }, da.mergeOptions = Re, da.bind = ve, da.registerPlugin = ua.registerPlugin, da.deregisterPlugin = ua.deregisterPlugin, da.plugin = function (e, t) { + return p.warn("videojs.plugin() is deprecated; use videojs.registerPlugin() instead"), ua.registerPlugin(e, t) + }, da.getPlugins = ua.getPlugins, da.getPlugin = ua.getPlugin, da.getPluginVersion = ua.getPluginVersion, da.addLanguage = function (e, t) { + var i; + return e = ("" + e).toLowerCase(), da.options.languages = Re(da.options.languages, ((i = {})[e] = t, i)), da.options.languages[e] + }, da.log = p, da.createLogger = f, da.createTimeRange = da.createTimeRanges = gt, da.formatTime = kn, da.setFormatTime = function (e) { + Sn = e + }, da.resetFormatTime = function () { + Sn = Tn + }, da.parseUrl = Bt, da.isCrossOrigin = qt, da.EventTarget = _e, da.on = he, da.one = me, da.off = pe, da.trigger = fe, da.xhr = ni, da.TextTrack = ci, da.AudioTrack = di, da.VideoTrack = hi, ["isEl", "isTextNode", "createEl", "hasClass", "addClass", "removeClass", "toggleClass", "setAttributes", "getAttributes", "emptyEl", "appendContent", "insertContent"].forEach(function (e) { + da[e] = function () { + return p.warn("videojs." + e + "() is deprecated; use videojs.dom." + e + "() instead"), Y[e].apply(null, arguments) + } + }), da.computedStyle = u, da.dom = Y, da.url = Zt, da.defineLazyProperty = Br; + var ma = fa(i(function (e, t) { + var i, c, n, r, d; + i = /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/?#]*)?((?:[^\/\?#]*\/)*.*?)??(;.*?)?(\?.*?)?(#.*?)?$/, c = /^([^\/?#]*)(.*)$/, n = /(?:\/|^)\.(?=\/)/g, r = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g, d = { + buildAbsoluteURL: function (e, t, i) { + if (i = i || {}, e = e.trim(), !(t = t.trim())) { + if (!i.alwaysNormalize) return e; + var n = d.parseURL(e); + if (!n) throw new Error("Error trying to parse base URL."); + return n.path = d.normalizePath(n.path), d.buildURLFromParts(n) + } + var r = d.parseURL(t); + if (!r) throw new Error("Error trying to parse relative URL."); + if (r.scheme) return i.alwaysNormalize ? (r.path = d.normalizePath(r.path), d.buildURLFromParts(r)) : t; + var a = d.parseURL(e); + if (!a) throw new Error("Error trying to parse base URL."); + if (!a.netLoc && a.path && "/" !== a.path[0]) { + var s = c.exec(a.path); + a.netLoc = s[1], a.path = s[2] + } + a.netLoc && !a.path && (a.path = "/"); + var o = { + scheme: a.scheme, + netLoc: r.netLoc, + path: null, + params: r.params, + query: r.query, + fragment: r.fragment + }; + if (!r.netLoc && (o.netLoc = a.netLoc, "/" !== r.path[0])) + if (r.path) { + var u = a.path, + l = u.substring(0, u.lastIndexOf("/") + 1) + r.path; + o.path = d.normalizePath(l) + } else o.path = a.path, r.params || (o.params = a.params, r.query || (o.query = a.query)); + return null === o.path && (o.path = i.alwaysNormalize ? d.normalizePath(r.path) : r.path), d.buildURLFromParts(o) + }, + parseURL: function (e) { + var t = i.exec(e); + return t ? { + scheme: t[1] || "", + netLoc: t[2] || "", + path: t[3] || "", + params: t[4] || "", + query: t[5] || "", + fragment: t[6] || "" + } : null + }, + normalizePath: function (e) { + for (e = e.split("").reverse().join("").replace(n, ""); e.length !== (e = e.replace(r, "")).length;); + return e.split("").reverse().join("") + }, + buildURLFromParts: function (e) { + return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment + } + }, e.exports = d + })), + ga = fa(T), + va = function (e, t) { + return /^[a-z]+:/i.test(t) ? t : (/\/\//i.test(e) || (e = ma.default.buildAbsoluteURL(ga.default.location && ga.default.location.href || "", e)), ma.default.buildAbsoluteURL(e, t)) + }, + ya = function () { + function e() { + this.listeners = {} + } + var t = e.prototype; + return t.on = function (e, t) { + this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t) + }, t.off = function (e, t) { + if (!this.listeners[e]) return !1; + var i = this.listeners[e].indexOf(t); + return this.listeners[e] = this.listeners[e].slice(0), this.listeners[e].splice(i, 1), -1 < i + }, t.trigger = function (e, t) { + var i = this.listeners[e]; + if (i) + if (2 === arguments.length) + for (var n = i.length, r = 0; r < n; ++r) i[r].call(this, t); + else + for (var a = Array.prototype.slice.call(arguments, 1), s = i.length, o = 0; o < s; ++o) i[o].apply(this, a) + }, t.dispose = function () { + this.listeners = {} + }, t.pipe = function (t) { + this.on("data", function (e) { + t.push(e) + }) + }, e + }(); + + function _a(e) { + return e && "object" == typeof e && "default" in e ? e : { + default: e + } + } + var ba = _a(T); + + function Ta(e) { + for (var t, i = e.split(new RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')), n = {}, r = i.length; r--;) "" !== i[r] && ((t = /([^=]*)=(.*)/.exec(i[r]).slice(1))[0] = t[0].replace(/^\s+|\s+$/g, ""), t[1] = t[1].replace(/^\s+|\s+$/g, ""), t[1] = t[1].replace(/^['"](.*)['"]$/g, "$1"), n[t[0]] = t[1]); + return n + } + var Sa = function (e) { + for (var t = function (e) { + return ba.default.atob ? ba.default.atob(e) : Buffer.from(e, "base64").toString("binary") + }(e), i = new Uint8Array(t.length), n = 0; n < t.length; n++) i[n] = t.charCodeAt(n); + return i + }, + ka = function (t) { + function e() { + var e; + return (e = t.call(this) || this).buffer = "", e + } + return Ge(e, t), e.prototype.push = function (e) { + var t; + for (this.buffer += e, t = this.buffer.indexOf("\n"); - 1 < t; t = this.buffer.indexOf("\n")) this.trigger("data", this.buffer.substring(0, t)), this.buffer = this.buffer.substring(t + 1) + }, e + }(ya), + Ca = function (t) { + function e() { + var e; + return (e = t.call(this) || this).customParsers = [], e.tagMappers = [], e + } + Ge(e, t); + var i = e.prototype; + return i.push = function (n) { + var u, l, c = this; + 0 !== (n = n.trim()).length && ("#" === n[0] ? this.tagMappers.reduce(function (e, t) { + var i = t(n); + return i === n ? e : e.concat([i]) + }, [n]).forEach(function (e) { + for (var t = 0; t < c.customParsers.length; t++) + if (c.customParsers[t].call(c, e)) return; + if (0 === e.indexOf("#EXT")) + if (e = e.replace("\r", ""), u = /^#EXTM3U/.exec(e)) c.trigger("data", { + type: "tag", + tagType: "m3u" + }); + else { + if (u = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(e)) return l = { + type: "tag", + tagType: "inf" + }, u[1] && (l.duration = parseFloat(u[1])), u[2] && (l.title = u[2]), void c.trigger("data", l); + if (u = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(e)) return l = { + type: "tag", + tagType: "targetduration" + }, u[1] && (l.duration = parseInt(u[1], 10)), void c.trigger("data", l); + if (u = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(e)) return l = { + type: "tag", + tagType: "totalduration" + }, u[1] && (l.duration = parseInt(u[1], 10)), void c.trigger("data", l); + if (u = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(e)) return l = { + type: "tag", + tagType: "version" + }, u[1] && (l.version = parseInt(u[1], 10)), void c.trigger("data", l); + if (u = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) return l = { + type: "tag", + tagType: "media-sequence" + }, u[1] && (l.number = parseInt(u[1], 10)), void c.trigger("data", l); + if (u = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) return l = { + type: "tag", + tagType: "discontinuity-sequence" + }, u[1] && (l.number = parseInt(u[1], 10)), void c.trigger("data", l); + if (u = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(e)) return l = { + type: "tag", + tagType: "playlist-type" + }, u[1] && (l.playlistType = u[1]), void c.trigger("data", l); + if (u = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(e)) return l = { + type: "tag", + tagType: "byterange" + }, u[1] && (l.length = parseInt(u[1], 10)), u[2] && (l.offset = parseInt(u[2], 10)), void c.trigger("data", l); + if (u = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(e)) return l = { + type: "tag", + tagType: "allow-cache" + }, u[1] && (l.allowed = !/NO/.test(u[1])), void c.trigger("data", l); + if (u = /^#EXT-X-MAP:?(.*)$/.exec(e)) { + if (l = { + type: "tag", + tagType: "map" + }, u[1]) { + var i = Ta(u[1]); + if (i.URI && (l.uri = i.URI), i.BYTERANGE) { + var n = i.BYTERANGE.split("@"), + r = n[0], + a = n[1]; + l.byterange = {}, r && (l.byterange.length = parseInt(r, 10)), a && (l.byterange.offset = parseInt(a, 10)) + } + } + c.trigger("data", l) + } else if (u = /^#EXT-X-STREAM-INF:?(.*)$/.exec(e)) { + if (l = { + type: "tag", + tagType: "stream-inf" + }, u[1]) { + if (l.attributes = Ta(u[1]), l.attributes.RESOLUTION) { + var s = l.attributes.RESOLUTION.split("x"), + o = {}; + s[0] && (o.width = parseInt(s[0], 10)), s[1] && (o.height = parseInt(s[1], 10)), l.attributes.RESOLUTION = o + } + l.attributes.BANDWIDTH && (l.attributes.BANDWIDTH = parseInt(l.attributes.BANDWIDTH, 10)), l.attributes["PROGRAM-ID"] && (l.attributes["PROGRAM-ID"] = parseInt(l.attributes["PROGRAM-ID"], 10)) + } + c.trigger("data", l) + } else { + if (u = /^#EXT-X-MEDIA:?(.*)$/.exec(e)) return l = { + type: "tag", + tagType: "media" + }, u[1] && (l.attributes = Ta(u[1])), void c.trigger("data", l); + if (u = /^#EXT-X-ENDLIST/.exec(e)) c.trigger("data", { + type: "tag", + tagType: "endlist" + }); + else if (u = /^#EXT-X-DISCONTINUITY/.exec(e)) c.trigger("data", { + type: "tag", + tagType: "discontinuity" + }); + else { + if (u = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(e)) return l = { + type: "tag", + tagType: "program-date-time" + }, u[1] && (l.dateTimeString = u[1], l.dateTimeObject = new Date(u[1])), void c.trigger("data", l); + if (u = /^#EXT-X-KEY:?(.*)$/.exec(e)) return l = { + type: "tag", + tagType: "key" + }, u[1] && (l.attributes = Ta(u[1]), l.attributes.IV && ("0x" === l.attributes.IV.substring(0, 2).toLowerCase() && (l.attributes.IV = l.attributes.IV.substring(2)), l.attributes.IV = l.attributes.IV.match(/.{8}/g), l.attributes.IV[0] = parseInt(l.attributes.IV[0], 16), l.attributes.IV[1] = parseInt(l.attributes.IV[1], 16), l.attributes.IV[2] = parseInt(l.attributes.IV[2], 16), l.attributes.IV[3] = parseInt(l.attributes.IV[3], 16), l.attributes.IV = new Uint32Array(l.attributes.IV))), void c.trigger("data", l); + if (u = /^#EXT-X-START:?(.*)$/.exec(e)) return l = { + type: "tag", + tagType: "start" + }, u[1] && (l.attributes = Ta(u[1]), l.attributes["TIME-OFFSET"] = parseFloat(l.attributes["TIME-OFFSET"]), l.attributes.PRECISE = /YES/.test(l.attributes.PRECISE)), void c.trigger("data", l); + if (u = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(e)) return l = { + type: "tag", + tagType: "cue-out-cont" + }, u[1] ? l.data = u[1] : l.data = "", void c.trigger("data", l); + if (u = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(e)) return l = { + type: "tag", + tagType: "cue-out" + }, u[1] ? l.data = u[1] : l.data = "", void c.trigger("data", l); + if (u = /^#EXT-X-CUE-IN:?(.*)?$/.exec(e)) return l = { + type: "tag", + tagType: "cue-in" + }, u[1] ? l.data = u[1] : l.data = "", void c.trigger("data", l); + c.trigger("data", { + type: "tag", + data: e.slice(4) + }) + } + } + } + else c.trigger("data", { + type: "comment", + text: e.slice(1) + }) + }) : this.trigger("data", { + type: "uri", + uri: n + })) + }, i.addParser = function (e) { + var t = this, + i = e.expression, + n = e.customType, + r = e.dataParser, + a = e.segment; + "function" != typeof r && (r = function (e) { + return e + }), this.customParsers.push(function (e) { + if (i.exec(e)) return t.trigger("data", { + type: "custom", + data: r(e), + customType: n, + segment: a + }), !0 + }) + }, i.addTagMapper = function (e) { + var t = e.expression, + i = e.map; + this.tagMappers.push(function (e) { + return t.test(e) ? i(e) : e + }) + }, e + }(ya), + Ea = function (t) { + function e() { + var e; + (e = t.call(this) || this).lineStream = new ka, e.parseStream = new Ca, e.lineStream.pipe(e.parseStream); + var r, a, s = Ve(e), + o = [], + u = {}, + l = { + AUDIO: {}, + VIDEO: {}, + "CLOSED-CAPTIONS": {}, + SUBTITLES: {} + }, + c = 0; + e.manifest = { + allowCache: !0, + discontinuityStarts: [], + segments: [] + }; + var d = 0; + return e.parseStream.on("data", function (t) { + var i, n; + ({ + tag: function () { + ({ + "allow-cache": function () { + this.manifest.allowCache = t.allowed, "allowed" in t || (this.trigger("info", { + message: "defaulting allowCache to YES" + }), this.manifest.allowCache = !0) + }, + byterange: function () { + var e = {}; + "length" in t && ((u.byterange = e).length = t.length, "offset" in t || (t.offset = d)), "offset" in t && ((u.byterange = e).offset = t.offset), d = e.offset + e.length + }, + endlist: function () { + this.manifest.endList = !0 + }, + inf: function () { + "mediaSequence" in this.manifest || (this.manifest.mediaSequence = 0, this.trigger("info", { + message: "defaulting media sequence to zero" + })), "discontinuitySequence" in this.manifest || (this.manifest.discontinuitySequence = 0, this.trigger("info", { + message: "defaulting discontinuity sequence to zero" + })), 0 < t.duration && (u.duration = t.duration), 0 === t.duration && (u.duration = .01, this.trigger("info", { + message: "updating zero segment duration to a small value" + })), this.manifest.segments = o + }, + key: function () { + if (t.attributes) + if ("NONE" !== t.attributes.METHOD) + if (t.attributes.URI) { + if ("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" === t.attributes.KEYFORMAT) { + return -1 === ["SAMPLE-AES", "SAMPLE-AES-CTR", "SAMPLE-AES-CENC"].indexOf(t.attributes.METHOD) ? void this.trigger("warn", { + message: "invalid key method provided for Widevine" + }) : ("SAMPLE-AES-CENC" === t.attributes.METHOD && this.trigger("warn", { + message: "SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead" + }), "data:text/plain;base64," !== t.attributes.URI.substring(0, 23) ? void this.trigger("warn", { + message: "invalid key URI provided for Widevine" + }) : t.attributes.KEYID && "0x" === t.attributes.KEYID.substring(0, 2) ? void(this.manifest.contentProtection = { + "com.widevine.alpha": { + attributes: { + schemeIdUri: t.attributes.KEYFORMAT, + keyId: t.attributes.KEYID.substring(2) + }, + pssh: Sa(t.attributes.URI.split(",")[1]) + } + }) : void this.trigger("warn", { + message: "invalid key ID provided for Widevine" + })) + } + t.attributes.METHOD || this.trigger("warn", { + message: "defaulting key method to AES-128" + }), a = { + method: t.attributes.METHOD || "AES-128", + uri: t.attributes.URI + }, "undefined" != typeof t.attributes.IV && (a.iv = t.attributes.IV) + } else this.trigger("warn", { + message: "ignoring key declaration without URI" + }); + else a = null; + else this.trigger("warn", { + message: "ignoring key declaration without attribute list" + }) + }, + "media-sequence": function () { + isFinite(t.number) ? this.manifest.mediaSequence = t.number : this.trigger("warn", { + message: "ignoring invalid media sequence: " + t.number + }) + }, + "discontinuity-sequence": function () { + isFinite(t.number) ? (this.manifest.discontinuitySequence = t.number, c = t.number) : this.trigger("warn", { + message: "ignoring invalid discontinuity sequence: " + t.number + }) + }, + "playlist-type": function () { + /VOD|EVENT/.test(t.playlistType) ? this.manifest.playlistType = t.playlistType : this.trigger("warn", { + message: "ignoring unknown playlist type: " + t.playlist + }) + }, + map: function () { + r = {}, t.uri && (r.uri = t.uri), t.byterange && (r.byterange = t.byterange) + }, + "stream-inf": function () { + this.manifest.playlists = o, this.manifest.mediaGroups = this.manifest.mediaGroups || l, t.attributes ? (u.attributes || (u.attributes = {}), m(u.attributes, t.attributes)) : this.trigger("warn", { + message: "ignoring empty stream-inf attributes" + }) + }, + media: function () { + if (this.manifest.mediaGroups = this.manifest.mediaGroups || l, t.attributes && t.attributes.TYPE && t.attributes["GROUP-ID"] && t.attributes.NAME) { + var e = this.manifest.mediaGroups[t.attributes.TYPE]; + e[t.attributes["GROUP-ID"]] = e[t.attributes["GROUP-ID"]] || {}, i = e[t.attributes["GROUP-ID"]], (n = { + default: /yes/i.test(t.attributes.DEFAULT) + }).default ? n.autoselect = !0 : n.autoselect = /yes/i.test(t.attributes.AUTOSELECT), t.attributes.LANGUAGE && (n.language = t.attributes.LANGUAGE), t.attributes.URI && (n.uri = t.attributes.URI), t.attributes["INSTREAM-ID"] && (n.instreamId = t.attributes["INSTREAM-ID"]), t.attributes.CHARACTERISTICS && (n.characteristics = t.attributes.CHARACTERISTICS), t.attributes.FORCED && (n.forced = /yes/i.test(t.attributes.FORCED)), i[t.attributes.NAME] = n + } else this.trigger("warn", { + message: "ignoring incomplete or missing media group" + }) + }, + discontinuity: function () { + c += 1, u.discontinuity = !0, this.manifest.discontinuityStarts.push(o.length) + }, + "program-date-time": function () { + "undefined" == typeof this.manifest.dateTimeString && (this.manifest.dateTimeString = t.dateTimeString, this.manifest.dateTimeObject = t.dateTimeObject), u.dateTimeString = t.dateTimeString, u.dateTimeObject = t.dateTimeObject + }, + targetduration: function () { + !isFinite(t.duration) || t.duration < 0 ? this.trigger("warn", { + message: "ignoring invalid target duration: " + t.duration + }) : this.manifest.targetDuration = t.duration + }, + totalduration: function () { + !isFinite(t.duration) || t.duration < 0 ? this.trigger("warn", { + message: "ignoring invalid total duration: " + t.duration + }) : this.manifest.totalDuration = t.duration + }, + start: function () { + t.attributes && !isNaN(t.attributes["TIME-OFFSET"]) ? this.manifest.start = { + timeOffset: t.attributes["TIME-OFFSET"], + precise: t.attributes.PRECISE + } : this.trigger("warn", { + message: "ignoring start declaration without appropriate attribute list" + }) + }, + "cue-out": function () { + u.cueOut = t.data + }, + "cue-out-cont": function () { + u.cueOutCont = t.data + }, + "cue-in": function () { + u.cueIn = t.data + } + } [t.tagType] || function () {}).call(s) + }, + uri: function () { + u.uri = t.uri, o.push(u), !this.manifest.targetDuration || "duration" in u || (this.trigger("warn", { + message: "defaulting segment duration to the target duration" + }), u.duration = this.manifest.targetDuration), a && (u.key = a), u.timeline = c, r && (u.map = r), u = {} + }, + comment: function () {}, + custom: function () { + t.segment ? (u.custom = u.custom || {}, u.custom[t.customType] = t.data) : (this.manifest.custom = this.manifest.custom || {}, this.manifest.custom[t.customType] = t.data) + } + })[t.type].call(s) + }), e + } + Ge(e, t); + var i = e.prototype; + return i.push = function (e) { + this.lineStream.push(e) + }, i.end = function () { + this.lineStream.push("\n") + }, i.addParser = function (e) { + this.parseStream.addParser(e) + }, i.addTagMapper = function (e) { + this.parseStream.addTagMapper(e) + }, e + }(ya), + wa = i(function (e, t) { + Object.defineProperty(t, "__esModule", { + value: !0 + }); + var i = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i, + n = /^application\/dash\+xml/i; + t.simpleTypeFromSourceType = function (e) { + return i.test(e) ? "hls" : n.test(e) ? "dash" : "application/vnd.videojs.vhs+json" === e ? "vhs-json" : null + } + }); + /*! @name m3u8-parser @version 4.5.0 @license Apache-2.0 */ + t(wa); + var Ia = wa.simpleTypeFromSourceType, + Aa = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/, + xa = new RegExp("[\\-\\.0-9" + Aa.source.slice(1, -1) + "\\u00B7\\u0300-\\u036F\\u203F-\\u2040]"), + Pa = new RegExp("^" + Aa.source + xa.source + "*(?::" + Aa.source + xa.source + "*)?$"), + La = 0, + Oa = 1, + Da = 2, + Ma = 3, + Ra = 4, + Na = 5, + Ua = 6, + Fa = 7; + + function Ba() {} + + function ja(e, t) { + return t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber, t + } + + function Va(e, t, i, n, r, a) { + for (var s, o = ++t, u = La;;) { + var l = e.charAt(o); + switch (l) { + case "=": + if (u === Oa) s = e.slice(t, o), u = Ma; + else { + if (u !== Da) throw new Error("attribute equal must after attrName"); + u = Ma + } + break; + case "'": + case '"': + if (u === Ma || u === Oa) { + if (u === Oa && (a.warning('attribute value must after "="'), s = e.slice(t, o)), t = o + 1, !(0 < (o = e.indexOf(l, t)))) throw new Error("attribute value no end '" + l + "' match"); + c = e.slice(t, o).replace(/&#?\w+;/g, r), i.add(s, c, t - 1), u = Na + } else { + if (u != Ra) throw new Error('attribute value must after "="'); + c = e.slice(t, o).replace(/&#?\w+;/g, r), i.add(s, c, t), a.warning('attribute "' + s + '" missed start quot(' + l + ")!!"), t = o + 1, u = Na + } + break; + case "/": + switch (u) { + case La: + i.setTagName(e.slice(t, o)); + case Na: + case Ua: + case Fa: + u = Fa, i.closed = !0; + case Ra: + case Oa: + case Da: + break; + default: + throw new Error("attribute invalid close char('/')") + } + break; + case "": + return a.error("unexpected end of input"), u == La && i.setTagName(e.slice(t, o)), o; + case ">": + switch (u) { + case La: + i.setTagName(e.slice(t, o)); + case Na: + case Ua: + case Fa: + break; + case Ra: + case Oa: + "/" === (c = e.slice(t, o)).slice(-1) && (i.closed = !0, c = c.slice(0, -1)); + case Da: + u === Da && (c = s), u == Ra ? (a.warning('attribute "' + c + '" missed quot(")!!'), i.add(s, c.replace(/&#?\w+;/g, r), t)) : ("http://www.w3.org/1999/xhtml" === n[""] && c.match(/^(?:disabled|checked|selected)$/i) || a.warning('attribute "' + c + '" missed value!! "' + c + '" instead!!'), i.add(c, c, t)); + break; + case Ma: + throw new Error("attribute value missed!!") + } + return o; + case "€": + l = " "; + default: + if (l <= " ") switch (u) { + case La: + i.setTagName(e.slice(t, o)), u = Ua; + break; + case Oa: + s = e.slice(t, o), u = Da; + break; + case Ra: + var c = e.slice(t, o).replace(/&#?\w+;/g, r); + a.warning('attribute "' + c + '" missed quot(")!!'), i.add(s, c, t); + case Na: + u = Ua + } else switch (u) { + case Da: + i.tagName; + "http://www.w3.org/1999/xhtml" === n[""] && s.match(/^(?:disabled|checked|selected)$/i) || a.warning('attribute "' + s + '" missed value!! "' + s + '" instead2!!'), i.add(s, s, t), t = o, u = Oa; + break; + case Na: + a.warning('attribute space is required"' + s + '"!!'); + case Ua: + u = Oa, t = o; + break; + case Ma: + u = Ra, t = o; + break; + case Fa: + throw new Error("elements closed character '/' and '>' must be connected to") + } + } + o++ + } + } + + function qa(e, t, i) { + for (var n = e.tagName, r = null, a = e.length; a--;) { + var s = e[a], + o = s.qName, + u = s.value; + if (0 < (h = o.indexOf(":"))) var l = s.prefix = o.slice(0, h), + c = o.slice(h + 1), + d = "xmlns" === l && c; + else l = null, d = "xmlns" === (c = o) && ""; + s.localName = c, !1 !== d && (null == r && (r = {}, za(i, i = {})), i[d] = r[d] = u, s.uri = "http://www.w3.org/2000/xmlns/", t.startPrefixMapping(d, u)) + } + for (a = e.length; a--;) { + (l = (s = e[a]).prefix) && ("xml" === l && (s.uri = "http://www.w3.org/XML/1998/namespace"), "xmlns" !== l && (s.uri = i[l || ""])) + } + var h; + c = 0 < (h = n.indexOf(":")) ? (l = e.prefix = n.slice(0, h), e.localName = n.slice(h + 1)) : (l = null, e.localName = n); + var p = e.uri = i[l || ""]; + if (t.startElement(p, c, n, e), !e.closed) return e.currentNSMap = i, e.localNSMap = r, !0; + if (t.endElement(p, c, n), r) + for (l in r) t.endPrefixMapping(l) + } + + function Ha(e, t, i, n, r) { + if (/^(?:script|textarea)$/i.test(i)) { + var a = e.indexOf("", t), + s = e.substring(t + 1, a); + if (/[&<]/.test(s)) return /^script$/i.test(i) || (s = s.replace(/&#?\w+;/g, n)), r.characters(s, 0, s.length), a + } + return t + 1 + } + + function Wa(e, t, i, n) { + var r = n[i]; + return null == r && ((r = e.lastIndexOf("")) < t && (r = e.lastIndexOf("", t + 9); + return i.startCDATA(), i.characters(e, t + 9, r - t - 9), i.endCDATA(), r + 3 + } + var a = function (e, t) { + var i, n = [], + r = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g; + r.lastIndex = t, r.exec(e); + for (; i = r.exec(e);) + if (n.push(i), i[1]) return n + }(e, t), + s = a.length; + if (1 < s && /!doctype/i.test(a[0][0])) { + var o = a[1][0], + u = 3 < s && /^public$/i.test(a[2][0]) && a[3][0], + l = 4 < s && a[4][0], + c = a[s - 1]; + return i.startDTD(o, u && u.replace(/^(['"])(.*?)\1$/, "$2"), l && l.replace(/^(['"])(.*?)\1$/, "$2")), i.endDTD(), c.index + c[0].length + } + } + return -1 + } + + function Xa(e, t, i) { + var n = e.indexOf("?>", t); + if (n) { + var r = e.substring(t, n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/); + if (r) { + r[0].length; + return i.processingInstruction(r[1], r[2]), n + 2 + } + return -1 + } + return -1 + } + + function Ka(e) {} + + function Ya(e, t) { + return e.__proto__ = t, e + } + Ba.prototype = { + parse: function (e, t, i) { + var n = this.domBuilder; + n.startDocument(), za(t, t = {}), + function (i, e, n, r, a) { + function s(e) { + var t = e.slice(1, -1); + return t in n ? n[t] : "#" === t.charAt(0) ? function (e) { + if (65535 < e) { + var t = 55296 + ((e -= 65536) >> 10), + i = 56320 + (1023 & e); + return String.fromCharCode(t, i) + } + return String.fromCharCode(e) + }(parseInt(t.substr(1).replace("x", "0x"))) : (a.error("entity not found:" + e), e) + } + + function t(e) { + if (f < e) { + var t = i.substring(f, e).replace(/&#?\w+;/g, s); + d && o(f), r.characters(t, 0, e - f), f = e + } + } + + function o(e, t) { + for (; l <= e && (t = c.exec(i));) u = t.index, l = u + t[0].length, d.lineNumber++; + d.columnNumber = e - u + 1 + } + var u = 0, + l = 0, + c = /.*(?:\r\n?|\n)|.*$/g, + d = r.locator, + h = [{ + currentNSMap: e + }], + p = {}, + f = 0; + for (;;) { + try { + var m = i.indexOf("<", f); + if (m < 0) { + if (!i.substr(f).match(/^\s*$/)) { + var g = r.doc, + v = g.createTextNode(i.substr(f)); + g.appendChild(v), r.currentElement = v + } + return + } + switch (f < m && t(m), i.charAt(m + 1)) { + case "/": + var y = i.indexOf(">", m + 3), + _ = i.substring(m + 2, y), + b = h.pop(); + y < 0 ? (_ = i.substring(m + 2).replace(/[\s<].*/, ""), a.error("end tag name: " + _ + " is not complete:" + b.tagName), y = m + 1 + _.length) : _.match(/\s" == e && ">") || "&" == e && "&" || '"' == e && """ || "&#" + e.charCodeAt() + ";" + } + + function xs(e, t) { + if (t(e)) return !0; + if (e = e.firstChild) + do { + if (xs(e, t)) return !0 + } while (e = e.nextSibling) + } + + function Ps() {} + + function Ls(e, t, i) { + e && e._inc++, "http://www.w3.org/2000/xmlns/" == i.namespaceURI && delete t._nsMap[i.prefix ? i.localName : ""] + } + + function Os(e, t, i) { + if (e && e._inc) { + e._inc++; + var n = t.childNodes; + if (i) n[n.length++] = i; + else { + for (var r = t.firstChild, a = 0; r;) r = (n[a++] = r).nextSibling; + n.length = a + } + } + } + + function Ds(e, t) { + var i = t.previousSibling, + n = t.nextSibling; + return i ? i.nextSibling = n : e.firstChild = n, n ? n.previousSibling = i : e.lastChild = i, Os(e.ownerDocument, e), t + } + + function Ms(e, t, i) { + var n = t.parentNode; + if (n && n.removeChild(t), t.nodeType === ds) { + var r = t.firstChild; + if (null == r) return t; + var a = t.lastChild + } else r = a = t; + var s = i ? i.previousSibling : e.lastChild; + for (r.previousSibling = s, a.nextSibling = i, s ? s.nextSibling = r : e.firstChild = r, null == i ? e.lastChild = a : i.previousSibling = a; r.parentNode = e, r !== a && (r = r.nextSibling);); + return Os(e.ownerDocument || e, e), t.nodeType == ds && (t.firstChild = t.lastChild = null), t + } + + function Rs() { + this._nsMap = {} + } + + function Ns() {} + + function Us() {} + + function Fs() {} + + function Bs() {} + + function js() {} + + function Vs() {} + + function qs() {} + + function Hs() {} + + function Ws() {} + + function zs() {} + + function Gs() {} + + function Xs() {} + + function Ks(e, t) { + var i = [], + n = 9 == this.nodeType ? this.documentElement : this, + r = n.prefix, + a = n.namespaceURI; + if (a && null == r && null == (r = n.lookupPrefix(a))) var s = [{ + namespace: a, + prefix: null + }]; + return $s(this, i, e, t, s), i.join("") + } + + function Ys(e, t, i) { + var n = e.prefix || "", + r = e.namespaceURI; + if (!n && !r) return !1; + if ("xml" === n && "http://www.w3.org/XML/1998/namespace" === r || "http://www.w3.org/2000/xmlns/" == r) return !1; + for (var a = i.length; a--;) { + var s = i[a]; + if (s.prefix == n) return s.namespace != r + } + return !0 + } + + function $s(e, t, i, n, r) { + if (n) { + if (!(e = n(e))) return; + if ("string" == typeof e) return void t.push(e) + } + switch (e.nodeType) { + case ts: + r = r || []; + var a = e.attributes, + s = a.length, + o = e.firstChild, + u = e.tagName; + i = Za === e.namespaceURI || i, t.push("<", u); + for (var l = 0; l < s; l++) { + "xmlns" == (c = a.item(l)).prefix ? r.push({ + prefix: c.localName, + namespace: c.value + }) : "xmlns" == c.nodeName && r.push({ + prefix: "", + namespace: c.value + }) + } + for (l = 0; l < s; l++) { + var c; + if (Ys(c = a.item(l), 0, r)) { + var d = c.prefix || "", + h = c.namespaceURI, + p = d ? " xmlns:" + d : " xmlns"; + t.push(p, '="', h, '"'), r.push({ + prefix: d, + namespace: h + }) + } + $s(c, t, i, n, r) + } + if (Ys(e, 0, r)) { + d = e.prefix || "", h = e.namespaceURI, p = d ? " xmlns:" + d : " xmlns"; + t.push(p, '="', h, '"'), r.push({ + prefix: d, + namespace: h + }) + } + if (o || i && !/^(?:meta|link|img|br|hr|input)$/i.test(u)) { + if (t.push(">"), i && /^script$/i.test(u)) + for (; o;) o.data ? t.push(o.data) : $s(o, t, i, n, r), o = o.nextSibling; + else + for (; o;) $s(o, t, i, n, r), o = o.nextSibling; + t.push("") + } else t.push("/>"); + return; + case ls: + case ds: + for (o = e.firstChild; o;) $s(o, t, i, n, r), o = o.nextSibling; + return; + case is: + return t.push(" ", e.name, '="', e.value.replace(/[<&"]/g, As), '"'); + case ns: + return t.push(e.data.replace(/[<&]/g, As)); + case rs: + return t.push(""); + case us: + return t.push("\x3c!--", e.data, "--\x3e"); + case cs: + var f = e.publicId, + m = e.systemId; + if (t.push("'); + else if (m && "." != m) t.push(' SYSTEM "', m, '">'); + else { + var g = e.internalSubset; + g && t.push(" [", g, "]"), t.push(">") + } + return; + case os: + return t.push(""); + case as: + return t.push("&", e.nodeName, ";"); + default: + t.push("??", e.nodeName) + } + } + + function Qs(e, t, i) { + e[t] = i + } + ys.prototype = Error.prototype, Qa(ps, ys), _s.prototype = { + length: 0, + item: function (e) { + return this[e] || null + }, + toString: function (e, t) { + for (var i = [], n = 0; n < this.length; n++) $s(this[n], i, e, t); + return i.join("") + } + }, bs.prototype.item = function (e) { + return Ts(this), this[e] + }, Ja(bs, _s), Ss.prototype = { + length: 0, + item: _s.prototype.item, + getNamedItem: function (e) { + for (var t = this.length; t--;) { + var i = this[t]; + if (i.nodeName == e) return i + } + }, + setNamedItem: function (e) { + var t = e.ownerElement; + if (t && t != this._ownerElement) throw new ys(vs); + var i = this.getNamedItem(e.nodeName); + return Cs(this._ownerElement, this, e, i), i + }, + setNamedItemNS: function (e) { + var t, i = e.ownerElement; + if (i && i != this._ownerElement) throw new ys(vs); + return t = this.getNamedItemNS(e.namespaceURI, e.localName), Cs(this._ownerElement, this, e, t), t + }, + removeNamedItem: function (e) { + var t = this.getNamedItem(e); + return Es(this._ownerElement, this, t), t + }, + removeNamedItemNS: function (e, t) { + var i = this.getNamedItemNS(e, t); + return Es(this._ownerElement, this, i), i + }, + getNamedItemNS: function (e, t) { + for (var i = this.length; i--;) { + var n = this[i]; + if (n.localName == t && n.namespaceURI == e) return n + } + return null + } + }, ws.prototype = { + hasFeature: function (e, t) { + var i = this._features[e.toLowerCase()]; + return !(!i || t && !(t in i)) + }, + createDocument: function (e, t, i) { + var n = new Ps; + if (n.implementation = this, n.childNodes = new _s, (n.doctype = i) && n.appendChild(i), t) { + var r = n.createElementNS(e, t); + n.appendChild(r) + } + return n + }, + createDocumentType: function (e, t, i) { + var n = new Vs; + return n.name = e, n.nodeName = e, n.publicId = t, n.systemId = i, n + } + }, Is.prototype = { + firstChild: null, + lastChild: null, + previousSibling: null, + nextSibling: null, + attributes: null, + parentNode: null, + childNodes: null, + ownerDocument: null, + nodeValue: null, + namespaceURI: null, + prefix: null, + localName: null, + insertBefore: function (e, t) { + return Ms(this, e, t) + }, + replaceChild: function (e, t) { + this.insertBefore(e, t), t && this.removeChild(t) + }, + removeChild: function (e) { + return Ds(this, e) + }, + appendChild: function (e) { + return this.insertBefore(e, null) + }, + hasChildNodes: function () { + return null != this.firstChild + }, + cloneNode: function (e) { + return function e(t, i, n) { + var r = new i.constructor; + for (var a in i) { + var s = i[a]; + "object" != typeof s && s != r[a] && (r[a] = s) + } + i.childNodes && (r.childNodes = new _s); + r.ownerDocument = t; + switch (r.nodeType) { + case ts: + var o = i.attributes, + u = r.attributes = new Ss, + l = o.length; + u._ownerElement = r; + for (var c = 0; c < l; c++) r.setAttributeNode(e(t, o.item(c), !0)); + break; + case is: + n = !0 + } + if (n) + for (var d = i.firstChild; d;) r.appendChild(e(t, d, n)), d = d.nextSibling; + return r + }(this.ownerDocument || this, this, e) + }, + normalize: function () { + for (var e = this.firstChild; e;) { + var t = e.nextSibling; + t && t.nodeType == ns && e.nodeType == ns ? (this.removeChild(t), e.appendData(t.data)) : (e.normalize(), e = t) + } + }, + isSupported: function (e, t) { + return this.ownerDocument.implementation.hasFeature(e, t) + }, + hasAttributes: function () { + return 0 < this.attributes.length + }, + lookupPrefix: function (e) { + for (var t = this; t;) { + var i = t._nsMap; + if (i) + for (var n in i) + if (i[n] == e) return n; + t = t.nodeType == is ? t.ownerDocument : t.parentNode + } + return null + }, + lookupNamespaceURI: function (e) { + for (var t = this; t;) { + var i = t._nsMap; + if (i && e in i) return i[e]; + t = t.nodeType == is ? t.ownerDocument : t.parentNode + } + return null + }, + isDefaultNamespace: function (e) { + return null == this.lookupPrefix(e) + } + }, Qa(es, Is), Qa(es, Is.prototype), Ps.prototype = { + nodeName: "#document", + nodeType: ls, + doctype: null, + documentElement: null, + _inc: 1, + insertBefore: function (e, t) { + if (e.nodeType != ds) return null == this.documentElement && e.nodeType == ts && (this.documentElement = e), Ms(this, e, t), e.ownerDocument = this, e; + for (var i = e.firstChild; i;) { + var n = i.nextSibling; + this.insertBefore(i, t), i = n + } + return e + }, + removeChild: function (e) { + return this.documentElement == e && (this.documentElement = null), Ds(this, e) + }, + importNode: function (e, t) { + return function e(t, i, n) { + var r; + switch (i.nodeType) { + case ts: + (r = i.cloneNode(!1)).ownerDocument = t; + case ds: + break; + case is: + n = !0 + } + r = r || i.cloneNode(!1); + r.ownerDocument = t; + r.parentNode = null; + if (n) + for (var a = i.firstChild; a;) r.appendChild(e(t, a, n)), a = a.nextSibling; + return r + }(this, e, t) + }, + getElementById: function (t) { + var i = null; + return xs(this.documentElement, function (e) { + if (e.nodeType == ts && e.getAttribute("id") == t) return i = e, !0 + }), i + }, + createElement: function (e) { + var t = new Rs; + return t.ownerDocument = this, t.nodeName = e, t.tagName = e, t.childNodes = new _s, (t.attributes = new Ss)._ownerElement = t + }, + createDocumentFragment: function () { + var e = new zs; + return e.ownerDocument = this, e.childNodes = new _s, e + }, + createTextNode: function (e) { + var t = new Fs; + return t.ownerDocument = this, t.appendData(e), t + }, + createComment: function (e) { + var t = new Bs; + return t.ownerDocument = this, t.appendData(e), t + }, + createCDATASection: function (e) { + var t = new js; + return t.ownerDocument = this, t.appendData(e), t + }, + createProcessingInstruction: function (e, t) { + var i = new Gs; + return i.ownerDocument = this, i.tagName = i.target = e, i.nodeValue = i.data = t, i + }, + createAttribute: function (e) { + var t = new Ns; + return t.ownerDocument = this, t.name = e, t.nodeName = e, t.localName = e, t.specified = !0, t + }, + createEntityReference: function (e) { + var t = new Ws; + return t.ownerDocument = this, t.nodeName = e, t + }, + createElementNS: function (e, t) { + var i = new Rs, + n = t.split(":"), + r = i.attributes = new Ss; + return i.childNodes = new _s, i.ownerDocument = this, i.nodeName = t, i.tagName = t, i.namespaceURI = e, 2 == n.length ? (i.prefix = n[0], i.localName = n[1]) : i.localName = t, r._ownerElement = i + }, + createAttributeNS: function (e, t) { + var i = new Ns, + n = t.split(":"); + return i.ownerDocument = this, i.nodeName = t, i.name = t, i.namespaceURI = e, i.specified = !0, 2 == n.length ? (i.prefix = n[0], i.localName = n[1]) : i.localName = t, i + } + }, Ja(Ps, Is), Ps.prototype.getElementsByTagName = (Rs.prototype = { + nodeType: ts, + hasAttribute: function (e) { + return null != this.getAttributeNode(e) + }, + getAttribute: function (e) { + var t = this.getAttributeNode(e); + return t && t.value || "" + }, + getAttributeNode: function (e) { + return this.attributes.getNamedItem(e) + }, + setAttribute: function (e, t) { + var i = this.ownerDocument.createAttribute(e); + i.value = i.nodeValue = "" + t, this.setAttributeNode(i) + }, + removeAttribute: function (e) { + var t = this.getAttributeNode(e); + t && this.removeAttributeNode(t) + }, + appendChild: function (e) { + return e.nodeType === ds ? this.insertBefore(e, null) : function (e, t) { + var i = t.parentNode; + if (i) { + var n = e.lastChild; + i.removeChild(t); + n = e.lastChild + } + return n = e.lastChild, t.parentNode = e, t.previousSibling = n, t.nextSibling = null, n ? n.nextSibling = t : e.firstChild = t, e.lastChild = t, Os(e.ownerDocument, e, t), t + }(this, e) + }, + setAttributeNode: function (e) { + return this.attributes.setNamedItem(e) + }, + setAttributeNodeNS: function (e) { + return this.attributes.setNamedItemNS(e) + }, + removeAttributeNode: function (e) { + return this.attributes.removeNamedItem(e.nodeName) + }, + removeAttributeNS: function (e, t) { + var i = this.getAttributeNodeNS(e, t); + i && this.removeAttributeNode(i) + }, + hasAttributeNS: function (e, t) { + return null != this.getAttributeNodeNS(e, t) + }, + getAttributeNS: function (e, t) { + var i = this.getAttributeNodeNS(e, t); + return i && i.value || "" + }, + setAttributeNS: function (e, t, i) { + var n = this.ownerDocument.createAttributeNS(e, t); + n.value = n.nodeValue = "" + i, this.setAttributeNode(n) + }, + getAttributeNodeNS: function (e, t) { + return this.attributes.getNamedItemNS(e, t) + }, + getElementsByTagName: function (n) { + return new bs(this, function (t) { + var i = []; + return xs(t, function (e) { + e === t || e.nodeType != ts || "*" !== n && e.tagName != n || i.push(e) + }), i + }) + }, + getElementsByTagNameNS: function (n, r) { + return new bs(this, function (t) { + var i = []; + return xs(t, function (e) { + e === t || e.nodeType !== ts || "*" !== n && e.namespaceURI !== n || "*" !== r && e.localName != r || i.push(e) + }), i + }) + } + }).getElementsByTagName, Ps.prototype.getElementsByTagNameNS = Rs.prototype.getElementsByTagNameNS, Ja(Rs, Is), Ns.prototype.nodeType = is, Ja(Ns, Is), Us.prototype = { + data: "", + substringData: function (e, t) { + return this.data.substring(e, e + t) + }, + appendData: function (e) { + e = this.data + e, this.nodeValue = this.data = e, this.length = e.length + }, + insertData: function (e, t) { + this.replaceData(e, 0, t) + }, + appendChild: function (e) { + throw new Error(fs[ms]) + }, + deleteData: function (e, t) { + this.replaceData(e, t, "") + }, + replaceData: function (e, t, i) { + i = this.data.substring(0, e) + i + this.data.substring(e + t), this.nodeValue = this.data = i, this.length = i.length + } + }, Ja(Us, Is), Fs.prototype = { + nodeName: "#text", + nodeType: ns, + splitText: function (e) { + var t = this.data, + i = t.substring(e); + t = t.substring(0, e), this.data = this.nodeValue = t, this.length = t.length; + var n = this.ownerDocument.createTextNode(i); + return this.parentNode && this.parentNode.insertBefore(n, this.nextSibling), n + } + }, Ja(Fs, Us), Bs.prototype = { + nodeName: "#comment", + nodeType: us + }, Ja(Bs, Us), js.prototype = { + nodeName: "#cdata-section", + nodeType: rs + }, Ja(js, Us), Vs.prototype.nodeType = cs, Ja(Vs, Is), qs.prototype.nodeType = hs, Ja(qs, Is), Hs.prototype.nodeType = ss, Ja(Hs, Is), Ws.prototype.nodeType = as, Ja(Ws, Is), zs.prototype.nodeName = "#document-fragment", zs.prototype.nodeType = ds, Ja(zs, Is), Gs.prototype.nodeType = os, Ja(Gs, Is), Xs.prototype.serializeToString = function (e, t, i) { + return Ks.call(e, t, i) + }, Is.prototype.toString = Ks; + try { + if (Object.defineProperty) { + Object.defineProperty(bs.prototype, "length", { + get: function () { + return Ts(this), this.$$length + } + }), Object.defineProperty(Is.prototype, "textContent", { + get: function () { + return function e(t) { + switch (t.nodeType) { + case ts: + case ds: + var i = []; + for (t = t.firstChild; t;) 7 !== t.nodeType && 8 !== t.nodeType && i.push(e(t)), t = t.nextSibling; + return i.join(""); + default: + return t.nodeValue + } + }(this) + }, + set: function (e) { + switch (this.nodeType) { + case ts: + case ds: + for (; this.firstChild;) this.removeChild(this.firstChild); + (e || String(e)) && this.appendChild(this.ownerDocument.createTextNode(e)); + break; + default: + this.data = e, this.value = e, this.nodeValue = e + } + } + }), Qs = function (e, t, i) { + e["$$" + t] = i + } + } + } catch (e) {} + + function Js(e) { + return !!e && "object" == typeof e + } + + function Zs() { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + return t.reduce(function (t, i) { + return Object.keys(i).forEach(function (e) { + Array.isArray(t[e]) && Array.isArray(i[e]) ? t[e] = t[e].concat(i[e]) : Js(t[e]) && Js(i[e]) ? t[e] = Zs(t[e], i[e]) : t[e] = i[e] + }), t + }, {}) + } + + function eo(e) { + return e.reduce(function (e, t) { + return e.concat(t) + }, []) + } + + function to(e) { + if (!e.length) return []; + for (var t = [], i = 0; i < e.length; i++) t.push(e[i]); + return t + } + + function io(e) { + var t = e.baseUrl, + i = void 0 === t ? "" : t, + n = e.source, + r = void 0 === n ? "" : n, + a = e.range, + s = void 0 === a ? "" : a, + o = e.indexRange, + u = void 0 === o ? "" : o, + l = { + uri: r, + resolvedUri: va(i || "", r) + }; + if (s || u) { + var c = (s || u).split("-"), + d = parseInt(c[0], 10), + h = parseInt(c[1], 10); + l.byterange = { + length: h - d + 1, + offset: d + } + } + return l + } + + function no(e) { + var t = e.type, + i = void 0 === t ? "static" : t, + n = e.duration, + r = e.timescale, + a = void 0 === r ? 1 : r, + s = e.sourceDuration, + o = No[i](e), + u = function (e, t) { + for (var i = [], n = e; n < t; n++) i.push(n); + return i + }(o.start, o.end).map(function (o) { + return function (e, t) { + var i = o.duration, + n = o.timescale, + r = void 0 === n ? 1 : n, + a = o.periodIndex, + s = o.startNumber; + return { + number: (void 0 === s ? 1 : s) + e, + duration: i / r, + timeline: a, + time: t * i + } + } + }(e)); + if ("static" === i) { + var l = u.length - 1; + u[l].duration = s - n / a * l + } + return u + } + + function ro(e) { + var t = e.baseUrl, + i = e.initialization, + n = void 0 === i ? {} : i, + r = e.sourceDuration, + a = e.indexRange, + s = void 0 === a ? "" : a, + o = e.duration; + if (!t) throw new Error(Do); + var u = io({ + baseUrl: t, + source: n.sourceURL, + range: n.range + }), + l = io({ + baseUrl: t, + source: t, + indexRange: s + }); + if (l.map = u, o) { + var c = no(e); + c.length && (l.duration = c[0].duration, l.timeline = c[0].timeline) + } else r && (l.duration = r, l.timeline = 0); + return l.number = 0, [l] + } + + function ao(e, t, i) { + for (var n = e.sidx.map ? e.sidx.map : null, r = e.sidx.duration, a = e.timeline || 0, s = e.sidx.byterange, o = s.offset + s.length, u = t.timescale, l = t.references.filter(function (e) { + return 1 !== e.referenceType + }), c = [], d = o + t.firstOffset, h = 0; h < l.length; h++) { + var p = t.references[h], + f = p.referencedSize, + m = p.subsegmentDuration, + g = ro({ + baseUrl: i, + timescale: u, + timeline: a, + periodIndex: a, + duration: m, + sourceDuration: r, + indexRange: d + "-" + (d + f - 1) + })[0]; + n && (g.map = n), c.push(g), d += f + } + return e.segments = c, e + } + + function so(e) { + return function (t) { + return Object.keys(t).map(function (e) { + return t[e] + }) + }(e.reduce(function (e, t) { + var i, n = t.attributes.id + (t.attributes.lang || ""); + e[n] ? (t.segments[0] && (t.segments[0].discontinuity = !0), (i = e[n].segments).push.apply(i, t.segments), t.attributes.contentProtection && (e[n].attributes.contentProtection = t.attributes.contentProtection)) : e[n] = t; + return e + }, {})).map(function (e) { + return e.discontinuityStarts = function (e, n) { + return e.reduce(function (e, t, i) { + return t[n] && e.push(i), e + }, []) + }(e.segments, "discontinuity"), e + }) + } + + function oo(e, t) { + if (void 0 === t && (t = {}), !Object.keys(t).length) return e; + for (var i in e) { + var n = e[i]; + if (n.sidx) { + var r = n.sidx.uri + "-" + (s = n.sidx.byterange, void 0, o = s.offset + s.length - 1, s.offset + "-" + o), + a = t[r] && t[r].sidx; + n.sidx && a && ao(n, a, n.sidx.resolvedUri) + } + } + var s, o; + return e + } + + function uo(e) { + var t, i = e.attributes, + n = e.segments, + r = e.sidx, + a = { + attributes: (t = { + NAME: i.id, + AUDIO: "audio", + SUBTITLES: "subs", + RESOLUTION: { + width: i.width, + height: i.height + }, + CODECS: i.codecs, + BANDWIDTH: i.bandwidth + }, t["PROGRAM-ID"] = 1, t), + uri: "", + endList: "static" === (i.type || "static"), + timeline: i.periodIndex, + resolvedUri: "", + targetDuration: i.duration, + segments: n, + mediaSequence: n.length ? n[0].number : 1 + }; + return i.contentProtection && (a.contentProtection = i.contentProtection), r && (a.sidx = r), a + } + + function lo(e, t, i) { + var n; + if (void 0 === i && (i = {}), !e.length) return {}; + var r = e[0].attributes, + a = r.sourceDuration, + s = r.type, + o = void 0 === s ? "static" : s, + u = r.suggestedPresentationDelay, + l = r.minimumUpdatePeriod, + c = so(e.filter(function (e) { + var t = e.attributes; + return "video/mp4" === t.mimeType || "video" === t.contentType + })).map(uo), + d = so(e.filter(function (e) { + var t = e.attributes; + return "audio/mp4" === t.mimeType || "audio" === t.contentType + })), + h = e.filter(function (e) { + var t = e.attributes; + return "text/vtt" === t.mimeType || "text" === t.contentType + }), + p = { + allowCache: !0, + discontinuityStarts: [], + segments: [], + endList: !0, + mediaGroups: (n = { + AUDIO: {}, + VIDEO: {} + }, n["CLOSED-CAPTIONS"] = {}, n.SUBTITLES = {}, n), + uri: "", + duration: a, + playlists: oo(c, i) + }; + return 0 <= l && (p.minimumUpdatePeriod = 1e3 * l), t && (p.locations = t), "dynamic" === o && (p.suggestedPresentationDelay = u), d.length && (p.mediaGroups.AUDIO.audio = function (e, s) { + var o; + void 0 === s && (s = {}); + var t = e.reduce(function (e, t) { + var i = t.attributes.role && t.attributes.role.value || "", + n = t.attributes.lang || "", + r = "main"; + if (n) { + var a = i ? " (" + i + ")" : ""; + r = t.attributes.lang + a + } + return e[r] && e[r].playlists[0].attributes.BANDWIDTH > t.attributes.bandwidth || (e[r] = { + language: n, + autoselect: !0, + default: "main" === i, + playlists: oo([function (e) { + var t, i = e.attributes, + n = e.segments, + r = e.sidx, + a = { + attributes: (t = { + NAME: i.id, + BANDWIDTH: i.bandwidth, + CODECS: i.codecs + }, t["PROGRAM-ID"] = 1, t), + uri: "", + endList: "static" === (i.type || "static"), + timeline: i.periodIndex, + resolvedUri: "", + targetDuration: i.duration, + segments: n, + mediaSequence: n.length ? n[0].number : 1 + }; + return i.contentProtection && (a.contentProtection = i.contentProtection), r && (a.sidx = r), a + }(t)], s), + uri: "" + }, "undefined" == typeof o && "main" === i && ((o = t).default = !0)), e + }, {}); + o || (t[Object.keys(t)[0]].default = !0); + return t + }(d, i)), h.length && (p.mediaGroups.SUBTITLES.subs = function (e, n) { + return void 0 === n && (n = {}), e.reduce(function (e, t) { + var i = t.attributes.lang || "text"; + return e[i] || (e[i] = { + language: i, + default: !1, + autoselect: !1, + playlists: oo([function (e) { + var t, i = e.attributes, + n = e.segments; + "undefined" == typeof n && (n = [{ + uri: i.baseUrl, + timeline: i.periodIndex, + resolvedUri: i.baseUrl || "", + duration: i.sourceDuration, + number: 0 + }], i.duration = i.sourceDuration); + var r = ((t = { + NAME: i.id, + BANDWIDTH: i.bandwidth + })["PROGRAM-ID"] = 1, t); + return i.codecs && (r.CODECS = i.codecs), { + attributes: r, + uri: "", + endList: "static" === (i.type || "static"), + timeline: i.periodIndex, + resolvedUri: i.baseUrl || "", + targetDuration: i.duration, + segments: n, + mediaSequence: n.length ? n[0].number : 1 + } + }(t)], n), + uri: "" + }), e + }, {}) + }(h, i)), p + } + + function co(e, t) { + for (var i, n, r, a, s, o, u, l, c, d, h, p, f = e.type, m = void 0 === f ? "static" : f, g = e.minimumUpdatePeriod, v = void 0 === g ? 0 : g, y = e.media, _ = void 0 === y ? "" : y, b = e.sourceDuration, T = e.timescale, S = void 0 === T ? 1 : T, k = e.startNumber, C = void 0 === k ? 1 : k, E = e.periodIndex, w = [], I = -1, A = 0; A < t.length; A++) { + var x = t[A], + P = x.d, + L = x.r || 0, + O = x.t || 0; + I < 0 && (I = O), O && I < O && (I = O); + var D = void 0; + if (L < 0) { + var M = A + 1; + D = M === t.length ? "dynamic" === m && 0 < v && 0 < _.indexOf("$Number$") ? (n = I, r = P, void 0, a = (i = e).NOW, s = i.clientOffset, o = i.availabilityStartTime, u = i.timescale, l = void 0 === u ? 1 : u, c = i.start, d = void 0 === c ? 0 : c, h = i.minimumUpdatePeriod, p = (a + s) / 1e3 + (void 0 === h ? 0 : h) - (o + d), Math.ceil((p * l - n) / r)) : (b * S - I) / P : (t[M].t - I) / P + } else D = L + 1; + for (var R = C + w.length + D, N = C + w.length; N < R;) w.push({ + number: N, + duration: P / S, + time: I, + timeline: E + }), I += P, N++ + } + return w + } + + function ho(e, t) { + return e.replace(Uo, function (a) { + return function (e, t, i, n) { + if ("$$" === e) return "$"; + if ("undefined" == typeof a[t]) return e; + var r = "" + a[t]; + return "RepresentationID" === t ? r : (n = i ? parseInt(n, 10) : 1) <= r.length ? r : new Array(n - r.length + 1).join("0") + r + } + }(t)) + } + + function po(i, e) { + var n = { + RepresentationID: i.id, + Bandwidth: i.bandwidth || 0 + }, + t = i.initialization, + r = void 0 === t ? { + sourceURL: "", + range: "" + } : t, + a = io({ + baseUrl: i.baseUrl, + source: ho(r.sourceURL, n), + range: r.range + }); + return function (e, t) { + return e.duration || t ? e.duration ? no(e) : co(e, t) : [{ + number: e.startNumber || 1, + duration: e.sourceDuration, + time: 0, + timeline: e.periodIndex + }] + }(i, e).map(function (e) { + n.Number = e.number, n.Time = e.time; + var t = ho(i.media || "", n); + return { + uri: t, + timeline: e.timeline, + duration: e.duration, + resolvedUri: va(i.baseUrl || "", t), + map: a, + number: e.number + } + }) + } + + function fo(t, e) { + var i = t.duration, + n = t.segmentUrls, + r = void 0 === n ? [] : n; + if (!i && !e || i && e) throw new Error(Mo); + var a, s = r.map(function (e) { + return function (e, t) { + var i = e.baseUrl, + n = e.initialization, + r = void 0 === n ? {} : n, + a = io({ + baseUrl: i, + source: r.sourceURL, + range: r.range + }), + s = io({ + baseUrl: i, + source: t.media, + range: t.mediaRange + }); + return s.map = a, s + }(t, e) + }); + return i && (a = no(t)), e && (a = co(t, e)), a.map(function (e, t) { + if (s[t]) { + var i = s[t]; + return i.timeline = e.timeline, i.duration = e.duration, i.number = e.number, i + } + }).filter(function (e) { + return e + }) + } + + function mo(e) { + var t, i, n = e.attributes, + r = e.segmentInfo; + r.template ? (i = po, t = Zs(n, r.template)) : r.base ? (i = ro, t = Zs(n, r.base)) : r.list && (i = fo, t = Zs(n, r.list)); + var a = { + attributes: n + }; + if (!i) return a; + var s = i(t, r.timeline); + if (t.duration) { + var o = t, + u = o.duration, + l = o.timescale, + c = void 0 === l ? 1 : l; + t.duration = u / c + } else s.length ? t.duration = s.reduce(function (e, t) { + return Math.max(e, Math.ceil(t.duration)) + }, 0) : t.duration = 0; + return a.attributes = t, a.segments = s, r.base && t.indexRange && (a.sidx = s[0], a.segments = []), a + } + + function go(e, t) { + return to(e.childNodes).filter(function (e) { + return e.tagName === t + }) + } + + function vo(e) { + return e.textContent.trim() + } + + function yo(e) { + var t = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/.exec(e); + if (!t) return 0; + var i = t.slice(1), + n = i[0], + r = i[1], + a = i[2], + s = i[3], + o = i[4], + u = i[5]; + return 31536e3 * parseFloat(n || 0) + 2592e3 * parseFloat(r || 0) + 86400 * parseFloat(a || 0) + 3600 * parseFloat(s || 0) + 60 * parseFloat(o || 0) + parseFloat(u || 0) + } + + function _o(e) { + return e && e.attributes ? to(e.attributes).reduce(function (e, t) { + var i = Fo[t.name] || Fo.DEFAULT; + return e[t.name] = i(t.value), e + }, {}) : {} + } + + function bo(e, i) { + return i.length ? eo(e.map(function (t) { + return i.map(function (e) { + return va(t, vo(e)) + }) + })) : e + } + + function To(e) { + var t = go(e, "SegmentTemplate")[0], + i = go(e, "SegmentList")[0], + n = i && go(i, "SegmentURL").map(function (e) { + return Zs({ + tag: "SegmentURL" + }, _o(e)) + }), + r = go(e, "SegmentBase")[0], + a = i || t, + s = a && go(a, "SegmentTimeline")[0], + o = i || r || t, + u = o && go(o, "Initialization")[0], + l = t && _o(t); + l && u ? l.initialization = u && _o(u) : l && l.initialization && (l.initialization = { + sourceURL: l.initialization + }); + var c = { + template: l, + timeline: s && go(s, "S").map(function (e) { + return _o(e) + }), + list: i && Zs(_o(i), { + segmentUrls: n, + initialization: _o(u) + }), + base: r && Zs(_o(r), { + initialization: _o(u) + }) + }; + return Object.keys(c).forEach(function (e) { + c[e] || delete c[e] + }), c + } + + function So(c, d, h) { + return function (e) { + var t = _o(e), + i = bo(d, go(e, "BaseURL")), + n = go(e, "Role")[0], + r = { + role: _o(n) + }, + a = Zs(c, t, r), + s = function (e) { + return e.reduce(function (e, t) { + var i = _o(t), + n = Bo[i.schemeIdUri]; + if (n) { + e[n] = { + attributes: i + }; + var r = go(t, "cenc:pssh")[0]; + if (r) { + var a = vo(r), + s = a && Sa(a); + e[n].pssh = s + } + } + return e + }, {}) + }(go(e, "ContentProtection")); + Object.keys(s).length && (a = Zs(a, { + contentProtection: s + })); + var o = To(e), + u = go(e, "Representation"), + l = Zs(h, o); + return eo(u.map(function (a, s, o) { + return function (e) { + var t = go(e, "BaseURL"), + i = bo(s, t), + n = Zs(a, _o(e)), + r = To(e); + return i.map(function (e) { + return { + segmentInfo: Zs(o, r), + attributes: Zs(n, { + baseUrl: e + }) + } + }) + } + }(a, i, l))) + } + } + + function ko(e, t) { + void 0 === t && (t = {}); + var i = t, + n = i.manifestUri, + r = void 0 === n ? "" : n, + a = i.NOW, + s = void 0 === a ? Date.now() : a, + o = i.clientOffset, + u = void 0 === o ? 0 : o, + l = go(e, "Period"); + if (!l.length) throw new Error(Po); + var c = go(e, "Location"), + d = _o(e), + h = bo([r], go(e, "BaseURL")); + return d.sourceDuration = d.mediaPresentationDuration || 0, d.NOW = s, d.clientOffset = u, c.length && (d.locations = c.map(vo)), { + locations: d.locations, + representationInfo: eo(l.map(function (l, c) { + return function (e, t) { + var i = bo(c, go(e, "BaseURL")), + n = _o(e), + r = parseInt(n.id, 10), + a = T.isNaN(r) ? t : r, + s = Zs(l, { + periodIndex: a + }), + o = go(e, "AdaptationSet"), + u = To(e); + return eo(o.map(So(s, i, u))) + } + }(d, h))) + } + } + + function Co(e) { + if ("" === e) throw new Error(Lo); + var t = (new xo).parseFromString(e, "application/xml"), + i = t && "MPD" === t.documentElement.tagName ? t.documentElement : null; + if (!i || i && 0 < i.getElementsByTagName("parsererror").length) throw new Error(Oo); + return i + } + + function Eo(e, t) { + void 0 === t && (t = {}); + var i = ko(Co(e), t), + n = function (e) { + return e.map(mo) + }(i.representationInfo); + return lo(n, i.locations, t.sidxMapping) + } + + function wo(e) { + return function (e) { + var t = go(e, "UTCTiming")[0]; + if (!t) return null; + var i = _o(t); + switch (i.schemeIdUri) { + case "urn:mpeg:dash:utc:http-head:2014": + case "urn:mpeg:dash:utc:http-head:2012": + i.method = "HEAD"; + break; + case "urn:mpeg:dash:utc:http-xsdate:2014": + case "urn:mpeg:dash:utc:http-iso:2014": + case "urn:mpeg:dash:utc:http-xsdate:2012": + case "urn:mpeg:dash:utc:http-iso:2012": + i.method = "GET"; + break; + case "urn:mpeg:dash:utc:direct:2014": + case "urn:mpeg:dash:utc:direct:2012": + i.method = "DIRECT", i.value = Date.parse(i.value); + break; + case "urn:mpeg:dash:utc:http-ntp:2014": + case "urn:mpeg:dash:utc:ntp:2014": + case "urn:mpeg:dash:utc:sntp:2014": + default: + throw new Error(Ro) + } + return i + }(Co(e)) + } + var Io = { + DOMImplementation: ws, + XMLSerializer: Xs + }, + Ao = i(function (e, t) { + function i(e) { + this.options = e || { + locator: {} + } + } + + function l() { + this.cdata = !1 + } + + function c(e, t) { + t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber + } + + function d(e) { + if (e) return "\n@" + (e.systemId || "") + "#[line:" + e.lineNumber + ",col:" + e.columnNumber + "]" + } + + function r(e, t, i) { + return "string" == typeof e ? e.substr(t, i) : e.length >= t + i || t ? new java.lang.String(e, t, i) + "" : e + } + + function h(e, t) { + e.currentElement ? e.currentElement.appendChild(t) : e.doc.appendChild(t) + } + i.prototype.parseFromString = function (e, t) { + var i = this.options, + n = new p, + r = i.domBuilder || new l, + a = i.errorHandler, + s = i.locator, + o = i.xmlns || {}, + u = { + lt: "<", + gt: ">", + amp: "&", + quot: '"', + apos: "'" + }; + return s && r.setDocumentLocator(s), n.errorHandler = function (n, e, r) { + if (!n) { + if (e instanceof l) return e; + n = e + } + var a = {}, + s = n instanceof Function; + + function t(t) { + var i = n[t]; + !i && s && (i = 2 == n.length ? function (e) { + n(t, e) + } : n), a[t] = i && function (e) { + i("[xmldom " + t + "]\t" + e + d(r)) + } || function () {} + } + return r = r || {}, t("warning"), t("error"), t("fatalError"), a + }(a, r, s), n.domBuilder = i.domBuilder || r, /\/x?html?$/.test(t) && (u.nbsp = " ", u.copy = "©", o[""] = "http://www.w3.org/1999/xhtml"), o.xml = o.xml || "http://www.w3.org/XML/1998/namespace", e ? n.parse(e, o, u) : n.errorHandler.error("invalid doc source"), r.doc + }, l.prototype = { + startDocument: function () { + this.doc = (new n).createDocument(null, null, null), this.locator && (this.doc.documentURI = this.locator.systemId) + }, + startElement: function (e, t, i, n) { + var r = this.doc, + a = r.createElementNS(e, i || t), + s = n.length; + h(this, a), this.currentElement = a, this.locator && c(this.locator, a); + for (var o = 0; o < s; o++) { + e = n.getURI(o); + var u = n.getValue(o), + l = (i = n.getQName(o), r.createAttributeNS(e, i)); + this.locator && c(n.getLocator(o), l), l.value = l.nodeValue = u, a.setAttributeNode(l) + } + }, + endElement: function (e, t, i) { + var n = this.currentElement; + n.tagName; + this.currentElement = n.parentNode + }, + startPrefixMapping: function (e, t) {}, + endPrefixMapping: function (e) {}, + processingInstruction: function (e, t) { + var i = this.doc.createProcessingInstruction(e, t); + this.locator && c(this.locator, i), h(this, i) + }, + ignorableWhitespace: function (e, t, i) {}, + characters: function (e, t, i) { + if (e = r.apply(this, arguments)) { + if (this.cdata) var n = this.doc.createCDATASection(e); + else n = this.doc.createTextNode(e); + this.currentElement ? this.currentElement.appendChild(n) : /^\s*$/.test(e) && this.doc.appendChild(n), this.locator && c(this.locator, n) + } + }, + skippedEntity: function (e) {}, + endDocument: function () { + this.doc.normalize() + }, + setDocumentLocator: function (e) { + (this.locator = e) && (e.lineNumber = 0) + }, + comment: function (e, t, i) { + e = r.apply(this, arguments); + var n = this.doc.createComment(e); + this.locator && c(this.locator, n), h(this, n) + }, + startCDATA: function () { + this.cdata = !0 + }, + endCDATA: function () { + this.cdata = !1 + }, + startDTD: function (e, t, i) { + var n = this.doc.implementation; + if (n && n.createDocumentType) { + var r = n.createDocumentType(e, t, i); + this.locator && c(this.locator, r), h(this, r) + } + }, + warning: function (e) {}, + error: function (e) {}, + fatalError: function (e) { + throw e + } + }, "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g, function (e) { + l.prototype[e] = function () { + return null + } + }); + var p = $a.XMLReader, + n = t.DOMImplementation = Io.DOMImplementation; + t.XMLSerializer = Io.XMLSerializer, t.DOMParser = i + }), + xo = (Ao.DOMImplementation, Ao.XMLSerializer, Ao.DOMParser), + Po = "INVALID_NUMBER_OF_PERIOD", + Lo = "DASH_EMPTY_MANIFEST", + Oo = "DASH_INVALID_XML", + Do = "NO_BASE_URL", + Mo = "SEGMENT_TIME_UNSPECIFIED", + Ro = "UNSUPPORTED_UTC_TIMING_SCHEME", + No = { + static: function (e) { + var t = e.duration, + i = e.timescale, + n = void 0 === i ? 1 : i, + r = e.sourceDuration; + return { + start: 0, + end: Math.ceil(r / (t / n)) + } + }, + dynamic: function (e) { + var t = e.NOW, + i = e.clientOffset, + n = e.availabilityStartTime, + r = e.timescale, + a = void 0 === r ? 1 : r, + s = e.duration, + o = e.start, + u = void 0 === o ? 0 : o, + l = e.minimumUpdatePeriod, + c = void 0 === l ? 0 : l, + d = e.timeShiftBufferDepth, + h = void 0 === d ? 1 / 0 : d, + p = (t + i) / 1e3, + f = n + u, + m = p + c - f, + g = Math.ceil(m * a / s), + v = Math.floor((p - f - h) * a / s), + y = Math.floor((p - f) * a / s); + return { + start: Math.max(0, v), + end: Math.min(g, y) + } + } + }, + Uo = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g, + Fo = { + mediaPresentationDuration: function (e) { + return yo(e) + }, + availabilityStartTime: function (e) { + return function (e) { + return /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e) && (e += "Z"), Date.parse(e) + }(e) / 1e3 + }, + minimumUpdatePeriod: function (e) { + return yo(e) + }, + suggestedPresentationDelay: function (e) { + return yo(e) + }, + type: function (e) { + return e + }, + timeShiftBufferDepth: function (e) { + return yo(e) + }, + start: function (e) { + return yo(e) + }, + width: function (e) { + return parseInt(e, 10) + }, + height: function (e) { + return parseInt(e, 10) + }, + bandwidth: function (e) { + return parseInt(e, 10) + }, + startNumber: function (e) { + return parseInt(e, 10) + }, + timescale: function (e) { + return parseInt(e, 10) + }, + duration: function (e) { + var t = parseInt(e, 10); + return isNaN(t) ? yo(e) : t + }, + d: function (e) { + return parseInt(e, 10) + }, + t: function (e) { + return parseInt(e, 10) + }, + r: function (e) { + return parseInt(e, 10) + }, + DEFAULT: function (e) { + return e + } + }, + Bo = { + "urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b": "org.w3.clearkey", + "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed": "com.widevine.alpha", + "urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95": "com.microsoft.playready", + "urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb": "com.adobe.primetime" + }, + jo = function (e) { + var t, i = new DataView(e.buffer, e.byteOffset, e.byteLength), + n = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + references: [], + referenceId: i.getUint32(4), + timescale: i.getUint32(8), + earliestPresentationTime: i.getUint32(12), + firstOffset: i.getUint32(16) + }, + r = i.getUint16(22); + for (t = 24; r; t += 12, r--) n.references.push({ + referenceType: (128 & e[t]) >>> 7, + referencedSize: 2147483647 & i.getUint32(t), + subsegmentDuration: i.getUint32(t + 4), + startsWithSap: !!(128 & e[t + 8]), + sapType: (112 & e[t + 8]) >>> 4, + sapDeltaTime: 268435455 & i.getUint32(t + 8) + }); + return n + }, + Vo = i(function (e, t) { + Object.defineProperty(t, "__esModule", { + value: !0 + }); + + function n(e) { + return e instanceof Uint8Array ? e : new Uint8Array(e && e.buffer || e, e && e.byteOffset || 0, e && e.byteLength || 0) + } + + function r(e) { + if (!e) return ""; + e = Array.prototype.slice.call(e); + var t = String.fromCharCode.apply(null, n(e)); + try { + return decodeURIComponent(escape(t)) + } catch (e) {} + return t + } + + function i(e, t) { + void 0 === t && (t = 0); + var i = (e = n(e))[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9]; + return (16 & e[t + 5]) >> 4 ? 20 + i : 10 + i + } + + function a(e, t) { + return void 0 === t && (t = 0), (e = n(e)).length - t < 10 || "ID3" !== r(e.subarray(t, t + 3)) ? t : a(e, t += i(e, t)) + } + var s = { + aac: function (e) { + var t = a(e); + return e.length >= t + 2 && 255 == (255 & e[t]) && 224 == (224 & e[t + 1]) && 16 == (22 & e[t + 1]) + }, + mp3: function (e) { + var t = a(e); + return e.length >= t + 2 && 255 == (255 & e[t]) && 224 == (224 & e[t + 1]) && 2 == (6 & e[t + 1]) + }, + webm: function (e) { + return 4 <= e.length && 26 == (255 & e[0]) && 69 == (255 & e[1]) && 223 == (255 & e[2]) && 163 == (255 & e[3]) + }, + mp4: function (e) { + return 8 <= e.length && /^(f|s)typ$/.test(r(e.subarray(4, 8))) && !/^ftyp3g$/.test(r(e.subarray(4, 10))) + }, + "3gp": function (e) { + return 10 <= e.length && /^ftyp3g$/.test(r(e.subarray(4, 10))) + }, + ts: function (e) { + if (e.length < 189 && 1 <= e.length) return 71 === e[0]; + for (var t = 0; t + 188 < e.length && t < 188;) { + if (71 === e[t] && 71 === e[t + 188]) return !0; + t += 1 + } + return !1 + }, + flac: function (e) { + return 4 <= e.length && /^fLaC$/.test(r(e.subarray(0, 4))) + }, + ogg: function (e) { + return 4 <= e.length && /^OggS$/.test(r(e.subarray(0, 4))) + } + }, + o = Object.keys(s).filter(function (e) { + return "ts" !== e + }).concat("ts"); + o.forEach(function (e) { + var t = s[e]; + s[e] = function (e) { + return t(n(e)) + } + }); + t.detectContainerForBytes = function (e) { + e = n(e); + for (var t = 0; t < o.length; t++) { + var i = o[t]; + if (s[i](e)) return i + } + return "" + }, t.getId3Offset = a, t.id3Size = i, t.isLikely = s, t.isLikelyFmp4MediaSegment = function (e) { + e = n(e); + for (var t = 0; t < e.length;) { + var i = (e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]) >>> 0; + if ("moof" === r(e.subarray(t + 4, t + 8))) return !0; + 0 == i || i + t > e.length ? t = e.length : t += i + } + return !1 + } + }); + t(Vo); + var qo = Vo.detectContainerForBytes, + Ho = Vo.getId3Offset, + Wo = (Vo.id3Size, Vo.isLikely, Vo.isLikelyFmp4MediaSegment), + zo = i(function (e, t) { + Object.defineProperty(t, "__esModule", { + value: !0 + }); + + function s(e) { + return e instanceof Uint8Array ? e : new Uint8Array(e && e.buffer || e, e && e.byteOffset || 0, e && e.byteLength || 0) + } + t.bytesToString = function (e) { + if (!e) return ""; + e = Array.prototype.slice.call(e); + var t = String.fromCharCode.apply(null, s(e)); + try { + return decodeURIComponent(escape(t)) + } catch (e) {} + return t + }, t.concatTypedArrays = function () { + for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]; + var n = t.reduce(function (e, t) { + return e += t && (t.byteLength || t.length) || 0 + }, 0), + r = new Uint8Array(n), + a = 0; + return t.forEach(function (e) { + e = s(e), r.set(e, a), a += e.byteLength + }), r + }, t.isTypedArray = function (e) { + return ArrayBuffer.isView(e) + }, t.stringToBytes = function (e, t) { + void 0 === t && (t = !1); + return "string" != typeof e && e && "function" == typeof e.toString && (e = e.toString()), "string" != typeof e ? [] : (t || (e = unescape(encodeURIComponent(e))), e.split("").map(function (e) { + return 255 & e.charCodeAt(0) + })) + }, t.toUint8 = s + }); + t(zo); + zo.bytesToString; + + function Go() { + this.init = function () { + var a = {}; + this.on = function (e, t) { + a[e] || (a[e] = []), a[e] = a[e].concat(t) + }, this.off = function (e, t) { + var i; + return !!a[e] && (i = a[e].indexOf(t), a[e] = a[e].slice(), a[e].splice(i, 1), -1 < i) + }, this.trigger = function (e) { + var t, i, n, r; + if (t = a[e]) + if (2 === arguments.length) + for (n = t.length, i = 0; i < n; ++i) t[i].call(this, arguments[1]); + else { + for (r = [], i = arguments.length, i = 1; i < arguments.length; ++i) r.push(arguments[i]); + for (n = t.length, i = 0; i < n; ++i) t[i].apply(this, r) + } + }, this.dispose = function () { + a = {} + } + } + } + var Xo = zo.concatTypedArrays, + Ko = (zo.isTypedArray, zo.stringToBytes), + Yo = zo.toUint8, + $o = 27, + Qo = 15, + Jo = 21; + Go.prototype.pipe = function (t) { + return this.on("data", function (e) { + t.push(e) + }), this.on("done", function (e) { + t.flush(e) + }), this.on("partialdone", function (e) { + t.partialFlush(e) + }), this.on("endedtimeline", function (e) { + t.endTimeline(e) + }), this.on("reset", function (e) { + t.reset(e) + }), t + }, Go.prototype.push = function (e) { + this.trigger("data", e) + }, Go.prototype.flush = function (e) { + this.trigger("done", e) + }, Go.prototype.partialFlush = function (e) { + this.trigger("partialdone", e) + }, Go.prototype.endTimeline = function (e) { + this.trigger("endedtimeline", e) + }, Go.prototype.reset = function (e) { + this.trigger("reset", e) + }; + + function Zo(e, t) { + var i = 1; + for (t < e && (i = -1); 4294967296 < Math.abs(t - e);) e += 8589934592 * i; + return e + } + new Go; + + function eu(e) { + var t = 31 & e[1]; + return t <<= 8, t |= e[2] + } + + function tu(e) { + return !!(64 & e[1]) + } + + function iu(e) { + var t = 0; + return 1 < (48 & e[3]) >>> 4 && (t += e[4] + 1), t + } + + function nu(e) { + switch (e) { + case 5: + return "slice_layer_without_partitioning_rbsp_idr"; + case 6: + return "sei_rbsp"; + case 7: + return "seq_parameter_set_rbsp"; + case 8: + return "pic_parameter_set_rbsp"; + case 9: + return "access_unit_delimiter_rbsp"; + default: + return null + } + } + + function ru(e, t) { + var i = e[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9]; + return i = 0 <= i ? i : 0, (16 & e[t + 5]) >> 4 ? i + 20 : i + 10 + } + + function au(e) { + return e[0] << 21 | e[1] << 14 | e[2] << 7 | e[3] + } + var su, ou, uu, lu, cu = { + parseType: function (e, t) { + var i = eu(e); + return 0 === i ? "pat" : i === t ? "pmt" : t ? "pes" : null + }, + parsePat: function (e) { + var t = tu(e), + i = 4 + iu(e); + return t && (i += e[i] + 1), (31 & e[i + 10]) << 8 | e[i + 11] + }, + parsePmt: function (e) { + var t = {}, + i = tu(e), + n = 4 + iu(e); + if (i && (n += e[n] + 1), 1 & e[n + 5]) { + var r; + r = 3 + ((15 & e[n + 1]) << 8 | e[n + 2]) - 4; + for (var a = 12 + ((15 & e[n + 10]) << 8 | e[n + 11]); a < r;) { + var s = n + a; + t[(31 & e[s + 1]) << 8 | e[s + 2]] = e[s], a += 5 + ((15 & e[s + 3]) << 8 | e[s + 4]) + } + return t + } + }, + parsePayloadUnitStartIndicator: tu, + parsePesType: function (e, t) { + switch (t[eu(e)]) { + case $o: + return "video"; + case Qo: + return "audio"; + case Jo: + return "timed-metadata"; + default: + return null + } + }, + parsePesTime: function (e) { + if (!tu(e)) return null; + var t = 4 + iu(e); + if (t >= e.byteLength) return null; + var i, n = null; + return 192 & (i = e[t + 7]) && ((n = {}).pts = (14 & e[t + 9]) << 27 | (255 & e[t + 10]) << 20 | (254 & e[t + 11]) << 12 | (255 & e[t + 12]) << 5 | (254 & e[t + 13]) >>> 3, n.pts *= 4, n.pts += (6 & e[t + 13]) >>> 1, n.dts = n.pts, 64 & i && (n.dts = (14 & e[t + 14]) << 27 | (255 & e[t + 15]) << 20 | (254 & e[t + 16]) << 12 | (255 & e[t + 17]) << 5 | (254 & e[t + 18]) >>> 3, n.dts *= 4, n.dts += (6 & e[t + 18]) >>> 1)), n + }, + videoPacketContainsKeyFrame: function (e) { + for (var t = 4 + iu(e), i = e.subarray(t), n = 0, r = 0, a = !1; r < i.byteLength - 3; r++) + if (1 === i[r + 2]) { + n = r + 5; + break + } for (; n < i.byteLength;) switch (i[n]) { + case 0: + if (0 !== i[n - 1]) { + n += 2; + break + } + if (0 !== i[n - 2]) { + n++; + break + } + for (r + 3 !== n - 2 && "slice_layer_without_partitioning_rbsp_idr" === nu(31 & i[r + 3]) && (a = !0); 1 !== i[++n] && n < i.length;); + r = n - 2, n += 3; + break; + case 1: + if (0 !== i[n - 1] || 0 !== i[n - 2]) { + n += 3; + break + } + "slice_layer_without_partitioning_rbsp_idr" === nu(31 & i[r + 3]) && (a = !0), r = n - 2, n += 3; + break; + default: + n += 3 + } + return i = i.subarray(r), n -= r, r = 0, i && 3 < i.byteLength && "slice_layer_without_partitioning_rbsp_idr" === nu(31 & i[r + 3]) && (a = !0), a + } + }, + du = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350], + hu = { + isLikelyAacData: function (e) { + var t = function e(t, i) { + return t.length - i < 10 || t[i] !== "I".charCodeAt(0) || t[i + 1] !== "D".charCodeAt(0) || t[i + 2] !== "3".charCodeAt(0) ? i : e(t, i += ru(t, i)) + }(e, 0); + return e.length >= t + 2 && 255 == (255 & e[t]) && 240 == (240 & e[t + 1]) && 16 == (22 & e[t + 1]) + }, + parseId3TagSize: ru, + parseAdtsSize: function (e, t) { + var i = (224 & e[t + 5]) >> 5, + n = e[t + 4] << 3; + return 6144 & e[t + 3] | n | i + }, + parseType: function (e, t) { + return e[t] === "I".charCodeAt(0) && e[t + 1] === "D".charCodeAt(0) && e[t + 2] === "3".charCodeAt(0) ? "timed-metadata" : !0 & e[t] && 240 == (240 & e[t + 1]) ? "audio" : null + }, + parseSampleRate: function (e) { + for (var t = 0; t + 5 < e.length;) { + if (255 === e[t] && 240 == (246 & e[t + 1])) return du[(60 & e[t + 2]) >>> 2]; + t++ + } + return null + }, + parseAacTimestamp: function (e) { + var t, i, n; + t = 10, 64 & e[5] && (t += 4, t += au(e.subarray(10, 14))); + do { + if ((i = au(e.subarray(t + 4, t + 8))) < 1) return null; + if ("PRIV" === String.fromCharCode(e[t], e[t + 1], e[t + 2], e[t + 3])) { + n = e.subarray(t + 10, t + i + 10); + for (var r = 0; r < n.byteLength; r++) + if (0 === n[r]) { + if ("com.apple.streaming.transportStreamTimestamp" !== unescape(function (e, t, i) { + var n, r = ""; + for (n = t; n < i; n++) r += "%" + ("00" + e[n].toString(16)).slice(-2); + return r + }(n, 0, r))) break; + var a = n.subarray(r + 1), + s = (1 & a[3]) << 30 | a[4] << 22 | a[5] << 14 | a[6] << 6 | a[7] >>> 2; + return s *= 4, s += 3 & a[7] + } + } + t += 10, t += i + } while (t < e.byteLength); + return null + } + }, + pu = 9e4, + fu = (su = function (e) { + return 9e4 * e + }, ou = function (e, t) { + return e * t + }, uu = function (e) { + return e / 9e4 + }, lu = function (e, t) { + return e / t + }, pu), + mu = Zo, + gu = {}; + gu.ts = cu, gu.aac = hu; + + function vu(e, t, i) { + for (var n, r, a, s, o = 0, u = Cu, l = !1; u <= e.byteLength;) + if (71 !== e[o] || 71 !== e[u] && u !== e.byteLength) o++, u++; + else { + switch (n = e.subarray(o, u), gu.ts.parseType(n, t.pid)) { + case "pes": + r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), "audio" === r && a && (s = gu.ts.parsePesTime(n)) && (s.type = "audio", i.audio.push(s), l = !0) + } + if (l) break; + o += Cu, u += Cu + } for (o = (u = e.byteLength) - Cu, l = !1; 0 <= o;) + if (71 !== e[o] || 71 !== e[u] && u !== e.byteLength) o--, u--; + else { + switch (n = e.subarray(o, u), gu.ts.parseType(n, t.pid)) { + case "pes": + r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), "audio" === r && a && (s = gu.ts.parsePesTime(n)) && (s.type = "audio", i.audio.push(s), l = !0) + } + if (l) break; + o -= Cu, u -= Cu + } + } + + function yu(e, t, i) { + for (var n, r, a, s, o, u, l, c = 0, d = Cu, h = !1, p = { + data: [], + size: 0 + }; d < e.byteLength;) + if (71 !== e[c] || 71 !== e[d]) c++, d++; + else { + switch (n = e.subarray(c, d), gu.ts.parseType(n, t.pid)) { + case "pes": + if (r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), "video" === r && (a && !h && (s = gu.ts.parsePesTime(n)) && (s.type = "video", i.video.push(s), h = !0), !i.firstKeyFrame)) { + if (a && 0 !== p.size) { + for (o = new Uint8Array(p.size), u = 0; p.data.length;) l = p.data.shift(), o.set(l, u), u += l.byteLength; + if (gu.ts.videoPacketContainsKeyFrame(o)) { + var f = gu.ts.parsePesTime(o); + f && (i.firstKeyFrame = f, i.firstKeyFrame.type = "video") + } + p.size = 0 + } + p.data.push(n), p.size += n.byteLength + } + } + if (h && i.firstKeyFrame) break; + c += Cu, d += Cu + } for (c = (d = e.byteLength) - Cu, h = !1; 0 <= c;) + if (71 !== e[c] || 71 !== e[d]) c--, d--; + else { + switch (n = e.subarray(c, d), gu.ts.parseType(n, t.pid)) { + case "pes": + r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), "video" === r && a && (s = gu.ts.parsePesTime(n)) && (s.type = "video", i.video.push(s), h = !0) + } + if (h) break; + c -= Cu, d -= Cu + } + } + + function _u(e) { + var t = { + pid: null, + table: null + }, + i = {}; + for (var n in function (e, t) { + for (var i, n = 0, r = Cu; r < e.byteLength;) + if (71 !== e[n] || 71 !== e[r]) n++, r++; + else { + switch (i = e.subarray(n, r), gu.ts.parseType(i, t.pid)) { + case "pat": + t.pid || (t.pid = gu.ts.parsePat(i)); + break; + case "pmt": + t.table || (t.table = gu.ts.parsePmt(i)) + } + if (t.pid && t.table) return; + n += Cu, r += Cu + } + }(e, t), t.table) { + if (t.table.hasOwnProperty(n)) switch (t.table[n]) { + case $o: + i.video = [], yu(e, t, i), 0 === i.video.length && delete i.video; + break; + case Qo: + i.audio = [], vu(e, t, i), 0 === i.audio.length && delete i.audio + } + } + return i + } + var bu, Tu, Su, ku = pu, + Cu = 188, + Eu = function (e, t) { + var i; + return (i = gu.aac.isLikelyAacData(e) ? function (e) { + for (var t, i = !1, n = 0, r = null, a = null, s = 0, o = 0; 3 <= e.length - o;) { + switch (gu.aac.parseType(e, o)) { + case "timed-metadata": + if (e.length - o < 10) { + i = !0; + break + } + if ((s = gu.aac.parseId3TagSize(e, o)) > e.length) { + i = !0; + break + } + null === a && (t = e.subarray(o, o + s), a = gu.aac.parseAacTimestamp(t)), o += s; + break; + case "audio": + if (e.length - o < 7) { + i = !0; + break + } + if ((s = gu.aac.parseAdtsSize(e, o)) > e.length) { + i = !0; + break + } + null === r && (t = e.subarray(o, o + s), r = gu.aac.parseSampleRate(t)), n++, o += s; + break; + default: + o++ + } + if (i) return null + } + if (null === r || null === a) return null; + var u = ku / r; + return { + audio: [{ + type: "audio", + dts: a, + pts: a + }, { + type: "audio", + dts: a + 1024 * n * u, + pts: a + 1024 * n * u + }] + } + }(e) : _u(e)) && (i.audio || i.video) ? (function (e, t) { + if (e.audio && e.audio.length) { + var i = t; + "undefined" == typeof i && (i = e.audio[0].dts), e.audio.forEach(function (e) { + e.dts = mu(e.dts, i), e.pts = mu(e.pts, i), e.dtsTime = e.dts / ku, e.ptsTime = e.pts / ku + }) + } + if (e.video && e.video.length) { + var n = t; + if ("undefined" == typeof n && (n = e.video[0].dts), e.video.forEach(function (e) { + e.dts = mu(e.dts, n), e.pts = mu(e.pts, n), e.dtsTime = e.dts / ku, e.ptsTime = e.pts / ku + }), e.firstKeyFrame) { + var r = e.firstKeyFrame; + r.dts = mu(r.dts, n), r.pts = mu(r.pts, n), r.dtsTime = r.dts / ku, r.ptsTime = r.dts / ku + } + } + }(i, t), i) : null + }, + wu = function (e) { + return e >>> 0 + }, + Iu = function (e) { + var t = ""; + return t += String.fromCharCode(e[0]), t += String.fromCharCode(e[1]), t += String.fromCharCode(e[2]), t += String.fromCharCode(e[3]) + }, + Au = wu, + xu = function e(t, i) { + var n, r, a, s, o, u = []; + if (!i.length) return null; + for (n = 0; n < t.byteLength;) r = Au(t[n] << 24 | t[n + 1] << 16 | t[n + 2] << 8 | t[n + 3]), a = Iu(t.subarray(n + 4, n + 8)), s = 1 < r ? n + r : t.byteLength, a === i[0] && (1 === i.length ? u.push(t.subarray(n + 8, s)) : (o = e(t.subarray(n + 8, s), i.slice(1))).length && (u = u.concat(o))), n = s; + return u + }, + Pu = function (e) { + var t, i = new DataView(e.buffer, e.byteOffset, e.byteLength), + n = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + trackId: i.getUint32(4) + }, + r = 1 & n.flags[2], + a = 2 & n.flags[2], + s = 8 & n.flags[2], + o = 16 & n.flags[2], + u = 32 & n.flags[2], + l = 65536 & n.flags[0], + c = 131072 & n.flags[0]; + return t = 8, r && (t += 4, n.baseDataOffset = i.getUint32(12), t += 4), a && (n.sampleDescriptionIndex = i.getUint32(t), t += 4), s && (n.defaultSampleDuration = i.getUint32(t), t += 4), o && (n.defaultSampleSize = i.getUint32(t), t += 4), u && (n.defaultSampleFlags = i.getUint32(t)), l && (n.durationIsEmpty = !0), !r && c && (n.baseDataOffsetIsMoof = !0), n + }, + Lu = function (e) { + return { + isLeading: (12 & e[0]) >>> 2, + dependsOn: 3 & e[0], + isDependedOn: (192 & e[1]) >>> 6, + hasRedundancy: (48 & e[1]) >>> 4, + paddingValue: (14 & e[1]) >>> 1, + isNonSyncSample: 1 & e[1], + degradationPriority: e[2] << 8 | e[3] + } + }, + Ou = function (e) { + var t, i = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + samples: [] + }, + n = new DataView(e.buffer, e.byteOffset, e.byteLength), + r = 1 & i.flags[2], + a = 4 & i.flags[2], + s = 1 & i.flags[1], + o = 2 & i.flags[1], + u = 4 & i.flags[1], + l = 8 & i.flags[1], + c = n.getUint32(4), + d = 8; + for (r && (i.dataOffset = n.getInt32(d), d += 4), a && c && (t = { + flags: Lu(e.subarray(d, d + 4)) + }, d += 4, s && (t.duration = n.getUint32(d), d += 4), o && (t.size = n.getUint32(d), d += 4), l && (1 === i.version ? t.compositionTimeOffset = n.getInt32(d) : t.compositionTimeOffset = n.getUint32(d), d += 4), i.samples.push(t), c--); c--;) t = {}, s && (t.duration = n.getUint32(d), d += 4), o && (t.size = n.getUint32(d), d += 4), u && (t.flags = Lu(e.subarray(d, d + 4)), d += 4), l && (1 === i.version ? t.compositionTimeOffset = n.getInt32(d) : t.compositionTimeOffset = n.getUint32(d), d += 4), i.samples.push(t); + return i + }, + Du = wu, + Mu = function (e) { + var t = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + baseMediaDecodeTime: Du(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]) + }; + return 1 === t.version && (t.baseMediaDecodeTime *= Math.pow(2, 32), t.baseMediaDecodeTime += Du(e[8] << 24 | e[9] << 16 | e[10] << 8 | e[11])), t + }, + Ru = wu, + Nu = function (e) { + return ("00" + e.toString(16)).slice(-2) + }; + bu = function (r, e) { + var t, i, n; + return t = xu(e, ["moof", "traf"]), i = [].concat.apply([], t.map(function (n) { + return xu(n, ["tfhd"]).map(function (e) { + var t, i; + return t = Ru(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]), i = r[t] || 9e4, (xu(n, ["tfdt"]).map(function (e) { + var t, i; + return t = e[0], i = Ru(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]), 1 === t && (i *= Math.pow(2, 32), i += Ru(e[8] << 24 | e[9] << 16 | e[10] << 8 | e[11])), i + })[0] || 1 / 0) / i + }) + })), n = Math.min.apply(null, i), isFinite(n) ? n : 0 + }, Tu = function (e) { + var t = xu(e, ["moov", "trak"]), + h = []; + return t.forEach(function (e) { + var t, i, n = {}, + r = xu(e, ["tkhd"])[0]; + r && (i = (t = new DataView(r.buffer, r.byteOffset, r.byteLength)).getUint8(0), n.id = 0 === i ? t.getUint32(12) : t.getUint32(20)); + var a = xu(e, ["mdia", "hdlr"])[0]; + if (a) { + var s = Iu(a.subarray(8, 12)); + n.type = "vide" === s ? "video" : "soun" === s ? "audio" : s + } + var o = xu(e, ["mdia", "minf", "stbl", "stsd"])[0]; + if (o) { + var u = o.subarray(8); + n.codec = Iu(u.subarray(4, 8)); + var l, c = xu(u, [n.codec])[0]; + c && (/^[a-z]vc[1-9]$/i.test(n.codec) ? (l = c.subarray(78), "avcC" === Iu(l.subarray(4, 8)) && 11 < l.length ? (n.codec += ".", n.codec += Nu(l[9]), n.codec += Nu(l[10]), n.codec += Nu(l[11])) : n.codec = "avc1.4d400d") : /^mp4[a,v]$/i.test(n.codec) && (l = c.subarray(28), "esds" === Iu(l.subarray(4, 8)) && 20 < l.length && 0 !== l[19] ? (n.codec += "." + Nu(l[19]), n.codec += "." + Nu(l[20] >>> 2 & 63).replace(/^0/, "")) : n.codec = "mp4a.40.2")) + } + var d = xu(e, ["mdia", "mdhd"])[0]; + d && (n.timescale = Su(d)), h.push(n) + }), h + }; + var Uu = bu, + Fu = Tu, + Bu = (Su = function (e) { + var t = 0 === e[0] ? 12 : 20; + return Ru(e[t] << 24 | e[1 + t] << 16 | e[2 + t] << 8 | e[3 + t]) + }, i(function (e, t) { + function i(e) { + return e && "object" == typeof e && "default" in e ? e : { + default: e + } + } + Object.defineProperty(t, "__esModule", { + value: !0 + }); + + function r(e) { + return e ? e.replace(/avc1\.(\d+)\.(\d+)/i, function (e, t, i) { + return "avc1." + ("00" + Number(t).toString(16)).slice(-2) + "00" + ("00" + Number(i).toString(16)).slice(-2) + }) : e + } + + function n(e) { + return e.map(r) + } + + function a(e) { + void 0 === e && (e = ""); + var t = e.split(","), + a = {}; + return t.forEach(function (r) { + r = r.trim(), ["video", "audio"].forEach(function (e) { + var t = l[e].exec(r.toLowerCase()); + if (t && !(t.length <= 1)) { + var i = r.substring(0, t[1].length), + n = r.replace(i, ""); + a[e] = { + type: i, + details: n + } + } + }) + }), a + } + + function s(e) { + return void 0 === e && (e = ""), l.audio.test(e.trim().toLowerCase()) + } + + function o(e) { + if (e && "string" == typeof e) { + var t = e.toLowerCase().split(",").map(function (e) { + return r(e.trim()) + }), + i = "video"; + 1 === t.length && s(t[0]) && (i = "audio"); + var n = "mp4"; + return t.every(function (e) { + return l.mp4.test(e) + }) ? n = "mp4" : t.every(function (e) { + return l.webm.test(e) + }) ? n = "webm" : t.every(function (e) { + return l.ogg.test(e) + }) && (n = "ogg"), i + "/" + n + ';codecs="' + e + '"' + } + } + var u = i(T), + l = { + mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v)/, + webm: /^(vp0?[89]|av0?1|opus|vorbis)/, + ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/, + video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/, + audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3)/, + muxerVideo: /^(avc0?1)/, + muxerAudio: /^(mp4a)/ + }; + t.DEFAULT_AUDIO_CODEC = "mp4a.40.2", t.DEFAULT_VIDEO_CODEC = "avc1.4d400d", t.browserSupportsCodec = function (e) { + return void 0 === e && (e = ""), u.default.MediaSource && u.default.MediaSource.isTypeSupported && u.default.MediaSource.isTypeSupported(o(e)) || !1 + }, t.codecsFromDefault = function (e, t) { + if (!e.mediaGroups.AUDIO || !t) return null; + var i = e.mediaGroups.AUDIO[t]; + if (!i) return null; + for (var n in i) { + var r = i[n]; + if (r.default && r.playlists) return a(r.playlists[0].attributes.CODECS) + } + return null + }, t.getMimeForCodec = o, t.isAudioCodec = s, t.isVideoCodec = function (e) { + return void 0 === e && (e = ""), l.video.test(e.trim().toLowerCase()) + }, t.mapLegacyAvcCodecs = function (e) { + return e.replace(/avc1\.(\d+)\.(\d+)/i, function (e) { + return n([e])[0] + }) + }, t.muxerSupportsCodec = function (e) { + return void 0 === e && (e = ""), e.toLowerCase().split(",").every(function (e) { + return e = e.trim(), l.muxerVideo.test(e) || l.muxerAudio.test(e) + }) + }, t.parseCodecs = a, t.translateLegacyCodec = r, t.translateLegacyCodecs = n + })); + t(Bu); + + function ju(e, t, i) { + return e && i && i.responseURL && t !== i.responseURL ? i.responseURL : t + } + + function Vu(e, t) { + return e + "-" + t + } + + function qu(e) { + var t = e.manifestString, + i = e.customTagParsers, + n = void 0 === i ? [] : i, + r = e.customTagMappers, + a = void 0 === r ? [] : r, + s = new Ea; + return n.forEach(function (e) { + return s.addParser(e) + }), a.forEach(function (e) { + return s.addTagMapper(e) + }), s.push(t), s.end(), s.manifest + } + + function Hu(r, a) { + ["AUDIO", "SUBTITLES"].forEach(function (e) { + for (var t in r.mediaGroups[e]) + for (var i in r.mediaGroups[e][t]) { + var n = r.mediaGroups[e][t][i]; + a(n, e, t, i) + } + }) + } + + function Wu(e) { + var t = e.playlist, + i = e.uri, + n = e.id; + t.id = n, i && (t.uri = i), t.attributes = t.attributes || {} + } + + function zu(s, e) { + s.uri = e; + for (var t = 0; t < s.playlists.length; t++) + if (!s.playlists[t].uri) { + var i = "placeholder-uri-" + t; + s.playlists[t].uri = i + } Hu(s, function (e, t, i, n) { + if (e.playlists && e.playlists.length && !e.playlists[0].uri) { + var r = "placeholder-uri-" + t + "-" + i + "-" + n, + a = Vu(0, r); + e.playlists[0].uri = r, e.playlists[0].id = a, s.playlists[a] = e.playlists[0], s.playlists[r] = e.playlists[0] + } + }), + function (e) { + for (var t = e.playlists.length; t--;) { + var i = e.playlists[t]; + Wu({ + playlist: i, + id: Vu(t, i.uri) + }), i.resolvedUri = $l(e.uri, i.uri), e.playlists[i.id] = i, (e.playlists[i.uri] = i).attributes.BANDWIDTH || Ql.warn("Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.") + } + }(s), + function (t) { + Hu(t, function (e) { + e.uri && (e.resolvedUri = $l(t.uri, e.uri)) + }) + }(s) + } + + function Gu(e, t) { + e.resolvedUri || (e.resolvedUri = $l(t, e.uri)), e.key && !e.key.resolvedUri && (e.key.resolvedUri = $l(t, e.key.uri)), e.map && !e.map.resolvedUri && (e.map.resolvedUri = $l(t, e.map.uri)) + } + + function Xu(e, t) { + var i = Jl(e, {}), + n = i.playlists[t.id]; + if (!n) return null; + if (n.segments && t.segments && n.segments.length === t.segments.length && n.endList === t.endList && n.mediaSequence === t.mediaSequence) return null; + var r = Jl(n, t); + n.segments && (r.segments = function (e, t, i) { + var n = t.slice(); + i = i || 0; + for (var r = Math.min(e.length, t.length + i), a = i; a < r; a++) n[a - i] = Jl(e[a], n[a - i]); + return n + }(n.segments, t.segments, t.mediaSequence - n.mediaSequence)), r.segments.forEach(function (e) { + Gu(e, r.resolvedUri) + }); + for (var a = 0; a < i.playlists.length; a++) i.playlists[a].id === t.id && (i.playlists[a] = r); + return i.playlists[t.id] = r, i.playlists[t.uri] = r, i + } + + function Ku(e, t) { + var i = e.segments[e.segments.length - 1]; + return t && i && i.duration ? 1e3 * i.duration : 500 * (e.targetDuration || 10) + } + + function Yu(e, t) { + var i, n = []; + if (e && e.length) + for (i = 0; i < e.length; i++) t(e.start(i), e.end(i)) && n.push([e.start(i), e.end(i)]); + return da.createTimeRanges(n) + } + + function $u(e, i) { + return Yu(e, function (e, t) { + return e - .1 <= i && i <= t + .1 + }) + } + + function Qu(e, t) { + return Yu(e, function (e) { + return t <= e - ec + }) + } + + function Ju(e) { + var t = []; + if (!e || !e.length) return ""; + for (var i = 0; i < e.length; i++) t.push(e.start(i) + " => " + e.end(i)); + return t.join(", ") + } + + function Zu(e) { + for (var t = [], i = 0; i < e.length; i++) t.push({ + start: e.start(i), + end: e.end(i) + }); + return t + } + + function el(e, t, i) { + if ("undefined" == typeof t && (t = e.mediaSequence + e.segments.length), t < e.mediaSequence) return 0; + var n = function (e, t) { + var i = 0, + n = t - e.mediaSequence, + r = e.segments[n]; + if (r) { + if ("undefined" != typeof r.start) return { + result: r.start, + precise: !0 + }; + if ("undefined" != typeof r.end) return { + result: r.end - r.duration, + precise: !0 + } + } + for (; n--;) { + if ("undefined" != typeof (r = e.segments[n]).end) return { + result: i + r.end, + precise: !0 + }; + if (i += r.duration, "undefined" != typeof r.start) return { + result: i + r.start, + precise: !0 + } + } + return { + result: i, + precise: !1 + } + }(e, t); + if (n.precise) return n.result; + var r = function (e, t) { + for (var i, n = 0, r = t - e.mediaSequence; r < e.segments.length; r++) { + if ("undefined" != typeof (i = e.segments[r]).start) return { + result: i.start - n, + precise: !0 + }; + if (n += i.duration, "undefined" != typeof i.end) return { + result: i.end - n, + precise: !0 + } + } + return { + result: -1, + precise: !1 + } + }(e, t); + return r.precise ? r.result : n.result + i + } + + function tl(e, t, i) { + if (!e) return 0; + if ("number" != typeof i && (i = 0), "undefined" == typeof t) { + if (e.totalDuration) return e.totalDuration; + if (!e.endList) return T.Infinity + } + return el(e, t, i) + } + + function il(e, t, i) { + var n = 0; + if (i < t) { + var r = [i, t]; + t = r[0], i = r[1] + } + if (t < 0) { + for (var a = t; a < Math.min(0, i); a++) n += e.targetDuration; + t = 0 + } + for (var s = t; s < i; s++) n += e.segments[s].duration; + return n + } + + function nl(e, t) { + if (!e.segments.length) return 0; + var i = e.segments.length, + n = e.segments[i - 1].duration || e.targetDuration, + r = "number" == typeof t ? t : n + 2 * e.targetDuration; + if (0 === r) return i; + for (var a = 0; i-- && !(r <= (a += e.segments[i].duration));); + return Math.max(0, i) + } + + function rl(e, t, i, n) { + if (!e || !e.segments) return null; + if (e.endList) return tl(e); + if (null === t) return null; + t = t || 0; + var r = i ? nl(e, n) : e.segments.length; + return el(e, e.mediaSequence + r, t) + } + + function al(e) { + return e.excludeUntil && e.excludeUntil > Date.now() + } + + function sl(e) { + return e.excludeUntil && e.excludeUntil === 1 / 0 + } + + function ol(e) { + var t = al(e); + return !e.disabled && !t + } + + function ul(e, t) { + return t.attributes && t.attributes[e] + } + + function ll(e, t) { + if (1 === e.playlists.length) return !0; + var i = t.attributes.BANDWIDTH || Number.MAX_VALUE; + return 0 === e.playlists.filter(function (e) { + return !!ol(e) && (e.attributes.BANDWIDTH || 0) < i + }).length + } + + function cl(e, t, i, n) { + var r = "arraybuffer" === e.responseType ? e.response : e.responseText; + !t && r && (e.responseTime = Date.now(), e.roundTripTime = e.responseTime - e.requestTime, e.bytesReceived = r.byteLength || r.length, e.bandwidth || (e.bandwidth = Math.floor(e.bytesReceived / e.roundTripTime * 8 * 1e3))), i.headers && (e.responseHeaders = i.headers), t && "ETIMEDOUT" === t.code && (e.timedout = !0), t || e.aborted || 200 === i.statusCode || 206 === i.statusCode || 0 === i.statusCode || (t = new Error("XHR Failed with a response of: " + (e && (r || e.responseText)))), n(t, e) + } + + function dl() { + return function e(t, i) { + t = rc({ + timeout: 45e3 + }, t); + var n = e.beforeRequest || da.Vhs.xhr.beforeRequest; + if (n && "function" == typeof n) { + var r = n(t); + r && (t = r) + } + var a = nc(t, function (e, t) { + return cl(a, e, t, i) + }), + s = a.abort; + return a.abort = function () { + return a.aborted = !0, s.apply(a, arguments) + }, a.uri = t.uri, a.requestTime = Date.now(), a + } + } + + function hl(e) { + var t = {}; + return e.byterange && (t.Range = function (e) { + var t = e.offset + e.length - 1; + return "bytes=" + e.offset + "-" + t + }(e.byterange)), t + } + + function pl(e, t) { + var i = e.toString(16); + return "00".substring(0, 2 - i.length) + i + (t % 2 ? " " : "") + } + + function fl(e) { + return 32 <= e && e < 126 ? String.fromCharCode(e) : "." + } + + function ml(i) { + var n = {}; + return Object.keys(i).forEach(function (e) { + var t = i[e]; + ArrayBuffer.isView(t) ? n[e] = { + bytes: t.buffer, + byteOffset: t.byteOffset, + byteLength: t.byteLength + } : n[e] = t + }), n + } + + function gl(e) { + var t = e.byterange || { + length: 1 / 0, + offset: 0 + }; + return [t.length, t.offset, e.resolvedUri].join(",") + } + + function vl(e) { + return e.resolvedUri + } + + function yl(e) { + for (var t = Array.prototype.slice.call(e), i = "", n = 0; n < t.length / 16; n++) i += t.slice(16 * n, 16 * n + 16).map(pl).join("") + " " + t.slice(16 * n, 16 * n + 16).map(fl).join("") + "\n"; + return i + } + + function _l(e) { + var t = e.playlist, + i = e.time, + n = void 0 === i ? void 0 : i, + r = e.callback; + if (!r) throw new Error("getProgramTime: callback must be provided"); + if (!t || void 0 === n) return r({ + message: "getProgramTime: playlist and time must be provided" + }); + var a = function (e, t) { + if (!t || !t.segments || 0 === t.segments.length) return null; + for (var i, n = 0, r = 0; r < t.segments.length && !(e <= (n = (i = t.segments[r]).videoTimingInfo ? i.videoTimingInfo.transmuxedPresentationEnd : n + i.duration)); r++); + var a = t.segments[t.segments.length - 1]; + if (a.videoTimingInfo && a.videoTimingInfo.transmuxedPresentationEnd < e) return null; + if (n < e) { + if (e > n + .25 * a.duration) return null; + i = a + } + return { + segment: i, + estimatedStart: i.videoTimingInfo ? i.videoTimingInfo.transmuxedPresentationStart : n - i.duration, + type: i.videoTimingInfo ? "accurate" : "estimate" + } + }(n, t); + if (!a) return r({ + message: "valid programTime was not found" + }); + if ("estimate" === a.type) return r({ + message: "Accurate programTime could not be determined. Please seek to e.seekTime and try again", + seekTime: a.estimatedStart + }); + var s = { + mediaSeconds: n + }, + o = function (e, t) { + if (!t.dateTimeObject) return null; + var i = t.videoTimingInfo.transmuxerPrependedSeconds, + n = e - (t.videoTimingInfo.transmuxedPresentationStart + i); + return new Date(t.dateTimeObject.getTime() + 1e3 * n) + }(n, a.segment); + return o && (s.programDateTime = o.toISOString()), r(null, s) + } + + function bl(e) { + var t = e.programTime, + i = e.playlist, + n = e.retryCount, + r = void 0 === n ? 2 : n, + a = e.seekTo, + s = e.pauseAfterSeek, + o = void 0 === s || s, + u = e.tech, + l = e.callback; + if (!l) throw new Error("seekToProgramTime: callback must be provided"); + if ("undefined" == typeof t || !i || !a) return l({ + message: "seekToProgramTime: programTime, seekTo and playlist must be provided" + }); + if (!i.endList && !u.hasStarted_) return l({ + message: "player must be playing a live stream to start buffering" + }); + if (! function (e) { + if (!e.segments || 0 === e.segments.length) return !1; + for (var t = 0; t < e.segments.length; t++) { + if (!e.segments[t].dateTimeObject) return !1 + } + return !0 + }(i)) return l({ + message: "programDateTime tags must be provided in the manifest " + i.resolvedUri + }); + var c = function (e, t) { + var i; + try { + i = new Date(e) + } catch (e) { + return null + } + if (!t || !t.segments || 0 === t.segments.length) return null; + var n = t.segments[0]; + if (i < n.dateTimeObject) return null; + for (var r = 0; r < t.segments.length - 1; r++) { + if (n = t.segments[r], i < t.segments[r + 1].dateTimeObject) break + } + var a = t.segments[t.segments.length - 1], + s = a.dateTimeObject, + o = a.videoTimingInfo ? function (e) { + return e.transmuxedPresentationEnd - e.transmuxedPresentationStart - e.transmuxerPrependedSeconds + }(a.videoTimingInfo) : a.duration + .25 * a.duration; + return new Date(s.getTime() + 1e3 * o) < i ? null : (s < i && (n = a), { + segment: n, + estimatedStart: n.videoTimingInfo ? n.videoTimingInfo.transmuxedPresentationStart : ic.duration(t, t.mediaSequence + t.segments.indexOf(n)), + type: n.videoTimingInfo ? "accurate" : "estimate" + }) + }(t, i); + if (!c) return l({ + message: t + " was not found in the stream" + }); + var d = c.segment, + h = function (e, t) { + var i, n; + try { + i = new Date(e), n = new Date(t) + } catch (e) {} + var r = i.getTime(); + return (n.getTime() - r) / 1e3 + }(d.dateTimeObject, t); + if ("estimate" === c.type) return 0 === r ? l({ + message: t + " is not buffered yet. Try again" + }) : (a(c.estimatedStart + h), void u.one("seeked", function () { + bl({ + programTime: t, + playlist: i, + retryCount: r - 1, + seekTo: a, + pauseAfterSeek: o, + tech: u, + callback: l + }) + })); + var p = d.start + h; + u.one("seeked", function () { + return l(null, u.currentTime()) + }), o && u.pause(), a(p) + } + + function Tl(e, t) { + if (4 === e.readyState) return t() + } + + function Sl(e) { + var t = e.masterXml, + i = e.srcUrl, + n = e.clientOffset, + r = e.sidxMapping, + a = Eo(t, { + manifestUri: i, + clientOffset: n, + sidxMapping: r + }); + return zu(a, i), a + } + + function kl(e, t) { + for (var s = !0, o = sc(e, { + duration: t.duration, + minimumUpdatePeriod: t.minimumUpdatePeriod + }), i = 0; i < t.playlists.length; i++) { + var n = Xu(o, t.playlists[i]); + n && (o = n, s = !1) + } + return Hu(t, function (e, t, i, n) { + if (e.playlists && e.playlists.length) { + var r = e.playlists[0].id, + a = Xu(o, e.playlists[0]); + a && ((o = a).mediaGroups[t][i][n].playlists[0] = o.playlists[r], s = !1) + } + }), t.minimumUpdatePeriod !== e.minimumUpdatePeriod && (s = !1), s ? null : o + } + + function Cl(e) { + var t = e.byterange.offset + e.byterange.length - 1; + return e.uri + "-" + e.byterange.offset + "-" + t + } + + function El(e, t) { + var i, n, r = {}; + for (var a in e) { + var s = e[a].sidx; + if (s) { + var o = Cl(s); + if (!t[o]) break; + var u = t[o].sidxInfo; + i = u, n = s, (Boolean(!i.map && !n.map) || Boolean(i.map && n.map && i.map.byterange.offset === n.map.byterange.offset && i.map.byterange.length === n.map.byterange.length)) && i.uri === n.uri && i.byterange.offset === n.byterange.offset && i.byterange.length === n.byterange.length && (r[o] = t[o]) + } + } + return r + } + + function wl(o, e, u, l, t, c) { + var d = { + uri: ju(t.handleManifestRedirects, e.resolvedUri), + byterange: e.byterange, + playlist: u + }, + h = da.mergeOptions(d, { + responseType: "arraybuffer", + headers: hl(d) + }); + return function (e, t, r) { + function a(e, t, i, n) { + return t.abort(), u = !0, r(e, t, i, n) + } + + function i(e, t) { + if (!u) { + if (e) return a(e, t, "", o); + var i = t.responseText.substring(o && o.byteLength || 0, t.responseText.length); + if (o = Xo(o, Ko(i, !0)), s = s || Ho(o), o.length < 10 || s && o.length < s + 2) return Tl(t, function () { + return a(e, t, "", o) + }); + var n = qo(o); + return "ts" === n && o.length < 188 ? Tl(t, function () { + return a(e, t, "", o) + }) : !n && o.length < 376 ? Tl(t, function () { + return a(e, t, "", o) + }) : a(null, t, n, o) + } + } + var s, o = [], + u = !1, + n = t({ + uri: e, + beforeSend: function (t) { + t.overrideMimeType("text/plain; charset=x-user-defined"), t.addEventListener("progress", function (e) { + e.total, e.loaded; + return cl(t, null, { + statusCode: t.status + }, i) + }) + } + }, function (e, t) { + return cl(n, e, t, i) + }); + return n + }(d.uri, l, function (e, t, i, n) { + if (e) return c(e, t); + if (!i || "mp4" !== i) return c({ + status: t.status, + message: "Unsupported " + (i || "unknown") + " container type for sidx segment at URL: " + d.uri, + response: "", + playlist: u, + internal: !0, + blacklistDuration: 1 / 0, + code: 2 + }, t); + var r = d.byterange, + a = r.offset, + s = r.length; + if (n.length >= s + a) return c(e, { + response: n.subarray(a, a + s), + status: t.status, + uri: t.uri + }); + o.request = l(h, c) + }) + } + + function Il(e) { + for (var t = new Uint8Array(new ArrayBuffer(e.length)), i = 0; i < e.length; i++) t[i] = e.charCodeAt(i); + return t.buffer + } + + function Al(e) { + var t = e.transmuxer, + i = e.bytes, + n = e.audioAppendStart, + r = e.gopsToAlignWith, + a = e.isPartial, + s = e.remux, + o = e.onData, + u = e.onTrackInfo, + l = e.onAudioTimingInfo, + c = e.onVideoTimingInfo, + d = e.onVideoSegmentTimingInfo, + h = e.onId3, + p = e.onCaptions, + f = e.onDone, + m = { + isPartial: a, + buffer: [] + }; + if (t.onmessage = function (e) { + Bl && ("data" === e.data.action && function (e, t, i) { + var n = e.data.segment, + r = n.type, + a = n.initSegment, + s = n.captions, + o = n.captionStreams, + u = n.metadata, + l = n.videoFrameDtsTime, + c = n.videoFramePtsTime; + t.buffer.push({ + captions: s, + captionStreams: o, + metadata: u + }); + var d = e.data.segment.boxes || { + data: e.data.segment.data + }, + h = { + type: r, + data: new Uint8Array(d.data, d.data.byteOffset, d.data.byteLength), + initSegment: new Uint8Array(a.data, a.byteOffset, a.byteLength) + }; + "undefined" != typeof l && (h.videoFrameDtsTime = l), "undefined" != typeof c && (h.videoFramePtsTime = c), i(h) + }(e, m, o), "trackinfo" === e.data.action && u(e.data.trackInfo), "gopInfo" === e.data.action && function (e, t) { + t.gopInfo = e.data.gopInfo + }(e, m), "audioTimingInfo" === e.data.action && l(e.data.audioTimingInfo), "videoTimingInfo" === e.data.action && c(e.data.videoTimingInfo), "videoSegmentTimingInfo" === e.data.action && d(e.data.videoSegmentTimingInfo), "id3Frame" === e.data.action && h([e.data.id3Frame], e.data.id3Frame.dispatchType), "caption" === e.data.action && p(e.data.caption), "transmuxed" === e.data.type && (t.onmessage = null, function (e) { + var t = e.transmuxedData, + i = e.callback; + t.buffer = [], i(t) + }({ + transmuxedData: m, + callback: f + }), cc())) + }, n && t.postMessage({ + action: "setAudioAppendStart", + appendStart: n + }), Array.isArray(r) && t.postMessage({ + action: "alignGopsWith", + gopsToAlignWith: r + }), "undefined" != typeof s && t.postMessage({ + action: "setRemux", + remux: s + }), i.byteLength) { + var g = i instanceof ArrayBuffer ? i : i.buffer, + v = i instanceof ArrayBuffer ? 0 : i.byteOffset; + t.postMessage({ + action: "push", + data: g, + byteOffset: v, + byteLength: i.byteLength + }, [g]) + } + t.postMessage({ + action: a ? "partialFlush" : "flush" + }) + } + + function xl(e, t) { + e.postMessage({ + action: t + }), cc() + } + + function Pl(e, t) { + Bl ? lc.push(xl.bind(null, t, e)) : xl(t, Bl = e) + } + + function Ll(e) { + Bl ? lc.push(e) : Al(Bl = e) + } + + function Ol(e) { + e.forEach(function (e) { + e.abort() + }) + } + + function Dl(e, t) { + return t.timedout ? { + status: t.status, + message: "HLS request timed-out at URL: " + t.uri, + code: mc, + xhr: t + } : t.aborted ? { + status: t.status, + message: "HLS request aborted at URL: " + t.uri, + code: gc, + xhr: t + } : e ? { + status: t.status, + message: "HLS request errored at URL: " + t.uri, + code: fc, + xhr: t + } : null + } + + function Ml(e) { + var i = e.segment, + t = e.bytes, + n = e.isPartial, + r = e.trackInfoFn, + a = e.timingInfoFn, + s = e.videoSegmentTimingInfoFn, + o = e.id3Fn, + u = e.captionsFn, + l = e.dataFn, + c = e.doneFn, + d = i.map && i.map.tracks || {}, + h = Boolean(d.audio && d.video), + p = a.bind(null, i, "audio", "start"), + f = a.bind(null, i, "audio", "end"), + m = a.bind(null, i, "video", "start"), + g = a.bind(null, i, "video", "end"); + if (!n && !i.lastReachedChar) { + var v = function (e, t) { + var i = Eu(e, t * fu); + if (!i) return null; + var n = { + hasVideo: i.video && 2 === i.video.length || !1, + hasAudio: i.audio && 2 === i.audio.length || !1 + }; + return n.hasVideo && (n.videoStart = i.video[0].ptsTime), n.hasAudio && (n.audioStart = i.audio[0].ptsTime), n + }(t, i.baseStartTime); + v && (r(i, { + hasAudio: v.hasAudio, + hasVideo: v.hasVideo, + isMuxed: h + }), r = null, v.hasAudio && !h && p(v.audioStart), v.hasVideo && m(v.videoStart), m = p = null) + } + Ll({ + bytes: t, + transmuxer: i.transmuxer, + audioAppendStart: i.audioAppendStart, + gopsToAlignWith: i.gopsToAlignWith, + isPartial: n, + remux: h, + onData: function (e) { + e.type = "combined" === e.type ? "video" : e.type, l(i, e) + }, + onTrackInfo: function (e) { + r && (h && (e.isMuxed = !0), r(i, e)) + }, + onAudioTimingInfo: function (e) { + p && "undefined" != typeof e.start && (p(e.start), p = null), f && "undefined" != typeof e.end && f(e.end) + }, + onVideoTimingInfo: function (e) { + m && "undefined" != typeof e.start && (m(e.start), m = null), g && "undefined" != typeof e.end && g(e.end) + }, + onVideoSegmentTimingInfo: function (e) { + s(e) + }, + onId3: function (e, t) { + o(i, e, t) + }, + onCaptions: function (e) { + u(i, [e]) + }, + onDone: function (e) { + c && !n && (e.type = "combined" === e.type ? "video" : e.type, c(null, i, e)) + } + }) + } + + function Rl(e) { + var n = e.segment, + r = e.bytes, + t = e.isPartial, + i = e.trackInfoFn, + a = e.timingInfoFn, + s = e.videoSegmentTimingInfoFn, + o = e.id3Fn, + u = e.captionsFn, + l = e.dataFn, + c = e.doneFn, + d = new Uint8Array(r); + if (Wo(d)) { + n.isFmp4 = !0; + var h = n.map.tracks, + p = { + isFmp4: !0, + hasVideo: !!h.video, + hasAudio: !!h.audio + }; + h.audio && h.audio.codec && "enca" !== h.audio.codec && (p.audioCodec = h.audio.codec), h.video && h.video.codec && "encv" !== h.video.codec && (p.videoCodec = h.video.codec), h.video && h.audio && (p.isMuxed = !0), i(n, p); + var f = Uu(n.map.timescales, d); + p.hasAudio && !p.isMuxed && a(n, "audio", "start", f), p.hasVideo && a(n, "video", "start", f); + var m = function (e) { + l(n, { + data: r, + type: p.hasAudio && !p.isMuxed ? "audio" : "video" + }), e && e.length && u(n, e), c(null, n, {}) + }; + if (!h.video || !r.byteLength || !n.transmuxer) return void m(); + var g = r instanceof ArrayBuffer ? r : r.buffer, + v = r instanceof ArrayBuffer ? 0 : r.byteOffset; + return n.transmuxer.addEventListener("message", function e(t) { + if ("mp4Captions" === t.data.action) { + n.transmuxer.removeEventListener("message", e); + var i = t.data.data; + n.bytes = r = new Uint8Array(i, i.byteOffset || 0, i.byteLength), m(t.data.captions) + } + }), void n.transmuxer.postMessage({ + action: "pushMp4Captions", + timescales: n.map.timescales, + trackIds: [h.video.id], + data: g, + byteOffset: v, + byteLength: r.byteLength + }, [g]) + } + if (n.transmuxer) { + if ("undefined" == typeof n.container && (n.container = qo(d)), "ts" !== n.container && "aac" !== n.container) return i(n, { + hasAudio: !1, + hasVideo: !1 + }), void c(null, n, {}); + Ml({ + segment: n, + bytes: r, + isPartial: t, + trackInfoFn: i, + timingInfoFn: a, + videoSegmentTimingInfoFn: s, + id3Fn: o, + captionsFn: u, + dataFn: l, + doneFn: c + }) + } else c(null, n, {}) + } + + function Nl(e) { + var i = e.activeXhrs, + n = e.decryptionWorker, + r = e.trackInfoFn, + a = e.timingInfoFn, + s = e.videoSegmentTimingInfoFn, + o = e.id3Fn, + u = e.captionsFn, + l = e.dataFn, + c = e.doneFn, + d = 0, + h = !1; + return function (e, t) { + if (!h) { + if (e) return h = !0, Ol(i), c(e, t); + if ((d += 1) === i.length) { + if (t.endOfAllRequests = Date.now(), t.encryptedBytes) return function (e) { + var t, n = e.decryptionWorker, + r = e.segment, + a = e.trackInfoFn, + s = e.timingInfoFn, + o = e.videoSegmentTimingInfoFn, + u = e.id3Fn, + l = e.captionsFn, + c = e.dataFn, + d = e.doneFn; + n.addEventListener("message", function e(t) { + if (t.data.source === r.requestId) { + n.removeEventListener("message", e); + var i = t.data.decrypted; + r.bytes = new Uint8Array(i.bytes, i.byteOffset, i.byteLength), Rl({ + segment: r, + bytes: r.bytes, + isPartial: !1, + trackInfoFn: a, + timingInfoFn: s, + videoSegmentTimingInfoFn: o, + id3Fn: u, + captionsFn: l, + dataFn: c, + doneFn: d + }) + } + }), t = r.key.bytes.slice ? r.key.bytes.slice() : new Uint32Array(Array.prototype.slice.call(r.key.bytes)), n.postMessage(ml({ + source: r.requestId, + encrypted: r.encryptedBytes, + key: t, + iv: r.key.iv + }), [r.encryptedBytes.buffer, t.buffer]) + }({ + decryptionWorker: n, + segment: t, + trackInfoFn: r, + timingInfoFn: a, + videoSegmentTimingInfoFn: s, + id3Fn: o, + captionsFn: u, + dataFn: l, + doneFn: c + }); + Rl({ + segment: t, + bytes: t.bytes, + isPartial: !1, + trackInfoFn: r, + timingInfoFn: a, + videoSegmentTimingInfoFn: s, + id3Fn: o, + captionsFn: u, + dataFn: l, + doneFn: c + }) + } + } + } + } + + function Ul(e) { + var n = e.segment, + r = e.progressFn, + a = e.trackInfoFn, + s = e.timingInfoFn, + o = e.videoSegmentTimingInfoFn, + u = e.id3Fn, + l = e.captionsFn, + c = e.dataFn, + d = e.handlePartialData; + return function (e) { + var t = e.target; + if (!t.aborted) { + if (d && !n.key && t.responseText && 8 <= t.responseText.length) { + var i = Il(t.responseText.substring(n.lastReachedChar || 0)); + !n.lastReachedChar && Wo(new Uint8Array(i)) || (n.lastReachedChar = t.responseText.length, Rl({ + segment: n, + bytes: i, + isPartial: !0, + trackInfoFn: a, + timingInfoFn: s, + videoSegmentTimingInfoFn: o, + id3Fn: u, + captionsFn: l, + dataFn: c + })) + } + return n.stats = da.mergeOptions(n.stats, function (e) { + var t = e.target, + i = { + bandwidth: 1 / 0, + bytesReceived: 0, + roundTripTime: Date.now() - t.requestTime || 0 + }; + return i.bytesReceived = e.loaded, i.bandwidth = Math.floor(i.bytesReceived / i.roundTripTime * 8 * 1e3), i + }(e)), !n.stats.firstBytesReceivedAt && n.stats.bytesReceived && (n.stats.firstBytesReceivedAt = Date.now()), r(e, n) + } + } + } + + function Fl(e) { + var t = e.xhr, + i = e.xhrOptions, + n = e.decryptionWorker, + r = e.segment, + a = e.abortFn, + s = e.progressFn, + o = e.trackInfoFn, + u = e.timingInfoFn, + l = e.videoSegmentTimingInfoFn, + c = e.id3Fn, + d = e.captionsFn, + h = e.dataFn, + p = e.doneFn, + f = e.handlePartialData, + m = [], + g = Nl({ + activeXhrs: m, + decryptionWorker: n, + trackInfoFn: o, + timingInfoFn: u, + videoSegmentTimingInfoFn: l, + id3Fn: c, + captionsFn: d, + dataFn: h, + doneFn: p + }); + if (r.key && !r.key.bytes) { + var v = t(da.mergeOptions(i, { + uri: r.key.resolvedUri, + responseType: "arraybuffer" + }), function (a, s) { + return function (e, t) { + var i = t.response, + n = Dl(e, t); + if (n) return s(n, a); + if (16 !== i.byteLength) return s({ + status: t.status, + message: "Invalid HLS key at URL: " + t.uri, + code: fc, + xhr: t + }, a); + var r = new DataView(i); + return a.key.bytes = new Uint32Array([r.getUint32(0), r.getUint32(4), r.getUint32(8), r.getUint32(12)]), s(null, a) + } + }(r, g)); + m.push(v) + } + if (r.map && !r.map.bytes) { + var y = t(da.mergeOptions(i, { + uri: r.map.resolvedUri, + responseType: "arraybuffer", + headers: hl(r.map) + }), function (e) { + var a = e.segment, + s = e.finishProcessingFn; + return function (e, t) { + var i = t.response, + n = Dl(e, t); + if (n) return s(n, a); + if (0 === i.byteLength) return s({ + status: t.status, + message: "Empty HLS segment content at URL: " + t.uri, + code: fc, + xhr: t + }, a); + a.map.bytes = new Uint8Array(t.response); + var r = qo(a.map.bytes); + return "mp4" !== r ? s({ + status: t.status, + message: "Found unsupported " + (r || "unknown") + " container for initialization segment at URL: " + t.uri, + code: fc, + internal: !0, + xhr: t + }, a) : (Fu(a.map.bytes).forEach(function (e) { + a.map.tracks = a.map.tracks || {}, a.map.tracks[e.type] || (a.map.tracks[e.type] = e).id && e.timescale && (a.map.timescales = a.map.timescales || {}, a.map.timescales[e.id] = e.timescale) + }), s(null, a)) + } + }({ + segment: r, + finishProcessingFn: g + })); + m.push(y) + } + var _ = da.mergeOptions(i, { + uri: r.resolvedUri, + responseType: "arraybuffer", + headers: hl(r) + }); + f && (_.responseType = "text", _.beforeSend = function (e) { + e.overrideMimeType("text/plain; charset=x-user-defined") + }); + var b = t(_, function (e) { + var a = e.segment, + s = e.finishProcessingFn, + o = e.responseType; + return function (e, t) { + var i = t.response, + n = Dl(e, t); + if (n) return s(n, a); + var r = "arraybuffer" !== o && t.responseText ? Il(t.responseText.substring(a.lastReachedChar || 0)) : t.response; + return 0 === i.byteLength ? s({ + status: t.status, + message: "Empty HLS segment content at URL: " + t.uri, + code: fc, + xhr: t + }, a) : (a.stats = function (e) { + return { + bandwidth: e.bandwidth, + bytesReceived: e.bytesReceived || 0, + roundTripTime: e.roundTripTime || 0 + } + }(t), a.key ? a.encryptedBytes = new Uint8Array(r) : a.bytes = new Uint8Array(r), s(null, a)) + } + }({ + segment: r, + finishProcessingFn: g, + responseType: _.responseType + })); + b.addEventListener("progress", Ul({ + segment: r, + progressFn: s, + trackInfoFn: o, + timingInfoFn: u, + videoSegmentTimingInfoFn: l, + id3Fn: c, + captionsFn: d, + dataFn: h, + handlePartialData: f + })), m.push(b); + var T = {}; + return m.forEach(function (e) { + e.addEventListener("loadend", function (e) { + var t = e.loadendState, + i = e.abortFn; + return function (e) { + e.target.aborted && i && !t.calledAbortFn && (i(), t.calledAbortFn = !0) + } + }({ + loadendState: T, + abortFn: a + })) + }), + function () { + return Ol(m) + } + } + var Bl, jl = Bu.DEFAULT_AUDIO_CODEC, + Vl = Bu.DEFAULT_VIDEO_CODEC, + ql = Bu.browserSupportsCodec, + Hl = Bu.codecsFromDefault, + Wl = Bu.getMimeForCodec, + zl = Bu.isAudioCodec, + Gl = Bu.isVideoCodec, + Xl = (Bu.mapLegacyAvcCodecs, Bu.muxerSupportsCodec), + Kl = Bu.parseCodecs, + Yl = Bu.translateLegacyCodec, + $l = (Bu.translateLegacyCodecs, va), + Ql = da.log, + Jl = da.mergeOptions, + Zl = function (c) { + function e(e, t, i) { + var n; + if (void 0 === i && (i = {}), n = c.call(this) || this, !e) throw new Error("A non-empty playlist URL or object is required"); + var r = i, + a = r.withCredentials, + s = void 0 !== a && a, + o = r.handleManifestRedirects, + u = void 0 !== o && o; + n.src = e, n.vhs_ = t, n.withCredentials = s, n.handleManifestRedirects = u; + var l = t.options_; + return n.customTagParsers = l && l.customTagParsers || [], n.customTagMappers = l && l.customTagMappers || [], n.state = "HAVE_NOTHING", n.on("mediaupdatetimeout", function () { + "HAVE_METADATA" === n.state && (n.state = "HAVE_CURRENT_METADATA", n.request = n.vhs_.xhr({ + uri: $l(n.master.uri, n.media().uri), + withCredentials: n.withCredentials + }, function (e, t) { + if (n.request) return e ? n.playlistRequestError(n.request, n.media(), "HAVE_METADATA") : void n.haveMetadata({ + playlistString: n.request.responseText, + url: n.media().uri, + id: n.media().id + }) + })) + }), n + } + Ge(e, c); + var t = e.prototype; + return t.playlistRequestError = function (e, t, i) { + var n = t.uri, + r = t.id; + this.request = null, i && (this.state = i), this.error = { + playlist: this.master.playlists[r], + status: e.status, + message: "HLS playlist request error at URL: " + n + ".", + responseText: e.responseText, + code: 500 <= e.status ? 4 : 2 + }, this.trigger("error") + }, t.haveMetadata = function (e) { + var t = this, + i = e.playlistString, + n = e.playlistObject, + r = e.url, + a = e.id; + this.request = null, this.state = "HAVE_METADATA"; + var s = n || qu({ + manifestString: i, + customTagParsers: this.customTagParsers, + customTagMappers: this.customTagMappers + }); + Wu({ + playlist: s, + uri: r, + id: a + }); + var o = Xu(this.master, s); + this.targetDuration = s.targetDuration, o ? (this.master = o, this.media_ = this.master.playlists[a]) : this.trigger("playlistunchanged"), this.media().endList || (T.clearTimeout(this.mediaUpdateTimeout), this.mediaUpdateTimeout = T.setTimeout(function () { + t.trigger("mediaupdatetimeout") + }, Ku(this.media(), !!o))), this.trigger("loadedplaylist") + }, t.dispose = function () { + this.trigger("dispose"), this.stopRequest(), T.clearTimeout(this.mediaUpdateTimeout), T.clearTimeout(this.finalRenditionTimeout), this.off() + }, t.stopRequest = function () { + if (this.request) { + var e = this.request; + this.request = null, e.onreadystatechange = null, e.abort() + } + }, t.media = function (i, e) { + var n = this; + if (!i) return this.media_; + if ("HAVE_NOTHING" === this.state) throw new Error("Cannot switch media playlist from " + this.state); + if ("string" == typeof i) { + if (!this.master.playlists[i]) throw new Error("Unknown playlist URI: " + i); + i = this.master.playlists[i] + } + if (T.clearTimeout(this.finalRenditionTimeout), e) { + var t = i.targetDuration / 2 * 1e3 || 5e3; + this.finalRenditionTimeout = T.setTimeout(this.media.bind(this, i, !1), t) + } else { + var r = this.state, + a = !this.media_ || i.id !== this.media_.id; + if (this.master.playlists[i.id].endList || i.endList && i.segments.length) return this.request && (this.request.onreadystatechange = null, this.request.abort(), this.request = null), this.state = "HAVE_METADATA", this.media_ = i, void(a && (this.trigger("mediachanging"), "HAVE_MASTER" === r ? this.trigger("loadedmetadata") : this.trigger("mediachange"))); + if (a) { + if (this.state = "SWITCHING_MEDIA", this.request) { + if (i.resolvedUri === this.request.url) return; + this.request.onreadystatechange = null, this.request.abort(), this.request = null + } + this.media_ && this.trigger("mediachanging"), this.request = this.vhs_.xhr({ + uri: i.resolvedUri, + withCredentials: this.withCredentials + }, function (e, t) { + if (n.request) { + if (i.resolvedUri = ju(n.handleManifestRedirects, i.resolvedUri, t), e) return n.playlistRequestError(n.request, i, r); + n.haveMetadata({ + playlistString: t.responseText, + url: i.uri, + id: i.id + }), "HAVE_MASTER" === r ? n.trigger("loadedmetadata") : n.trigger("mediachange") + } + }) + } + } + }, t.pause = function () { + this.stopRequest(), T.clearTimeout(this.mediaUpdateTimeout), "HAVE_NOTHING" === this.state && (this.started = !1), "SWITCHING_MEDIA" === this.state ? this.media_ ? this.state = "HAVE_METADATA" : this.state = "HAVE_MASTER" : "HAVE_CURRENT_METADATA" === this.state && (this.state = "HAVE_METADATA") + }, t.load = function (e) { + var t = this; + T.clearTimeout(this.mediaUpdateTimeout); + var i = this.media(); + if (e) { + var n = i ? i.targetDuration / 2 * 1e3 : 5e3; + this.mediaUpdateTimeout = T.setTimeout(function () { + return t.load() + }, n) + } else this.started ? i && !i.endList ? this.trigger("mediaupdatetimeout") : this.trigger("loadedplaylist") : this.start() + }, t.start = function () { + var n = this; + if (this.started = !0, "object" == typeof this.src) return this.src.uri || (this.src.uri = T.location.href), this.src.resolvedUri = this.src.uri, void setTimeout(function () { + n.setupInitialPlaylist(n.src) + }, 0); + this.request = this.vhs_.xhr({ + uri: this.src, + withCredentials: this.withCredentials + }, function (e, t) { + if (n.request) { + if (n.request = null, e) return n.error = { + status: t.status, + message: "HLS playlist request error at URL: " + n.src + ".", + responseText: t.responseText, + code: 2 + }, "HAVE_NOTHING" === n.state && (n.started = !1), n.trigger("error"); + n.src = ju(n.handleManifestRedirects, n.src, t); + var i = qu({ + manifestString: t.responseText, + customTagParsers: n.customTagParsers, + customTagMappers: n.customTagMappers + }); + n.setupInitialPlaylist(i) + } + }) + }, t.srcUri = function () { + return "string" == typeof this.src ? this.src : this.src.uri + }, t.setupInitialPlaylist = function (e) { + if (this.state = "HAVE_MASTER", e.playlists) return this.master = e, zu(this.master, this.srcUri()), e.playlists.forEach(function (t) { + t.segments && t.segments.forEach(function (e) { + Gu(e, t.resolvedUri) + }) + }), this.trigger("loadedplaylist"), void(this.request || this.media(this.master.playlists[0])); + var t = this.srcUri() || T.location.href; + this.master = function (e, t) { + var i = Vu(0, t), + n = { + mediaGroups: { + AUDIO: {}, + VIDEO: {}, + "CLOSED-CAPTIONS": {}, + SUBTITLES: {} + }, + uri: T.location.href, + resolvedUri: T.location.href, + playlists: [{ + uri: t, + id: i, + resolvedUri: t, + attributes: {} + }] + }; + return n.playlists[i] = n.playlists[0], n.playlists[t] = n.playlists[0], n + }(0, t), this.haveMetadata({ + playlistObject: e, + url: t, + id: this.master.playlists[0].id + }), this.trigger("loadedmetadata") + }, e + }(da.EventTarget), + ec = 1 / 30, + tc = da.createTimeRange, + ic = { + duration: tl, + seekable: function (e, t, i) { + var n = t || 0, + r = rl(e, t, !0, i); + return null === r ? tc() : tc(n, r) + }, + safeLiveIndex: nl, + getMediaInfoForTime: function (e, t, i, n) { + var r, a = e.segments.length, + s = t - n; + if (s < 0) { + if (0 < i) + for (r = i - 1; 0 <= r; r--) + if (0 < (s += e.segments[r].duration + ec)) return { + mediaIndex: r, + startTime: n - il(e, i, r) + }; + return { + mediaIndex: 0, + startTime: t + } + } + if (i < 0) { + for (r = i; r < 0; r++) + if ((s -= e.targetDuration) < 0) return { + mediaIndex: 0, + startTime: t + }; + i = 0 + } + for (r = i; r < a; r++) + if ((s -= e.segments[r].duration + ec) < 0) return { + mediaIndex: r, + startTime: n + il(e, i, r) + }; + return { + mediaIndex: a - 1, + startTime: t + } + }, + isEnabled: ol, + isDisabled: function (e) { + return e.disabled + }, + isBlacklisted: al, + isIncompatible: sl, + playlistEnd: rl, + isAes: function (e) { + for (var t = 0; t < e.segments.length; t++) + if (e.segments[t].key) return !0; + return !1 + }, + hasAttribute: ul, + estimateSegmentRequestTime: function (e, t, i, n) { + return void 0 === n && (n = 0), ul("BANDWIDTH", i) ? (e * i.attributes.BANDWIDTH - 8 * n) / t : NaN + }, + isLowestEnabledRendition: ll + }, + nc = da.xhr, + rc = da.mergeOptions, + ac = Object.freeze({ + __proto__: null, + createTransferableMessage: ml, + initSegmentId: gl, + segmentKeyId: vl, + hexDump: yl, + tagDump: function (e) { + var t = e.bytes; + return yl(t) + }, + textRanges: function (e) { + var t, i, n, r = ""; + for (t = 0; t < e.length; t++) r += (n = t, (i = e).start(n) + "-" + i.end(n) + " "); + return r + } + }), + sc = da.mergeOptions, + oc = function (c) { + function e(e, t, i, n) { + var r; + void 0 === i && (i = {}), r = c.call(this) || this; + var a = i, + s = a.withCredentials, + o = void 0 !== s && s, + u = a.handleManifestRedirects, + l = void 0 !== u && u; + if (r.vhs_ = t, r.withCredentials = o, r.handleManifestRedirects = l, !e) throw new Error("A non-empty playlist URL or object is required"); + return r.on("minimumUpdatePeriod", function () { + r.refreshXml_() + }), r.on("mediaupdatetimeout", function () { + r.refreshMedia_(r.media().id) + }), r.state = "HAVE_NOTHING", r.loadedPlaylists_ = {}, "string" == typeof e ? (r.srcUrl = e, r.sidxMapping_ = {}, Ve(r)) : (r.setupChildLoader(n, e), r) + } + Ge(e, c); + var t = e.prototype; + return t.setupChildLoader = function (e, t) { + this.masterPlaylistLoader_ = e, this.childPlaylist_ = t + }, t.dispose = function () { + this.trigger("dispose"), this.stopRequest(), this.loadedPlaylists_ = {}, T.clearTimeout(this.minimumUpdatePeriodTimeout_), T.clearTimeout(this.mediaRequest_), T.clearTimeout(this.mediaUpdateTimeout), this.off() + }, t.hasPendingRequest = function () { + return this.request || this.mediaRequest_ + }, t.stopRequest = function () { + if (this.request) { + var e = this.request; + this.request = null, e.onreadystatechange = null, e.abort() + } + }, t.sidxRequestFinished_ = function (r, a, s, o) { + var u = this; + return function (e, t) { + if (u.request) { + if (u.request = null, e) return u.error = "object" == typeof e ? e : { + status: t.status, + message: "DASH playlist request error at URL: " + r.uri, + response: t.response, + code: 2 + }, s && (u.state = s), void u.trigger("error"); + var i = Yo(t.response), + n = jo(i.subarray(8)); + return o(a, n) + } + } + }, t.media = function (i) { + var n = this; + if (!i) return this.media_; + if ("HAVE_NOTHING" === this.state) throw new Error("Cannot switch media playlist from " + this.state); + var r = this.state; + if ("string" == typeof i) { + if (!this.master.playlists[i]) throw new Error("Unknown playlist URI: " + i); + i = this.master.playlists[i] + } + var e = !this.media_ || i.id !== this.media_.id; + if (e && this.loadedPlaylists_[i.id] && this.loadedPlaylists_[i.id].endList) return this.state = "HAVE_METADATA", this.media_ = i, void(e && (this.trigger("mediachanging"), this.trigger("mediachange"))); + if (e) + if (this.media_ && this.trigger("mediachanging"), i.sidx) { + var t, a; + a = this.masterPlaylistLoader_ ? (t = this.masterPlaylistLoader_.master, this.masterPlaylistLoader_.sidxMapping_) : (t = this.master, this.sidxMapping_); + var s = Cl(i.sidx); + a[s] = { + sidxInfo: i.sidx + }, this.request = wl(this, i.sidx, i, this.vhs_.xhr, { + handleManifestRedirects: this.handleManifestRedirects + }, this.sidxRequestFinished_(i, t, r, function (e, t) { + if (!e || !t) throw new Error("failed to request sidx"); + a[s].sidx = t, n.haveMetadata({ + startingState: r, + playlist: e.playlists[i.id] + }) + })) + } else this.mediaRequest_ = T.setTimeout(this.haveMetadata.bind(this, { + startingState: r, + playlist: i + }), 0) + }, t.haveMetadata = function (e) { + var t = e.startingState, + i = e.playlist; + this.state = "HAVE_METADATA", this.loadedPlaylists_[i.id] = i, this.mediaRequest_ = null, this.refreshMedia_(i.id), "HAVE_MASTER" === t ? this.trigger("loadedmetadata") : this.trigger("mediachange") + }, t.pause = function () { + this.stopRequest(), T.clearTimeout(this.mediaUpdateTimeout), T.clearTimeout(this.minimumUpdatePeriodTimeout_), "HAVE_NOTHING" === this.state && (this.started = !1) + }, t.load = function (e) { + var t = this; + T.clearTimeout(this.mediaUpdateTimeout), T.clearTimeout(this.minimumUpdatePeriodTimeout_); + var i = this.media(); + if (e) { + var n = i ? i.targetDuration / 2 * 1e3 : 5e3; + this.mediaUpdateTimeout = T.setTimeout(function () { + return t.load() + }, n) + } else this.started ? i && !i.endList ? this.trigger("mediaupdatetimeout") : this.trigger("loadedplaylist") : this.start() + }, t.start = function () { + var i = this; + this.started = !0, this.masterPlaylistLoader_ ? this.mediaRequest_ = T.setTimeout(this.haveMaster_.bind(this), 0) : this.request = this.vhs_.xhr({ + uri: this.srcUrl, + withCredentials: this.withCredentials + }, function (e, t) { + if (i.request) { + if (i.request = null, e) return i.error = { + status: t.status, + message: "DASH playlist request error at URL: " + i.srcUrl, + responseText: t.responseText, + code: 2 + }, "HAVE_NOTHING" === i.state && (i.started = !1), i.trigger("error"); + i.masterXml_ = t.responseText, t.responseHeaders && t.responseHeaders.date ? i.masterLoaded_ = Date.parse(t.responseHeaders.date) : i.masterLoaded_ = Date.now(), i.srcUrl = ju(i.handleManifestRedirects, i.srcUrl, t), i.syncClientServerClock_(i.onClientServerClockSync_.bind(i)) + } + }) + }, t.syncClientServerClock_ = function (n) { + var r = this, + a = wo(this.masterXml_); + return null === a ? (this.clientOffset_ = this.masterLoaded_ - Date.now(), n()) : "DIRECT" === a.method ? (this.clientOffset_ = a.value - Date.now(), n()) : void(this.request = this.vhs_.xhr({ + uri: $l(this.srcUrl, a.value), + method: a.method, + withCredentials: this.withCredentials + }, function (e, t) { + if (r.request) { + if (e) return r.clientOffset_ = r.masterLoaded_ - Date.now(), n(); + var i; + i = "HEAD" === a.method ? t.responseHeaders && t.responseHeaders.date ? Date.parse(t.responseHeaders.date) : r.masterLoaded_ : Date.parse(t.responseText), r.clientOffset_ = i - Date.now(), n() + } + })) + }, t.haveMaster_ = function () { + this.state = "HAVE_MASTER", this.mediaRequest_ = null, this.masterPlaylistLoader_ ? this.media_ || this.media(this.childPlaylist_) : (this.updateMainManifest_(Sl({ + masterXml: this.masterXml_, + srcUrl: this.srcUrl, + clientOffset: this.clientOffset_, + sidxMapping: this.sidxMapping_ + })), this.trigger("loadedplaylist")) + }, t.updateMinimumUpdatePeriodTimeout_ = function () { + var t = this; + T.clearTimeout(this.minimumUpdatePeriodTimeout_); + + function e(e) { + t.minimumUpdatePeriodTimeout_ = T.setTimeout(function () { + t.trigger("minimumUpdatePeriod") + }, e) + } + var i = this.master && this.master.minimumUpdatePeriod; + 0 < i ? e(i) : 0 === i && (this.media() ? e(1e3 * this.media().targetDuration) : this.one("loadedplaylist", function () { + e(1e3 * t.media().targetDuration) + })) + }, t.onClientServerClockSync_ = function () { + this.haveMaster_(), this.hasPendingRequest() || this.media_ || this.media(this.master.playlists[0]), this.updateMinimumUpdatePeriodTimeout_() + }, t.updateMainManifest_ = function (e) { + if (this.master = e, this.master.locations && this.master.locations.length) { + var t = this.master.locations[0]; + t !== this.srcUrl && (this.srcUrl = t) + } + }, t.refreshXml_ = function () { + var o = this; + this.request = this.vhs_.xhr({ + uri: this.srcUrl, + withCredentials: this.withCredentials + }, function (e, t) { + if (o.request) { + if (o.request = null, e) return o.error = { + status: t.status, + message: "DASH playlist request error at URL: " + o.srcUrl, + responseText: t.responseText, + code: 2 + }, "HAVE_NOTHING" === o.state && (o.started = !1), o.trigger("error"); + o.masterXml_ = t.responseText, o.sidxMapping_ = function (e, t, i, a) { + var n = Eo(e, { + manifestUri: t, + clientOffset: i + }), + s = El(n.playlists, a); + return Hu(n, function (e, t, i, n) { + if (e.playlists && e.playlists.length) { + var r = e.playlists; + s = sc(s, El(r, a)) + } + }), s + }(o.masterXml_, o.srcUrl, o.clientOffset_, o.sidxMapping_); + var i = Sl({ + masterXml: o.masterXml_, + srcUrl: o.srcUrl, + clientOffset: o.clientOffset_, + sidxMapping: o.sidxMapping_ + }), + n = kl(o.master, i), + r = o.media().sidx; + if (n) + if (r) { + var a = Cl(r); + if (!o.sidxMapping_[a]) { + var s = o.media(); + o.request = wl(o, s.sidx, s, o.vhs_.xhr, { + handleManifestRedirects: o.handleManifestRedirects + }, o.sidxRequestFinished_(s, i, o.state, function (e, t) { + if (!e || !t) throw new Error("failed to request sidx on minimumUpdatePeriod"); + o.sidxMapping_[a].sidx = t, o.updateMinimumUpdatePeriodTimeout_(), o.refreshMedia_(o.media().id) + })) + } + } else o.updateMainManifest_(n), o.media_ && (o.media_ = o.master.playlists[o.media_.id]); + o.updateMinimumUpdatePeriodTimeout_() + } + }) + }, t.refreshMedia_ = function (e) { + var t, i, n = this; + if (!e) throw new Error("refreshMedia_ must take a media id"); + i = this.masterPlaylistLoader_ ? (t = this.masterPlaylistLoader_.master, Sl({ + masterXml: this.masterPlaylistLoader_.masterXml_, + srcUrl: this.masterPlaylistLoader_.srcUrl, + clientOffset: this.masterPlaylistLoader_.clientOffset_, + sidxMapping: this.masterPlaylistLoader_.sidxMapping_ + })) : (t = this.master, Sl({ + masterXml: this.masterXml_, + srcUrl: this.srcUrl, + clientOffset: this.clientOffset_, + sidxMapping: this.sidxMapping_ + })); + var r = kl(t, i); + r ? (this.masterPlaylistLoader_ ? this.masterPlaylistLoader_.master = r : this.master = r, this.media_ = r.playlists[e]) : (this.media_ = t.playlists[e], this.trigger("playlistunchanged")), this.media().endList || (this.mediaUpdateTimeout = T.setTimeout(function () { + n.trigger("mediaupdatetimeout") + }, Ku(this.media(), !!r))), this.trigger("loadedplaylist") + }, e + }(da.EventTarget), + uc = { + GOAL_BUFFER_LENGTH: 30, + MAX_GOAL_BUFFER_LENGTH: 60, + BACK_BUFFER_LENGTH: 30, + GOAL_BUFFER_LENGTH_RATE: 1, + INITIAL_BANDWIDTH: 4194304, + BANDWIDTH_VARIANCE: 1.2, + BUFFER_LOW_WATER_LINE: 0, + MAX_BUFFER_LOW_WATER_LINE: 30, + BUFFER_LOW_WATER_LINE_RATE: 1 + }, + lc = [], + cc = function () { + Bl = null, lc.length && ("function" == typeof (Bl = lc.shift()) ? Bl() : Al(Bl)) + }, + dc = function (e) { + Pl("reset", e) + }, + hc = function () { + Bl = null, lc.length = 0 + }, + pc = function (e) { + Pl("endTimeline", e) + }, + fc = 2, + mc = -101, + gc = -102, + vc = "undefined" != typeof window ? window : {}, + yc = "undefined" == typeof Symbol ? "__target" : Symbol(), + _c = "application/javascript", + bc = vc.BlobBuilder || vc.WebKitBlobBuilder || vc.MozBlobBuilder || vc.MSBlobBuilder, + Tc = vc.URL || vc.webkitURL || Tc && Tc.msURL, + Sc = vc.Worker; + + function kc(r, a) { + return function (e) { + var t = this; + if (!a) return new Sc(r); + if (Sc && !e) { + var i = Ic(a.toString().replace(/^function.+?{/, "").slice(0, -1)); + return this[yc] = new Sc(i), + function (e, t) { + if (!e || !t) return; + var i = e.terminate; + e.objURL = t, e.terminate = function () { + e.objURL && Tc.revokeObjectURL(e.objURL), i.call(e) + } + }(this[yc], i), this[yc] + } + var n = { + postMessage: function (e) { + t.onmessage && setTimeout(function () { + t.onmessage({ + data: e, + target: n + }) + }) + } + }; + a.call(n), this.postMessage = function (e) { + setTimeout(function () { + n.onmessage({ + data: e, + target: t + }) + }) + }, this.isThisThread = !0 + } + } + if (Sc) { + var Cc, Ec = Ic("self.onmessage = function () {}"), + wc = new Uint8Array(1); + try { + (Cc = new Sc(Ec)).postMessage(wc, [wc.buffer]) + } catch (e) { + Sc = null + } finally { + Tc.revokeObjectURL(Ec), Cc && Cc.terminate() + } + } + + function Ic(t) { + try { + return Tc.createObjectURL(new Blob([t], { + type: _c + })) + } catch (e) { + var i = new bc; + return i.append(t), Tc.createObjectURL(i.getBlob(type)) + } + } + + function Ac(e, t) { + var i = t.attributes || {}; + return e && e.mediaGroups && e.mediaGroups.AUDIO && i.AUDIO && e.mediaGroups.AUDIO[i.AUDIO] + } + + function xc(e, t) { + var i = t.attributes || {}, + n = function (e) { + var t = e.attributes || {}; + if (t.CODECS) return Kl(t.CODECS) + }(t) || {}; + if (Ac(e, t) && !n.audio && ! function (e, t) { + if (!Ac(e, t)) return !0; + var i = t.attributes || {}, + n = e.mediaGroups.AUDIO[i.AUDIO]; + for (var r in n) + if (!n[r].uri && !n[r].playlists) return !0; + return !1 + }(e, t)) { + var r = Hl(e, i.AUDIO); + r && (n.audio = r.audio) + } + var a = {}; + return n.video && (a.video = Yl("" + n.video.type + n.video.details)), n.audio && (a.audio = Yl("" + n.audio.type + n.audio.details)), a + } + + function Pc(e) { + return da.log.debug ? da.log.debug.bind(da, "VHS:", e + " >") : function () {} + } + + function Lc(e) { + if (e && e.playlist) { + var t = e.playlist; + return JSON.stringify({ + id: t.id, + bandwidth: e.bandwidth, + width: e.width, + height: e.height, + codecs: t.attributes && t.attributes.CODECS || "" + }) + } + } + + function Oc(e, t) { + if (!e) return ""; + var i = T.getComputedStyle(e); + return i ? i[t] : "" + } + + function Dc(e, n) { + var r = e.slice(); + e.sort(function (e, t) { + var i = n(e, t); + return 0 === i ? r.indexOf(e) - r.indexOf(t) : i + }) + } + + function Mc(e, t) { + var i, n; + return e.attributes.BANDWIDTH && (i = e.attributes.BANDWIDTH), i = i || T.Number.MAX_VALUE, t.attributes.BANDWIDTH && (n = t.attributes.BANDWIDTH), i - (n = n || T.Number.MAX_VALUE) + } + + function Rc(e) { + var t = e.inbandTextTracks, + i = e.metadataArray, + n = e.timestampOffset, + r = e.videoDuration; + if (i) { + var a = T.WebKitDataCue || T.VTTCue, + s = t.metadataTrack_; + if (s && (i.forEach(function (e) { + var i = e.cueTime + n; + !("number" != typeof i || T.isNaN(i) || i < 0) && i < 1 / 0 && e.frames.forEach(function (e) { + var t = new a(i, i, e.value || e.url || e.data || ""); + t.frame = e, t.value = e, + function (e) { + Object.defineProperties(e.frame, { + id: { + get: function () { + return da.log.warn("cue.frame.id is deprecated. Use cue.value.key instead."), e.value.key + } + }, + value: { + get: function () { + return da.log.warn("cue.frame.value is deprecated. Use cue.value.data instead."), e.value.data + } + }, + privateData: { + get: function () { + return da.log.warn("cue.frame.privateData is deprecated. Use cue.value.data instead."), e.value.data + } + } + }) + }(t), s.addCue(t) + }) + }), s.cues && s.cues.length)) { + for (var o = s.cues, u = [], l = 0; l < o.length; l++) o[l] && u.push(o[l]); + var c = u.reduce(function (e, t) { + var i = e[t.startTime] || []; + return i.push(t), e[t.startTime] = i, e + }, {}), + d = Object.keys(c).sort(function (e, t) { + return Number(e) - Number(t) + }); + d.forEach(function (e, t) { + var i = c[e], + n = Number(d[t + 1]) || r; + i.forEach(function (e) { + e.endTime = n + }) + }) + } + } + } + + function Nc(e, t, i) { + var n, r; + if (i && i.cues) + for (n = i.cues.length; n--;)(r = i.cues[n]).startTime >= e && r.endTime <= t && i.removeCue(r) + } + + function Uc(e) { + return "number" == typeof e && isFinite(e) + } + + function Fc(e) { + return e + "TimingInfo" + } + + function Bc(e) { + var t = e.segmentTimeline, + i = e.currentTimeline, + n = e.startOfSegment, + r = e.buffered; + return e.overrideCheck || t !== i ? r.length ? r.end(r.length - 1) : n : null + } + + function jc(e) { + var t = e.timelineChangeController, + i = e.currentTimeline, + n = e.segmentTimeline, + r = e.loaderType, + a = e.audioDisabled; + if (i === n) return !1; + if ("audio" === r) { + var s = t.lastTimelineChange({ + type: "main" + }); + return !s || s.to !== n + } + if ("main" === r && a) { + var o = t.pendingTimelineChange({ + type: "audio" + }); + return !o || o.to !== n + } + return !1 + } + var Vc = new kc("./transmuxer-worker.worker.js", function (e, t) { + var Zt = this; + /*! @name @videojs/http-streaming @version 2.2.4 @license Apache-2.0 */ + ! function () { + function e() { + this.init = function () { + var a = {}; + this.on = function (e, t) { + a[e] || (a[e] = []), a[e] = a[e].concat(t) + }, this.off = function (e, t) { + var i; + return !!a[e] && (i = a[e].indexOf(t), a[e] = a[e].slice(), a[e].splice(i, 1), -1 < i) + }, this.trigger = function (e) { + var t, i, n, r; + if (t = a[e]) + if (2 === arguments.length) + for (n = t.length, i = 0; i < n; ++i) t[i].call(this, arguments[1]); + else { + for (r = [], i = arguments.length, i = 1; i < arguments.length; ++i) r.push(arguments[i]); + for (n = t.length, i = 0; i < n; ++i) t[i].apply(this, r) + } + }, this.dispose = function () { + a = {} + } + } + } + e.prototype.pipe = function (t) { + return this.on("data", function (e) { + t.push(e) + }), this.on("done", function (e) { + t.flush(e) + }), this.on("partialdone", function (e) { + t.partialFlush(e) + }), this.on("endedtimeline", function (e) { + t.endTimeline(e) + }), this.on("reset", function (e) { + t.reset(e) + }), t + }, e.prototype.push = function (e) { + this.trigger("data", e) + }, e.prototype.flush = function (e) { + this.trigger("done", e) + }, e.prototype.partialFlush = function (e) { + this.trigger("partialdone", e) + }, e.prototype.endTimeline = function (e) { + this.trigger("endedtimeline", e) + }, e.prototype.reset = function (e) { + this.trigger("reset", e) + }; + var l, t, i, r, a, n, s, o, u, c, d, h, p, f, m, g, v, y, _, b, T, S, k, C, E, w, I, A, x, P, L, O, D, M, R, N, U, F, B, j, V = e, + q = Math.pow(2, 32) - 1; + ! function () { + var e; + if (S = { + avc1: [], + avcC: [], + btrt: [], + dinf: [], + dref: [], + esds: [], + ftyp: [], + hdlr: [], + mdat: [], + mdhd: [], + mdia: [], + mfhd: [], + minf: [], + moof: [], + moov: [], + mp4a: [], + mvex: [], + mvhd: [], + pasp: [], + sdtp: [], + smhd: [], + stbl: [], + stco: [], + stsc: [], + stsd: [], + stsz: [], + stts: [], + styp: [], + tfdt: [], + tfhd: [], + traf: [], + trak: [], + trun: [], + trex: [], + tkhd: [], + vmhd: [] + }, "undefined" != typeof Uint8Array) { + for (e in S) S.hasOwnProperty(e) && (S[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]); + k = new Uint8Array(["i".charCodeAt(0), "s".charCodeAt(0), "o".charCodeAt(0), "m".charCodeAt(0)]), E = new Uint8Array(["a".charCodeAt(0), "v".charCodeAt(0), "c".charCodeAt(0), "1".charCodeAt(0)]), C = new Uint8Array([0, 0, 0, 1]), w = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0]), I = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0]), A = { + video: w, + audio: I + }, L = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]), P = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), O = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), D = O, M = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), R = O, x = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]) + } + }(), l = function (e) { + var t, i, n = [], + r = 0; + for (t = 1; t < arguments.length; t++) n.push(arguments[t]); + for (t = n.length; t--;) r += n[t].byteLength; + for (i = new Uint8Array(r + 8), new DataView(i.buffer, i.byteOffset, i.byteLength).setUint32(0, i.byteLength), i.set(e, 4), t = 0, r = 8; t < n.length; t++) i.set(n[t], r), r += n[t].byteLength; + return i + }, t = function () { + return l(S.dinf, l(S.dref, L)) + }, i = function (e) { + return l(S.esds, new Uint8Array([0, 0, 0, 0, 3, 25, 0, 0, 0, 4, 17, 64, 21, 0, 6, 0, 0, 0, 218, 192, 0, 0, 218, 192, 5, 2, e.audioobjecttype << 3 | e.samplingfrequencyindex >>> 1, e.samplingfrequencyindex << 7 | e.channelcount << 3, 6, 1, 2])) + }, m = function (e) { + return l(S.hdlr, A[e]) + }, f = function (e) { + var t = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 3, 0, 1, 95, 144, e.duration >>> 24 & 255, e.duration >>> 16 & 255, e.duration >>> 8 & 255, 255 & e.duration, 85, 196, 0, 0]); + return e.samplerate && (t[12] = e.samplerate >>> 24 & 255, t[13] = e.samplerate >>> 16 & 255, t[14] = e.samplerate >>> 8 & 255, t[15] = 255 & e.samplerate), l(S.mdhd, t) + }, p = function (e) { + return l(S.mdia, f(e), m(e.type), n(e)) + }, a = function (e) { + return l(S.mfhd, new Uint8Array([0, 0, 0, 0, (4278190080 & e) >> 24, (16711680 & e) >> 16, (65280 & e) >> 8, 255 & e])) + }, n = function (e) { + return l(S.minf, "video" === e.type ? l(S.vmhd, x) : l(S.smhd, P), t(), v(e)) + }, s = function (e, t) { + for (var i = [], n = t.length; n--;) i[n] = _(t[n]); + return l.apply(null, [S.moof, a(e)].concat(i)) + }, o = function (e) { + for (var t = e.length, i = []; t--;) i[t] = d(e[t]); + return l.apply(null, [S.moov, c(4294967295)].concat(i).concat(u(e))) + }, u = function (e) { + for (var t = e.length, i = []; t--;) i[t] = b(e[t]); + return l.apply(null, [S.mvex].concat(i)) + }, c = function (e) { + var t = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 1, 95, 144, (4278190080 & e) >> 24, (16711680 & e) >> 16, (65280 & e) >> 8, 255 & e, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]); + return l(S.mvhd, t) + }, g = function (e) { + var t, i, n = e.samples || [], + r = new Uint8Array(4 + n.length); + for (i = 0; i < n.length; i++) t = n[i].flags, r[i + 4] = t.dependsOn << 4 | t.isDependedOn << 2 | t.hasRedundancy; + return l(S.sdtp, r) + }, v = function (e) { + return l(S.stbl, y(e), l(S.stts, R), l(S.stsc, D), l(S.stsz, M), l(S.stco, O)) + }, y = function (e) { + return l(S.stsd, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]), "video" === e.type ? N(e) : U(e)) + }, N = function (e) { + var t, i, n = e.sps || [], + r = e.pps || [], + a = [], + s = []; + for (t = 0; t < n.length; t++) a.push((65280 & n[t].byteLength) >>> 8), a.push(255 & n[t].byteLength), a = a.concat(Array.prototype.slice.call(n[t])); + for (t = 0; t < r.length; t++) s.push((65280 & r[t].byteLength) >>> 8), s.push(255 & r[t].byteLength), s = s.concat(Array.prototype.slice.call(r[t])); + if (i = [S.avc1, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (65280 & e.width) >> 8, 255 & e.width, (65280 & e.height) >> 8, 255 & e.height, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 19, 118, 105, 100, 101, 111, 106, 115, 45, 99, 111, 110, 116, 114, 105, 98, 45, 104, 108, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17]), l(S.avcC, new Uint8Array([1, e.profileIdc, e.profileCompatibility, e.levelIdc, 255].concat([n.length], a, [r.length], s))), l(S.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192]))], e.sarRatio) { + var o = e.sarRatio[0], + u = e.sarRatio[1]; + i.push(l(S.pasp, new Uint8Array([(4278190080 & o) >> 24, (16711680 & o) >> 16, (65280 & o) >> 8, 255 & o, (4278190080 & u) >> 24, (16711680 & u) >> 16, (65280 & u) >> 8, 255 & u]))) + } + return l.apply(null, i) + }, U = function (e) { + return l(S.mp4a, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, (65280 & e.channelcount) >> 8, 255 & e.channelcount, (65280 & e.samplesize) >> 8, 255 & e.samplesize, 0, 0, 0, 0, (65280 & e.samplerate) >> 8, 255 & e.samplerate, 0, 0]), i(e)) + }, h = function (e) { + var t = new Uint8Array([0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, (4278190080 & e.id) >> 24, (16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 0, (4278190080 & e.duration) >> 24, (16711680 & e.duration) >> 16, (65280 & e.duration) >> 8, 255 & e.duration, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, (65280 & e.width) >> 8, 255 & e.width, 0, 0, (65280 & e.height) >> 8, 255 & e.height, 0, 0]); + return l(S.tkhd, t) + }, _ = function (e) { + var t, i, n, r, a, s; + return t = l(S.tfhd, new Uint8Array([0, 0, 0, 58, (4278190080 & e.id) >> 24, (16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])), a = Math.floor(e.baseMediaDecodeTime / (1 + q)), s = Math.floor(e.baseMediaDecodeTime % (1 + q)), i = l(S.tfdt, new Uint8Array([1, 0, 0, 0, a >>> 24 & 255, a >>> 16 & 255, a >>> 8 & 255, 255 & a, s >>> 24 & 255, s >>> 16 & 255, s >>> 8 & 255, 255 & s])), 92, "audio" === e.type ? (n = T(e, 92), l(S.traf, t, i, n)) : (r = g(e), n = T(e, r.length + 92), l(S.traf, t, i, n, r)) + }, d = function (e) { + return e.duration = e.duration || 4294967295, l(S.trak, h(e), p(e)) + }, b = function (e) { + var t = new Uint8Array([0, 0, 0, 0, (4278190080 & e.id) >> 24, (16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]); + return "video" !== e.type && (t[t.length - 1] = 0), l(S.trex, t) + }, j = function (e, t) { + var i = 0, + n = 0, + r = 0, + a = 0; + return e.length && (void 0 !== e[0].duration && (i = 1), void 0 !== e[0].size && (n = 2), void 0 !== e[0].flags && (r = 4), void 0 !== e[0].compositionTimeOffset && (a = 8)), [0, 0, i | n | r | a, 1, (4278190080 & e.length) >>> 24, (16711680 & e.length) >>> 16, (65280 & e.length) >>> 8, 255 & e.length, (4278190080 & t) >>> 24, (16711680 & t) >>> 16, (65280 & t) >>> 8, 255 & t] + }, B = function (e, t) { + var i, n, r, a, s, o; + for (t += 20 + 16 * (a = e.samples || []).length, r = j(a, t), (n = new Uint8Array(r.length + 16 * a.length)).set(r), i = r.length, o = 0; o < a.length; o++) s = a[o], n[i++] = (4278190080 & s.duration) >>> 24, n[i++] = (16711680 & s.duration) >>> 16, n[i++] = (65280 & s.duration) >>> 8, n[i++] = 255 & s.duration, n[i++] = (4278190080 & s.size) >>> 24, n[i++] = (16711680 & s.size) >>> 16, n[i++] = (65280 & s.size) >>> 8, n[i++] = 255 & s.size, n[i++] = s.flags.isLeading << 2 | s.flags.dependsOn, n[i++] = s.flags.isDependedOn << 6 | s.flags.hasRedundancy << 4 | s.flags.paddingValue << 1 | s.flags.isNonSyncSample, n[i++] = 61440 & s.flags.degradationPriority, n[i++] = 15 & s.flags.degradationPriority, n[i++] = (4278190080 & s.compositionTimeOffset) >>> 24, n[i++] = (16711680 & s.compositionTimeOffset) >>> 16, n[i++] = (65280 & s.compositionTimeOffset) >>> 8, n[i++] = 255 & s.compositionTimeOffset; + return l(S.trun, n) + }, F = function (e, t) { + var i, n, r, a, s, o; + for (t += 20 + 8 * (a = e.samples || []).length, r = j(a, t), (i = new Uint8Array(r.length + 8 * a.length)).set(r), n = r.length, o = 0; o < a.length; o++) s = a[o], i[n++] = (4278190080 & s.duration) >>> 24, i[n++] = (16711680 & s.duration) >>> 16, i[n++] = (65280 & s.duration) >>> 8, i[n++] = 255 & s.duration, i[n++] = (4278190080 & s.size) >>> 24, i[n++] = (16711680 & s.size) >>> 16, i[n++] = (65280 & s.size) >>> 8, i[n++] = 255 & s.size; + return l(S.trun, i) + }, T = function (e, t) { + return "audio" === e.type ? F(e, t) : B(e, t) + }; + r = function () { + return l(S.ftyp, k, C, k, E) + }; + + function H(e, t) { + var i = { + size: 0, + flags: { + isLeading: 0, + dependsOn: 1, + isDependedOn: 0, + hasRedundancy: 0, + degradationPriority: 0, + isNonSyncSample: 1 + } + }; + return i.dataOffset = t, i.compositionTimeOffset = e.pts - e.dts, i.duration = e.duration, i.size = 4 * e.length, i.size += e.byteLength, e.keyFrame && (i.flags.dependsOn = 2, i.flags.isNonSyncSample = 0), i + } + + function W(e) { + for (var t = []; e--;) t.push(0); + return t + } + + function z() { + if (!X) { + var e = { + 96e3: [ue, [227, 64], W(154), [56]], + 88200: [ue, [231], W(170), [56]], + 64e3: [ue, [248, 192], W(240), [56]], + 48e3: [ue, [255, 192], W(268), [55, 148, 128], W(54), [112]], + 44100: [ue, [255, 192], W(268), [55, 163, 128], W(84), [112]], + 32e3: [ue, [255, 192], W(268), [55, 234], W(226), [112]], + 24e3: [ue, [255, 192], W(268), [55, 255, 128], W(268), [111, 112], W(126), [224]], + 16e3: [ue, [255, 192], W(268), [55, 255, 128], W(268), [111, 255], W(269), [223, 108], W(195), [1, 192]], + 12e3: [le, W(268), [3, 127, 248], W(268), [6, 255, 240], W(268), [13, 255, 224], W(268), [27, 253, 128], W(259), [56]], + 11025: [le, W(268), [3, 127, 248], W(268), [6, 255, 240], W(268), [13, 255, 224], W(268), [27, 255, 192], W(268), [55, 175, 128], W(108), [112]], + 8e3: [le, W(268), [3, 121, 16], W(47), [7]] + }; + X = function (i) { + return Object.keys(i).reduce(function (e, t) { + return e[t] = new Uint8Array(i[t].reduce(function (e, t) { + return e.concat(t) + }, [])), e + }, {}) + }(e) + } + return X + } + + function G() { + G.prototype.init.call(this), this.captionPackets_ = [], this.ccStreams_ = [new Me(0, 0), new Me(0, 1), new Me(1, 0), new Me(1, 1)], this.reset(), this.ccStreams_.forEach(function (e) { + e.on("data", this.trigger.bind(this, "data")), e.on("partialdone", this.trigger.bind(this, "partialdone")), e.on("done", this.trigger.bind(this, "done")) + }, this) + } + var X, K, Y, $, Q, J = function (e) { + return l(S.mdat, e) + }, + Z = s, + ee = function (e) { + var t, i = r(), + n = o(e); + return (t = new Uint8Array(i.byteLength + n.byteLength)).set(i), t.set(n, i.byteLength), t + }, + te = function (e) { + var t, i, n = [], + r = []; + for (r.byteLength = 0, r.nalCount = 0, r.duration = 0, t = n.byteLength = 0; t < e.length; t++) "access_unit_delimiter_rbsp" === (i = e[t]).nalUnitType ? (n.length && (n.duration = i.dts - n.dts, r.byteLength += n.byteLength, r.nalCount += n.length, r.duration += n.duration, r.push(n)), (n = [i]).byteLength = i.data.byteLength, n.pts = i.pts, n.dts = i.dts) : ("slice_layer_without_partitioning_rbsp_idr" === i.nalUnitType && (n.keyFrame = !0), n.duration = i.dts - n.dts, n.byteLength += i.data.byteLength, n.push(i)); + return r.length && (!n.duration || n.duration <= 0) && (n.duration = r[r.length - 1].duration), r.byteLength += n.byteLength, r.nalCount += n.length, r.duration += n.duration, r.push(n), r + }, + ie = function (e) { + var t, i, n = [], + r = []; + for (n.byteLength = 0, n.nalCount = 0, n.duration = 0, n.pts = e[0].pts, n.dts = e[0].dts, r.byteLength = 0, r.nalCount = 0, r.duration = 0, r.pts = e[0].pts, r.dts = e[0].dts, t = 0; t < e.length; t++)(i = e[t]).keyFrame ? (n.length && (r.push(n), r.byteLength += n.byteLength, r.nalCount += n.nalCount, r.duration += n.duration), (n = [i]).nalCount = i.length, n.byteLength = i.byteLength, n.pts = i.pts, n.dts = i.dts, n.duration = i.duration) : (n.duration += i.duration, n.nalCount += i.length, n.byteLength += i.byteLength, n.push(i)); + return r.length && n.duration <= 0 && (n.duration = r[r.length - 1].duration), r.byteLength += n.byteLength, r.nalCount += n.nalCount, r.duration += n.duration, r.push(n), r + }, + ne = function (e) { + var t; + return !e[0][0].keyFrame && 1 < e.length && (t = e.shift(), e.byteLength -= t.byteLength, e.nalCount -= t.nalCount, e[0][0].dts = t.dts, e[0][0].pts = t.pts, e[0][0].duration += t.duration), e + }, + re = function (e, t) { + var i, n, r, a, s, o = t || 0, + u = []; + for (i = 0; i < e.length; i++) + for (a = e[i], n = 0; n < a.length; n++) s = a[n], o += (r = H(s, o)).size, u.push(r); + return u + }, + ae = function (e) { + var t, i, n, r, a, s, o = 0, + u = e.byteLength, + l = e.nalCount, + c = new Uint8Array(u + 4 * l), + d = new DataView(c.buffer); + for (t = 0; t < e.length; t++) + for (r = e[t], i = 0; i < r.length; i++) + for (a = r[i], n = 0; n < a.length; n++) s = a[n], d.setUint32(o, s.data.byteLength), o += 4, c.set(s.data, o), o += s.data.byteLength; + return c + }, + se = function (e, t) { + var i, n = []; + return i = H(e, t || 0), n.push(i), n + }, + oe = function (e) { + var t, i, n = 0, + r = e.byteLength, + a = e.length, + s = new Uint8Array(r + 4 * a), + o = new DataView(s.buffer); + for (t = 0; t < e.length; t++) i = e[t], o.setUint32(n, i.data.byteLength), n += 4, s.set(i.data, n), n += i.data.byteLength; + return s + }, + ue = [33, 16, 5, 32, 164, 27], + le = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252], + ce = 9e4, + de = (Y = function (e, t) { + return e * t + }, $ = function (e) { + return e / 9e4 + }), + he = (Q = function (e, t) { + return e / t + }, function (e, t) { + return K(Q(e, t)) + }), + pe = function (e, t) { + return Y($(e), t) + }, + fe = function (e, t, i) { + return $(i ? e : e - t) + }, + me = K = function (e) { + return 9e4 * e + }, + ge = de, + ve = function (e, t, i, n) { + var r, a, s, o, u, l = 0, + c = 0, + d = 0; + if (t.length && (r = he(e.baseMediaDecodeTime, e.samplerate), a = Math.ceil(ce / (e.samplerate / 1024)), i && n && (l = r - Math.max(i, n), d = (c = Math.floor(l / a)) * a), !(c < 1 || ce / 2 < d))) { + for (s = (s = z()[e.samplerate]) || t[0].data, o = 0; o < c; o++) u = t[0], t.splice(0, 0, { + data: s, + dts: u.dts - a, + pts: u.pts - a + }); + e.baseMediaDecodeTime -= Math.floor(pe(d, e.samplerate)) + } + }, + ye = function (e, t, i) { + return t.minSegmentDts >= i ? e : (t.minSegmentDts = 1 / 0, e.filter(function (e) { + return e.dts >= i && (t.minSegmentDts = Math.min(t.minSegmentDts, e.dts), t.minSegmentPts = t.minSegmentDts, !0) + })) + }, + _e = function (e) { + var t, i, n = []; + for (t = 0; t < e.length; t++) i = e[t], n.push({ + size: i.data.byteLength, + duration: 1024 + }); + return n + }, + be = function (e) { + var t, i, n = 0, + r = new Uint8Array(function (e) { + var t, i = 0; + for (t = 0; t < e.length; t++) i += e[t].data.byteLength; + return i + }(e)); + for (t = 0; t < e.length; t++) i = e[t], r.set(i.data, n), n += i.data.byteLength; + return r + }, + Te = ce, + Se = function (e) { + delete e.minSegmentDts, delete e.maxSegmentDts, delete e.minSegmentPts, delete e.maxSegmentPts + }, + ke = function (e, t) { + var i, n = e.minSegmentDts; + return t || (n -= e.timelineStartInfo.dts), i = e.timelineStartInfo.baseMediaDecodeTime, i += n, i = Math.max(0, i), "audio" === e.type && (i *= e.samplerate / Te, i = Math.floor(i)), i + }, + Ce = function (e, t) { + "number" == typeof t.pts && (void 0 === e.timelineStartInfo.pts && (e.timelineStartInfo.pts = t.pts), void 0 === e.minSegmentPts ? e.minSegmentPts = t.pts : e.minSegmentPts = Math.min(e.minSegmentPts, t.pts), void 0 === e.maxSegmentPts ? e.maxSegmentPts = t.pts : e.maxSegmentPts = Math.max(e.maxSegmentPts, t.pts)), "number" == typeof t.dts && (void 0 === e.timelineStartInfo.dts && (e.timelineStartInfo.dts = t.dts), void 0 === e.minSegmentDts ? e.minSegmentDts = t.dts : e.minSegmentDts = Math.min(e.minSegmentDts, t.dts), void 0 === e.maxSegmentDts ? e.maxSegmentDts = t.dts : e.maxSegmentDts = Math.max(e.maxSegmentDts, t.dts)) + }, + Ee = function (e) { + for (var t = 0, i = { + payloadType: -1, + payloadSize: 0 + }, n = 0, r = 0; t < e.byteLength && 128 !== e[t];) { + for (; 255 === e[t];) n += 255, t++; + for (n += e[t++]; 255 === e[t];) r += 255, t++; + if (r += e[t++], !i.payload && 4 === n) { + if ("GA94" === String.fromCharCode(e[t + 3], e[t + 4], e[t + 5], e[t + 6])) { + i.payloadType = n, i.payloadSize = r, i.payload = e.subarray(t, t + r); + break + } + i.payload = void 0 + } + t += r, r = n = 0 + } + return i + }, + we = function (e) { + return 181 !== e.payload[0] ? null : 49 != (e.payload[1] << 8 | e.payload[2]) ? null : "GA94" !== String.fromCharCode(e.payload[3], e.payload[4], e.payload[5], e.payload[6]) ? null : 3 !== e.payload[7] ? null : e.payload.subarray(8, e.payload.length - 1) + }, + Ie = function (e, t) { + var i, n, r, a, s = []; + if (!(64 & t[0])) return s; + for (n = 31 & t[0], i = 0; i < n; i++) a = { + type: 3 & t[2 + (r = 3 * i)], + pts: e + }, 4 & t[2 + r] && (a.ccData = t[3 + r] << 8 | t[4 + r], s.push(a)); + return s + }, + Ae = function (e) { + for (var t, i, n = e.byteLength, r = [], a = 1; a < n - 2;) 0 === e[a] && 0 === e[a + 1] && 3 === e[a + 2] ? (r.push(a + 2), a += 2) : a++; + if (0 === r.length) return e; + t = n - r.length, i = new Uint8Array(t); + var s = 0; + for (a = 0; a < t; s++, a++) s === r[0] && (s++, r.shift()), i[a] = e[s]; + return i + }, + xe = 4; + (G.prototype = new V).push = function (e) { + var t, i, n; + if ("sei_rbsp" === e.nalUnitType && (t = Ee(e.escapedRBSP)).payloadType === xe && (i = we(t))) + if (e.dts < this.latestDts_) this.ignoreNextEqualDts_ = !0; + else { + if (e.dts === this.latestDts_ && this.ignoreNextEqualDts_) return this.numSameDts_--, void(this.numSameDts_ || (this.ignoreNextEqualDts_ = !1)); + n = Ie(e.pts, i), this.captionPackets_ = this.captionPackets_.concat(n), this.latestDts_ !== e.dts && (this.numSameDts_ = 0), this.numSameDts_++, this.latestDts_ = e.dts + } + }, G.prototype.flushCCStreams = function (t) { + this.ccStreams_.forEach(function (e) { + return "flush" === t ? e.flush() : e.partialFlush() + }, this) + }, G.prototype.flushStream = function (e) { + this.captionPackets_.length && (this.captionPackets_.forEach(function (e, t) { + e.presortIndex = t + }), this.captionPackets_.sort(function (e, t) { + return e.pts === t.pts ? e.presortIndex - t.presortIndex : e.pts - t.pts + }), this.captionPackets_.forEach(function (e) { + e.type < 2 && this.dispatchCea608Packet(e) + }, this), this.captionPackets_.length = 0), this.flushCCStreams(e) + }, G.prototype.flush = function () { + return this.flushStream("flush") + }, G.prototype.partialFlush = function () { + return this.flushStream("partialFlush") + }, G.prototype.reset = function () { + this.latestDts_ = null, this.ignoreNextEqualDts_ = !1, this.numSameDts_ = 0, this.activeCea608Channel_ = [null, null], this.ccStreams_.forEach(function (e) { + e.reset() + }) + }, G.prototype.dispatchCea608Packet = function (e) { + this.setsTextOrXDSActive(e) ? this.activeCea608Channel_[e.type] = null : this.setsChannel1Active(e) ? this.activeCea608Channel_[e.type] = 0 : this.setsChannel2Active(e) && (this.activeCea608Channel_[e.type] = 1), null !== this.activeCea608Channel_[e.type] && this.ccStreams_[(e.type << 1) + this.activeCea608Channel_[e.type]].push(e) + }, G.prototype.setsChannel1Active = function (e) { + return 4096 == (30720 & e.ccData) + }, G.prototype.setsChannel2Active = function (e) { + return 6144 == (30720 & e.ccData) + }, G.prototype.setsTextOrXDSActive = function (e) { + return 256 == (28928 & e.ccData) || 4138 == (30974 & e.ccData) || 6186 == (30974 & e.ccData) + }; + + function Pe(e) { + return null === e ? "" : (e = Oe[e] || e, String.fromCharCode(e)) + } + + function Le() { + for (var e = [], t = 15; t--;) e.push(""); + return e + } + var Oe = { + 42: 225, + 92: 233, + 94: 237, + 95: 243, + 96: 250, + 123: 231, + 124: 247, + 125: 209, + 126: 241, + 127: 9608, + 304: 174, + 305: 176, + 306: 189, + 307: 191, + 308: 8482, + 309: 162, + 310: 163, + 311: 9834, + 312: 224, + 313: 160, + 314: 232, + 315: 226, + 316: 234, + 317: 238, + 318: 244, + 319: 251, + 544: 193, + 545: 201, + 546: 211, + 547: 218, + 548: 220, + 549: 252, + 550: 8216, + 551: 161, + 552: 42, + 553: 39, + 554: 8212, + 555: 169, + 556: 8480, + 557: 8226, + 558: 8220, + 559: 8221, + 560: 192, + 561: 194, + 562: 199, + 563: 200, + 564: 202, + 565: 203, + 566: 235, + 567: 206, + 568: 207, + 569: 239, + 570: 212, + 571: 217, + 572: 249, + 573: 219, + 574: 171, + 575: 187, + 800: 195, + 801: 227, + 802: 205, + 803: 204, + 804: 236, + 805: 210, + 806: 242, + 807: 213, + 808: 245, + 809: 123, + 810: 125, + 811: 92, + 812: 94, + 813: 95, + 814: 124, + 815: 126, + 816: 196, + 817: 228, + 818: 214, + 819: 246, + 820: 223, + 821: 165, + 822: 164, + 823: 9474, + 824: 197, + 825: 229, + 826: 216, + 827: 248, + 828: 9484, + 829: 9488, + 830: 9492, + 831: 9496 + }, + De = [4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, 4864, 4896, 5120, 5152], + Me = function e(t, i) { + e.prototype.init.call(this), this.field_ = t || 0, this.dataChannel_ = i || 0, this.name_ = "CC" + (1 + (this.field_ << 1 | this.dataChannel_)), this.setConstants(), this.reset(), this.push = function (e) { + var t, i, n, r, a; + if ((t = 32639 & e.ccData) !== this.lastControlCode_) { + if (4096 == (61440 & t) ? this.lastControlCode_ = t : t !== this.PADDING_ && (this.lastControlCode_ = null), n = t >>> 8, r = 255 & t, t !== this.PADDING_) + if (t === this.RESUME_CAPTION_LOADING_) this.mode_ = "popOn"; + else if (t === this.END_OF_CAPTION_) this.mode_ = "popOn", this.clearFormatting(e.pts), this.flushDisplayed(e.pts), i = this.displayed_, this.displayed_ = this.nonDisplayed_, this.nonDisplayed_ = i, this.startPts_ = e.pts; + else if (t === this.ROLL_UP_2_ROWS_) this.rollUpRows_ = 2, this.setRollUp(e.pts); + else if (t === this.ROLL_UP_3_ROWS_) this.rollUpRows_ = 3, this.setRollUp(e.pts); + else if (t === this.ROLL_UP_4_ROWS_) this.rollUpRows_ = 4, this.setRollUp(e.pts); + else if (t === this.CARRIAGE_RETURN_) this.clearFormatting(e.pts), this.flushDisplayed(e.pts), this.shiftRowsUp_(), this.startPts_ = e.pts; + else if (t === this.BACKSPACE_) "popOn" === this.mode_ ? this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1) : this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1); + else if (t === this.ERASE_DISPLAYED_MEMORY_) this.flushDisplayed(e.pts), this.displayed_ = Le(); + else if (t === this.ERASE_NON_DISPLAYED_MEMORY_) this.nonDisplayed_ = Le(); + else if (t === this.RESUME_DIRECT_CAPTIONING_) "paintOn" !== this.mode_ && (this.flushDisplayed(e.pts), this.displayed_ = Le()), this.mode_ = "paintOn", this.startPts_ = e.pts; + else if (this.isSpecialCharacter(n, r)) a = Pe((n = (3 & n) << 8) | r), this[this.mode_](e.pts, a), this.column_++; + else if (this.isExtCharacter(n, r)) "popOn" === this.mode_ ? this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1) : this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1), a = Pe((n = (3 & n) << 8) | r), this[this.mode_](e.pts, a), this.column_++; + else if (this.isMidRowCode(n, r)) this.clearFormatting(e.pts), this[this.mode_](e.pts, " "), this.column_++, 14 == (14 & r) && this.addFormatting(e.pts, ["i"]), 1 == (1 & r) && this.addFormatting(e.pts, ["u"]); + else if (this.isOffsetControlCode(n, r)) this.column_ += 3 & r; + else if (this.isPAC(n, r)) { + var s = De.indexOf(7968 & t); + "rollUp" === this.mode_ && (s - this.rollUpRows_ + 1 < 0 && (s = this.rollUpRows_ - 1), this.setRollUp(e.pts, s)), s !== this.row_ && (this.clearFormatting(e.pts), this.row_ = s), 1 & r && -1 === this.formatting_.indexOf("u") && this.addFormatting(e.pts, ["u"]), 16 == (16 & t) && (this.column_ = 4 * ((14 & t) >> 1)), this.isColorPAC(r) && 14 == (14 & r) && this.addFormatting(e.pts, ["i"]) + } else this.isNormalChar(n) && (0 === r && (r = null), a = Pe(n), a += Pe(r), this[this.mode_](e.pts, a), this.column_ += a.length) + } else this.lastControlCode_ = null + } + }; + Me.prototype = new V, Me.prototype.flushDisplayed = function (e) { + var t = this.displayed_.map(function (e) { + try { + return e.trim() + } catch (e) { + return "" + } + }).join("\n").replace(/^\n+|\n+$/g, ""); + t.length && this.trigger("data", { + startPts: this.startPts_, + endPts: e, + text: t, + stream: this.name_ + }) + }, Me.prototype.reset = function () { + this.mode_ = "popOn", this.topRow_ = 0, this.startPts_ = 0, this.displayed_ = Le(), this.nonDisplayed_ = Le(), this.lastControlCode_ = null, this.column_ = 0, this.row_ = 14, this.rollUpRows_ = 2, this.formatting_ = [] + }, Me.prototype.setConstants = function () { + 0 === this.dataChannel_ ? (this.BASE_ = 16, this.EXT_ = 17, this.CONTROL_ = (20 | this.field_) << 8, this.OFFSET_ = 23) : 1 === this.dataChannel_ && (this.BASE_ = 24, this.EXT_ = 25, this.CONTROL_ = (28 | this.field_) << 8, this.OFFSET_ = 31), this.PADDING_ = 0, this.RESUME_CAPTION_LOADING_ = 32 | this.CONTROL_, this.END_OF_CAPTION_ = 47 | this.CONTROL_, this.ROLL_UP_2_ROWS_ = 37 | this.CONTROL_, this.ROLL_UP_3_ROWS_ = 38 | this.CONTROL_, this.ROLL_UP_4_ROWS_ = 39 | this.CONTROL_, this.CARRIAGE_RETURN_ = 45 | this.CONTROL_, this.RESUME_DIRECT_CAPTIONING_ = 41 | this.CONTROL_, this.BACKSPACE_ = 33 | this.CONTROL_, this.ERASE_DISPLAYED_MEMORY_ = 44 | this.CONTROL_, this.ERASE_NON_DISPLAYED_MEMORY_ = 46 | this.CONTROL_ + }, Me.prototype.isSpecialCharacter = function (e, t) { + return e === this.EXT_ && 48 <= t && t <= 63 + }, Me.prototype.isExtCharacter = function (e, t) { + return (e === this.EXT_ + 1 || e === this.EXT_ + 2) && 32 <= t && t <= 63 + }, Me.prototype.isMidRowCode = function (e, t) { + return e === this.EXT_ && 32 <= t && t <= 47 + }, Me.prototype.isOffsetControlCode = function (e, t) { + return e === this.OFFSET_ && 33 <= t && t <= 35 + }, Me.prototype.isPAC = function (e, t) { + return e >= this.BASE_ && e < this.BASE_ + 8 && 64 <= t && t <= 127 + }, Me.prototype.isColorPAC = function (e) { + return 64 <= e && e <= 79 || 96 <= e && e <= 127 + }, Me.prototype.isNormalChar = function (e) { + return 32 <= e && e <= 127 + }, Me.prototype.setRollUp = function (e, t) { + if ("rollUp" !== this.mode_ && (this.row_ = 14, this.mode_ = "rollUp", this.flushDisplayed(e), this.nonDisplayed_ = Le(), this.displayed_ = Le()), void 0 !== t && t !== this.row_) + for (var i = 0; i < this.rollUpRows_; i++) this.displayed_[t - i] = this.displayed_[this.row_ - i], this.displayed_[this.row_ - i] = ""; + void 0 === t && (t = this.row_), this.topRow_ = t - this.rollUpRows_ + 1 + }, Me.prototype.addFormatting = function (e, t) { + this.formatting_ = this.formatting_.concat(t); + var i = t.reduce(function (e, t) { + return e + "<" + t + ">" + }, ""); + this[this.mode_](e, i) + }, Me.prototype.clearFormatting = function (e) { + if (this.formatting_.length) { + var t = this.formatting_.reverse().reduce(function (e, t) { + return e + "" + }, ""); + this.formatting_ = [], this[this.mode_](e, t) + } + }, Me.prototype.popOn = function (e, t) { + var i = this.nonDisplayed_[this.row_]; + i += t, this.nonDisplayed_[this.row_] = i + }, Me.prototype.rollUp = function (e, t) { + var i = this.displayed_[this.row_]; + i += t, this.displayed_[this.row_] = i + }, Me.prototype.shiftRowsUp_ = function () { + var e; + for (e = 0; e < this.topRow_; e++) this.displayed_[e] = ""; + for (e = this.row_ + 1; e < 15; e++) this.displayed_[e] = ""; + for (e = this.topRow_; e < this.row_; e++) this.displayed_[e] = this.displayed_[e + 1]; + this.displayed_[this.row_] = "" + }, Me.prototype.paintOn = function (e, t) { + var i = this.displayed_[this.row_]; + i += t, this.displayed_[this.row_] = i + }; + + function Re(e, t) { + var i = 1; + for (t < e && (i = -1); 4294967296 < Math.abs(t - e);) e += 8589934592 * i; + return e + } + + function Ne(e) { + var t, i; + Ne.prototype.init.call(this), this.type_ = e || "shared", this.push = function (e) { + "shared" !== this.type_ && e.type !== this.type_ || (void 0 === i && (i = e.dts), e.dts = Re(e.dts, i), e.pts = Re(e.pts, i), t = e.dts, this.trigger("data", e)) + }, this.flush = function () { + i = t, this.trigger("done") + }, this.endTimeline = function () { + this.flush(), this.trigger("endedtimeline") + }, this.discontinuity = function () { + t = i = void 0 + }, this.reset = function () { + this.discontinuity(), this.trigger("reset") + } + } + var Ue = { + CaptionStream: G, + Cea608Stream: Me + }, + Fe = { + H264_STREAM_TYPE: 27, + ADTS_STREAM_TYPE: 15, + METADATA_STREAM_TYPE: 21 + }; + Ne.prototype = new V; + + function Be(e, t, i) { + var n, r = ""; + for (n = t; n < i; n++) r += "%" + ("00" + e[n].toString(16)).slice(-2); + return r + } + + function je(e, t, i) { + return decodeURIComponent(Be(e, t, i)) + } + + function Ve(e) { + return e[0] << 21 | e[1] << 14 | e[2] << 7 | e[3] + } + var qe, He = Ne, + We = { + TXXX: function (e) { + var t; + if (3 === e.data[0]) { + for (t = 1; t < e.data.length; t++) + if (0 === e.data[t]) { + e.description = je(e.data, 1, t), e.value = je(e.data, t + 1, e.data.length).replace(/\0*$/, ""); + break + } e.data = e.value + } + }, + WXXX: function (e) { + var t; + if (3 === e.data[0]) + for (t = 1; t < e.data.length; t++) + if (0 === e.data[t]) { + e.description = je(e.data, 1, t), e.url = je(e.data, t + 1, e.data.length); + break + } + }, + PRIV: function (e) { + var t, i; + for (t = 0; t < e.data.length; t++) + if (0 === e.data[t]) { + e.owner = (i = e.data, unescape(Be(i, 0, t))); + break + } e.privateData = e.data.subarray(t + 1), e.data = e.privateData + } + }; + (qe = function (e) { + var t, u = { + debug: !(!e || !e.debug), + descriptor: e && e.descriptor + }, + l = 0, + c = [], + d = 0; + if (qe.prototype.init.call(this), this.dispatchType = Fe.METADATA_STREAM_TYPE.toString(16), u.descriptor) + for (t = 0; t < u.descriptor.length; t++) this.dispatchType += ("00" + u.descriptor[t].toString(16)).slice(-2); + this.push = function (e) { + var t, i, n, r, a; + if ("timed-metadata" === e.type) + if (e.dataAlignmentIndicator && (d = 0, c.length = 0), 0 === c.length && (e.data.length < 10 || e.data[0] !== "I".charCodeAt(0) || e.data[1] !== "D".charCodeAt(0) || e.data[2] !== "3".charCodeAt(0))) u.debug; + else if (c.push(e), d += e.data.byteLength, 1 === c.length && (l = Ve(e.data.subarray(6, 10)), l += 10), !(d < l)) { + for (t = { + data: new Uint8Array(l), + frames: [], + pts: c[0].pts, + dts: c[0].dts + }, a = 0; a < l;) t.data.set(c[0].data.subarray(0, l - a), a), a += c[0].data.byteLength, d -= c[0].data.byteLength, c.shift(); + i = 10, 64 & t.data[5] && (i += 4, i += Ve(t.data.subarray(10, 14)), l -= Ve(t.data.subarray(16, 20))); + do { + if ((n = Ve(t.data.subarray(i + 4, i + 8))) < 1) return; + if ((r = { + id: String.fromCharCode(t.data[i], t.data[i + 1], t.data[i + 2], t.data[i + 3]), + data: t.data.subarray(i + 10, i + n + 10) + }).key = r.id, We[r.id] && (We[r.id](r), "com.apple.streaming.transportStreamTimestamp" === r.owner)) { + var s = r.data, + o = (1 & s[3]) << 30 | s[4] << 22 | s[5] << 14 | s[6] << 6 | s[7] >>> 2; + o *= 4, o += 3 & s[7], r.timeStamp = o, void 0 === t.pts && void 0 === t.dts && (t.pts = r.timeStamp, t.dts = r.timeStamp), this.trigger("timestamp", r) + } + t.frames.push(r), i += 10, i += n + } while (i < l); + this.trigger("data", t) + } + } + }).prototype = new V; + var ze, Ge, Xe, Ke = qe, + Ye = He; + (ze = function () { + var r = new Uint8Array(188), + a = 0; + ze.prototype.init.call(this), this.push = function (e) { + var t, i = 0, + n = 188; + for (a ? ((t = new Uint8Array(e.byteLength + a)).set(r.subarray(0, a)), t.set(e, a), a = 0) : t = e; n < t.byteLength;) 71 !== t[i] || 71 !== t[n] ? (i++, n++) : (this.trigger("data", t.subarray(i, n)), i += 188, n += 188); + i < t.byteLength && (r.set(t.subarray(i), 0), a = t.byteLength - i) + }, this.flush = function () { + 188 === a && 71 === r[0] && (this.trigger("data", r), a = 0), this.trigger("done") + }, this.endTimeline = function () { + this.flush(), this.trigger("endedtimeline") + }, this.reset = function () { + a = 0, this.trigger("reset") + } + }).prototype = new V, (Ge = function () { + var n, r, a, s; + Ge.prototype.init.call(this), (s = this).packetsWaitingForPmt = [], this.programMapTable = void 0, n = function (e, t) { + var i = 0; + t.payloadUnitStartIndicator && (i += e[i] + 1), "pat" === t.type ? r(e.subarray(i), t) : a(e.subarray(i), t) + }, r = function (e, t) { + t.section_number = e[7], t.last_section_number = e[8], s.pmtPid = (31 & e[10]) << 8 | e[11], t.pmtPid = s.pmtPid + }, a = function (e, t) { + var i, n; + if (1 & e[5]) { + for (s.programMapTable = { + video: null, + audio: null, + "timed-metadata": {} + }, i = 3 + ((15 & e[1]) << 8 | e[2]) - 4, n = 12 + ((15 & e[10]) << 8 | e[11]); n < i;) { + var r = e[n], + a = (31 & e[n + 1]) << 8 | e[n + 2]; + r === Fe.H264_STREAM_TYPE && null === s.programMapTable.video ? s.programMapTable.video = a : r === Fe.ADTS_STREAM_TYPE && null === s.programMapTable.audio ? s.programMapTable.audio = a : r === Fe.METADATA_STREAM_TYPE && (s.programMapTable["timed-metadata"][a] = r), n += 5 + ((15 & e[n + 3]) << 8 | e[n + 4]) + } + t.programMapTable = s.programMapTable + } + }, this.push = function (e) { + var t = {}, + i = 4; + if (t.payloadUnitStartIndicator = !!(64 & e[1]), t.pid = 31 & e[1], t.pid <<= 8, t.pid |= e[2], 1 < (48 & e[3]) >>> 4 && (i += e[i] + 1), 0 === t.pid) t.type = "pat", n(e.subarray(i), t), this.trigger("data", t); + else if (t.pid === this.pmtPid) + for (t.type = "pmt", n(e.subarray(i), t), this.trigger("data", t); this.packetsWaitingForPmt.length;) this.processPes_.apply(this, this.packetsWaitingForPmt.shift()); + else void 0 === this.programMapTable ? this.packetsWaitingForPmt.push([e, i, t]) : this.processPes_(e, i, t) + }, this.processPes_ = function (e, t, i) { + i.pid === this.programMapTable.video ? i.streamType = Fe.H264_STREAM_TYPE : i.pid === this.programMapTable.audio ? i.streamType = Fe.ADTS_STREAM_TYPE : i.streamType = this.programMapTable["timed-metadata"][i.pid], i.type = "pes", i.data = e.subarray(t), this.trigger("data", i) + } + }).prototype = new V, Ge.STREAM_TYPES = { + h264: 27, + adts: 15 + }, (Xe = function () { + function n(e, t, i) { + var n, r, a = new Uint8Array(e.size), + s = { + type: t + }, + o = 0, + u = 0; + if (e.data.length && !(e.size < 9)) { + for (s.trackId = e.data[0].pid, o = 0; o < e.data.length; o++) r = e.data[o], a.set(r.data, u), u += r.data.byteLength; + ! function (e, t) { + var i; + t.packetLength = 6 + (e[4] << 8 | e[5]), t.dataAlignmentIndicator = 0 != (4 & e[6]), 192 & (i = e[7]) && (t.pts = (14 & e[9]) << 27 | (255 & e[10]) << 20 | (254 & e[11]) << 12 | (255 & e[12]) << 5 | (254 & e[13]) >>> 3, t.pts *= 4, t.pts += (6 & e[13]) >>> 1, t.dts = t.pts, 64 & i && (t.dts = (14 & e[14]) << 27 | (255 & e[15]) << 20 | (254 & e[16]) << 12 | (255 & e[17]) << 5 | (254 & e[18]) >>> 3, t.dts *= 4, t.dts += (6 & e[18]) >>> 1)), t.data = e.subarray(9 + e[8]) + }(a, s), n = "video" === t || s.packetLength <= e.size, (i || n) && (e.size = 0, e.data.length = 0), n && l.trigger("data", s) + } + } + var t, l = this, + r = { + data: [], + size: 0 + }, + a = { + data: [], + size: 0 + }, + s = { + data: [], + size: 0 + }; + Xe.prototype.init.call(this), this.push = function (i) { + ({ + pat: function () {}, + pes: function () { + var e, t; + switch (i.streamType) { + case Fe.H264_STREAM_TYPE: + e = r, t = "video"; + break; + case Fe.ADTS_STREAM_TYPE: + e = a, t = "audio"; + break; + case Fe.METADATA_STREAM_TYPE: + e = s, t = "timed-metadata"; + break; + default: + return + } + i.payloadUnitStartIndicator && n(e, t, !0), e.data.push(i), e.size += i.data.byteLength + }, + pmt: function () { + var e = { + type: "metadata", + tracks: [] + }; + null !== (t = i.programMapTable).video && e.tracks.push({ + timelineStartInfo: { + baseMediaDecodeTime: 0 + }, + id: +t.video, + codec: "avc", + type: "video" + }), null !== t.audio && e.tracks.push({ + timelineStartInfo: { + baseMediaDecodeTime: 0 + }, + id: +t.audio, + codec: "adts", + type: "audio" + }), l.trigger("data", e) + } + })[i.type]() + }, this.reset = function () { + r.size = 0, r.data.length = 0, a.size = 0, a.data.length = 0, this.trigger("reset") + }, this.flushStreams_ = function () { + n(r, "video"), n(a, "audio"), n(s, "timed-metadata") + }, this.flush = function () { + this.flushStreams_(), this.trigger("done") + } + }).prototype = new V; + var $e = { + PAT_PID: 0, + MP2T_PACKET_LENGTH: 188, + TransportPacketStream: ze, + TransportParseStream: Ge, + ElementaryStream: Xe, + TimestampRolloverStream: Ye, + CaptionStream: Ue.CaptionStream, + Cea608Stream: Ue.Cea608Stream, + MetadataStream: Ke + }; + for (var Qe in Fe) Fe.hasOwnProperty(Qe) && ($e[Qe] = Fe[Qe]); + var Je, Ze = $e, + et = ce, + tt = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; + (Je = function (u) { + var l, c = 0; + Je.prototype.init.call(this), this.push = function (e) { + var t, i, n, r, a, s, o = 0; + if (u || (c = 0), "audio" === e.type) + for (l ? (r = l, (l = new Uint8Array(r.byteLength + e.data.byteLength)).set(r), l.set(e.data, r.byteLength)) : l = e.data; o + 5 < l.length;) + if (255 === l[o] && 240 == (246 & l[o + 1])) { + if (i = 2 * (1 & ~l[o + 1]), t = (3 & l[o + 3]) << 11 | l[o + 4] << 3 | (224 & l[o + 5]) >> 5, s = (a = 1024 * (1 + (3 & l[o + 6]))) * et / tt[(60 & l[o + 2]) >>> 2], n = o + t, l.byteLength < n) return; + if (this.trigger("data", { + pts: e.pts + c * s, + dts: e.dts + c * s, + sampleCount: a, + audioobjecttype: 1 + (l[o + 2] >>> 6 & 3), + channelcount: (1 & l[o + 2]) << 2 | (192 & l[o + 3]) >>> 6, + samplerate: tt[(60 & l[o + 2]) >>> 2], + samplingfrequencyindex: (60 & l[o + 2]) >>> 2, + samplesize: 16, + data: l.subarray(o + 7 + i, n) + }), c++, l.byteLength === n) return void(l = void 0); + l = l.subarray(n) + } else o++ + }, this.flush = function () { + c = 0, this.trigger("done") + }, this.reset = function () { + l = void 0, this.trigger("reset") + }, this.endTimeline = function () { + l = void 0, this.trigger("endedtimeline") + } + }).prototype = new V; + var it, nt, rt, at = Je, + st = function (n) { + var r = n.byteLength, + a = 0, + s = 0; + this.length = function () { + return 8 * r + }, this.bitsAvailable = function () { + return 8 * r + s + }, this.loadWord = function () { + var e = n.byteLength - r, + t = new Uint8Array(4), + i = Math.min(4, r); + if (0 === i) throw new Error("no bytes available"); + t.set(n.subarray(e, e + i)), a = new DataView(t.buffer).getUint32(0), s = 8 * i, r -= i + }, this.skipBits = function (e) { + var t; + e < s || (e -= s, e -= 8 * (t = Math.floor(e / 8)), r -= t, this.loadWord()), a <<= e, s -= e + }, this.readBits = function (e) { + var t = Math.min(s, e), + i = a >>> 32 - t; + return 0 < (s -= t) ? a <<= t : 0 < r && this.loadWord(), 0 < (t = e - t) ? i << t | this.readBits(t) : i + }, this.skipLeadingZeros = function () { + var e; + for (e = 0; e < s; ++e) + if (0 != (a & 2147483648 >>> e)) return a <<= e, s -= e, e; + return this.loadWord(), e + this.skipLeadingZeros() + }, this.skipUnsignedExpGolomb = function () { + this.skipBits(1 + this.skipLeadingZeros()) + }, this.skipExpGolomb = function () { + this.skipBits(1 + this.skipLeadingZeros()) + }, this.readUnsignedExpGolomb = function () { + var e = this.skipLeadingZeros(); + return this.readBits(e + 1) - 1 + }, this.readExpGolomb = function () { + var e = this.readUnsignedExpGolomb(); + return 1 & e ? 1 + e >>> 1 : -1 * (e >>> 1) + }, this.readBoolean = function () { + return 1 === this.readBits(1) + }, this.readUnsignedByte = function () { + return this.readBits(8) + }, this.loadWord() + }; + (nt = function () { + var n, r, a = 0; + nt.prototype.init.call(this), this.push = function (e) { + for (var t, i = (r = r ? ((t = new Uint8Array(r.byteLength + e.data.byteLength)).set(r), t.set(e.data, r.byteLength), t) : e.data).byteLength; a < i - 3; a++) + if (1 === r[a + 2]) { + n = a + 5; + break + } for (; n < i;) switch (r[n]) { + case 0: + if (0 !== r[n - 1]) { + n += 2; + break + } + if (0 !== r[n - 2]) { + n++; + break + } + for (a + 3 !== n - 2 && this.trigger("data", r.subarray(a + 3, n - 2)); 1 !== r[++n] && n < i;); + a = n - 2, n += 3; + break; + case 1: + if (0 !== r[n - 1] || 0 !== r[n - 2]) { + n += 3; + break + } + this.trigger("data", r.subarray(a + 3, n - 2)), a = n - 2, n += 3; + break; + default: + n += 3 + } + r = r.subarray(a), n -= a, a = 0 + }, this.reset = function () { + r = null, a = 0, this.trigger("reset") + }, this.flush = function () { + r && 3 < r.byteLength && this.trigger("data", r.subarray(a + 3)), r = null, a = 0, this.trigger("done") + }, this.endTimeline = function () { + this.flush(), this.trigger("endedtimeline") + } + }).prototype = new V, rt = { + 100: !0, + 110: !0, + 122: !0, + 244: !0, + 44: !0, + 83: !0, + 86: !0, + 118: !0, + 128: !0, + 138: !0, + 139: !0, + 134: !0 + }, (it = function () { + var i, n, r, a, s, o, _, t = new nt; + it.prototype.init.call(this), (i = this).push = function (e) { + "video" === e.type && (n = e.trackId, r = e.pts, a = e.dts, t.push(e)) + }, t.on("data", function (e) { + var t = { + trackId: n, + pts: r, + dts: a, + data: e + }; + switch (31 & e[0]) { + case 5: + t.nalUnitType = "slice_layer_without_partitioning_rbsp_idr"; + break; + case 6: + t.nalUnitType = "sei_rbsp", t.escapedRBSP = s(e.subarray(1)); + break; + case 7: + t.nalUnitType = "seq_parameter_set_rbsp", t.escapedRBSP = s(e.subarray(1)), t.config = o(t.escapedRBSP); + break; + case 8: + t.nalUnitType = "pic_parameter_set_rbsp"; + break; + case 9: + t.nalUnitType = "access_unit_delimiter_rbsp" + } + i.trigger("data", t) + }), t.on("done", function () { + i.trigger("done") + }), t.on("partialdone", function () { + i.trigger("partialdone") + }), t.on("reset", function () { + i.trigger("reset") + }), t.on("endedtimeline", function () { + i.trigger("endedtimeline") + }), this.flush = function () { + t.flush() + }, this.partialFlush = function () { + t.partialFlush() + }, this.reset = function () { + t.reset() + }, this.endTimeline = function () { + t.endTimeline() + }, _ = function (e, t) { + var i, n = 8, + r = 8; + for (i = 0; i < e; i++) 0 !== r && (r = (n + t.readExpGolomb() + 256) % 256), n = 0 === r ? n : r + }, s = function (e) { + for (var t, i, n = e.byteLength, r = [], a = 1; a < n - 2;) 0 === e[a] && 0 === e[a + 1] && 3 === e[a + 2] ? (r.push(a + 2), a += 2) : a++; + if (0 === r.length) return e; + t = n - r.length, i = new Uint8Array(t); + var s = 0; + for (a = 0; a < t; s++, a++) s === r[0] && (s++, r.shift()), i[a] = e[s]; + return i + }, o = function (e) { + var t, i, n, r, a, s, o, u, l, c, d, h, p, f = 0, + m = 0, + g = 0, + v = 0, + y = 1; + if (i = (t = new st(e)).readUnsignedByte(), r = t.readUnsignedByte(), n = t.readUnsignedByte(), t.skipUnsignedExpGolomb(), rt[i] && (3 === (a = t.readUnsignedExpGolomb()) && t.skipBits(1), t.skipUnsignedExpGolomb(), t.skipUnsignedExpGolomb(), t.skipBits(1), t.readBoolean())) + for (d = 3 !== a ? 8 : 12, p = 0; p < d; p++) t.readBoolean() && _(p < 6 ? 16 : 64, t); + if (t.skipUnsignedExpGolomb(), 0 === (s = t.readUnsignedExpGolomb())) t.readUnsignedExpGolomb(); + else if (1 === s) + for (t.skipBits(1), t.skipExpGolomb(), t.skipExpGolomb(), o = t.readUnsignedExpGolomb(), p = 0; p < o; p++) t.skipExpGolomb(); + if (t.skipUnsignedExpGolomb(), t.skipBits(1), u = t.readUnsignedExpGolomb(), l = t.readUnsignedExpGolomb(), 0 === (c = t.readBits(1)) && t.skipBits(1), t.skipBits(1), t.readBoolean() && (f = t.readUnsignedExpGolomb(), m = t.readUnsignedExpGolomb(), g = t.readUnsignedExpGolomb(), v = t.readUnsignedExpGolomb()), t.readBoolean() && t.readBoolean()) { + switch (t.readUnsignedByte()) { + case 1: + h = [1, 1]; + break; + case 2: + h = [12, 11]; + break; + case 3: + h = [10, 11]; + break; + case 4: + h = [16, 11]; + break; + case 5: + h = [40, 33]; + break; + case 6: + h = [24, 11]; + break; + case 7: + h = [20, 11]; + break; + case 8: + h = [32, 11]; + break; + case 9: + h = [80, 33]; + break; + case 10: + h = [18, 11]; + break; + case 11: + h = [15, 11]; + break; + case 12: + h = [64, 33]; + break; + case 13: + h = [160, 99]; + break; + case 14: + h = [4, 3]; + break; + case 15: + h = [3, 2]; + break; + case 16: + h = [2, 1]; + break; + case 255: + h = [t.readUnsignedByte() << 8 | t.readUnsignedByte(), t.readUnsignedByte() << 8 | t.readUnsignedByte()] + } + h && (y = h[0] / h[1]) + } + return { + profileIdc: i, + levelIdc: n, + profileCompatibility: r, + width: Math.ceil((16 * (u + 1) - 2 * f - 2 * m) * y), + height: (2 - c) * (l + 1) * 16 - 2 * g - 2 * v, + sarRatio: h + } + } + }).prototype = new V; + + function ot(e, t) { + var i = e[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9]; + return i = 0 <= i ? i : 0, (16 & e[t + 5]) >> 4 ? i + 20 : i + 10 + } + var ut, lt = { + H264Stream: it, + NalByteStream: nt + }, + ct = function (e) { + var t = function e(t, i) { + return t.length - i < 10 || t[i] !== "I".charCodeAt(0) || t[i + 1] !== "D".charCodeAt(0) || t[i + 2] !== "3".charCodeAt(0) ? i : e(t, i += ot(t, i)) + }(e, 0); + return e.length >= t + 2 && 255 == (255 & e[t]) && 240 == (240 & e[t + 1]) && 16 == (22 & e[t + 1]) + }, + dt = ot, + ht = function (e, t) { + var i = (224 & e[t + 5]) >> 5, + n = e[t + 4] << 3; + return 6144 & e[t + 3] | n | i + }; + (ut = function () { + var o = new Uint8Array, + u = 0; + ut.prototype.init.call(this), this.setTimestamp = function (e) { + u = e + }, this.push = function (e) { + var t, i, n, r, a = 0, + s = 0; + for (o.length ? (r = o.length, (o = new Uint8Array(e.byteLength + r)).set(o.subarray(0, r)), o.set(e, r)) : o = e; 3 <= o.length - s;) + if (o[s] !== "I".charCodeAt(0) || o[s + 1] !== "D".charCodeAt(0) || o[s + 2] !== "3".charCodeAt(0)) + if (255 != (255 & o[s]) || 240 != (240 & o[s + 1])) s++; + else { + if (o.length - s < 7) break; + if (s + (a = ht(o, s)) > o.length) break; + n = { + type: "audio", + data: o.subarray(s, s + a), + pts: u, + dts: u + }, this.trigger("data", n), s += a + } + else { + if (o.length - s < 10) break; + if (s + (a = dt(o, s)) > o.length) break; + i = { + type: "timed-metadata", + data: o.subarray(s, s + a) + }, this.trigger("data", i), s += a + } + t = o.length - s, o = 0 < t ? o.subarray(s) : new Uint8Array + }, this.reset = function () { + o = new Uint8Array, this.trigger("reset") + }, this.endTimeline = function () { + o = new Uint8Array, this.trigger("endedtimeline") + } + }).prototype = new V; + + function pt(e, t) { + var i; + if (e.length !== t.length) return !1; + for (i = 0; i < e.length; i++) + if (e[i] !== t[i]) return !1; + return !0 + } + + function ft(e, t, i, n, r, a) { + return { + start: { + dts: e, + pts: e + (i - t) + }, + end: { + dts: e + (n - t), + pts: e + (r - i) + }, + prependedContentDuration: a, + baseMediaDecodeTime: e + } + } + var mt, gt, vt, yt, _t = ut, + bt = ["audioobjecttype", "channelcount", "samplerate", "samplingfrequencyindex", "samplesize"], + Tt = ["width", "height", "profileIdc", "levelIdc", "profileCompatibility", "sarRatio"], + St = lt.H264Stream, + kt = ct, + Ct = ce; + (gt = function (a, s) { + var o = [], + u = 0, + l = 0, + c = 0, + d = 1 / 0; + s = s || {}, gt.prototype.init.call(this), this.push = function (t) { + Ce(a, t), a && bt.forEach(function (e) { + a[e] = t[e] + }), o.push(t) + }, this.setEarliestDts = function (e) { + l = e + }, this.setVideoBaseMediaDecodeTime = function (e) { + d = e + }, this.setAudioAppendStart = function (e) { + c = e + }, this.flush = function () { + var e, t, i, n, r; + 0 !== o.length && (e = ye(o, a, l), a.baseMediaDecodeTime = ke(a, s.keepOriginalTimestamps), ve(a, e, c, d), a.samples = _e(e), i = J(be(e)), o = [], t = Z(u, [a]), n = new Uint8Array(t.byteLength + i.byteLength), u++, n.set(t), n.set(i, t.byteLength), Se(a), r = Math.ceil(1024 * Ct / a.samplerate), e.length && this.trigger("timingInfo", { + start: e[0].pts, + end: e[0].pts + e.length * r + }), this.trigger("data", { + track: a, + boxes: n + })), this.trigger("done", "AudioSegmentStream") + }, this.reset = function () { + Se(a), o = [], this.trigger("reset") + } + }).prototype = new V, (mt = function (c, d) { + var t, i, h = 0, + p = [], + f = []; + d = d || {}, mt.prototype.init.call(this), delete c.minPTS, this.gopCache_ = [], this.push = function (e) { + Ce(c, e), "seq_parameter_set_rbsp" !== e.nalUnitType || t || (t = e.config, c.sps = [e.data], Tt.forEach(function (e) { + c[e] = t[e] + }, this)), "pic_parameter_set_rbsp" !== e.nalUnitType || i || (i = e.data, c.pps = [e.data]), p.push(e) + }, this.flush = function () { + for (var e, t, i, n, r, a, s, o, u = 0; p.length && "access_unit_delimiter_rbsp" !== p[0].nalUnitType;) p.shift(); + if (0 === p.length) return this.resetStream_(), void this.trigger("done", "VideoSegmentStream"); + if (e = te(p), (i = ie(e))[0][0].keyFrame || ((t = this.getGopForFusion_(p[0], c)) ? (u = t.duration, i.unshift(t), i.byteLength += t.byteLength, i.nalCount += t.nalCount, i.pts = t.pts, i.dts = t.dts, i.duration += t.duration) : i = ne(i)), f.length) { + var l; + if (!(l = d.alignGopsAtEnd ? this.alignGopsAtEnd_(i) : this.alignGopsAtStart_(i))) return this.gopCache_.unshift({ + gop: i.pop(), + pps: c.pps, + sps: c.sps + }), this.gopCache_.length = Math.min(6, this.gopCache_.length), p = [], this.resetStream_(), void this.trigger("done", "VideoSegmentStream"); + Se(c), i = l + } + Ce(c, i), c.samples = re(i), r = J(ae(i)), c.baseMediaDecodeTime = ke(c, d.keepOriginalTimestamps), this.trigger("processedGopsInfo", i.map(function (e) { + return { + pts: e.pts, + dts: e.dts, + byteLength: e.byteLength + } + })), s = i[0], o = i[i.length - 1], this.trigger("segmentTimingInfo", ft(c.baseMediaDecodeTime, s.dts, s.pts, o.dts + o.duration, o.pts + o.duration, u)), this.trigger("timingInfo", { + start: i[0].pts, + end: i[i.length - 1].pts + i[i.length - 1].duration + }), this.gopCache_.unshift({ + gop: i.pop(), + pps: c.pps, + sps: c.sps + }), this.gopCache_.length = Math.min(6, this.gopCache_.length), p = [], this.trigger("baseMediaDecodeTime", c.baseMediaDecodeTime), this.trigger("timelineStartInfo", c.timelineStartInfo), n = Z(h, [c]), a = new Uint8Array(n.byteLength + r.byteLength), h++, a.set(n), a.set(r, n.byteLength), this.trigger("data", { + track: c, + boxes: a + }), this.resetStream_(), this.trigger("done", "VideoSegmentStream") + }, this.reset = function () { + this.resetStream_(), p = [], this.gopCache_.length = 0, f.length = 0, this.trigger("reset") + }, this.resetStream_ = function () { + Se(c), i = t = void 0 + }, this.getGopForFusion_ = function (e) { + var t, i, n, r, a, s = 1 / 0; + for (a = 0; a < this.gopCache_.length; a++) n = (r = this.gopCache_[a]).gop, c.pps && pt(c.pps[0], r.pps[0]) && c.sps && pt(c.sps[0], r.sps[0]) && (n.dts < c.timelineStartInfo.dts || -1e4 <= (t = e.dts - n.dts - n.duration) && t <= 45e3 && (!i || t < s) && (i = r, s = t)); + return i ? i.gop : null + }, this.alignGopsAtStart_ = function (e) { + var t, i, n, r, a, s, o, u; + for (a = e.byteLength, s = e.nalCount, o = e.duration, t = i = 0; t < f.length && i < e.length && (n = f[t], r = e[i], n.pts !== r.pts);) r.pts > n.pts ? t++ : (i++, a -= r.byteLength, s -= r.nalCount, o -= r.duration); + return 0 === i ? e : i === e.length ? null : ((u = e.slice(i)).byteLength = a, u.duration = o, u.nalCount = s, u.pts = u[0].pts, u.dts = u[0].dts, u) + }, this.alignGopsAtEnd_ = function (e) { + var t, i, n, r, a, s, o; + for (t = f.length - 1, i = e.length - 1, a = null, s = !1; 0 <= t && 0 <= i;) { + if (n = f[t], r = e[i], n.pts === r.pts) { + s = !0; + break + } + n.pts > r.pts ? t-- : (t === f.length - 1 && (a = i), i--) + } + if (!s && null === a) return null; + if (0 === (o = s ? i : a)) return e; + var u = e.slice(o), + l = u.reduce(function (e, t) { + return e.byteLength += t.byteLength, e.duration += t.duration, e.nalCount += t.nalCount, e + }, { + byteLength: 0, + duration: 0, + nalCount: 0 + }); + return u.byteLength = l.byteLength, u.duration = l.duration, u.nalCount = l.nalCount, u.pts = u[0].pts, u.dts = u[0].dts, u + }, this.alignGopsWith = function (e) { + f = e + } + }).prototype = new V, (yt = function (e, t) { + this.numberOfTracks = 0, this.metadataStream = t, "undefined" != typeof (e = e || {}).remux ? this.remuxTracks = !!e.remux : this.remuxTracks = !0, "boolean" == typeof e.keepOriginalTimestamps ? this.keepOriginalTimestamps = e.keepOriginalTimestamps : this.keepOriginalTimestamps = !1, this.pendingTracks = [], this.videoTrack = null, this.pendingBoxes = [], this.pendingCaptions = [], this.pendingMetadata = [], this.pendingBytes = 0, this.emittedTracks = 0, yt.prototype.init.call(this), this.push = function (e) { + return e.text ? this.pendingCaptions.push(e) : e.frames ? this.pendingMetadata.push(e) : (this.pendingTracks.push(e.track), this.pendingBytes += e.boxes.byteLength, "video" === e.track.type && (this.videoTrack = e.track, this.pendingBoxes.push(e.boxes)), void("audio" === e.track.type && (this.audioTrack = e.track, this.pendingBoxes.unshift(e.boxes)))) + } + }).prototype = new V, yt.prototype.flush = function (e) { + var t, i, n, r, a = 0, + s = { + captions: [], + captionStreams: {}, + metadata: [], + info: {} + }, + o = 0; + if (this.pendingTracks.length < this.numberOfTracks) { + if ("VideoSegmentStream" !== e && "AudioSegmentStream" !== e) return; + if (this.remuxTracks) return; + if (0 === this.pendingTracks.length) return this.emittedTracks++, void(this.emittedTracks >= this.numberOfTracks && (this.trigger("done"), this.emittedTracks = 0)) + } + if (this.videoTrack ? (o = this.videoTrack.timelineStartInfo.pts, Tt.forEach(function (e) { + s.info[e] = this.videoTrack[e] + }, this)) : this.audioTrack && (o = this.audioTrack.timelineStartInfo.pts, bt.forEach(function (e) { + s.info[e] = this.audioTrack[e] + }, this)), this.videoTrack || this.audioTrack) { + for (1 === this.pendingTracks.length ? s.type = this.pendingTracks[0].type : s.type = "combined", this.emittedTracks += this.pendingTracks.length, n = ee(this.pendingTracks), s.initSegment = new Uint8Array(n.byteLength), s.initSegment.set(n), s.data = new Uint8Array(this.pendingBytes), r = 0; r < this.pendingBoxes.length; r++) s.data.set(this.pendingBoxes[r], a), a += this.pendingBoxes[r].byteLength; + for (r = 0; r < this.pendingCaptions.length; r++)(t = this.pendingCaptions[r]).startTime = fe(t.startPts, o, this.keepOriginalTimestamps), t.endTime = fe(t.endPts, o, this.keepOriginalTimestamps), s.captionStreams[t.stream] = !0, s.captions.push(t); + for (r = 0; r < this.pendingMetadata.length; r++)(i = this.pendingMetadata[r]).cueTime = fe(i.pts, o, this.keepOriginalTimestamps), s.metadata.push(i); + for (s.metadata.dispatchType = this.metadataStream.dispatchType, this.pendingTracks.length = 0, this.videoTrack = null, this.pendingBoxes.length = 0, this.pendingCaptions.length = 0, this.pendingBytes = 0, this.pendingMetadata.length = 0, this.trigger("data", s), r = 0; r < s.captions.length; r++) t = s.captions[r], this.trigger("caption", t); + for (r = 0; r < s.metadata.length; r++) i = s.metadata[r], this.trigger("id3Frame", i) + } + this.emittedTracks >= this.numberOfTracks && (this.trigger("done"), this.emittedTracks = 0) + }, yt.prototype.setRemux = function (e) { + this.remuxTracks = e + }, (vt = function (n) { + var r, a, s = this, + i = !0; + vt.prototype.init.call(this), n = n || {}, this.baseMediaDecodeTime = n.baseMediaDecodeTime || 0, this.transmuxPipeline_ = {}, this.setupAacPipeline = function () { + var t = {}; + (this.transmuxPipeline_ = t).type = "aac", t.metadataStream = new Ze.MetadataStream, t.aacStream = new _t, t.audioTimestampRolloverStream = new Ze.TimestampRolloverStream("audio"), t.timedMetadataTimestampRolloverStream = new Ze.TimestampRolloverStream("timed-metadata"), t.adtsStream = new at, t.coalesceStream = new yt(n, t.metadataStream), t.headOfPipeline = t.aacStream, t.aacStream.pipe(t.audioTimestampRolloverStream).pipe(t.adtsStream), t.aacStream.pipe(t.timedMetadataTimestampRolloverStream).pipe(t.metadataStream).pipe(t.coalesceStream), t.metadataStream.on("timestamp", function (e) { + t.aacStream.setTimestamp(e.timeStamp) + }), t.aacStream.on("data", function (e) { + "timed-metadata" !== e.type && "audio" !== e.type || t.audioSegmentStream || (a = a || { + timelineStartInfo: { + baseMediaDecodeTime: s.baseMediaDecodeTime + }, + codec: "adts", + type: "audio" + }, t.coalesceStream.numberOfTracks++, t.audioSegmentStream = new gt(a, n), t.audioSegmentStream.on("timingInfo", s.trigger.bind(s, "audioTimingInfo")), t.adtsStream.pipe(t.audioSegmentStream).pipe(t.coalesceStream), s.trigger("trackinfo", { + hasAudio: !!a, + hasVideo: !!r + })) + }), t.coalesceStream.on("data", this.trigger.bind(this, "data")), t.coalesceStream.on("done", this.trigger.bind(this, "done")) + }, this.setupTsPipeline = function () { + var i = {}; + (this.transmuxPipeline_ = i).type = "ts", i.metadataStream = new Ze.MetadataStream, i.packetStream = new Ze.TransportPacketStream, i.parseStream = new Ze.TransportParseStream, i.elementaryStream = new Ze.ElementaryStream, i.timestampRolloverStream = new Ze.TimestampRolloverStream, i.adtsStream = new at, i.h264Stream = new St, i.captionStream = new Ze.CaptionStream, i.coalesceStream = new yt(n, i.metadataStream), i.headOfPipeline = i.packetStream, i.packetStream.pipe(i.parseStream).pipe(i.elementaryStream).pipe(i.timestampRolloverStream), i.timestampRolloverStream.pipe(i.h264Stream), i.timestampRolloverStream.pipe(i.adtsStream), i.timestampRolloverStream.pipe(i.metadataStream).pipe(i.coalesceStream), i.h264Stream.pipe(i.captionStream).pipe(i.coalesceStream), i.elementaryStream.on("data", function (e) { + var t; + if ("metadata" === e.type) { + for (t = e.tracks.length; t--;) r || "video" !== e.tracks[t].type ? a || "audio" !== e.tracks[t].type || ((a = e.tracks[t]).timelineStartInfo.baseMediaDecodeTime = s.baseMediaDecodeTime) : (r = e.tracks[t]).timelineStartInfo.baseMediaDecodeTime = s.baseMediaDecodeTime; + r && !i.videoSegmentStream && (i.coalesceStream.numberOfTracks++, i.videoSegmentStream = new mt(r, n), i.videoSegmentStream.on("timelineStartInfo", function (e) { + a && !n.keepOriginalTimestamps && (a.timelineStartInfo = e, i.audioSegmentStream.setEarliestDts(e.dts - s.baseMediaDecodeTime)) + }), i.videoSegmentStream.on("processedGopsInfo", s.trigger.bind(s, "gopInfo")), i.videoSegmentStream.on("segmentTimingInfo", s.trigger.bind(s, "videoSegmentTimingInfo")), i.videoSegmentStream.on("baseMediaDecodeTime", function (e) { + a && i.audioSegmentStream.setVideoBaseMediaDecodeTime(e) + }), i.videoSegmentStream.on("timingInfo", s.trigger.bind(s, "videoTimingInfo")), i.h264Stream.pipe(i.videoSegmentStream).pipe(i.coalesceStream)), a && !i.audioSegmentStream && (i.coalesceStream.numberOfTracks++, i.audioSegmentStream = new gt(a, n), i.audioSegmentStream.on("timingInfo", s.trigger.bind(s, "audioTimingInfo")), i.adtsStream.pipe(i.audioSegmentStream).pipe(i.coalesceStream)), s.trigger("trackinfo", { + hasAudio: !!a, + hasVideo: !!r + }) + } + }), i.coalesceStream.on("data", this.trigger.bind(this, "data")), i.coalesceStream.on("id3Frame", function (e) { + e.dispatchType = i.metadataStream.dispatchType, s.trigger("id3Frame", e) + }), i.coalesceStream.on("caption", this.trigger.bind(this, "caption")), i.coalesceStream.on("done", this.trigger.bind(this, "done")) + }, this.setBaseMediaDecodeTime = function (e) { + var t = this.transmuxPipeline_; + n.keepOriginalTimestamps || (this.baseMediaDecodeTime = e), a && (a.timelineStartInfo.dts = void 0, a.timelineStartInfo.pts = void 0, Se(a), t.audioTimestampRolloverStream && t.audioTimestampRolloverStream.discontinuity()), r && (t.videoSegmentStream && (t.videoSegmentStream.gopCache_ = []), r.timelineStartInfo.dts = void 0, r.timelineStartInfo.pts = void 0, Se(r), t.captionStream.reset()), t.timestampRolloverStream && t.timestampRolloverStream.discontinuity() + }, this.setAudioAppendStart = function (e) { + a && this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(e) + }, this.setRemux = function (e) { + var t = this.transmuxPipeline_; + n.remux = e, t && t.coalesceStream && t.coalesceStream.setRemux(e) + }, this.alignGopsWith = function (e) { + r && this.transmuxPipeline_.videoSegmentStream && this.transmuxPipeline_.videoSegmentStream.alignGopsWith(e) + }, this.push = function (e) { + if (i) { + var t = kt(e); + t && "aac" !== this.transmuxPipeline_.type ? this.setupAacPipeline() : t || "ts" === this.transmuxPipeline_.type || this.setupTsPipeline(), i = !1 + } + this.transmuxPipeline_.headOfPipeline.push(e) + }, this.flush = function () { + i = !0, this.transmuxPipeline_.headOfPipeline.flush() + }, this.endTimeline = function () { + this.transmuxPipeline_.headOfPipeline.endTimeline() + }, this.reset = function () { + this.transmuxPipeline_.headOfPipeline && this.transmuxPipeline_.headOfPipeline.reset() + }, this.resetCaptions = function () { + this.transmuxPipeline_.captionStream && this.transmuxPipeline_.captionStream.reset() + } + }).prototype = new V; + + function Et(a, s) { + var o = [], + u = 0, + l = 0, + c = 0, + d = 1 / 0, + h = null, + p = null; + s = s || {}, Et.prototype.init.call(this), this.push = function (t) { + Ce(a, t), a && bt.forEach(function (e) { + a[e] = t[e] + }), o.push(t) + }, this.setEarliestDts = function (e) { + l = e + }, this.setVideoBaseMediaDecodeTime = function (e) { + d = e + }, this.setAudioAppendStart = function (e) { + c = e + }, this.processFrames_ = function () { + var e, t, i, n, r; + 0 !== o.length && 0 !== (e = ye(o, a, l)).length && (a.baseMediaDecodeTime = ke(a, s.keepOriginalTimestamps), ve(a, e, c, d), a.samples = _e(e), i = J(be(e)), o = [], t = Z(u, [a]), u++, a.initSegment = ee([a]), (n = new Uint8Array(t.byteLength + i.byteLength)).set(t), n.set(i, t.byteLength), Se(a), null === h && (p = h = e[0].pts), p += e.length * (1024 * At / a.samplerate), r = { + start: h + }, this.trigger("timingInfo", r), this.trigger("data", { + track: a, + boxes: n + })) + }, this.flush = function () { + this.processFrames_(), this.trigger("timingInfo", { + start: h, + end: p + }), this.resetTiming_(), this.trigger("done", "AudioSegmentStream") + }, this.partialFlush = function () { + this.processFrames_(), this.trigger("partialdone", "AudioSegmentStream") + }, this.endTimeline = function () { + this.flush(), this.trigger("endedtimeline", "AudioSegmentStream") + }, this.resetTiming_ = function () { + Se(a), p = h = null + }, this.reset = function () { + this.resetTiming_(), o = [], this.trigger("reset") + } + } + var wt = { + Transmuxer: vt, + VideoSegmentStream: mt, + AudioSegmentStream: gt, + AUDIO_PROPERTIES: bt, + VIDEO_PROPERTIES: Tt, + generateVideoSegmentTimingInfo: ft + }.Transmuxer, + It = { + Adts: at, + h264: lt + }, + At = ce; + Et.prototype = new V; + + function xt(o, u) { + var t, i, l, c = 0, + d = [], + h = [], + p = null, + f = null, + m = !0; + u = u || {}, xt.prototype.init.call(this), this.push = function (e) { + Ce(o, e), "undefined" == typeof o.timelineStartInfo.dts && (o.timelineStartInfo.dts = e.dts), "seq_parameter_set_rbsp" !== e.nalUnitType || t || (t = e.config, o.sps = [e.data], Tt.forEach(function (e) { + o[e] = t[e] + }, this)), "pic_parameter_set_rbsp" !== e.nalUnitType || i || (i = e.data, o.pps = [e.data]), d.push(e) + }, this.processNals_ = function (e) { + var t; + for (d = h.concat(d); d.length && "access_unit_delimiter_rbsp" !== d[0].nalUnitType;) d.shift(); + if (0 !== d.length) { + var i = te(d); + if (i.length) + if (h = i[i.length - 1], e && (i.pop(), i.duration -= h.duration, i.nalCount -= h.length, i.byteLength -= h.byteLength), i.length) { + if (this.trigger("timelineStartInfo", o.timelineStartInfo), m) { + if (!(l = ie(i))[0][0].keyFrame) { + if (!(l = ne(l))[0][0].keyFrame) return d = [].concat.apply([], i).concat(h), void(h = []); + (i = [].concat.apply([], l)).duration = l.duration + } + m = !1 + } + for (null === p && (p = i[0].pts, f = p), f += i.duration, this.trigger("timingInfo", { + start: p, + end: f + }), t = 0; t < i.length; t++) { + var n = i[t]; + o.samples = se(n); + var r = J(oe(n)); + Se(o), Ce(o, n), o.baseMediaDecodeTime = ke(o, u.keepOriginalTimestamps); + var a = Z(c, [o]); + c++, o.initSegment = ee([o]); + var s = new Uint8Array(a.byteLength + r.byteLength); + s.set(a), s.set(r, a.byteLength), this.trigger("data", { + track: o, + boxes: s, + sequence: c, + videoFrameDts: n.dts, + videoFramePts: n.pts + }) + } + d = [] + } else d = [] + } + }, this.resetTimingAndConfig_ = function () { + i = t = void 0, f = p = null + }, this.partialFlush = function () { + this.processNals_(!0), this.trigger("partialdone", "VideoSegmentStream") + }, this.flush = function () { + this.processNals_(!1), this.resetTimingAndConfig_(), this.trigger("done", "VideoSegmentStream") + }, this.endTimeline = function () { + this.flush(), this.trigger("endedtimeline", "VideoSegmentStream") + }, this.reset = function () { + this.resetTimingAndConfig_(), h = [], d = [], m = !0, this.trigger("reset") + } + } + var Pt = Et; + xt.prototype = new V; + + function Lt(e) { + return e.prototype = new V, e.prototype.init.call(e), e + } + + function Ot(t, i) { + t.on("data", i.trigger.bind(i, "data")), t.on("done", i.trigger.bind(i, "done")), t.on("partialdone", i.trigger.bind(i, "partialdone")), t.on("endedtimeline", i.trigger.bind(i, "endedtimeline")), t.on("audioTimingInfo", i.trigger.bind(i, "audioTimingInfo")), t.on("videoTimingInfo", i.trigger.bind(i, "videoTimingInfo")), t.on("trackinfo", i.trigger.bind(i, "trackinfo")), t.on("id3Frame", function (e) { + e.dispatchType = t.metadataStream.dispatchType, e.cueTime = de(e.pts), i.trigger("id3Frame", e) + }), t.on("caption", function (e) { + i.trigger("caption", e) + }) + } + + function Dt(i) { + var n = null, + r = !0; + i = i || {}, Dt.prototype.init.call(this), i.baseMediaDecodeTime = i.baseMediaDecodeTime || 0, this.push = function (e) { + if (r) { + var t = Rt(e); + !t || n && "aac" === n.type ? t || n && "ts" === n.type || (n = function (i) { + var n = { + type: "ts", + tracks: { + audio: null, + video: null + }, + packet: new Ze.TransportPacketStream, + parse: new Ze.TransportParseStream, + elementary: new Ze.ElementaryStream, + timestampRollover: new Ze.TimestampRolloverStream, + adts: new It.Adts, + h264: new It.h264.H264Stream, + captionStream: new Ze.CaptionStream, + metadataStream: new Ze.MetadataStream + }; + return n.headOfPipeline = n.packet, n.packet.pipe(n.parse).pipe(n.elementary).pipe(n.timestampRollover), n.timestampRollover.pipe(n.h264), n.h264.pipe(n.captionStream), n.timestampRollover.pipe(n.metadataStream), n.timestampRollover.pipe(n.adts), n.elementary.on("data", function (e) { + if ("metadata" === e.type) { + for (var t = 0; t < e.tracks.length; t++) n.tracks[e.tracks[t].type] || (n.tracks[e.tracks[t].type] = e.tracks[t], n.tracks[e.tracks[t].type].timelineStartInfo.baseMediaDecodeTime = i.baseMediaDecodeTime); + n.tracks.video && !n.videoSegmentStream && (n.videoSegmentStream = new Mt(n.tracks.video, i), n.videoSegmentStream.on("timelineStartInfo", function (e) { + n.tracks.audio && !i.keepOriginalTimestamps && n.audioSegmentStream.setEarliestDts(e.dts - i.baseMediaDecodeTime) + }), n.videoSegmentStream.on("timingInfo", n.trigger.bind(n, "videoTimingInfo")), n.videoSegmentStream.on("data", function (e) { + n.trigger("data", { + type: "video", + data: e + }) + }), n.videoSegmentStream.on("done", n.trigger.bind(n, "done")), n.videoSegmentStream.on("partialdone", n.trigger.bind(n, "partialdone")), n.videoSegmentStream.on("endedtimeline", n.trigger.bind(n, "endedtimeline")), n.h264.pipe(n.videoSegmentStream)), n.tracks.audio && !n.audioSegmentStream && (n.audioSegmentStream = new Pt(n.tracks.audio, i), n.audioSegmentStream.on("data", function (e) { + n.trigger("data", { + type: "audio", + data: e + }) + }), n.audioSegmentStream.on("done", n.trigger.bind(n, "done")), n.audioSegmentStream.on("partialdone", n.trigger.bind(n, "partialdone")), n.audioSegmentStream.on("endedtimeline", n.trigger.bind(n, "endedtimeline")), n.audioSegmentStream.on("timingInfo", n.trigger.bind(n, "audioTimingInfo")), n.adts.pipe(n.audioSegmentStream)), n.trigger("trackinfo", { + hasAudio: !!n.tracks.audio, + hasVideo: !!n.tracks.video + }) + } + }), n.captionStream.on("data", function (e) { + var t; + t = n.tracks.video && n.tracks.video.timelineStartInfo.pts || 0, e.startTime = fe(e.startPts, t, i.keepOriginalTimestamps), e.endTime = fe(e.endPts, t, i.keepOriginalTimestamps), n.trigger("caption", e) + }), (n = Lt(n)).metadataStream.on("data", n.trigger.bind(n, "id3Frame")), n + }(i), Ot(n, this)) : (n = function (t) { + var i = { + type: "aac", + tracks: { + audio: null + }, + metadataStream: new Ze.MetadataStream, + aacStream: new _t, + audioRollover: new Ze.TimestampRolloverStream("audio"), + timedMetadataRollover: new Ze.TimestampRolloverStream("timed-metadata"), + adtsStream: new at(!0) + }; + return i.headOfPipeline = i.aacStream, i.aacStream.pipe(i.audioRollover).pipe(i.adtsStream), i.aacStream.pipe(i.timedMetadataRollover).pipe(i.metadataStream), i.metadataStream.on("timestamp", function (e) { + i.aacStream.setTimestamp(e.timeStamp) + }), i.aacStream.on("data", function (e) { + "timed-metadata" !== e.type && "audio" !== e.type || i.audioSegmentStream || (i.tracks.audio = i.tracks.audio || { + timelineStartInfo: { + baseMediaDecodeTime: t.baseMediaDecodeTime + }, + codec: "adts", + type: "audio" + }, i.audioSegmentStream = new Pt(i.tracks.audio, t), i.audioSegmentStream.on("data", function (e) { + i.trigger("data", { + type: "audio", + data: e + }) + }), i.audioSegmentStream.on("partialdone", i.trigger.bind(i, "partialdone")), i.audioSegmentStream.on("done", i.trigger.bind(i, "done")), i.audioSegmentStream.on("endedtimeline", i.trigger.bind(i, "endedtimeline")), i.audioSegmentStream.on("timingInfo", i.trigger.bind(i, "audioTimingInfo")), i.adtsStream.pipe(i.audioSegmentStream), i.trigger("trackinfo", { + hasAudio: !!i.tracks.audio, + hasVideo: !!i.tracks.video + })) + }), (i = Lt(i)).metadataStream.on("data", i.trigger.bind(i, "id3Frame")), i + }(i), Ot(n, this)), r = !1 + } + n.headOfPipeline.push(e) + }, this.flush = function () { + n && (r = !0, n.headOfPipeline.flush()) + }, this.partialFlush = function () { + n && n.headOfPipeline.partialFlush() + }, this.endTimeline = function () { + n && n.headOfPipeline.endTimeline() + }, this.reset = function () { + n && n.headOfPipeline.reset() + }, this.setBaseMediaDecodeTime = function (e) { + i.keepOriginalTimestamps || (i.baseMediaDecodeTime = e), n && (n.tracks.audio && (n.tracks.audio.timelineStartInfo.dts = void 0, n.tracks.audio.timelineStartInfo.pts = void 0, Se(n.tracks.audio), n.audioRollover && n.audioRollover.discontinuity()), n.tracks.video && (n.videoSegmentStream && (n.videoSegmentStream.gopCache_ = []), n.tracks.video.timelineStartInfo.dts = void 0, n.tracks.video.timelineStartInfo.pts = void 0, Se(n.tracks.video)), n.timestampRollover && n.timestampRollover.discontinuity()) + }, this.setRemux = function (e) { + i.remux = e, n && n.coalesceStream && n.coalesceStream.setRemux(e) + }, this.setAudioAppendStart = function (e) { + n && n.tracks.audio && n.audioSegmentStream && n.audioSegmentStream.setAudioAppendStart(e) + }, this.alignGopsWith = function (e) {} + } + var Mt = xt, + Rt = ct; + Dt.prototype = new V; + + function Nt(e, t) { + for (var i = e, n = 0; n < t.length; n++) { + var r = t[n]; + if (i < r.size) return r; + i -= r.size + } + return null + } + + function Ut(e, c) { + var n = Ht(e, ["moof", "traf"]), + t = Ht(e, ["mdat"]), + d = {}, + r = []; + return t.forEach(function (e, t) { + var i = n[t]; + r.push({ + mdat: e, + traf: i + }) + }), r.forEach(function (e) { + var t, i = e.mdat, + n = e.traf, + r = Ht(n, ["tfhd"]), + a = Kt(r[0]), + s = a.trackId, + o = Ht(n, ["tfdt"]), + u = 0 < o.length ? zt(o[0]).baseMediaDecodeTime : 0, + l = Ht(n, ["trun"]); + c === s && 0 < l.length && (t = function (e, t, i) { + var n, r, a, s, o = new DataView(e.buffer, e.byteOffset, e.byteLength), + u = []; + for (r = 0; r + 4 < e.length; r += a) + if (a = o.getUint32(r), r += 4, !(a <= 0)) switch (31 & e[r]) { + case 6: + var l = e.subarray(r + 1, r + 1 + a), + c = Nt(r, t); + if (n = { + nalUnitType: "sei_rbsp", + size: a, + data: l, + escapedRBSP: Yt(l), + trackId: i + }, c) n.pts = c.pts, n.dts = c.dts, s = c; + else { + if (!s) break; + n.pts = s.pts, n.dts = s.dts + } + u.push(n) + } + return u + }(i, function (e, t, i) { + var n = t, + r = i.defaultSampleDuration || 0, + a = i.defaultSampleSize || 0, + s = i.trackId, + o = []; + return e.forEach(function (e) { + var t = Xt(e).samples; + t.forEach(function (e) { + void 0 === e.duration && (e.duration = r), void 0 === e.size && (e.size = a), e.trackId = s, e.dts = n, void 0 === e.compositionTimeOffset && (e.compositionTimeOffset = 0), e.pts = n + e.compositionTimeOffset, n += e.duration + }), o = o.concat(t) + }), o + }(l, u, a), s), d[s] || (d[s] = []), d[s] = d[s].concat(t)) + }), d + } + + function Ft(e) { + return "AudioSegmentStream" === e ? "audio" : "VideoSegmentStream" === e ? "video" : "" + } + var Bt = Dt, + jt = function (e) { + return e >>> 0 + }, + Vt = function (e) { + var t = ""; + return t += String.fromCharCode(e[0]), t += String.fromCharCode(e[1]), t += String.fromCharCode(e[2]), t += String.fromCharCode(e[3]) + }, + qt = jt, + Ht = function e(t, i) { + var n, r, a, s, o, u = []; + if (!i.length) return null; + for (n = 0; n < t.byteLength;) r = qt(t[n] << 24 | t[n + 1] << 16 | t[n + 2] << 8 | t[n + 3]), a = Vt(t.subarray(n + 4, n + 8)), s = 1 < r ? n + r : t.byteLength, a === i[0] && (1 === i.length ? u.push(t.subarray(n + 8, s)) : (o = e(t.subarray(n + 8, s), i.slice(1))).length && (u = u.concat(o))), n = s; + return u + }, + Wt = jt, + zt = function (e) { + var t = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + baseMediaDecodeTime: Wt(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]) + }; + return 1 === t.version && (t.baseMediaDecodeTime *= Math.pow(2, 32), t.baseMediaDecodeTime += Wt(e[8] << 24 | e[9] << 16 | e[10] << 8 | e[11])), t + }, + Gt = function (e) { + return { + isLeading: (12 & e[0]) >>> 2, + dependsOn: 3 & e[0], + isDependedOn: (192 & e[1]) >>> 6, + hasRedundancy: (48 & e[1]) >>> 4, + paddingValue: (14 & e[1]) >>> 1, + isNonSyncSample: 1 & e[1], + degradationPriority: e[2] << 8 | e[3] + } + }, + Xt = function (e) { + var t, i = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + samples: [] + }, + n = new DataView(e.buffer, e.byteOffset, e.byteLength), + r = 1 & i.flags[2], + a = 4 & i.flags[2], + s = 1 & i.flags[1], + o = 2 & i.flags[1], + u = 4 & i.flags[1], + l = 8 & i.flags[1], + c = n.getUint32(4), + d = 8; + for (r && (i.dataOffset = n.getInt32(d), d += 4), a && c && (t = { + flags: Gt(e.subarray(d, d + 4)) + }, d += 4, s && (t.duration = n.getUint32(d), d += 4), o && (t.size = n.getUint32(d), d += 4), l && (1 === i.version ? t.compositionTimeOffset = n.getInt32(d) : t.compositionTimeOffset = n.getUint32(d), d += 4), i.samples.push(t), c--); c--;) t = {}, s && (t.duration = n.getUint32(d), d += 4), o && (t.size = n.getUint32(d), d += 4), u && (t.flags = Gt(e.subarray(d, d + 4)), d += 4), l && (1 === i.version ? t.compositionTimeOffset = n.getInt32(d) : t.compositionTimeOffset = n.getUint32(d), d += 4), i.samples.push(t); + return i + }, + Kt = function (e) { + var t, i = new DataView(e.buffer, e.byteOffset, e.byteLength), + n = { + version: e[0], + flags: new Uint8Array(e.subarray(1, 4)), + trackId: i.getUint32(4) + }, + r = 1 & n.flags[2], + a = 2 & n.flags[2], + s = 8 & n.flags[2], + o = 16 & n.flags[2], + u = 32 & n.flags[2], + l = 65536 & n.flags[0], + c = 131072 & n.flags[0]; + return t = 8, r && (t += 4, n.baseDataOffset = i.getUint32(12), t += 4), a && (n.sampleDescriptionIndex = i.getUint32(t), t += 4), s && (n.defaultSampleDuration = i.getUint32(t), t += 4), o && (n.defaultSampleSize = i.getUint32(t), t += 4), u && (n.defaultSampleFlags = i.getUint32(t)), l && (n.durationIsEmpty = !0), !r && c && (n.baseDataOffsetIsMoof = !0), n + }, + Yt = Ae, + $t = Ue.CaptionStream, + Qt = function () { + var t, a, s, o, u, i, n = !1; + this.isInitialized = function () { + return n + }, this.init = function (e) { + t = new $t, n = !0, i = !!e && e.isPartial, t.on("data", function (e) { + e.startTime = e.startPts / o, e.endTime = e.endPts / o, u.captions.push(e), u.captionStreams[e.stream] = !0 + }) + }, this.isNewInit = function (e, t) { + return !(e && 0 === e.length || t && "object" == typeof t && 0 === Object.keys(t).length) && (s !== e[0] || o !== t[s]) + }, this.parse = function (e, t, i) { + var n; + if (!this.isInitialized()) return null; + if (!t || !i) return null; + if (this.isNewInit(t, i)) s = t[0], o = i[s]; + else if (null === s || !o) return a.push(e), null; + for (; 0 < a.length;) { + var r = a.shift(); + this.parse(r, t, i) + } + return null !== (n = function (e, t, i) { + return null === t ? null : { + seiNals: Ut(e, t)[t], + timescale: i + } + }(e, s, o)) && n.seiNals ? (this.pushNals(n.seiNals), this.flushStream(), u) : null + }, this.pushNals = function (e) { + if (!this.isInitialized() || !e || 0 === e.length) return null; + e.forEach(function (e) { + t.push(e) + }) + }, this.flushStream = function () { + if (!this.isInitialized()) return null; + i ? t.partialFlush() : t.flush() + }, this.clearParsedCaptions = function () { + u.captions = [], u.captionStreams = {} + }, this.resetCaptionStream = function () { + if (!this.isInitialized()) return null; + t.reset() + }, this.clearAllCaptions = function () { + this.clearParsedCaptions(), this.resetCaptionStream() + }, this.reset = function () { + a = [], o = s = null, u ? this.clearParsedCaptions() : u = { + captions: [], + captionStreams: {} + }, this.resetCaptionStream() + }, this.reset() + }, + Jt = function () { + function e(e, t) { + this.options = t || {}, this.self = e, this.init() + } + var t = e.prototype; + return t.init = function () { + this.transmuxer && this.transmuxer.dispose(), this.transmuxer = this.options.handlePartialData ? new Bt(this.options) : new wt(this.options), this.options.handlePartialData ? function (n, e) { + e.on("data", function (e) { + var t = { + data: e.data.track.initSegment.buffer, + byteOffset: e.data.track.initSegment.byteOffset, + byteLength: e.data.track.initSegment.byteLength + }, + i = { + boxes: { + data: e.data.boxes.buffer, + byteOffset: e.data.boxes.byteOffset, + byteLength: e.data.boxes.byteLength + }, + initSegment: t, + type: e.type, + sequence: e.data.sequence + }; + "undefined" != typeof e.data.videoFrameDts && (i.videoFrameDtsTime = ge(e.data.videoFrameDts)), "undefined" != typeof e.data.videoFramePts && (i.videoFramePtsTime = ge(e.data.videoFramePts)), n.postMessage({ + action: "data", + segment: i + }, [i.boxes.data, i.initSegment.data]) + }), e.on("id3Frame", function (e) { + n.postMessage({ + action: "id3Frame", + id3Frame: e + }) + }), e.on("caption", function (e) { + n.postMessage({ + action: "caption", + caption: e + }) + }), e.on("done", function (e) { + n.postMessage({ + action: "done", + type: Ft(e) + }) + }), e.on("partialdone", function (e) { + n.postMessage({ + action: "partialdone", + type: Ft(e) + }) + }), e.on("endedsegment", function (e) { + n.postMessage({ + action: "endedSegment", + type: Ft(e) + }) + }), e.on("trackinfo", function (e) { + n.postMessage({ + action: "trackinfo", + trackInfo: e + }) + }), e.on("audioTimingInfo", function (e) { + if (null !== e.start) { + var t = { + start: ge(e.start) + }; + e.end && (t.end = ge(e.end)), n.postMessage({ + action: "audioTimingInfo", + audioTimingInfo: t + }) + } else n.postMessage({ + action: "audioTimingInfo", + audioTimingInfo: e + }) + }), e.on("videoTimingInfo", function (e) { + var t = { + start: ge(e.start) + }; + e.end && (t.end = ge(e.end)), n.postMessage({ + action: "videoTimingInfo", + videoTimingInfo: t + }) + }) + }(this.self, this.transmuxer) : function (n, e) { + e.on("data", function (e) { + var t = e.initSegment; + e.initSegment = { + data: t.buffer, + byteOffset: t.byteOffset, + byteLength: t.byteLength + }; + var i = e.data; + e.data = i.buffer, n.postMessage({ + action: "data", + segment: e, + byteOffset: i.byteOffset, + byteLength: i.byteLength + }, [e.data]) + }), e.on("done", function (e) { + n.postMessage({ + action: "done" + }) + }), e.on("gopInfo", function (e) { + n.postMessage({ + action: "gopInfo", + gopInfo: e + }) + }), e.on("videoSegmentTimingInfo", function (e) { + var t = { + start: { + decode: ge(e.start.dts), + presentation: ge(e.start.pts) + }, + end: { + decode: ge(e.end.dts), + presentation: ge(e.end.pts) + }, + baseMediaDecodeTime: ge(e.baseMediaDecodeTime) + }; + e.prependedContentDuration && (t.prependedContentDuration = ge(e.prependedContentDuration)), n.postMessage({ + action: "videoSegmentTimingInfo", + videoSegmentTimingInfo: t + }) + }), e.on("id3Frame", function (e) { + n.postMessage({ + action: "id3Frame", + id3Frame: e + }) + }), e.on("caption", function (e) { + n.postMessage({ + action: "caption", + caption: e + }) + }), e.on("trackinfo", function (e) { + n.postMessage({ + action: "trackinfo", + trackInfo: e + }) + }), e.on("audioTimingInfo", function (e) { + n.postMessage({ + action: "audioTimingInfo", + audioTimingInfo: { + start: ge(e.start), + end: ge(e.end) + } + }) + }), e.on("videoTimingInfo", function (e) { + n.postMessage({ + action: "videoTimingInfo", + videoTimingInfo: { + start: ge(e.start), + end: ge(e.end) + } + }) + }) + }(this.self, this.transmuxer) + }, t.pushMp4Captions = function (e) { + this.captionParser || (this.captionParser = new Qt, this.captionParser.init()); + var t = new Uint8Array(e.data, e.byteOffset, e.byteLength), + i = this.captionParser.parse(t, e.trackIds, e.timescales); + this.self.postMessage({ + action: "mp4Captions", + captions: i && i.captions || [], + data: t.buffer + }, [t.buffer]) + }, t.clearAllMp4Captions = function () { + this.captionParser && this.captionParser.clearAllCaptions() + }, t.clearParsedMp4Captions = function () { + this.captionParser && this.captionParser.clearParsedCaptions() + }, t.push = function (e) { + var t = new Uint8Array(e.data, e.byteOffset, e.byteLength); + this.transmuxer.push(t) + }, t.reset = function () { + this.transmuxer.reset() + }, t.setTimestampOffset = function (e) { + var t = e.timestampOffset || 0; + this.transmuxer.setBaseMediaDecodeTime(Math.round(me(t))) + }, t.setAudioAppendStart = function (e) { + this.transmuxer.setAudioAppendStart(Math.ceil(me(e.appendStart))) + }, t.setRemux = function (e) { + this.transmuxer.setRemux(e.remux) + }, t.flush = function (e) { + this.transmuxer.flush(), Zt.postMessage({ + action: "done", + type: "transmuxed" + }) + }, t.partialFlush = function (e) { + this.transmuxer.partialFlush(), Zt.postMessage({ + action: "partialdone", + type: "transmuxed" + }) + }, t.endTimeline = function () { + this.transmuxer.endTimeline(), Zt.postMessage({ + action: "endedtimeline", + type: "transmuxed" + }) + }, t.alignGopsWith = function (e) { + this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice()) + }, e + }(); + new function (t) { + t.onmessage = function (e) { + "init" === e.data.action && e.data.options ? this.messageHandlers = new Jt(t, e.data.options) : (this.messageHandlers || (this.messageHandlers = new Jt(t)), e.data && e.data.action && "init" !== e.data.action && this.messageHandlers[e.data.action] && this.messageHandlers[e.data.action](e.data)) + } + }(Zt) + }() + }), + qc = Pc("PlaylistSelector"), + Hc = function (n) { + function e(e, t) { + var i; + if (i = n.call(this) || this, !e) throw new TypeError("Initialization settings are required"); + if ("function" != typeof e.currentTime) throw new TypeError("No currentTime getter specified"); + if (!e.mediaSource) throw new TypeError("No MediaSource specified"); + return i.bandwidth = e.bandwidth, i.throughput = { + rate: 0, + count: 0 + }, i.roundTrip = NaN, i.resetStats_(), i.mediaIndex = null, i.hasPlayed_ = e.hasPlayed, i.currentTime_ = e.currentTime, i.seekable_ = e.seekable, i.seeking_ = e.seeking, i.duration_ = e.duration, i.mediaSource_ = e.mediaSource, i.vhs_ = e.vhs, i.loaderType_ = e.loaderType, i.currentMediaInfo_ = void 0, i.startingMediaInfo_ = void 0, i.segmentMetadataTrack_ = e.segmentMetadataTrack, i.goalBufferLength_ = e.goalBufferLength, i.sourceType_ = e.sourceType, i.sourceUpdater_ = e.sourceUpdater, i.inbandTextTracks_ = e.inbandTextTracks, i.state_ = "INIT", i.handlePartialData_ = e.handlePartialData, i.timelineChangeController_ = e.timelineChangeController, i.shouldSaveSegmentTimingInfo_ = !0, i.checkBufferTimeout_ = null, i.error_ = void 0, i.currentTimeline_ = -1, i.pendingSegment_ = null, i.xhrOptions_ = null, i.pendingSegments_ = [], i.audioDisabled_ = !1, i.isPendingTimestampOffset_ = !1, i.gopBuffer_ = [], i.timeMapping_ = 0, i.safeAppend_ = 11 <= da.browser.IE_VERSION, i.appendInitSegment_ = { + audio: !0, + video: !0 + }, i.playlistOfLastInitSegment_ = { + audio: null, + video: null + }, i.callQueue_ = [], i.loadQueue_ = [], i.metadataQueue_ = { + id3: [], + caption: [] + }, i.activeInitSegmentId_ = null, i.initSegments_ = {}, i.cacheEncryptionKeys_ = e.cacheEncryptionKeys, i.keyCache_ = {}, i.decrypter_ = e.decrypter, i.syncController_ = e.syncController, i.syncPoint_ = { + segmentIndex: 0, + time: 0 + }, i.transmuxer_ = i.createTransmuxer_(), i.triggerSyncInfoUpdate_ = function () { + return i.trigger("syncinfoupdate") + }, i.syncController_.on("syncinfoupdate", i.triggerSyncInfoUpdate_), i.mediaSource_.addEventListener("sourceopen", function () { + i.isEndOfStream_() || (i.ended_ = !1) + }), i.fetchAtBuffer_ = !1, i.logger_ = Pc("SegmentLoader[" + i.loaderType_ + "]"), Object.defineProperty(Ve(i), "state", { + get: function () { + return this.state_ + }, + set: function (e) { + e !== this.state_ && (this.logger_(this.state_ + " -> " + e), this.state_ = e, this.trigger("statechange")) + } + }), i.sourceUpdater_.on("ready", function () { + i.hasEnoughInfoToAppend_() && i.processCallQueue_() + }), "main" === i.loaderType_ && i.timelineChangeController_.on("pendingtimelinechange", function () { + i.hasEnoughInfoToAppend_() && i.processCallQueue_() + }), "audio" === i.loaderType_ && i.timelineChangeController_.on("timelinechange", function () { + i.hasEnoughInfoToLoad_() && i.processLoadQueue_(), i.hasEnoughInfoToAppend_() && i.processCallQueue_() + }), i + } + Ge(e, n); + var t = e.prototype; + return t.createTransmuxer_ = function () { + var e = new Vc; + return e.postMessage({ + action: "init", + options: { + remux: !1, + alignGopsAtEnd: this.safeAppend_, + keepOriginalTimestamps: !0, + handlePartialData: this.handlePartialData_ + } + }), e + }, t.resetStats_ = function () { + this.mediaBytesTransferred = 0, this.mediaRequests = 0, this.mediaRequestsAborted = 0, this.mediaRequestsTimedout = 0, this.mediaRequestsErrored = 0, this.mediaTransferDuration = 0, this.mediaSecondsLoaded = 0 + }, t.dispose = function () { + this.trigger("dispose"), this.state = "DISPOSED", this.pause(), this.abort_(), this.transmuxer_ && (this.transmuxer_.terminate(), hc()), this.resetStats_(), this.checkBufferTimeout_ && T.clearTimeout(this.checkBufferTimeout_), this.syncController_ && this.triggerSyncInfoUpdate_ && this.syncController_.off("syncinfoupdate", this.triggerSyncInfoUpdate_), this.off() + }, t.setAudio = function (e) { + this.audioDisabled_ = !e, e ? this.appendInitSegment_.audio = !0 : this.sourceUpdater_.removeAudio(0, this.duration_()) + }, t.abort = function () { + "WAITING" === this.state ? (this.abort_(), this.state = "READY", this.paused() || this.monitorBuffer_()) : this.pendingSegment_ && (this.pendingSegment_ = null) + }, t.abort_ = function () { + this.pendingSegment_ && this.pendingSegment_.abortRequests && this.pendingSegment_.abortRequests(), this.pendingSegment_ = null, this.callQueue_ = [], this.loadQueue_ = [], this.metadataQueue_.id3 = [], this.metadataQueue_.caption = [], this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_) + }, t.checkForAbort_ = function (e) { + return "APPENDING" !== this.state || this.pendingSegment_ ? !this.pendingSegment_ || this.pendingSegment_.requestId !== e : (this.state = "READY", !0) + }, t.error = function (e) { + return "undefined" != typeof e && (this.logger_("error occurred:", e), this.error_ = e), this.pendingSegment_ = null, this.error_ + }, t.endOfStream = function () { + this.ended_ = !0, this.transmuxer_ && dc(this.transmuxer_), this.gopBuffer_.length = 0, this.pause(), this.trigger("ended") + }, t.buffered_ = function () { + if (!this.sourceUpdater_ || !this.startingMediaInfo_) return da.createTimeRanges(); + if ("main" === this.loaderType_) { + var e = this.startingMediaInfo_, + t = e.hasAudio, + i = e.hasVideo, + n = e.isMuxed; + if (i && t && !this.audioDisabled_ && !n) return this.sourceUpdater_.buffered(); + if (i) return this.sourceUpdater_.videoBuffered() + } + return this.sourceUpdater_.audioBuffered() + }, t.initSegmentForMap = function (e, t) { + if (void 0 === t && (t = !1), !e) return null; + var i = gl(e), + n = this.initSegments_[i]; + return t && !n && e.bytes && (this.initSegments_[i] = n = { + resolvedUri: e.resolvedUri, + byterange: e.byterange, + bytes: e.bytes, + tracks: e.tracks, + timescales: e.timescales + }), n || e + }, t.segmentKey = function (e, t) { + if (void 0 === t && (t = !1), !e) return null; + var i = vl(e), + n = this.keyCache_[i]; + this.cacheEncryptionKeys_ && t && !n && e.bytes && (this.keyCache_[i] = n = { + resolvedUri: e.resolvedUri, + bytes: e.bytes + }); + var r = { + resolvedUri: (n || e).resolvedUri + }; + return n && (r.bytes = n.bytes), r + }, t.couldBeginLoading_ = function () { + return this.playlist_ && !this.paused() + }, t.load = function () { + if (this.monitorBuffer_(), this.playlist_) { + if (this.syncController_.setDateTimeMapping(this.playlist_), "INIT" === this.state && this.couldBeginLoading_()) return this.init_(); + !this.couldBeginLoading_() || "READY" !== this.state && "INIT" !== this.state || (this.state = "READY") + } + }, t.init_ = function () { + return this.state = "READY", this.resetEverything(), this.monitorBuffer_() + }, t.playlist = function (e, t) { + if (void 0 === t && (t = {}), e) { + var i = this.playlist_, + n = this.pendingSegment_; + this.playlist_ = e, this.xhrOptions_ = t, "INIT" === this.state && (e.syncInfo = { + mediaSequence: e.mediaSequence, + time: 0 + }); + var r = null; + if (i && (i.id ? r = i.id : i.uri && (r = i.uri)), this.logger_("playlist update [" + r + " => " + (e.id || e.uri) + "]"), this.trigger("syncinfoupdate"), "INIT" === this.state && this.couldBeginLoading_()) return this.init_(); + if (!i || i.uri !== e.uri) return null === this.mediaIndex && !this.handlePartialData_ || this.resyncLoader(), this.currentMediaInfo_ = void 0, void this.trigger("playlistupdate"); + var a = e.mediaSequence - i.mediaSequence; + this.logger_("live window shift [" + a + "]"), null !== this.mediaIndex && (this.mediaIndex -= a), n && (n.mediaIndex -= a, 0 <= n.mediaIndex && (n.segment = e.segments[n.mediaIndex])), this.syncController_.saveExpiredSegmentInfo(i, e) + } + }, t.pause = function () { + this.checkBufferTimeout_ && (T.clearTimeout(this.checkBufferTimeout_), this.checkBufferTimeout_ = null) + }, t.paused = function () { + return null === this.checkBufferTimeout_ + }, t.resetEverything = function (e) { + this.ended_ = !1, this.appendInitSegment_ = { + audio: !0, + video: !0 + }, this.resetLoader(), this.remove(0, 1 / 0, e), this.transmuxer_ && this.transmuxer_.postMessage({ + action: "clearAllMp4Captions" + }) + }, t.resetLoader = function () { + this.fetchAtBuffer_ = !1, this.resyncLoader() + }, t.resyncLoader = function () { + this.transmuxer_ && dc(this.transmuxer_), this.mediaIndex = null, this.syncPoint_ = null, this.isPendingTimestampOffset_ = !1, this.callQueue_ = [], this.loadQueue_ = [], this.metadataQueue_.id3 = [], this.metadataQueue_.caption = [], this.abort(), this.transmuxer_ && this.transmuxer_.postMessage({ + action: "clearParsedMp4Captions" + }) + }, t.remove = function (e, t, i) { + if (void 0 === i && (i = function () {}), t === 1 / 0 && (t = this.duration_()), this.sourceUpdater_ && this.currentMediaInfo_) { + var n = 1, + r = function () { + 0 === --n && i() + }; + for (var a in this.audioDisabled_ || (n++, this.sourceUpdater_.removeAudio(e, t, r)), "main" === this.loaderType_ && this.currentMediaInfo_ && this.currentMediaInfo_.hasVideo && (this.gopBuffer_ = function (e, t, i, n) { + for (var r = Math.ceil((t - n) * fu), a = Math.ceil((i - n) * fu), s = e.slice(), o = e.length; o-- && !(e[o].pts <= a);); + if (-1 === o) return s; + for (var u = o + 1; u-- && !(e[u].pts <= r);); + return u = Math.max(u, 0), s.splice(u, o - u + 1), s + }(this.gopBuffer_, e, t, this.timeMapping_), n++, this.sourceUpdater_.removeVideo(e, t, r)), this.inbandTextTracks_) Nc(e, t, this.inbandTextTracks_[a]); + Nc(e, t, this.segmentMetadataTrack_), r() + } + }, t.monitorBuffer_ = function () { + this.checkBufferTimeout_ && T.clearTimeout(this.checkBufferTimeout_), this.checkBufferTimeout_ = T.setTimeout(this.monitorBufferTick_.bind(this), 1) + }, t.monitorBufferTick_ = function () { + "READY" === this.state && this.fillBuffer_(), this.checkBufferTimeout_ && T.clearTimeout(this.checkBufferTimeout_), this.checkBufferTimeout_ = T.setTimeout(this.monitorBufferTick_.bind(this), 500) + }, t.fillBuffer_ = function () { + if (!this.sourceUpdater_.updating()) { + this.syncPoint_ || (this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_())); + var e = this.buffered_(), + t = this.checkBuffer_(e, this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_); + t && (t.timestampOffset = Bc({ + segmentTimeline: t.timeline, + currentTimeline: this.currentTimeline_, + startOfSegment: t.startOfSegment, + buffered: e, + overrideCheck: this.isPendingTimestampOffset_ + }), this.isPendingTimestampOffset_ = !1, "number" == typeof t.timestampOffset && this.timelineChangeController_.pendingTimelineChange({ + type: this.loaderType_, + from: this.currentTimeline_, + to: t.timeline + }), this.loadSegment_(t)) + } + }, t.isEndOfStream_ = function (e, t) { + if (void 0 === e && (e = this.mediaIndex), void 0 === t && (t = this.playlist_), !t || !this.mediaSource_) return !1; + var i = e + 1 === t.segments.length; + return t.endList && "open" === this.mediaSource_.readyState && i + }, t.checkBuffer_ = function (e, t, i, n, r, a) { + var s = 0; + e.length && (s = e.end(e.length - 1)); + var o = Math.max(0, s - r); + if (!t.segments.length) return null; + if (o >= this.goalBufferLength_()) return null; + if (!n && 1 <= o) return null; + var u, l = null, + c = !1; + if (null === a) l = this.getSyncSegmentCandidate_(t), c = !0; + else if (null !== i) { + var d = t.segments[i]; + u = d && d.end ? d.end : s, l = i + 1 + } else if (this.fetchAtBuffer_) { + var h = ic.getMediaInfoForTime(t, s, a.segmentIndex, a.time); + l = h.mediaIndex, u = h.startTime + } else { + var p = ic.getMediaInfoForTime(t, r, a.segmentIndex, a.time); + l = p.mediaIndex, u = p.startTime + } + var f = this.generateSegmentInfo_(t, l, u, c); + return !f || this.mediaSource_ && this.playlist_ && f.mediaIndex === this.playlist_.segments.length - 1 && "ended" === this.mediaSource_.readyState && !this.seeking_() ? void 0 : (this.logger_("checkBuffer_ returning " + f.uri, { + segmentInfo: f, + playlist: t, + currentMediaIndex: i, + nextMediaIndex: l, + startOfSegment: u, + isSyncRequest: c + }), f) + }, t.getSyncSegmentCandidate_ = function (e) { + var t = this; + if (-1 === this.currentTimeline_) return 0; + var i = e.segments.map(function (e, t) { + return { + timeline: e.timeline, + segmentIndex: t + } + }).filter(function (e) { + return e.timeline === t.currentTimeline_ + }); + return i.length ? i[Math.min(i.length - 1, 1)].segmentIndex : Math.max(e.segments.length - 1, 0) + }, t.generateSegmentInfo_ = function (e, t, i, n) { + if (t < 0 || t >= e.segments.length) return null; + var r, a, s = e.segments[t], + o = this.sourceUpdater_.audioBuffered(), + u = this.sourceUpdater_.videoBuffered(); + return o.length && (r = o.end(o.length - 1) - this.sourceUpdater_.audioTimestampOffset()), u.length && (a = function (e, t, i) { + if ("undefined" == typeof t || null === t || !e.length) return []; + var n, r = Math.ceil((t - i + 3) * fu); + for (n = 0; n < e.length && !(e[n].pts > r); n++); + return e.slice(n) + }(this.gopBuffer_, this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_)), { + requestId: "segment-loader-" + Math.random(), + uri: s.resolvedUri, + mediaIndex: t, + isSyncRequest: n, + startOfSegment: i, + playlist: e, + bytes: null, + encryptedBytes: null, + timestampOffset: null, + timeline: s.timeline, + duration: s.duration, + segment: s, + byteLength: 0, + transmuxer: this.transmuxer_, + audioAppendStart: r, + gopsToAlignWith: a + } + }, t.abortRequestEarly_ = function (e) { + if (this.vhs_.tech_.paused() || !this.xhrOptions_.timeout || !this.playlist_.attributes.BANDWIDTH) return !1; + if (Date.now() - (e.firstBytesReceivedAt || Date.now()) < 1e3) return !1; + var t = this.currentTime_(), + i = e.bandwidth, + n = this.pendingSegment_.duration, + r = ic.estimateSegmentRequestTime(n, i, this.playlist_, e.bytesReceived), + a = function (e, t, i) { + return void 0 === i && (i = 1), ((e.length ? e.end(e.length - 1) : 0) - t) / i + }(this.buffered_(), t, this.vhs_.tech_.playbackRate()) - 1; + if (r <= a) return !1; + var s = function (e) { + var t = e.master, + i = e.currentTime, + n = e.bandwidth, + r = e.duration, + a = e.segmentDuration, + s = e.timeUntilRebuffer, + o = e.currentTimeline, + u = e.syncController, + l = t.playlists.filter(function (e) { + return !ic.isIncompatible(e) + }), + c = l.filter(ic.isEnabled); + c.length || (c = l.filter(function (e) { + return !ic.isDisabled(e) + })); + var d = c.filter(ic.hasAttribute.bind(null, "BANDWIDTH")).map(function (e) { + var t = u.getSyncPoint(e, r, o, i) ? 1 : 2; + return { + playlist: e, + rebufferingImpact: ic.estimateSegmentRequestTime(a, n, e) * t - s + } + }), + h = d.filter(function (e) { + return e.rebufferingImpact <= 0 + }); + return Dc(h, function (e, t) { + return Mc(t.playlist, e.playlist) + }), h.length ? h[0] : (Dc(d, function (e, t) { + return e.rebufferingImpact - t.rebufferingImpact + }), d[0] || null) + }({ + master: this.vhs_.playlists.master, + currentTime: t, + bandwidth: i, + duration: this.duration_(), + segmentDuration: n, + timeUntilRebuffer: a, + currentTimeline: this.currentTimeline_, + syncController: this.syncController_ + }); + if (s) { + var o = r - a - s.rebufferingImpact, + u = .5; + return a <= ec && (u = 1), !s.playlist || s.playlist.uri === this.playlist_.uri || o < u ? !1 : (this.bandwidth = s.playlist.attributes.BANDWIDTH * uc.BANDWIDTH_VARIANCE + 1, this.abort(), this.trigger("earlyabort"), !0) + } + }, t.handleAbort_ = function () { + this.mediaRequestsAborted += 1 + }, t.handleProgress_ = function (e, t) { + this.checkForAbort_(t.requestId) || this.abortRequestEarly_(t.stats) || this.trigger("progress") + }, t.handleTrackInfo_ = function (e, t) { + this.checkForAbort_(e.requestId) || this.abortRequestEarly_(e.stats) || this.checkForIllegalMediaSwitch(t) || (t = t || {}, function (e, t) { + if (!e && !t || !e && t || e && !t) return !1; + if (e === t) return !0; + var i = Object.keys(e).sort(), + n = Object.keys(t).sort(); + if (i.length !== n.length) return !1; + for (var r = 0; r < i.length; r++) { + var a = i[r]; + if (a !== n[r]) return !1; + if (e[a] !== t[a]) return !1 + } + return !0 + }(this.currentMediaInfo_, t) || (this.appendInitSegment_ = { + audio: !0, + video: !0 + }, this.startingMediaInfo_ = t, this.currentMediaInfo_ = t, this.logger_("trackinfo update", t), this.trigger("trackinfo")), this.checkForAbort_(e.requestId) || this.abortRequestEarly_(e.stats) || (this.pendingSegment_.trackInfo = t, this.hasEnoughInfoToAppend_() && this.processCallQueue_())) + }, t.handleTimingInfo_ = function (e, t, i, n) { + if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) { + var r = this.pendingSegment_, + a = Fc(t); + r[a] = r[a] || {}, r[a][i] = n, this.logger_("timinginfo: " + t + " - " + i + " - " + n), this.hasEnoughInfoToAppend_() && this.processCallQueue_() + } + }, t.handleCaptions_ = function (e, t) { + var s = this; + if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) + if (0 !== t.length) + if (this.pendingSegment_.hasAppendedData_) { + var o = null === this.sourceUpdater_.videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(), + u = {}; + t.forEach(function (e) { + u[e.stream] = u[e.stream] || { + startTime: 1 / 0, + captions: [], + endTime: 0 + }; + var t = u[e.stream]; + t.startTime = Math.min(t.startTime, e.startTime + o), t.endTime = Math.max(t.endTime, e.endTime + o), t.captions.push(e) + }), Object.keys(u).forEach(function (e) { + var t = u[e], + i = t.startTime, + n = t.endTime, + r = t.captions, + a = s.inbandTextTracks_; + s.logger_("adding cues from " + i + " -> " + n + " for " + e), + function (e, t, i) { + if (!e[i]) { + t.trigger({ + type: "usage", + name: "vhs-608" + }), t.trigger({ + type: "usage", + name: "hls-608" + }); + var n = t.textTracks().getTrackById(i); + e[i] = n || t.addRemoteTextTrack({ + kind: "captions", + id: i, + label: i + }, !1).track + } + }(a, s.vhs_.tech_, e), Nc(i, n, a[e]), + function (e) { + var i = e.inbandTextTracks, + t = e.captionArray, + n = e.timestampOffset; + if (t) { + var r = T.WebKitDataCue || T.VTTCue; + t.forEach(function (e) { + var t = e.stream; + i[t].addCue(new r(e.startTime + n, e.endTime + n, e.text)) + }) + } + }({ + captionArray: r, + inbandTextTracks: a, + timestampOffset: o + }) + }), this.transmuxer_ && this.transmuxer_.postMessage({ + action: "clearParsedMp4Captions" + }) + } else this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, e, t)); + else this.logger_("SegmentLoader received no captions from a caption event") + }, t.handleId3_ = function (e, t, i) { + if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) + if (this.pendingSegment_.hasAppendedData_) { + var n = null === this.sourceUpdater_.videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(); + ! function (e, t, i) { + e.metadataTrack_ || (e.metadataTrack_ = i.addRemoteTextTrack({ + kind: "metadata", + label: "Timed Metadata" + }, !1).track, e.metadataTrack_.inBandMetadataTrackDispatchType = t) + }(this.inbandTextTracks_, i, this.vhs_.tech_), Rc({ + inbandTextTracks: this.inbandTextTracks_, + metadataArray: t, + timestampOffset: n, + videoDuration: this.duration_() + }) + } else this.metadataQueue_.id3.push(this.handleId3_.bind(this, e, t, i)) + }, t.processMetadataQueue_ = function () { + this.metadataQueue_.id3.forEach(function (e) { + return e() + }), this.metadataQueue_.caption.forEach(function (e) { + return e() + }), this.metadataQueue_.id3 = [], this.metadataQueue_.caption = [] + }, t.processCallQueue_ = function () { + var e = this.callQueue_; + this.callQueue_ = [], e.forEach(function (e) { + return e() + }) + }, t.processLoadQueue_ = function () { + var e = this.loadQueue_; + this.loadQueue_ = [], e.forEach(function (e) { + return e() + }) + }, t.hasEnoughInfoToLoad_ = function () { + if ("audio" !== this.loaderType_) return !0; + var e = this.pendingSegment_; + return !!e && (!this.currentMediaInfo_ || !jc({ + timelineChangeController: this.timelineChangeController_, + currentTimeline: this.currentTimeline_, + segmentTimeline: e.timeline, + loaderType: this.loaderType_, + audioDisabled: this.audioDisabled_ + })) + }, t.hasEnoughInfoToAppend_ = function () { + if (!this.sourceUpdater_.ready()) return !1; + var e = this.pendingSegment_; + if (!e || !e.trackInfo) return !1; + if (!this.handlePartialData_) { + var t = this.currentMediaInfo_, + i = t.hasAudio, + n = t.hasVideo, + r = t.isMuxed; + if (n && !e.videoTimingInfo) return !1; + if (i && !this.audioDisabled_ && !r && !e.audioTimingInfo) return !1 + } + return !jc({ + timelineChangeController: this.timelineChangeController_, + currentTimeline: this.currentTimeline_, + segmentTimeline: e.timeline, + loaderType: this.loaderType_, + audioDisabled: this.audioDisabled_ + }) + }, t.handleData_ = function (e, t) { + if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) + if (!this.callQueue_.length && this.hasEnoughInfoToAppend_()) { + var i = this.pendingSegment_; + if (this.setTimeMapping_(i.timeline), this.updateMediaSecondsLoaded_(i.segment), "closed" !== this.mediaSource_.readyState) { + if (e.map && (e.map = this.initSegmentForMap(e.map, !0), i.segment.map = e.map), e.key && this.segmentKey(e.key, !0), i.isFmp4 = e.isFmp4, i.timingInfo = i.timingInfo || {}, i.isFmp4) this.trigger("fmp4"), i.timingInfo.start = i[Fc(t.type)].start; + else { + var n, r = "main" === this.loaderType_ && this.currentMediaInfo_.hasVideo; + r && (n = this.handlePartialData_ ? t.videoFramePtsTime : i.videoTimingInfo.start), i.timingInfo.start = this.trueSegmentStart_({ + currentStart: i.timingInfo.start, + playlist: i.playlist, + mediaIndex: i.mediaIndex, + currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(), + useVideoTimingInfo: r, + firstVideoFrameTimeForData: n, + videoTimingInfo: i.videoTimingInfo, + audioTimingInfo: i.audioTimingInfo + }) + } + this.updateAppendInitSegmentStatus(i, t.type), this.updateSourceBufferTimestampOffset_(i), i.hasAppendedData_ = !0, this.processMetadataQueue_(), this.appendData_(i, t) + } + } else this.callQueue_.push(this.handleData_.bind(this, e, t)) + }, t.updateAppendInitSegmentStatus = function (e, t) { + "main" !== this.loaderType_ || "number" != typeof e.timestampOffset || e.changedTimestampOffset || (this.appendInitSegment_ = { + audio: !0, + video: !0 + }), this.playlistOfLastInitSegment_[t] !== e.playlist && (this.appendInitSegment_[t] = !0) + }, t.getInitSegmentAndUpdateState_ = function (e) { + var t = e.type, + i = e.initSegment, + n = e.map, + r = e.playlist; + if (n) { + var a = gl(n); + if (this.activeInitSegmentId_ === a) return null; + i = this.initSegmentForMap(n, !0).bytes, this.activeInitSegmentId_ = a + } + return i && this.appendInitSegment_[t] ? (this.playlistOfLastInitSegment_[t] = r, this.appendInitSegment_[t] = !!n, this.activeInitSegmentId_ = null, i) : null + }, t.appendToSourceBuffer_ = function (e) { + var t = this, + i = e.segmentInfo, + n = e.type, + r = e.initSegment, + a = e.data, + s = [a], + o = a.byteLength; + r && (s.unshift(r), o += r.byteLength); + var u = function (e) { + var t, i = 0; + return e.bytes && (t = new Uint8Array(e.bytes), e.segments.forEach(function (e) { + t.set(e, i), i += e.byteLength + })), t + }({ + bytes: o, + segments: s + }); + this.sourceUpdater_.appendBuffer({ + segmentInfo: i, + type: n, + bytes: u + }, function (e) { + e && (t.error(n + " append of " + u.length + "b failed for segment #" + i.mediaIndex + " in playlist " + i.playlist.id), t.trigger("appenderror")) + }) + }, t.handleVideoSegmentTimingInfo_ = function (e, t) { + if (this.pendingSegment_ && e === this.pendingSegment_.requestId) { + var i = this.pendingSegment_.segment; + i.videoTimingInfo || (i.videoTimingInfo = {}), i.videoTimingInfo.transmuxerPrependedSeconds = t.prependedContentDuration || 0, i.videoTimingInfo.transmuxedPresentationStart = t.start.presentation, i.videoTimingInfo.transmuxedPresentationEnd = t.end.presentation, i.videoTimingInfo.baseMediaDecodeTime = t.baseMediaDecodeTime + } + }, t.appendData_ = function (e, t) { + var i = t.type, + n = t.data; + if (n && n.byteLength && ("audio" !== i || !this.audioDisabled_)) { + var r = this.getInitSegmentAndUpdateState_({ + type: i, + initSegment: t.initSegment, + playlist: e.playlist, + map: e.isFmp4 ? e.segment.map : null + }); + this.appendToSourceBuffer_({ + segmentInfo: e, + type: i, + initSegment: r, + data: n + }) + } + }, t.loadSegment_ = function (i) { + var n = this; + this.state = "WAITING", this.pendingSegment_ = i, this.trimBackBuffer_(i), "number" == typeof i.timestampOffset && this.transmuxer_ && this.transmuxer_.postMessage({ + action: "clearAllMp4Captions" + }), this.hasEnoughInfoToLoad_() ? this.updateTransmuxerAndRequestSegment_(i) : this.loadQueue_.push(function () { + var e = n.buffered_(); + "number" == typeof i.timestampOffset && (i.timestampOffset = Bc({ + segmentTimeline: i.timeline, + currentTimeline: n.currentTimeline_, + startOfSegment: i.startOfSegment, + buffered: e, + overrideCheck: !0 + })), delete i.audioAppendStart; + var t = n.sourceUpdater_.audioBuffered(); + t.length && (i.audioAppendStart = t.end(t.length - 1) - n.sourceUpdater_.audioTimestampOffset()), n.updateTransmuxerAndRequestSegment_(i) + }) + }, t.updateTransmuxerAndRequestSegment_ = function (e) { + this.shouldUpdateTransmuxerTimestampOffset_(e.timestampOffset) && (this.gopBuffer_.length = 0, e.gopsToAlignWith = [], this.timeMapping_ = 0, this.transmuxer_.postMessage({ + action: "reset" + }), this.transmuxer_.postMessage({ + action: "setTimestampOffset", + timestampOffset: e.timestampOffset + })); + var t = this.createSimplifiedSegmentObj_(e); + e.abortRequests = Fl({ + xhr: this.vhs_.xhr, + xhrOptions: this.xhrOptions_, + decryptionWorker: this.decrypter_, + segment: t, + handlePartialData: this.handlePartialData_, + abortFn: this.handleAbort_.bind(this), + progressFn: this.handleProgress_.bind(this), + trackInfoFn: this.handleTrackInfo_.bind(this), + timingInfoFn: this.handleTimingInfo_.bind(this), + videoSegmentTimingInfoFn: this.handleVideoSegmentTimingInfo_.bind(this, e.requestId), + captionsFn: this.handleCaptions_.bind(this), + id3Fn: this.handleId3_.bind(this), + dataFn: this.handleData_.bind(this), + doneFn: this.segmentRequestFinished_.bind(this) + }) + }, t.trimBackBuffer_ = function (e) { + var t = function (e, t, i) { + var n = t - uc.BACK_BUFFER_LENGTH; + e.length && (n = Math.max(n, e.start(0))); + var r = t - i; + return Math.min(r, n) + }(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10); + 0 < t && this.remove(0, t) + }, t.createSimplifiedSegmentObj_ = function (e) { + var t = e.segment, + i = { + resolvedUri: t.resolvedUri, + byterange: t.byterange, + requestId: e.requestId, + transmuxer: e.transmuxer, + audioAppendStart: e.audioAppendStart, + gopsToAlignWith: e.gopsToAlignWith + }, + n = e.playlist.segments[e.mediaIndex]; + if (n && n.end && n.timeline === t.timeline && (i.baseStartTime = n.end + e.timestampOffset), t.key) { + var r = t.key.iv || new Uint32Array([0, 0, 0, e.mediaIndex + e.playlist.mediaSequence]); + i.key = this.segmentKey(t.key), i.key.iv = r + } + return t.map && (i.map = this.initSegmentForMap(t.map)), i + }, t.saveTransferStats_ = function (e) { + this.mediaRequests += 1, e && (this.mediaBytesTransferred += e.bytesReceived, this.mediaTransferDuration += e.roundTripTime) + }, t.saveBandwidthRelatedStats_ = function (e) { + this.bandwidth = e.bandwidth, this.roundTrip = e.roundTripTime, this.pendingSegment_.byteLength = e.bytesReceived + }, t.handleTimeout_ = function () { + this.mediaRequestsTimedout += 1, this.bandwidth = 1, this.roundTrip = NaN, this.trigger("bandwidthupdate") + }, t.segmentRequestFinished_ = function (e, t, i) { + if (this.callQueue_.length) this.callQueue_.push(this.segmentRequestFinished_.bind(this, e, t, i)); + else if (this.saveTransferStats_(t.stats), this.pendingSegment_ && t.requestId === this.pendingSegment_.requestId) { + if (e) { + if (this.pendingSegment_ = null, this.state = "READY", e.code === gc) return; + return this.pause(), e.code === mc ? void this.handleTimeout_() : (this.mediaRequestsErrored += 1, this.error(e), void this.trigger("error")) + } + this.saveBandwidthRelatedStats_(t.stats); + var n = this.pendingSegment_; + n.endOfAllRequests = t.endOfAllRequests, i.gopInfo && (this.gopBuffer_ = function (e, t, i) { + if (!t.length) return e; + if (i) return t.slice(); + for (var n = t[0].pts, r = 0; r < e.length && !(e[r].pts >= n); r++); + return e.slice(0, r).concat(t) + }(this.gopBuffer_, i.gopInfo, this.safeAppend_)), this.state = "APPENDING"; + var r = this.isEndOfStream_(n.mediaIndex, n.playlist), + a = null !== this.mediaIndex, + s = n.timeline !== this.currentTimeline_ && 0 < n.timeline; + !n.isFmp4 && (r || a && s) && pc(this.transmuxer_), this.trigger("appending"), this.waitForAppendsToComplete_(n) + } + }, t.setTimeMapping_ = function (e) { + var t = this.syncController_.mappingForTimeline(e); + null !== t && (this.timeMapping_ = t) + }, t.updateMediaSecondsLoaded_ = function (e) { + "number" == typeof e.start && "number" == typeof e.end ? this.mediaSecondsLoaded += e.end - e.start : this.mediaSecondsLoaded += e.duration + }, t.shouldUpdateTransmuxerTimestampOffset_ = function (e) { + return null !== e && ("main" === this.loaderType_ && e !== this.sourceUpdater_.videoTimestampOffset() || !this.audioDisabled_ && e !== this.sourceUpdater_.audioTimestampOffset()) + }, t.trueSegmentStart_ = function (e) { + var t = e.currentStart, + i = e.playlist, + n = e.mediaIndex, + r = e.firstVideoFrameTimeForData, + a = e.currentVideoTimestampOffset, + s = e.useVideoTimingInfo, + o = e.videoTimingInfo, + u = e.audioTimingInfo; + if ("undefined" != typeof t) return t; + if (!s) return u.start; + var l = i.segments[n - 1]; + return 0 !== n && l && "undefined" != typeof l.start && l.end === r + a ? o.start : r + }, t.waitForAppendsToComplete_ = function (e) { + if (!this.currentMediaInfo_) return this.error({ + message: "No starting media returned, likely due to an unsupported media format.", + blacklistDuration: 1 / 0 + }), void this.trigger("error"); + var t = this.currentMediaInfo_, + i = t.hasAudio, + n = t.hasVideo, + r = t.isMuxed, + a = "main" === this.loaderType_ && n, + s = !this.audioDisabled_ && i && !r; + if (e.waitingOnAppends = 0, !e.hasAppendedData_) return e.timingInfo || "number" != typeof e.timestampOffset || (this.isPendingTimestampOffset_ = !0), e.timingInfo = { + start: 0 + }, e.waitingOnAppends++, this.isPendingTimestampOffset_ || (this.updateSourceBufferTimestampOffset_(e), this.processMetadataQueue_()), void this.checkAppendsDone_(e); + a && e.waitingOnAppends++, s && e.waitingOnAppends++, a && this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, e)), s && this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, e)) + }, t.checkAppendsDone_ = function (e) { + this.checkForAbort_(e.requestId) || (e.waitingOnAppends--, 0 === e.waitingOnAppends && this.handleAppendsDone_()) + }, t.checkForIllegalMediaSwitch = function (e) { + var t = function (e, t, i) { + return "main" === e && t && i ? i.hasAudio || i.hasVideo ? t.hasVideo && !i.hasVideo ? "Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest." : !t.hasVideo && i.hasVideo ? "Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest." : null : "Neither audio nor video found in segment." : null + }(this.loaderType_, this.currentMediaInfo_, e); + return !!t && (this.error({ + message: t, + blacklistDuration: 1 / 0 + }), this.trigger("error"), !0) + }, t.updateSourceBufferTimestampOffset_ = function (e) { + if (null !== e.timestampOffset && "number" == typeof e.timingInfo.start && !e.changedTimestampOffset && "main" === this.loaderType_) { + var t = !1; + e.timestampOffset -= e.timingInfo.start, e.changedTimestampOffset = !0, e.timestampOffset !== this.sourceUpdater_.videoTimestampOffset() && (this.sourceUpdater_.videoTimestampOffset(e.timestampOffset), t = !0), e.timestampOffset !== this.sourceUpdater_.audioTimestampOffset() && (this.sourceUpdater_.audioTimestampOffset(e.timestampOffset), t = !0), t && this.trigger("timestampoffset") + } + }, t.updateTimingInfoEnd_ = function (e) { + e.timingInfo = e.timingInfo || {}; + var t = "main" === this.loaderType_ && this.currentMediaInfo_.hasVideo && e.videoTimingInfo ? e.videoTimingInfo : e.audioTimingInfo; + t && (e.timingInfo.end = "number" == typeof t.end ? t.end : t.start + e.duration) + }, t.handleAppendsDone_ = function () { + if (this.pendingSegment_ && this.trigger("appendsdone"), !this.pendingSegment_) return this.state = "READY", void(this.paused() || this.monitorBuffer_()); + var e = this.pendingSegment_; + if (this.updateTimingInfoEnd_(e), this.shouldSaveSegmentTimingInfo_ && this.syncController_.saveSegmentTimingInfo({ + segmentInfo: e, + shouldSaveTimelineMapping: "main" === this.loaderType_ + }), this.logger_(function (e) { + var t = e.segment, + i = t.start, + n = t.end, + r = e.playlist, + a = r.mediaSequence, + s = r.id, + o = r.segments, + u = void 0 === o ? [] : o, + l = e.mediaIndex, + c = e.timeline; + return ["appending [" + l + "] of [" + a + ", " + (a + u.length) + "] from playlist [" + s + "]", "[" + i + " => " + n + "] in timeline [" + c + "]"].join(" ") + }(e)), this.recordThroughput_(e), this.pendingSegment_ = null, this.state = "READY", e.isSyncRequest) this.trigger("syncinfoupdate"); + else { + this.addSegmentMetadataCue_(e), this.fetchAtBuffer_ = !0, this.currentTimeline_ !== e.timeline && (this.timelineChangeController_.lastTimelineChange({ + type: this.loaderType_, + from: this.currentTimeline_, + to: e.timeline + }), "main" !== this.loaderType_ || this.audioDisabled_ || this.timelineChangeController_.lastTimelineChange({ + type: "audio", + from: this.currentTimeline_, + to: e.timeline + })), this.currentTimeline_ = e.timeline, this.trigger("syncinfoupdate"); + var t = e.segment; + if (t.end && this.currentTime_() - t.end > 3 * e.playlist.targetDuration) this.resetEverything(); + else null !== this.mediaIndex && this.trigger("bandwidthupdate"), this.trigger("progress"), this.mediaIndex = e.mediaIndex, this.isEndOfStream_(e.mediaIndex, e.playlist) && this.endOfStream(), this.trigger("appended"), this.paused() || this.monitorBuffer_() + } + }, t.recordThroughput_ = function (e) { + var t = this.throughput.rate, + i = Date.now() - e.endOfAllRequests + 1, + n = Math.floor(e.byteLength / i * 8 * 1e3); + this.throughput.rate += (n - t) / ++this.throughput.count + }, t.addSegmentMetadataCue_ = function (e) { + if (this.segmentMetadataTrack_) { + var t = e.segment, + i = t.start, + n = t.end; + if (Uc(i) && Uc(n)) { + Nc(i, n, this.segmentMetadataTrack_); + var r = T.WebKitDataCue || T.VTTCue, + a = { + custom: t.custom, + dateTimeObject: t.dateTimeObject, + dateTimeString: t.dateTimeString, + bandwidth: e.playlist.attributes.BANDWIDTH, + resolution: e.playlist.attributes.RESOLUTION, + codecs: e.playlist.attributes.CODECS, + byteLength: e.byteLength, + uri: e.uri, + timeline: e.timeline, + playlist: e.playlist.id, + start: i, + end: n + }, + s = new r(i, n, JSON.stringify(a)); + s.value = a, this.segmentMetadataTrack_.addCue(s) + } + } + }, e + }(da.EventTarget); + + function Wc() {} + + function zc(e) { + return "string" != typeof e ? e : e.replace(/./, function (e) { + return e.toUpperCase() + }) + } + + function Gc(e, t) { + var i = t[e + "Buffer"]; + return i && i.updating || t.queuePending[e] + } + + function Xc(e, t) { + if (0 !== t.queue.length) { + var i = 0, + n = t.queue[i]; + if ("mediaSource" !== n.type) { + if ("mediaSource" !== e && t.started_ && "closed" !== t.mediaSource.readyState && !Gc(e, t)) { + if (n.type !== e) { + if (null === (i = function (e, t) { + for (var i = 0; i < t.length; i++) { + var n = t[i]; + if ("mediaSource" === n.type) return null; + if (n.type === e) return i + } + return null + }(e, t.queue))) return; + n = t.queue[i] + } + t.queue.splice(i, 1), n.action(e, t), n.doneFn ? t.queuePending[e] = n : Xc(e, t) + } + } else t.updating() || "closed" === t.mediaSource.readyState || (t.queue.shift(), n.action(t), n.doneFn && n.doneFn(), Xc("audio", t), Xc("video", t)) + } + } + + function Kc(e, t) { + var i = t[e + "Buffer"], + n = zc(e); + i && (i.removeEventListener("updateend", t["on" + n + "UpdateEnd_"]), i.removeEventListener("error", t["on" + n + "Error_"]), t.codecs[e] = null, t[e + "Buffer"] = null) + } + + function Yc(e, t) { + return e && t && -1 !== Array.prototype.indexOf.call(e.sourceBuffers, t) + } + + function $c(e) { + var t = e.type, + i = e.sourceUpdater, + n = e.action, + r = e.doneFn, + a = e.name; + i.queue.push({ + type: t, + action: n, + doneFn: r, + name: a + }), Xc(t, i) + } + + function Qc(i, n) { + return function (e) { + if (n.queuePending[i]) { + var t = n.queuePending[i].doneFn; + n.queuePending[i] = null, t && t(n[i + "Error_"]) + } + Xc(i, n) + } + } + + function Jc(e) { + return decodeURIComponent(escape(String.fromCharCode.apply(null, e))) + } + + function Zc(e, t) { + for (var i = e.cues, n = 0; n < i.length; n++) { + var r = i[n]; + if (t >= r.adStartTime && t <= r.adEndTime) return r + } + return null + } + + function ed(e, t) { + e.abort(), e.pause(), t && t.activePlaylistLoader && (t.activePlaylistLoader.pause(), t.activePlaylistLoader = null) + } + + function td(e, t) { + (t.activePlaylistLoader = e).load() + } + + function id(t) { + ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function (e) { + wd[e](e, t) + }); + var i = t.mediaTypes, + e = t.masterPlaylistLoader, + n = t.tech, + r = t.vhs; + ["AUDIO", "SUBTITLES"].forEach(function (e) { + i[e].activeGroup = function (a, s) { + return function (t) { + var e = s.masterPlaylistLoader, + i = s.mediaTypes[a].groups, + n = e.media(); + if (!n) return null; + var r = null; + return n.attributes[a] && (r = i[n.attributes[a]]), r = r || i.main, "undefined" == typeof t ? r : null === t ? null : r.filter(function (e) { + return e.id === t.id + })[0] || null + } + }(e, t), i[e].activeTrack = Id[e](e, t), i[e].onGroupChanged = function (o, u) { + return function () { + var e = u.segmentLoaders, + t = e[o], + i = e.main, + n = u.mediaTypes[o], + r = n.activeTrack(), + a = n.activeGroup(r), + s = n.activePlaylistLoader; + ed(t, n), a && (a.playlistLoader ? (t.resyncLoader(), td(a.playlistLoader, n)) : s && i.resetEverything()) + } + }(e, t), i[e].onGroupChanging = function (t, i) { + return function () { + var e = i.segmentLoaders[t]; + e.abort(), e.pause() + } + }(e, t), i[e].onTrackChanged = function (o, u) { + return function () { + var e = u.segmentLoaders, + t = e[o], + i = e.main, + n = u.mediaTypes[o], + r = n.activeTrack(), + a = n.activeGroup(r), + s = n.activePlaylistLoader; + if (ed(t, n), a) { + if ("AUDIO" === o) { + if (!a.playlistLoader) return i.setAudio(!0), void i.resetEverything(); + t.setAudio(!0), i.setAudio(!1) + } + s !== a.playlistLoader && (t.track && t.track(r), t.resetEverything()), td(a.playlistLoader, n) + } + } + }(e, t) + }); + var a = i.AUDIO.activeGroup(); + if (a) { + var s = (a.filter(function (e) { + return e.default + })[0] || a[0]).id; + i.AUDIO.tracks[s].enabled = !0, i.AUDIO.onTrackChanged() + } + + function o() { + i.AUDIO.onTrackChanged(), n.trigger({ + type: "usage", + name: "vhs-audio-change" + }), n.trigger({ + type: "usage", + name: "hls-audio-change" + }) + } + for (var u in e.on("mediachange", function () { + ["AUDIO", "SUBTITLES"].forEach(function (e) { + return i[e].onGroupChanged() + }) + }), e.on("mediachanging", function () { + ["AUDIO", "SUBTITLES"].forEach(function (e) { + return i[e].onGroupChanging() + }) + }), n.audioTracks().addEventListener("change", o), n.remoteTextTracks().addEventListener("change", i.SUBTITLES.onTrackChanged), r.on("dispose", function () { + n.audioTracks().removeEventListener("change", o), n.remoteTextTracks().removeEventListener("change", i.SUBTITLES.onTrackChanged) + }), n.clearTracks("audio"), i.AUDIO.tracks) n.audioTracks().addTrack(i.AUDIO.tracks[u]) + } + + function nd(e, t, i) { + var n = e.masterPlaylistController_, + r = n[(e.options_.smoothQualityChange ? "smooth" : "fast") + "QualityChange_"].bind(n); + if (t.attributes.RESOLUTION) { + var a = t.attributes.RESOLUTION; + this.width = a.width, this.height = a.height + } + this.bandwidth = t.attributes.BANDWIDTH, this.codecs = xc(n.master(), t), this.playlist = t, this.id = i, this.enabled = function (r, a, s) { + return function (e) { + var t = r.master.playlists[a], + i = sl(t), + n = ol(t); + return "undefined" == typeof e ? n : (e ? delete t.disabled : t.disabled = !0, e === n || i || (s(), e ? r.trigger("renditionenabled") : r.trigger("renditiondisabled")), e) + } + }(e.playlists, t.id, r) + } + + function rd(e) { + ! function t(i, e) { + var n = 0, + r = 0, + a = da.mergeOptions(Od, e); + i.ready(function () { + i.trigger({ + type: "usage", + name: "vhs-error-reload-initialized" + }), i.trigger({ + type: "usage", + name: "hls-error-reload-initialized" + }) + }); + + function s() { + r && i.currentTime(r) + } + + function o(e) { + null != e && (r = i.duration() !== 1 / 0 && i.currentTime() || 0, i.one("loadedmetadata", s), i.src(e), i.trigger({ + type: "usage", + name: "vhs-error-reload" + }), i.trigger({ + type: "usage", + name: "hls-error-reload" + }), i.play()) + } + + function u() { + return Date.now() - n < 1e3 * a.errorInterval ? (i.trigger({ + type: "usage", + name: "vhs-error-reload-canceled" + }), void i.trigger({ + type: "usage", + name: "hls-error-reload-canceled" + })) : a.getSource && "function" == typeof a.getSource ? (n = Date.now(), a.getSource.call(i, o)) : void da.log.error("ERROR: reloadSourceOnError - The option getSource must be a function!") + } + + function l() { + i.off("loadedmetadata", s), i.off("error", u), i.off("dispose", l) + } + i.on("error", u), i.on("dispose", l), i.reloadSourceOnError = function (e) { + l(), t(i, e) + } + }(this, e) + } + var ad, sd = ["video", "audio"], + od = function (n, r) { + return function (e, t) { + var i = t[e + "Buffer"]; + Yc(t.mediaSource, i) && (t.logger_("Appending segment " + r.mediaIndex + "'s " + n.length + " bytes to " + e + "Buffer"), i.appendBuffer(n)) + } + }, + ud = function (n, r) { + return function (e, t) { + var i = t[e + "Buffer"]; + Yc(t.mediaSource, i) && (t.logger_("Removing " + n + " to " + r + " from " + e + "Buffer"), i.remove(n, r)) + } + }, + ld = function (n) { + return function (e, t) { + var i = t[e + "Buffer"]; + Yc(t.mediaSource, i) && (t.logger_("Setting " + e + "timestampOffset to " + n), i.timestampOffset = n) + } + }, + cd = function (i) { + return function (e, t) { + i() + } + }, + dd = function (t) { + return function (e) { + if ("open" === e.mediaSource.readyState) { + e.logger_("Calling mediaSource endOfStream(" + (t || "") + ")"); + try { + e.mediaSource.endOfStream(t) + } catch (e) { + da.log.warn("Failed to call media source endOfStream", e) + } + } + } + }, + hd = function (t) { + return function (e) { + e.logger_("Setting mediaSource duration to " + t); + try { + e.mediaSource.duration = t + } catch (e) { + da.log.warn("Failed to set media source duration", e) + } + } + }, + pd = function () { + return function (t, e) { + if ("open" === e.mediaSource.readyState) { + var i = e[t + "Buffer"]; + if (Yc(e.mediaSource, i)) { + e.logger_("calling abort on " + t + "Buffer"); + try { + i.abort() + } catch (e) { + da.log.warn("Failed to abort on " + t + "Buffer", e) + } + } + } + } + }, + fd = function (r, a) { + return function (e) { + var t = zc(r), + i = Wl(a); + e.logger_("Adding " + r + "Buffer with codec " + a + " to mediaSource"); + var n = e.mediaSource.addSourceBuffer(i); + n.addEventListener("updateend", e["on" + t + "UpdateEnd_"]), n.addEventListener("error", e["on" + t + "Error_"]), e.codecs[r] = a, e[r + "Buffer"] = n + } + }, + md = function (i) { + return function (e) { + var t = e[i + "Buffer"]; + if (Kc(i, e), Yc(e.mediaSource, t)) { + e.logger_("Removing " + i + "Buffer with codec " + e.codecs[i] + " from mediaSource"); + try { + e.mediaSource.removeSourceBuffer(t) + } catch (e) { + da.log.warn("Failed to removeSourceBuffer " + i + "Buffer", e) + } + } + } + }, + gd = function (r) { + return function (e, t) { + var i = t[e + "Buffer"], + n = Wl(r); + Yc(t.mediaSource, i) && t.codecs[e] !== r && (t.logger_("changing " + e + "Buffer codec from " + t.codecs[e] + " to " + r), i.changeType(n), t.codecs[e] = r) + } + }, + vd = function (i) { + function e(e) { + var t; + return (t = i.call(this) || this).mediaSource = e, t.sourceopenListener_ = function () { + return Xc("mediaSource", Ve(t)) + }, t.mediaSource.addEventListener("sourceopen", t.sourceopenListener_), t.logger_ = Pc("SourceUpdater"), t.audioTimestampOffset_ = 0, t.videoTimestampOffset_ = 0, t.queue = [], t.queuePending = { + audio: null, + video: null + }, t.delayedAudioAppendQueue_ = [], t.videoAppendQueued_ = !1, t.codecs = {}, t.onVideoUpdateEnd_ = Qc("video", Ve(t)), t.onAudioUpdateEnd_ = Qc("audio", Ve(t)), t.onVideoError_ = function (e) { + t.videoError_ = e + }, t.onAudioError_ = function (e) { + t.audioError_ = e + }, t.started_ = !1, t + } + Ge(e, i); + var t = e.prototype; + return t.ready = function () { + return this.started_ + }, t.createSourceBuffers = function (e) { + this.ready() || (this.addOrChangeSourceBuffers(e), this.started_ = !0, this.trigger("ready")) + }, t.addSourceBuffer = function (e, t) { + $c({ + type: "mediaSource", + sourceUpdater: this, + action: fd(e, t), + name: "addSourceBuffer" + }) + }, t.abort = function (e) { + $c({ + type: e, + sourceUpdater: this, + action: pd(e), + name: "abort" + }) + }, t.removeSourceBuffer = function (e) { + this.canRemoveSourceBuffer() ? $c({ + type: "mediaSource", + sourceUpdater: this, + action: md(e), + name: "removeSourceBuffer" + }) : da.log.error("removeSourceBuffer is not supported!") + }, t.canRemoveSourceBuffer = function () { + return !da.browser.IE_VERSION && T.MediaSource && T.MediaSource.prototype && "function" == typeof T.MediaSource.prototype.removeSourceBuffer + }, e.canChangeType = function () { + return T.SourceBuffer && T.SourceBuffer.prototype && "function" == typeof T.SourceBuffer.prototype.changeType + }, t.canChangeType = function () { + return this.constructor.canChangeType() + }, t.changeType = function (e, t) { + this.canChangeType() ? $c({ + type: e, + sourceUpdater: this, + action: gd(t), + name: "changeType" + }) : da.log.error("changeType is not supported!") + }, t.addOrChangeSourceBuffers = function (i) { + var n = this; + if (!i || "object" != typeof i || 0 === Object.keys(i).length) throw new Error("Cannot addOrChangeSourceBuffers to undefined codecs"); + Object.keys(i).forEach(function (e) { + var t = i[e]; + if (!n.ready()) return n.addSourceBuffer(e, t); + n.canChangeType() && n.changeType(e, t) + }) + }, t.appendBuffer = function (e, t) { + var i = this, + n = e.segmentInfo, + r = e.type, + a = e.bytes; + if (this.processedAppend_ = !0, "audio" === r && this.videoBuffer && !this.videoAppendQueued_) return this.delayedAudioAppendQueue_.push([e, t]), void this.logger_("delayed audio append of " + a.length + " until video append"); + if ($c({ + type: r, + sourceUpdater: this, + action: od(a, n || { + mediaIndex: -1 + }), + doneFn: t, + name: "appendBuffer" + }), "video" === r) { + if (this.videoAppendQueued_ = !0, !this.delayedAudioAppendQueue_.length) return; + var s = this.delayedAudioAppendQueue_.slice(); + this.logger_("queuing delayed audio " + s.length + " appendBuffers"), this.delayedAudioAppendQueue_.length = 0, s.forEach(function (e) { + i.appendBuffer.apply(i, e) + }) + } + }, t.audioBuffered = function () { + return Yc(this.mediaSource, this.audioBuffer) && this.audioBuffer.buffered ? this.audioBuffer.buffered : da.createTimeRange() + }, t.videoBuffered = function () { + return Yc(this.mediaSource, this.videoBuffer) && this.videoBuffer.buffered ? this.videoBuffer.buffered : da.createTimeRange() + }, t.buffered = function () { + var e = Yc(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null, + t = Yc(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null; + return t && !e ? this.audioBuffered() : e && !t ? this.videoBuffered() : function (e, t) { + var i = null, + n = null, + r = 0, + a = [], + s = []; + if (!(e && e.length && t && t.length)) return da.createTimeRange(); + for (var o = e.length; o--;) a.push({ + time: e.start(o), + type: "start" + }), a.push({ + time: e.end(o), + type: "end" + }); + for (o = t.length; o--;) a.push({ + time: t.start(o), + type: "start" + }), a.push({ + time: t.end(o), + type: "end" + }); + for (a.sort(function (e, t) { + return e.time - t.time + }), o = 0; o < a.length; o++) "start" === a[o].type ? 2 === ++r && (i = a[o].time) : "end" === a[o].type && 1 === --r && (n = a[o].time), null !== i && null !== n && (s.push([i, n]), n = i = null); + return da.createTimeRanges(s) + }(this.audioBuffered(), this.videoBuffered()) + }, t.setDuration = function (e, t) { + void 0 === t && (t = Wc), $c({ + type: "mediaSource", + sourceUpdater: this, + action: hd(e), + name: "duration", + doneFn: t + }) + }, t.endOfStream = function (e, t) { + void 0 === e && (e = null), void 0 === t && (t = Wc), "string" != typeof e && (e = void 0), $c({ + type: "mediaSource", + sourceUpdater: this, + action: dd(e), + name: "endOfStream", + doneFn: t + }) + }, t.removeAudio = function (e, t, i) { + void 0 === i && (i = Wc), this.audioBuffered().length && 0 !== this.audioBuffered().end(0) ? $c({ + type: "audio", + sourceUpdater: this, + action: ud(e, t), + doneFn: i, + name: "remove" + }) : i() + }, t.removeVideo = function (e, t, i) { + void 0 === i && (i = Wc), this.videoBuffered().length && 0 !== this.videoBuffered().end(0) ? $c({ + type: "video", + sourceUpdater: this, + action: ud(e, t), + doneFn: i, + name: "remove" + }) : i() + }, t.updating = function () { + return !(!Gc("audio", this) && !Gc("video", this)) + }, t.audioTimestampOffset = function (e) { + return "undefined" != typeof e && this.audioBuffer && this.audioTimestampOffset_ !== e && ($c({ + type: "audio", + sourceUpdater: this, + action: ld(e), + name: "timestampOffset" + }), this.audioTimestampOffset_ = e), this.audioTimestampOffset_ + }, t.videoTimestampOffset = function (e) { + return "undefined" != typeof e && this.videoBuffer && this.videoTimestampOffset !== e && ($c({ + type: "video", + sourceUpdater: this, + action: ld(e), + name: "timestampOffset" + }), this.videoTimestampOffset_ = e), this.videoTimestampOffset_ + }, t.audioQueueCallback = function (e) { + this.audioBuffer && $c({ + type: "audio", + sourceUpdater: this, + action: cd(e), + name: "callback" + }) + }, t.videoQueueCallback = function (e) { + this.videoBuffer && $c({ + type: "video", + sourceUpdater: this, + action: cd(e), + name: "callback" + }) + }, t.dispose = function () { + var t = this; + this.trigger("dispose"), sd.forEach(function (e) { + t.abort(e), t.canRemoveSourceBuffer() ? t.removeSourceBuffer(e) : t[e + "QueueCallback"](function () { + return Kc(e, t) + }) + }), this.videoAppendQueued_ = !1, this.delayedAudioAppendQueue_.length = 0, this.sourceopenListener_ && this.mediaSource.removeEventListener("sourceopen", this.sourceopenListener_), this.off() + }, e + }(da.EventTarget), + yd = new Uint8Array("\n\n".split("").map(function (e) { + return e.charCodeAt(0) + })), + _d = function (n) { + function e(e, t) { + var i; + return void 0 === t && (t = {}), (i = n.call(this, e, t) || this).handlePartialData_ = !1, i.mediaSource_ = null, i.subtitlesTrack_ = null, i.loaderType_ = "subtitle", i.featuresNativeTextTracks_ = e.featuresNativeTextTracks, i.shouldSaveSegmentTimingInfo_ = !1, i + } + Ge(e, n); + var t = e.prototype; + return t.createTransmuxer_ = function () { + return null + }, t.buffered_ = function () { + if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues.length) return da.createTimeRanges(); + var e = this.subtitlesTrack_.cues, + t = e[0].startTime, + i = e[e.length - 1].startTime; + return da.createTimeRanges([ + [t, i] + ]) + }, t.initSegmentForMap = function (e, t) { + if (void 0 === t && (t = !1), !e) return null; + var i = gl(e), + n = this.initSegments_[i]; + if (t && !n && e.bytes) { + var r = yd.byteLength + e.bytes.byteLength, + a = new Uint8Array(r); + a.set(e.bytes), a.set(yd, e.bytes.byteLength), this.initSegments_[i] = n = { + resolvedUri: e.resolvedUri, + byterange: e.byterange, + bytes: a + } + } + return n || e + }, t.couldBeginLoading_ = function () { + return this.playlist_ && this.subtitlesTrack_ && !this.paused() + }, t.init_ = function () { + return this.state = "READY", this.resetEverything(), this.monitorBuffer_() + }, t.track = function (e) { + return "undefined" == typeof e || (this.subtitlesTrack_ = e, "INIT" === this.state && this.couldBeginLoading_() && this.init_()), this.subtitlesTrack_ + }, t.remove = function (e, t) { + Nc(e, t, this.subtitlesTrack_) + }, t.fillBuffer_ = function () { + var e = this; + this.syncPoint_ || (this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_())); + var t = this.checkBuffer_(this.buffered_(), this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_); + if (t = this.skipEmptySegments_(t)) { + if (null === this.syncController_.timestampOffsetForTimeline(t.timeline)) { + return this.syncController_.one("timestampoffset", function () { + e.state = "READY", e.paused() || e.monitorBuffer_() + }), void(this.state = "WAITING_ON_TIMELINE") + } + this.loadSegment_(t) + } + }, t.skipEmptySegments_ = function (e) { + for (; e && e.segment.empty;) e = this.generateSegmentInfo_(e.playlist, e.mediaIndex + 1, e.startOfSegment + e.duration, e.isSyncRequest); + return e + }, t.stopForError = function (e) { + this.error(e), this.state = "READY", this.pause(), this.trigger("error") + }, t.segmentRequestFinished_ = function (e, t, i) { + var n = this; + if (this.subtitlesTrack_) { + if (this.saveTransferStats_(t.stats), !this.pendingSegment_) return this.state = "READY", void(this.mediaRequestsAborted += 1); + if (e) return e.code === mc && this.handleTimeout_(), e.code === gc ? this.mediaRequestsAborted += 1 : this.mediaRequestsErrored += 1, void this.stopForError(e); + this.saveBandwidthRelatedStats_(t.stats), this.state = "APPENDING", this.trigger("appending"); + var r = this.pendingSegment_, + a = r.segment; + if (a.map && (a.map.bytes = t.map.bytes), r.bytes = t.bytes, "function" != typeof T.WebVTT && this.subtitlesTrack_ && this.subtitlesTrack_.tech_) { + var s, o = function () { + n.subtitlesTrack_.tech_.off("vttjsloaded", s), n.stopForError({ + message: "Error loading vtt.js" + }) + }; + return s = function () { + n.subtitlesTrack_.tech_.off("vttjserror", o), n.segmentRequestFinished_(e, t, i) + }, this.state = "WAITING_ON_VTTJS", this.subtitlesTrack_.tech_.one("vttjsloaded", s), void this.subtitlesTrack_.tech_.one("vttjserror", o) + } + a.requested = !0; + try { + this.parseVTTCues_(r) + } catch (e) { + return void this.stopForError({ + message: e.message + }) + } + if (this.updateTimeMapping_(r, this.syncController_.timelines[r.timeline], this.playlist_), r.cues.length ? r.timingInfo = { + start: r.cues[0].startTime, + end: r.cues[r.cues.length - 1].endTime + } : r.timingInfo = { + start: r.startOfSegment, + end: r.startOfSegment + r.duration + }, r.isSyncRequest) return this.trigger("syncinfoupdate"), this.pendingSegment_ = null, void(this.state = "READY"); + r.byteLength = r.bytes.byteLength, this.mediaSecondsLoaded += a.duration, r.cues.forEach(function (e) { + n.remove(e.startTime, e.endTime), n.subtitlesTrack_.addCue(n.featuresNativeTextTracks_ ? new T.VTTCue(e.startTime, e.endTime, e.text) : e) + }), this.handleAppendsDone_() + } else this.state = "READY" + }, t.handleData_ = function () {}, t.updateTimingInfoEnd_ = function () {}, t.parseVTTCues_ = function (t) { + var e, i = !1; + "function" == typeof T.TextDecoder ? e = new T.TextDecoder("utf8") : (e = T.WebVTT.StringDecoder(), i = !0); + var n = new T.WebVTT.Parser(T, T.vttjs, e); + if (t.cues = [], t.timestampmap = { + MPEGTS: 0, + LOCAL: 0 + }, n.oncue = t.cues.push.bind(t.cues), n.ontimestampmap = function (e) { + t.timestampmap = e + }, n.onparsingerror = function (e) { + da.log.warn("Error encountered when parsing cues: " + e.message) + }, t.segment.map) { + var r = t.segment.map.bytes; + i && (r = Jc(r)), n.parse(r) + } + var a = t.bytes; + i && (a = Jc(a)), n.parse(a), n.flush() + }, t.updateTimeMapping_ = function (e, t, i) { + var n = e.segment; + if (t) + if (e.cues.length) { + var r = e.timestampmap, + a = r.MPEGTS / fu - r.LOCAL + t.mapping; + if (e.cues.forEach(function (e) { + e.startTime += a, e.endTime += a + }), !i.syncInfo) { + var s = e.cues[0].startTime, + o = e.cues[e.cues.length - 1].startTime; + i.syncInfo = { + mediaSequence: i.mediaSequence + e.mediaIndex, + time: Math.min(s, o - n.duration) + } + } + } else n.empty = !0 + }, e + }(Hc), + bd = [{ + name: "VOD", + run: function (e, t, i, n, r) { + if (i === 1 / 0) return null; + return { + time: 0, + segmentIndex: 0 + } + } + }, { + name: "ProgramDateTime", + run: function (e, t, i, n, r) { + if (!e.datetimeToDisplayTime) return null; + var a = t.segments || [], + s = null, + o = null; + r = r || 0; + for (var u = 0; u < a.length; u++) { + var l = a[u]; + if (l.dateTimeObject) { + var c = l.dateTimeObject.getTime() / 1e3 + e.datetimeToDisplayTime, + d = Math.abs(r - c); + if (null !== o && (0 === d || o < d)) break; + o = d, s = { + time: c, + segmentIndex: u + } + } + } + return s + } + }, { + name: "Segment", + run: function (e, t, i, n, r) { + var a = t.segments || [], + s = null, + o = null; + r = r || 0; + for (var u = 0; u < a.length; u++) { + var l = a[u]; + if (l.timeline === n && "undefined" != typeof l.start) { + var c = Math.abs(r - l.start); + if (null !== o && o < c) break; + (!s || null === o || c <= o) && (o = c, s = { + time: l.start, + segmentIndex: u + }) + } + } + return s + } + }, { + name: "Discontinuity", + run: function (e, t, i, n, r) { + var a = null; + if (r = r || 0, t.discontinuityStarts && t.discontinuityStarts.length) + for (var s = null, o = 0; o < t.discontinuityStarts.length; o++) { + var u = t.discontinuityStarts[o], + l = t.discontinuitySequence + o + 1, + c = e.discontinuities[l]; + if (c) { + var d = Math.abs(r - c.time); + if (null !== s && s < d) break; + (!a || null === s || d <= s) && (s = d, a = { + time: c.time, + segmentIndex: u + }) + } + } + return a + } + }, { + name: "Playlist", + run: function (e, t, i, n, r) { + return t.syncInfo ? { + time: t.syncInfo.time, + segmentIndex: t.syncInfo.mediaSequence - t.mediaSequence + } : null + } + }], + Td = function (i) { + function e(e) { + var t; + return (t = i.call(this) || this).timelines = [], t.discontinuities = [], t.datetimeToDisplayTime = null, t.logger_ = Pc("SyncController"), t + } + Ge(e, i); + var t = e.prototype; + return t.getSyncPoint = function (e, t, i, n) { + var r = this.runStrategies_(e, t, i, n); + return r.length ? this.selectSyncPoint_(r, { + key: "time", + value: n + }) : null + }, t.getExpiredTime = function (e, t) { + if (!e || !e.segments) return null; + var i = this.runStrategies_(e, t, e.discontinuitySequence, 0); + if (!i.length) return null; + var n = this.selectSyncPoint_(i, { + key: "segmentIndex", + value: 0 + }); + return 0 < n.segmentIndex && (n.time *= -1), Math.abs(n.time + il(e, n.segmentIndex, 0)) + }, t.runStrategies_ = function (e, t, i, n) { + for (var r = [], a = 0; a < bd.length; a++) { + var s = bd[a], + o = s.run(this, e, t, i, n); + o && (o.strategy = s.name, r.push({ + strategy: s.name, + syncPoint: o + })) + } + return r + }, t.selectSyncPoint_ = function (e, t) { + for (var i = e[0].syncPoint, n = Math.abs(e[0].syncPoint[t.key] - t.value), r = e[0].strategy, a = 1; a < e.length; a++) { + var s = Math.abs(e[a].syncPoint[t.key] - t.value); + s < n && (n = s, i = e[a].syncPoint, r = e[a].strategy) + } + return this.logger_("syncPoint for [" + t.key + ": " + t.value + "] chosen with strategy [" + r + "]: [time:" + i.time + ", segmentIndex:" + i.segmentIndex + "]"), i + }, t.saveExpiredSegmentInfo = function (e, t) { + for (var i = t.mediaSequence - e.mediaSequence - 1; 0 <= i; i--) { + var n = e.segments[i]; + if (n && "undefined" != typeof n.start) { + t.syncInfo = { + mediaSequence: e.mediaSequence + i, + time: n.start + }, this.logger_("playlist refresh sync: [time:" + t.syncInfo.time + ", mediaSequence: " + t.syncInfo.mediaSequence + "]"), this.trigger("syncinfoupdate"); + break + } + } + }, t.setDateTimeMapping = function (e) { + if (!this.datetimeToDisplayTime && e.segments && e.segments.length && e.segments[0].dateTimeObject) { + var t = e.segments[0].dateTimeObject.getTime() / 1e3; + this.datetimeToDisplayTime = -t + } + }, t.saveSegmentTimingInfo = function (e) { + var t = e.segmentInfo, + i = e.shouldSaveTimelineMapping; + this.calculateSegmentTimeMapping_(t, t.timingInfo, i) && (this.saveDiscontinuitySyncInfo_(t), t.playlist.syncInfo || (t.playlist.syncInfo = { + mediaSequence: t.playlist.mediaSequence + t.mediaIndex, + time: t.segment.start + })) + }, t.timestampOffsetForTimeline = function (e) { + return "undefined" == typeof this.timelines[e] ? null : this.timelines[e].time + }, t.mappingForTimeline = function (e) { + return "undefined" == typeof this.timelines[e] ? null : this.timelines[e].mapping + }, t.calculateSegmentTimeMapping_ = function (e, t, i) { + var n = e.segment, + r = this.timelines[e.timeline]; + if (null !== e.timestampOffset) r = { + time: e.startOfSegment, + mapping: e.startOfSegment - t.start + }, i && (this.timelines[e.timeline] = r, this.trigger("timestampoffset"), this.logger_("time mapping for timeline " + e.timeline + ": [time: " + r.time + "] [mapping: " + r.mapping + "]")), n.start = e.startOfSegment, n.end = t.end + r.mapping; + else { + if (!r) return !1; + n.start = t.start + r.mapping, n.end = t.end + r.mapping + } + return !0 + }, t.saveDiscontinuitySyncInfo_ = function (e) { + var t = e.playlist, + i = e.segment; + if (i.discontinuity) this.discontinuities[i.timeline] = { + time: i.start, + accuracy: 0 + }; + else if (t.discontinuityStarts && t.discontinuityStarts.length) + for (var n = 0; n < t.discontinuityStarts.length; n++) { + var r = t.discontinuityStarts[n], + a = t.discontinuitySequence + n + 1, + s = r - e.mediaIndex, + o = Math.abs(s); + if (!this.discontinuities[a] || this.discontinuities[a].accuracy > o) { + var u = void 0; + u = s < 0 ? i.start - il(t, e.mediaIndex, r) : i.end + il(t, e.mediaIndex + 1, r), this.discontinuities[a] = { + time: u, + accuracy: o + } + } + } + }, t.dispose = function () { + this.trigger("dispose"), this.off() + }, e + }(da.EventTarget), + Sd = function (t) { + function e() { + var e; + return (e = t.call(this) || this).pendingTimelineChanges_ = {}, e.lastTimelineChanges_ = {}, e + } + Ge(e, t); + var i = e.prototype; + return i.clearPendingTimelineChange = function (e) { + this.pendingTimelineChanges_[e] = null, this.trigger("pendingtimelinechange") + }, i.pendingTimelineChange = function (e) { + var t = e.type, + i = e.from, + n = e.to; + return "number" == typeof i && "number" == typeof n && (this.pendingTimelineChanges_[t] = { + type: t, + from: i, + to: n + }, this.trigger("pendingtimelinechange")), this.pendingTimelineChanges_[t] + }, i.lastTimelineChange = function (e) { + var t = e.type, + i = e.from, + n = e.to; + return "number" == typeof i && "number" == typeof n && (this.lastTimelineChanges_[t] = { + type: t, + from: i, + to: n + }, delete this.pendingTimelineChanges_[t], this.trigger("timelinechange")), this.lastTimelineChanges_[t] + }, i.dispose = function () { + this.trigger("dispose"), this.pendingTimelineChanges_ = {}, this.lastTimelineChanges_ = {}, this.off() + }, e + }(da.EventTarget), + kd = new kc("./decrypter-worker.worker.js", function (e, t) { + var i, n, r, c, g, l, s, a = this; + /*! @name @videojs/http-streaming @version 2.2.4 @license Apache-2.0 */ + i = function (e, t, i) { + return t && o(e.prototype, t), i && o(e, i), e + }, n = function (e, t) { + e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t + }, r = function () { + function e() { + this.listeners = {} + } + var t = e.prototype; + return t.on = function (e, t) { + this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t) + }, t.off = function (e, t) { + if (!this.listeners[e]) return !1; + var i = this.listeners[e].indexOf(t); + return this.listeners[e] = this.listeners[e].slice(0), this.listeners[e].splice(i, 1), -1 < i + }, t.trigger = function (e, t) { + var i = this.listeners[e]; + if (i) + if (2 === arguments.length) + for (var n = i.length, r = 0; r < n; ++r) i[r].call(this, t); + else + for (var a = Array.prototype.slice.call(arguments, 1), s = i.length, o = 0; o < s; ++o) i[o].apply(this, a) + }, t.dispose = function () { + this.listeners = {} + }, t.pipe = function (t) { + this.on("data", function (e) { + t.push(e) + }) + }, e + }(), c = null, g = function () { + function e(e) { + var t, i, n; + c = c || function () { + var e, t, i, n, r, a, s, o, u = [ + [ + [], + [], + [], + [], + [] + ], + [ + [], + [], + [], + [], + [] + ] + ], + l = u[0], + c = u[1], + d = l[4], + h = c[4], + p = [], + f = []; + for (e = 0; e < 256; e++) f[(p[e] = e << 1 ^ 283 * (e >> 7)) ^ e] = e; + for (t = i = 0; !d[t]; t ^= n || 1, i = f[i] || 1) + for (a = (a = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4) >> 8 ^ 255 & a ^ 99, o = 16843009 * p[r = p[n = p[h[d[t] = a] = t]]] ^ 65537 * r ^ 257 * n ^ 16843008 * t, s = 257 * p[a] ^ 16843008 * a, e = 0; e < 4; e++) l[e][t] = s = s << 24 ^ s >>> 8, c[e][a] = o = o << 24 ^ o >>> 8; + for (e = 0; e < 5; e++) l[e] = l[e].slice(0), c[e] = c[e].slice(0); + return u + }(), this._tables = [ + [c[0][0].slice(), c[0][1].slice(), c[0][2].slice(), c[0][3].slice(), c[0][4].slice()], + [c[1][0].slice(), c[1][1].slice(), c[1][2].slice(), c[1][3].slice(), c[1][4].slice()] + ]; + var r = this._tables[0][4], + a = this._tables[1], + s = e.length, + o = 1; + if (4 !== s && 6 !== s && 8 !== s) throw new Error("Invalid aes key size"); + var u = e.slice(0), + l = []; + for (this._key = [u, l], t = s; t < 4 * s + 28; t++) n = u[t - 1], (t % s == 0 || 8 === s && t % s == 4) && (n = r[n >>> 24] << 24 ^ r[n >> 16 & 255] << 16 ^ r[n >> 8 & 255] << 8 ^ r[255 & n], t % s == 0 && (n = n << 8 ^ n >>> 24 ^ o << 24, o = o << 1 ^ 283 * (o >> 7))), u[t] = u[t - s] ^ n; + for (i = 0; t; i++, t--) n = u[3 & i ? t : t - 4], l[i] = t <= 4 || i < 4 ? n : a[0][r[n >>> 24]] ^ a[1][r[n >> 16 & 255]] ^ a[2][r[n >> 8 & 255]] ^ a[3][r[255 & n]] + } + return e.prototype.decrypt = function (e, t, i, n, r, a) { + var s, o, u, l, c = this._key[1], + d = e ^ c[0], + h = n ^ c[1], + p = i ^ c[2], + f = t ^ c[3], + m = c.length / 4 - 2, + g = 4, + v = this._tables[1], + y = v[0], + _ = v[1], + b = v[2], + T = v[3], + S = v[4]; + for (l = 0; l < m; l++) s = y[d >>> 24] ^ _[h >> 16 & 255] ^ b[p >> 8 & 255] ^ T[255 & f] ^ c[g], o = y[h >>> 24] ^ _[p >> 16 & 255] ^ b[f >> 8 & 255] ^ T[255 & d] ^ c[g + 1], u = y[p >>> 24] ^ _[f >> 16 & 255] ^ b[d >> 8 & 255] ^ T[255 & h] ^ c[g + 2], f = y[f >>> 24] ^ _[d >> 16 & 255] ^ b[h >> 8 & 255] ^ T[255 & p] ^ c[g + 3], g += 4, d = s, h = o, p = u; + for (l = 0; l < 4; l++) r[(3 & -l) + a] = S[d >>> 24] << 24 ^ S[h >> 16 & 255] << 16 ^ S[p >> 8 & 255] << 8 ^ S[255 & f] ^ c[g++], s = d, d = h, h = p, p = f, f = s + }, e + }(), l = function (t) { + function e() { + var e; + return (e = t.call(this, r) || this).jobs = [], e.delay = 1, e.timeout_ = null, e + } + n(e, t); + var i = e.prototype; + return i.processJob_ = function () { + this.jobs.shift()(), this.jobs.length ? this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay) : this.timeout_ = null + }, i.push = function (e) { + this.jobs.push(e), this.timeout_ || (this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay)) + }, e + }(r), s = function () { + function u(e, t, i, n) { + var r = u.STEP, + a = new Int32Array(e.buffer), + s = new Uint8Array(e.byteLength), + o = 0; + for (this.asyncStream_ = new l, this.asyncStream_.push(this.decryptChunk_(a.subarray(o, o + r), t, i, s)), o = r; o < a.length; o += r) i = new Uint32Array([v(a[o - 4]), v(a[o - 3]), v(a[o - 2]), v(a[o - 1])]), this.asyncStream_.push(this.decryptChunk_(a.subarray(o, o + r), t, i, s)); + this.asyncStream_.push(function () { + n(null, + /*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */ + function (e) { + return e.subarray(0, e.byteLength - e[e.byteLength - 1]) + } + /*! @name aes-decrypter @version 3.1.0 @license Apache-2.0 */ + (s)) + }) + } + return u.prototype.decryptChunk_ = function (t, i, n, r) { + return function () { + var e = function (e, t, i) { + var n, r, a, s, o, u, l, c, d, h = new Int32Array(e.buffer, e.byteOffset, e.byteLength >> 2), + p = new g(Array.prototype.slice.call(t)), + f = new Uint8Array(e.byteLength), + m = new Int32Array(f.buffer); + for (n = i[0], r = i[1], a = i[2], s = i[3], d = 0; d < h.length; d += 4) o = v(h[d]), u = v(h[d + 1]), l = v(h[d + 2]), c = v(h[d + 3]), p.decrypt(o, u, l, c, m, d), m[d] = v(m[d] ^ n), m[d + 1] = v(m[d + 1] ^ r), m[d + 2] = v(m[d + 2] ^ a), m[d + 3] = v(m[d + 3] ^ s), n = o, r = u, a = l, s = c; + return f + }(t, i, n); + r.set(e, t.byteOffset) + } + }, i(u, null, [{ + key: "STEP", + get: function () { + return 32e3 + } + }]), u + }(), new function (a) { + a.onmessage = function (e) { + var i = e.data, + t = new Uint8Array(i.encrypted.bytes, i.encrypted.byteOffset, i.encrypted.byteLength), + n = new Uint32Array(i.key.bytes, i.key.byteOffset, i.key.byteLength / 4), + r = new Uint32Array(i.iv.bytes, i.iv.byteOffset, i.iv.byteLength / 4); + new s(t, n, r, function (e, t) { + a.postMessage(function (i) { + var n = {}; + return Object.keys(i).forEach(function (e) { + var t = i[e]; + ArrayBuffer.isView(t) ? n[e] = { + bytes: t.buffer, + byteOffset: t.byteOffset, + byteLength: t.byteLength + } : n[e] = t + }), n + }({ + source: i.source, + decrypted: t + }), [t.buffer]) + }) + } + }(a); + + function o(e, t) { + for (var i = 0; i < t.length; i++) { + var n = t[i]; + n.enumerable = n.enumerable || !1, n.configurable = !0, "value" in n && (n.writable = !0), Object.defineProperty(e, n.key, n) + } + } + + function v(e) { + return e << 24 | (65280 & e) << 8 | (16711680 & e) >> 8 | e >>> 24 + } + }), + Cd = { + AUDIO: function (u, l) { + return function () { + var e = l.segmentLoaders[u], + t = l.mediaTypes[u], + i = l.blacklistCurrentPlaylist; + ed(e, t); + var n = t.activeTrack(), + r = t.activeGroup(), + a = (r.filter(function (e) { + return e.default + })[0] || r[0]).id, + s = t.tracks[a]; + if (n !== s) { + for (var o in da.log.warn("Problem encountered loading the alternate audio track.Switching back to default."), t.tracks) t.tracks[o].enabled = t.tracks[o] === s; + t.onTrackChanged() + } else i({ + message: "Problem encountered loading the default audio track." + }) + } + }, + SUBTITLES: function (n, r) { + return function () { + var e = r.segmentLoaders[n], + t = r.mediaTypes[n]; + da.log.warn("Problem encountered loading the subtitle track.Disabling subtitle track."), ed(e, t); + var i = t.activeTrack(); + i && (i.mode = "disabled"), t.onTrackChanged() + } + } + }, + Ed = { + AUDIO: function (e, t, i) { + if (t) { + var n = i.tech, + r = i.requestOptions, + a = i.segmentLoaders[e]; + t.on("loadedmetadata", function () { + var e = t.media(); + a.playlist(e, r), (!n.paused() || e.endList && "none" !== n.preload()) && a.load() + }), t.on("loadedplaylist", function () { + a.playlist(t.media(), r), n.paused() || a.load() + }), t.on("error", Cd[e](e, i)) + } + }, + SUBTITLES: function (e, t, i) { + var n = i.tech, + r = i.requestOptions, + a = i.segmentLoaders[e], + s = i.mediaTypes[e]; + t.on("loadedmetadata", function () { + var e = t.media(); + a.playlist(e, r), a.track(s.activeTrack()), (!n.paused() || e.endList && "none" !== n.preload()) && a.load() + }), t.on("loadedplaylist", function () { + a.playlist(t.media(), r), n.paused() || a.load() + }), t.on("error", Cd[e](e, i)) + } + }, + wd = { + AUDIO: function (s, o) { + var u = o.vhs, + l = o.sourceType, + e = o.segmentLoaders[s], + c = o.requestOptions, + t = o.master, + d = t.mediaGroups, + i = t.playlists, + n = o.mediaTypes[s], + h = n.groups, + p = n.tracks, + f = o.masterPlaylistLoader; + d[s] && 0 !== Object.keys(d[s]).length || (d[s] = { + main: { + default: { + default: !0 + } + } + }); + + function r(r) { + function e(e) { + var t = d[s][r][e]; + a.filter(function (e) { + return e.resolvedUri === t.resolvedUri + }).length && delete t.resolvedUri; + var i = void 0; + if (i = "vhs-json" === l && t.playlists ? new Zl(t.playlists[0], u, c) : t.resolvedUri ? new Zl(t.resolvedUri, u, c) : t.playlists && "dash" === l ? new oc(t.playlists[0], u, c, f) : null, t = da.mergeOptions({ + id: e, + playlistLoader: i + }, t), Ed[s](s, t.playlistLoader, o), h[r].push(t), "undefined" == typeof p[e]) { + var n = new da.AudioTrack({ + id: e, + kind: function (e) { + var t = e.default ? "main" : "alternative"; + return e.characteristics && 0 <= e.characteristics.indexOf("public.accessibility.describes-video") && (t = "main-desc"), t + }(t), + enabled: !1, + language: t.language, + default: t.default, + label: e + }); + p[e] = n + } + } + h[r] || (h[r] = []); + var a = i.filter(function (e) { + return e.attributes[s] === r + }); + for (var t in d[s][r]) e(t) + } + for (var a in d[s]) r(a); + e.on("error", Cd[s](s, o)) + }, + SUBTITLES: function (e, t) { + var i = t.tech, + n = t.vhs, + r = t.sourceType, + a = t.segmentLoaders[e], + s = t.requestOptions, + o = t.master.mediaGroups, + u = t.mediaTypes[e], + l = u.groups, + c = u.tracks, + d = t.masterPlaylistLoader; + for (var h in o[e]) + for (var p in l[h] || (l[h] = []), o[e][h]) + if (!o[e][h][p].forced) { + var f = o[e][h][p], + m = void 0; + if ("hls" === r ? m = new Zl(f.resolvedUri, n, s) : "dash" === r ? m = new oc(f.playlists[0], n, s, d) : "vhs-json" === r && (m = new Zl(f.playlists ? f.playlists[0] : f.resolvedUri, n, s)), f = da.mergeOptions({ + id: p, + playlistLoader: m + }, f), Ed[e](e, f.playlistLoader, t), l[h].push(f), "undefined" == typeof c[p]) { + var g = i.addRemoteTextTrack({ + id: p, + kind: "subtitles", + default: f.default && f.autoselect, + language: f.language, + label: p + }, !1).track; + c[p] = g + } + } a.on("error", Cd[e](e, t)) + }, + "CLOSED-CAPTIONS": function (e, t) { + var i = t.tech, + n = t.master.mediaGroups, + r = t.mediaTypes[e], + a = r.groups, + s = r.tracks; + for (var o in n[e]) + for (var u in a[o] || (a[o] = []), n[e][o]) { + var l = n[e][o][u]; + if (l.instreamId.match(/CC\d/) && (a[o].push(da.mergeOptions({ + id: u + }, l)), "undefined" == typeof s[u])) { + var c = i.addRemoteTextTrack({ + id: l.instreamId, + kind: "captions", + default: l.default && l.autoselect, + language: l.language, + label: u + }, !1).track; + s[u] = c + } + } + } + }, + Id = { + AUDIO: function (i, n) { + return function () { + var e = n.mediaTypes[i].tracks; + for (var t in e) + if (e[t].enabled) return e[t]; + return null + } + }, + SUBTITLES: function (i, n) { + return function () { + var e = n.mediaTypes[i].tracks; + for (var t in e) + if ("showing" === e[t].mode || "hidden" === e[t].mode) return e[t]; + return null + } + } + }, + Ad = ["mediaRequests", "mediaRequestsAborted", "mediaRequestsTimedout", "mediaRequestsErrored", "mediaTransferDuration", "mediaBytesTransferred"], + xd = function (m) { + function e(e) { + var t; + t = m.call(this) || this; + var i = e.src, + n = e.handleManifestRedirects, + r = e.withCredentials, + a = e.tech, + s = e.bandwidth, + o = e.externVhs, + u = e.useCueTags, + l = e.blacklistDuration, + c = e.enableLowInitialPlaylist, + d = e.sourceType, + h = e.cacheEncryptionKeys, + p = e.handlePartialData; + if (!i) throw new Error("A non-empty playlist URL or JSON manifest string is required"); + ad = o, t.withCredentials = r, t.tech_ = a, t.vhs_ = a.vhs, t.sourceType_ = d, t.useCueTags_ = u, t.blacklistDuration = l, t.enableLowInitialPlaylist = c, t.useCueTags_ && (t.cueTagsTrack_ = t.tech_.addTextTrack("metadata", "ad-cues"), t.cueTagsTrack_.inBandMetadataTrackDispatchType = ""), t.requestOptions_ = { + withCredentials: r, + handleManifestRedirects: n, + timeout: null + }, t.on("error", t.pauseLoading), t.mediaTypes_ = function () { + var t = {}; + return ["AUDIO", "SUBTITLES", "CLOSED-CAPTIONS"].forEach(function (e) { + t[e] = { + groups: {}, + tracks: {}, + activePlaylistLoader: null, + activeGroup: Wc, + activeTrack: Wc, + onGroupChanged: Wc, + onTrackChanged: Wc + } + }), t + }(), t.mediaSource = new T.MediaSource, t.handleDurationChange_ = t.handleDurationChange_.bind(Ve(t)), t.handleSourceOpen_ = t.handleSourceOpen_.bind(Ve(t)), t.handleSourceEnded_ = t.handleSourceEnded_.bind(Ve(t)), t.mediaSource.addEventListener("durationchange", t.handleDurationChange_), t.mediaSource.addEventListener("sourceopen", t.handleSourceOpen_), t.mediaSource.addEventListener("sourceended", t.handleSourceEnded_), t.seekable_ = da.createTimeRanges(), t.hasPlayed_ = !1, t.syncController_ = new Td(e), t.segmentMetadataTrack_ = a.addRemoteTextTrack({ + kind: "metadata", + label: "segment-metadata" + }, !1).track, t.decrypter_ = new kd, t.sourceUpdater_ = new vd(t.mediaSource), t.inbandTextTracks_ = {}, t.timelineChangeController_ = new Sd; + var f = { + vhs: t.vhs_, + mediaSource: t.mediaSource, + currentTime: t.tech_.currentTime.bind(t.tech_), + seekable: function () { + return t.seekable() + }, + seeking: function () { + return t.tech_.seeking() + }, + duration: function () { + return t.duration() + }, + hasPlayed: function () { + return t.hasPlayed_ + }, + goalBufferLength: function () { + return t.goalBufferLength() + }, + bandwidth: s, + syncController: t.syncController_, + decrypter: t.decrypter_, + sourceType: t.sourceType_, + inbandTextTracks: t.inbandTextTracks_, + cacheEncryptionKeys: h, + handlePartialData: p, + sourceUpdater: t.sourceUpdater_, + timelineChangeController: t.timelineChangeController_ + }; + return t.masterPlaylistLoader_ = "dash" === t.sourceType_ ? new oc(i, t.vhs_, t.requestOptions_) : new Zl(i, t.vhs_, t.requestOptions_), t.setupMasterPlaylistLoaderListeners_(), t.mainSegmentLoader_ = new Hc(da.mergeOptions(f, { + segmentMetadataTrack: t.segmentMetadataTrack_, + loaderType: "main" + }), e), t.audioSegmentLoader_ = new Hc(da.mergeOptions(f, { + loaderType: "audio" + }), e), t.subtitleSegmentLoader_ = new _d(da.mergeOptions(f, { + loaderType: "vtt", + featuresNativeTextTracks: t.tech_.featuresNativeTextTracks + }), e), t.setupSegmentLoaderListeners_(), Ad.forEach(function (e) { + t[e + "_"] = function (e) { + return this.audioSegmentLoader_[e] + this.mainSegmentLoader_[e] + }.bind(Ve(t), e) + }), t.logger_ = Pc("MPC"), t.triggeredFmp4Usage = !1, t.masterPlaylistLoader_.load(), t + } + Ge(e, m); + var t = e.prototype; + return t.setupMasterPlaylistLoaderListeners_ = function () { + var i = this; + this.masterPlaylistLoader_.on("loadedmetadata", function () { + var e = i.masterPlaylistLoader_.media(), + t = 1.5 * e.targetDuration * 1e3; + ll(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) ? i.requestOptions_.timeout = 0 : i.requestOptions_.timeout = t, e.endList && "none" !== i.tech_.preload() && (i.mainSegmentLoader_.playlist(e, i.requestOptions_), i.mainSegmentLoader_.load()), id({ + sourceType: i.sourceType_, + segmentLoaders: { + AUDIO: i.audioSegmentLoader_, + SUBTITLES: i.subtitleSegmentLoader_, + main: i.mainSegmentLoader_ + }, + tech: i.tech_, + requestOptions: i.requestOptions_, + masterPlaylistLoader: i.masterPlaylistLoader_, + vhs: i.vhs_, + master: i.master(), + mediaTypes: i.mediaTypes_, + blacklistCurrentPlaylist: i.blacklistCurrentPlaylist.bind(i) + }), i.triggerPresenceUsage_(i.master(), e), i.setupFirstPlay(), !i.mediaTypes_.AUDIO.activePlaylistLoader || i.mediaTypes_.AUDIO.activePlaylistLoader.media() ? i.trigger("selectedinitialmedia") : i.mediaTypes_.AUDIO.activePlaylistLoader.one("loadedmetadata", function () { + i.trigger("selectedinitialmedia") + }) + }), this.masterPlaylistLoader_.on("loadedplaylist", function () { + var e = i.masterPlaylistLoader_.media(); + if (!e) { + var t; + if (i.excludeUnsupportedVariants_(), i.enableLowInitialPlaylist && (t = i.selectInitialPlaylist()), t = t || i.selectPlaylist(), i.initialMedia_ = t, i.masterPlaylistLoader_.media(i.initialMedia_), !("vhs-json" === i.sourceType_ && i.initialMedia_.segments)) return; + e = i.initialMedia_ + } + i.handleUpdatedMediaPlaylist(e) + }), this.masterPlaylistLoader_.on("error", function () { + i.blacklistCurrentPlaylist(i.masterPlaylistLoader_.error) + }), this.masterPlaylistLoader_.on("mediachanging", function () { + i.mainSegmentLoader_.abort(), i.mainSegmentLoader_.pause() + }), this.masterPlaylistLoader_.on("mediachange", function () { + var e = i.masterPlaylistLoader_.media(), + t = 1.5 * e.targetDuration * 1e3; + ll(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) ? i.requestOptions_.timeout = 0 : i.requestOptions_.timeout = t, i.mainSegmentLoader_.playlist(e, i.requestOptions_), i.mainSegmentLoader_.load(), i.tech_.trigger({ + type: "mediachange", + bubbles: !0 + }) + }), this.masterPlaylistLoader_.on("playlistunchanged", function () { + var e = i.masterPlaylistLoader_.media(); + i.stuckAtPlaylistEnd_(e) && (i.blacklistCurrentPlaylist({ + message: "Playlist no longer updating." + }), i.tech_.trigger("playliststuck")) + }), this.masterPlaylistLoader_.on("renditiondisabled", function () { + i.tech_.trigger({ + type: "usage", + name: "vhs-rendition-disabled" + }), i.tech_.trigger({ + type: "usage", + name: "hls-rendition-disabled" + }) + }), this.masterPlaylistLoader_.on("renditionenabled", function () { + i.tech_.trigger({ + type: "usage", + name: "vhs-rendition-enabled" + }), i.tech_.trigger({ + type: "usage", + name: "hls-rendition-enabled" + }) + }) + }, t.handleUpdatedMediaPlaylist = function (e) { + this.useCueTags_ && this.updateAdCues_(e), this.mainSegmentLoader_.playlist(e, this.requestOptions_), this.updateDuration(!e.endList), this.tech_.paused() || (this.mainSegmentLoader_.load(), this.audioSegmentLoader_ && this.audioSegmentLoader_.load()) + }, t.triggerPresenceUsage_ = function (e, t) { + var i = e.mediaGroups || {}, + n = !0, + r = Object.keys(i.AUDIO); + for (var a in i.AUDIO) + for (var s in i.AUDIO[a]) { + i.AUDIO[a][s].uri || (n = !1) + } + n && (this.tech_.trigger({ + type: "usage", + name: "vhs-demuxed" + }), this.tech_.trigger({ + type: "usage", + name: "hls-demuxed" + })), Object.keys(i.SUBTITLES).length && (this.tech_.trigger({ + type: "usage", + name: "vhs-webvtt" + }), this.tech_.trigger({ + type: "usage", + name: "hls-webvtt" + })), ad.Playlist.isAes(t) && (this.tech_.trigger({ + type: "usage", + name: "vhs-aes" + }), this.tech_.trigger({ + type: "usage", + name: "hls-aes" + })), r.length && 1 < Object.keys(i.AUDIO[r[0]]).length && (this.tech_.trigger({ + type: "usage", + name: "vhs-alternate-audio" + }), this.tech_.trigger({ + type: "usage", + name: "hls-alternate-audio" + })), this.useCueTags_ && (this.tech_.trigger({ + type: "usage", + name: "vhs-playlist-cue-tags" + }), this.tech_.trigger({ + type: "usage", + name: "hls-playlist-cue-tags" + })) + }, t.setupSegmentLoaderListeners_ = function () { + var n = this; + this.mainSegmentLoader_.on("bandwidthupdate", function () { + var e = n.selectPlaylist(), + t = n.masterPlaylistLoader_.media(), + i = n.tech_.buffered(); + ! function (e) { + var t = e.currentPlaylist, + i = e.nextPlaylist, + n = e.forwardBuffer, + r = e.bufferLowWaterLine, + a = e.duration; + e.log; + return i ? !t.endList || (a < uc.MAX_BUFFER_LOW_WATER_LINE || (i.attributes.BANDWIDTH < t.attributes.BANDWIDTH || r <= n)) : (da.log.warn("We received no playlist to switch to. Please check your stream."), !1) + }({ + currentPlaylist: t, + nextPlaylist: e, + forwardBuffer: i.length ? i.end(i.length - 1) - n.tech_.currentTime() : 0, + bufferLowWaterLine: n.bufferLowWaterLine(), + duration: n.duration(), + log: n.logger_ + }) || n.masterPlaylistLoader_.media(e), n.tech_.trigger("bandwidthupdate") + }), this.mainSegmentLoader_.on("progress", function () { + n.trigger("progress") + }), this.mainSegmentLoader_.on("error", function () { + n.blacklistCurrentPlaylist(n.mainSegmentLoader_.error()) + }), this.mainSegmentLoader_.on("appenderror", function () { + n.error = n.mainSegmentLoader_.error_, n.trigger("error") + }), this.mainSegmentLoader_.on("syncinfoupdate", function () { + n.onSyncInfoUpdate_() + }), this.mainSegmentLoader_.on("timestampoffset", function () { + n.tech_.trigger({ + type: "usage", + name: "vhs-timestamp-offset" + }), n.tech_.trigger({ + type: "usage", + name: "hls-timestamp-offset" + }) + }), this.audioSegmentLoader_.on("syncinfoupdate", function () { + n.onSyncInfoUpdate_() + }), this.audioSegmentLoader_.on("appenderror", function () { + n.error = n.audioSegmentLoader_.error_, n.trigger("error") + }), this.mainSegmentLoader_.on("ended", function () { + n.logger_("main segment loader ended"), n.onEndOfStream() + }), this.mainSegmentLoader_.on("earlyabort", function () { + n.blacklistCurrentPlaylist({ + message: "Aborted early because there isn't enough bandwidth to complete the request without rebuffering." + }, 120) + }); + + function e() { + if (!n.sourceUpdater_.ready()) return n.tryToCreateSourceBuffers_(); + var e = n.getCodecsOrExclude_(); + e && n.sourceUpdater_.addOrChangeSourceBuffers(e) + } + this.mainSegmentLoader_.on("trackinfo", e), this.audioSegmentLoader_.on("trackinfo", e), this.mainSegmentLoader_.on("fmp4", function () { + n.triggeredFmp4Usage || (n.tech_.trigger({ + type: "usage", + name: "vhs-fmp4" + }), n.tech_.trigger({ + type: "usage", + name: "hls-fmp4" + }), n.triggeredFmp4Usage = !0) + }), this.audioSegmentLoader_.on("fmp4", function () { + n.triggeredFmp4Usage || (n.tech_.trigger({ + type: "usage", + name: "vhs-fmp4" + }), n.tech_.trigger({ + type: "usage", + name: "hls-fmp4" + }), n.triggeredFmp4Usage = !0) + }), this.audioSegmentLoader_.on("ended", function () { + n.logger_("audioSegmentLoader ended"), n.onEndOfStream() + }) + }, t.mediaSecondsLoaded_ = function () { + return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded) + }, t.load = function () { + this.mainSegmentLoader_.load(), this.mediaTypes_.AUDIO.activePlaylistLoader && this.audioSegmentLoader_.load(), this.mediaTypes_.SUBTITLES.activePlaylistLoader && this.subtitleSegmentLoader_.load() + }, t.smoothQualityChange_ = function (e) { + void 0 === e && (e = this.selectPlaylist()), e !== this.masterPlaylistLoader_.media() && (this.masterPlaylistLoader_.media(e), this.mainSegmentLoader_.resetLoader()) + }, t.fastQualityChange_ = function (e) { + var t = this; + void 0 === e && (e = this.selectPlaylist()), e !== this.masterPlaylistLoader_.media() && (this.masterPlaylistLoader_.media(e), this.mainSegmentLoader_.resetEverything(function () { + da.browser.IE_VERSION || da.browser.IS_EDGE ? t.tech_.setCurrentTime(t.tech_.currentTime() + .04) : t.tech_.setCurrentTime(t.tech_.currentTime()) + })) + }, t.play = function () { + if (!this.setupFirstPlay()) { + this.tech_.ended() && this.tech_.setCurrentTime(0), this.hasPlayed_ && this.load(); + var e = this.tech_.seekable(); + return this.tech_.duration() === 1 / 0 && this.tech_.currentTime() < e.start(0) ? this.tech_.setCurrentTime(e.end(e.length - 1)) : void 0 + } + }, t.setupFirstPlay = function () { + var e = this, + t = this.masterPlaylistLoader_.media(); + if (!t || this.tech_.paused() || this.hasPlayed_) return !1; + if (!t.endList) { + var i = this.seekable(); + if (!i.length) return !1; + if (da.browser.IE_VERSION && 0 === this.tech_.readyState()) return this.tech_.one("loadedmetadata", function () { + e.trigger("firstplay"), e.tech_.setCurrentTime(i.end(0)), e.hasPlayed_ = !0 + }), !1; + this.trigger("firstplay"), this.tech_.setCurrentTime(i.end(0)) + } + return this.hasPlayed_ = !0, this.load(), !0 + }, t.handleSourceOpen_ = function () { + if (this.tryToCreateSourceBuffers_(), this.tech_.autoplay()) { + var e = this.tech_.play(); + "undefined" != typeof e && "function" == typeof e.then && e.then(null, function (e) {}) + } + this.trigger("sourceopen") + }, t.handleSourceEnded_ = function () { + if (this.inbandTextTracks_.metadataTrack_) { + var e = this.inbandTextTracks_.metadataTrack_.cues; + if (e && e.length) { + var t = this.duration(); + e[e.length - 1].endTime = isNaN(t) || Math.abs(t) === 1 / 0 ? Number.MAX_VALUE : t + } + } + }, t.handleDurationChange_ = function () { + this.tech_.trigger("durationchange") + }, t.onEndOfStream = function () { + var e = this.mainSegmentLoader_.ended_; + this.mediaTypes_.AUDIO.activePlaylistLoader && (e = !this.mainSegmentLoader_.currentMediaInfo_ || this.mainSegmentLoader_.currentMediaInfo_.hasVideo ? e && this.audioSegmentLoader_.ended_ : this.audioSegmentLoader_.ended_), e && this.sourceUpdater_.endOfStream() + }, t.stuckAtPlaylistEnd_ = function (e) { + if (!this.seekable().length) return !1; + var t = this.syncController_.getExpiredTime(e, this.duration()); + if (null === t) return !1; + var i = ad.Playlist.playlistEnd(e, t), + n = this.tech_.currentTime(), + r = this.tech_.buffered(); + if (!r.length) return i - n <= .1; + var a = r.end(r.length - 1); + return a - n <= .1 && i - a <= .1 + }, t.blacklistCurrentPlaylist = function (e, t) { + void 0 === e && (e = {}); + var i = e.playlist || this.masterPlaylistLoader_.media(); + if (t = t || e.blacklistDuration || this.blacklistDuration, !i) return this.error = e, void("open" !== this.mediaSource.readyState ? this.trigger("error") : this.sourceUpdater_.endOfStream("network")); + var n = this.masterPlaylistLoader_.master.playlists, + r = n.filter(ol), + a = 1 === r.length && r[0] === i; + if (1 === n.length && t !== 1 / 0) return da.log.warn("Problem encountered with playlist " + i.id + ". Trying again since it is the only playlist."), this.tech_.trigger("retryplaylist"), this.masterPlaylistLoader_.load(a); + if (a) { + var s = !1; + n.forEach(function (e) { + if (e !== i) { + var t = e.excludeUntil; + "undefined" != typeof t && t !== 1 / 0 && (s = !0, delete e.excludeUntil) + } + }), s && (da.log.warn("Removing other playlists from the exclusion list because the last rendition is about to be excluded."), this.tech_.trigger("retryplaylist")) + } + i.excludeUntil = Date.now() + 1e3 * t, this.tech_.trigger("blacklistplaylist"), this.tech_.trigger({ + type: "usage", + name: "vhs-rendition-blacklisted" + }), this.tech_.trigger({ + type: "usage", + name: "hls-rendition-blacklisted" + }); + var o = this.selectPlaylist(); + if (!o) return this.error = "Playback cannot continue. No available working or supported playlists.", void this.trigger("error"); + var u = e.internal ? this.logger_ : da.log.warn, + l = e.message ? " " + e.message : ""; + return u((e.internal ? "Internal problem" : "Problem") + " encountered with playlist " + i.id + "." + l + " Switching to playlist " + o.id + "."), o.attributes.AUDIO !== i.attributes.AUDIO && this.delegateLoaders_("audio", ["abort", "pause"]), o.attributes.SUBTITLES !== i.attributes.SUBTITLES && this.delegateLoaders_("subtitle", ["abort", "pause"]), this.delegateLoaders_("main", ["abort", "pause"]), this.masterPlaylistLoader_.media(o, a) + }, t.pauseLoading = function () { + this.delegateLoaders_("all", ["abort", "pause"]) + }, t.delegateLoaders_ = function (i, e) { + var n = this, + r = [], + t = "all" === i; + !t && "main" !== i || r.push(this.masterPlaylistLoader_); + var a = []; + !t && "audio" !== i || a.push("AUDIO"), !t && "subtitle" !== i || (a.push("CLOSED-CAPTIONS"), a.push("SUBTITLES")), a.forEach(function (e) { + var t = n.mediaTypes_[e] && n.mediaTypes_[e].activePlaylistLoader; + t && r.push(t) + }), ["main", "audio", "subtitle"].forEach(function (e) { + var t = n[e + "SegmentLoader_"]; + !t || i !== e && "all" !== i || r.push(t) + }), r.forEach(function (t) { + return e.forEach(function (e) { + "function" == typeof t[e] && t[e]() + }) + }) + }, t.setCurrentTime = function (e) { + var t = $u(this.tech_.buffered(), e); + return this.masterPlaylistLoader_ && this.masterPlaylistLoader_.media() && this.masterPlaylistLoader_.media().segments ? t && t.length ? e : (this.mainSegmentLoader_.resetEverything(), this.mainSegmentLoader_.abort(), this.mediaTypes_.AUDIO.activePlaylistLoader && (this.audioSegmentLoader_.resetEverything(), this.audioSegmentLoader_.abort()), this.mediaTypes_.SUBTITLES.activePlaylistLoader && (this.subtitleSegmentLoader_.resetEverything(), this.subtitleSegmentLoader_.abort()), void this.load()) : 0 + }, t.duration = function () { + if (!this.masterPlaylistLoader_) return 0; + var e = this.masterPlaylistLoader_.media(); + return e ? e.endList ? this.mediaSource ? this.mediaSource.duration : ad.Playlist.duration(e) : 1 / 0 : 0 + }, t.seekable = function () { + return this.seekable_ + }, t.onSyncInfoUpdate_ = function () { + var e; + if (this.masterPlaylistLoader_) { + var t = this.masterPlaylistLoader_.media(); + if (t) { + var i = this.syncController_.getExpiredTime(t, this.duration()); + if (null !== i) { + var n = this.masterPlaylistLoader_.master.suggestedPresentationDelay, + r = ad.Playlist.seekable(t, i, n); + if (0 !== r.length) { + if (this.mediaTypes_.AUDIO.activePlaylistLoader) { + if (t = this.mediaTypes_.AUDIO.activePlaylistLoader.media(), null === (i = this.syncController_.getExpiredTime(t, this.duration()))) return; + if (0 === (e = ad.Playlist.seekable(t, i, n)).length) return + } + var a, s; + this.seekable_ && this.seekable_.length && (a = this.seekable_.end(0), s = this.seekable_.start(0)), e ? e.start(0) > r.end(0) || r.start(0) > e.end(0) ? this.seekable_ = r : this.seekable_ = da.createTimeRanges([ + [e.start(0) > r.start(0) ? e.start(0) : r.start(0), e.end(0) < r.end(0) ? e.end(0) : r.end(0)] + ]) : this.seekable_ = r, this.seekable_ && this.seekable_.length && this.seekable_.end(0) === a && this.seekable_.start(0) === s || (this.logger_("seekable updated [" + Ju(this.seekable_) + "]"), this.tech_.trigger("seekablechanged")) + } + } + } + } + }, t.updateDuration = function (e) { + if (this.updateDuration_ && (this.mediaSource.removeEventListener("sourceopen", this.updateDuration_), this.updateDuration_ = null), "open" !== this.mediaSource.readyState) return this.updateDuration_ = this.updateDuration.bind(this, e), void this.mediaSource.addEventListener("sourceopen", this.updateDuration_); + if (e) { + var t = this.seekable(); + if (!t.length) return; + (isNaN(this.mediaSource.duration) || this.mediaSource.duration < t.end(t.length - 1)) && this.sourceUpdater_.setDuration(t.end(t.length - 1)) + } else { + var i = this.tech_.buffered(), + n = ad.Playlist.duration(this.masterPlaylistLoader_.media()); + 0 < i.length && (n = Math.max(n, i.end(i.length - 1))), this.mediaSource.duration !== n && this.sourceUpdater_.setDuration(n) + } + }, t.dispose = function () { + var n = this; + this.trigger("dispose"), this.decrypter_.terminate(), this.masterPlaylistLoader_.dispose(), this.mainSegmentLoader_.dispose(), ["AUDIO", "SUBTITLES"].forEach(function (e) { + var t = n.mediaTypes_[e].groups; + for (var i in t) t[i].forEach(function (e) { + e.playlistLoader && e.playlistLoader.dispose() + }) + }), this.audioSegmentLoader_.dispose(), this.subtitleSegmentLoader_.dispose(), this.sourceUpdater_.dispose(), this.timelineChangeController_.dispose(), this.updateDuration_ && this.mediaSource.removeEventListener("sourceopen", this.updateDuration_), this.mediaSource.removeEventListener("durationchange", this.handleDurationChange_), this.mediaSource.removeEventListener("sourceopen", this.handleSourceOpen_), this.mediaSource.removeEventListener("sourceended", this.handleSourceEnded_), this.off() + }, t.master = function () { + return this.masterPlaylistLoader_.master + }, t.media = function () { + return this.masterPlaylistLoader_.media() || this.initialMedia_ + }, t.areMediaTypesKnown_ = function () { + var e = !!this.mediaTypes_.AUDIO.activePlaylistLoader; + return !(!this.mainSegmentLoader_.currentMediaInfo_ || e && !this.audioSegmentLoader_.currentMediaInfo_) + }, t.getCodecsOrExclude_ = function () { + var n = this, + i = { + main: this.mainSegmentLoader_.currentMediaInfo_ || {}, + audio: this.audioSegmentLoader_.currentMediaInfo_ || {} + }; + i.video = i.main; + var e = xc(this.master(), this.media()), + r = {}, + t = !!this.mediaTypes_.AUDIO.activePlaylistLoader; + if (i.main.hasVideo && (r.video = e.video || i.main.videoCodec || Vl), i.main.isMuxed && (r.video += "," + (e.audio || i.main.audioCodec || jl)), (i.main.hasAudio && !i.main.isMuxed || i.audio.hasAudio || t) && (r.audio = e.audio || i.main.audioCodec || i.audio.audioCodec || jl, i.audio.isFmp4 = i.main.hasAudio && !i.main.isMuxed ? i.main.isFmp4 : i.audio.isFmp4), r.audio || r.video) { + var a, s = {}; + if (["video", "audio"].forEach(function (e) { + if (r.hasOwnProperty(e) && ! function (e, t) { + return e ? ql(t) : Xl(t) + }(i[e].isFmp4, r[e])) { + var t = i[e].isFmp4 ? "browser" : "muxer"; + s[t] = s[t] || [], s[t].push(r[e]), "audio" === e && (a = t) + } + }), t && a && this.media().attributes.AUDIO) { + var o = this.media().attributes.AUDIO; + this.master().playlists.forEach(function (e) { + (e.attributes && e.attributes.AUDIO) === o && e !== n.media() && (e.excludeUntil = 1 / 0) + }), this.logger_("excluding audio group " + o + " as " + a + ' does not support codec(s): "' + r.audio + '"') + } + if (!Object.keys(s).length) { + if (this.sourceUpdater_.ready() && !this.sourceUpdater_.canChangeType()) { + var u = []; + if (["video", "audio"].forEach(function (e) { + var t = (Kl(n.sourceUpdater_.codecs[e] || "")[e] || {}).type, + i = (Kl(r[e] || "")[e] || {}).type; + t && i && t.toLowerCase() !== i.toLowerCase() && u.push('"' + n.sourceUpdater_.codecs[e] + '" -> "' + r[e] + '"') + }), u.length) return void this.blacklistCurrentPlaylist({ + playlist: this.media(), + message: "Codec switching not supported: " + u.join(", ") + ".", + blacklistDuration: 1 / 0, + internal: !0 + }) + } + return r + } + var l = Object.keys(s).reduce(function (e, t) { + return e && (e += ", "), e += t + ' does not support codec(s): "' + s[t].join(",") + '"' + }, "") + "."; + this.blacklistCurrentPlaylist({ + playlist: this.media(), + internal: !0, + message: l, + blacklistDuration: 1 / 0 + }) + } else this.blacklistCurrentPlaylist({ + playlist: this.media(), + message: "Could not determine codecs for playlist.", + blacklistDuration: 1 / 0 + }) + }, t.tryToCreateSourceBuffers_ = function () { + if ("open" === this.mediaSource.readyState && !this.sourceUpdater_.ready() && this.areMediaTypesKnown_()) { + var e = this.getCodecsOrExclude_(); + if (e) { + this.sourceUpdater_.createSourceBuffers(e); + var t = [e.video, e.audio].filter(Boolean).join(","); + this.excludeIncompatibleVariants_(t) + } + } + }, t.excludeUnsupportedVariants_ = function () { + var i = this; + this.master().playlists.forEach(function (e) { + var t = xc(i.master, e); + !t.audio || Xl(t.audio) || ql(t.audio) || (e.excludeUntil = 1 / 0), !t.video || Xl(t.video) || ql(t.video) || (e.excludeUntil = 1 / 0) + }) + }, t.excludeIncompatibleVariants_ = function (e) { + var s = this, + o = Kl(e), + u = Object.keys(o).length; + this.master().playlists.forEach(function (e) { + if (e.excludeUntil !== 1 / 0) { + var t = {}, + i = 2, + n = [], + r = xc(s.masterPlaylistLoader_.master, e); + if (r.audio || r.video) { + var a = [r.video, r.audio].filter(Boolean).join(","); + t = Kl(a), i = Object.keys(t).length + } + i !== u && (n.push('codec count "' + i + '" !== "' + u + '"'), e.excludeUntil = 1 / 0), s.sourceUpdater_.canChangeType() || (t.video && o.video && t.video.type.toLowerCase() !== o.video.type.toLowerCase() && (n.push('video codec "' + t.video.type + '" !== "' + o.video.type + '"'), e.excludeUntil = 1 / 0), t.audio && o.audio && t.audio.type.toLowerCase() !== o.audio.type.toLowerCase() && (e.excludeUntil = 1 / 0, n.push('audio codec "' + t.audio.type + '" !== "' + o.audio.type + '"'))), n.length && s.logger_("blacklisting " + e.id + ": " + n.join(" && ")) + } + }) + }, t.updateAdCues_ = function (e) { + var t = 0, + i = this.seekable(); + i.length && (t = i.start(0)), + function (e, t, i) { + if (void 0 === i && (i = 0), e.segments) + for (var n, r = i, a = 0; a < e.segments.length; a++) { + var s = e.segments[a]; + if (n = n || Zc(t, r + s.duration / 2)) { + if ("cueIn" in s) { + n.endTime = r, n.adEndTime = r, r += s.duration, n = null; + continue + } + if (r < n.endTime) { + r += s.duration; + continue + } + n.endTime += s.duration + } else if ("cueOut" in s && ((n = new T.VTTCue(r, r + s.duration, s.cueOut)).adStartTime = r, n.adEndTime = r + parseFloat(s.cueOut), t.addCue(n)), "cueOutCont" in s) { + var o = s.cueOutCont.split("/").map(parseFloat), + u = o[0], + l = o[1]; + (n = new T.VTTCue(r, r + s.duration, "")).adStartTime = r - u, n.adEndTime = n.adStartTime + l, t.addCue(n) + } + r += s.duration + } + }(e, this.cueTagsTrack_, t) + }, t.goalBufferLength = function () { + var e = this.tech_.currentTime(), + t = uc.GOAL_BUFFER_LENGTH, + i = uc.GOAL_BUFFER_LENGTH_RATE, + n = Math.max(t, uc.MAX_GOAL_BUFFER_LENGTH); + return Math.min(t + e * i, n) + }, t.bufferLowWaterLine = function () { + var e = this.tech_.currentTime(), + t = uc.BUFFER_LOW_WATER_LINE, + i = uc.BUFFER_LOW_WATER_LINE_RATE, + n = Math.max(t, uc.MAX_BUFFER_LOW_WATER_LINE); + return Math.min(t + e * i, n) + }, e + }(da.EventTarget), + Pd = ["seeking", "seeked", "pause", "playing", "error"], + Ld = function () { + function e(e) { + var t = this; + this.masterPlaylistController_ = e.masterPlaylistController, this.tech_ = e.tech, this.seekable = e.seekable, this.allowSeeksWithinUnsafeLiveWindow = e.allowSeeksWithinUnsafeLiveWindow, this.media = e.media, this.consecutiveUpdates = 0, this.lastRecordedTime = null, this.timer_ = null, this.checkCurrentTimeTimeout_ = null, this.logger_ = Pc("PlaybackWatcher"), this.logger_("initialize"); + + function i() { + return t.monitorCurrentTime_() + } + + function n() { + return t.techWaiting_() + } + + function r() { + return t.cancelTimer_() + } + + function a() { + return t.fixesBadSeeks_() + } + var s = this.masterPlaylistController_, + o = ["main", "subtitle", "audio"], + u = {}; + o.forEach(function (e) { + u[e] = { + reset: function () { + return t.resetSegmentDownloads_(e) + }, + updateend: function () { + return t.checkSegmentDownloads_(e) + } + }, s[e + "SegmentLoader_"].on("appendsdone", u[e].updateend), s[e + "SegmentLoader_"].on("playlistupdate", u[e].reset), t.tech_.on(["seeked", "seeking"], u[e].reset) + }), this.tech_.on("seekablechanged", a), this.tech_.on("waiting", n), this.tech_.on(Pd, r), this.tech_.on("canplay", i), this.dispose = function () { + t.logger_("dispose"), t.tech_.off("seekablechanged", a), t.tech_.off("waiting", n), t.tech_.off(Pd, r), t.tech_.off("canplay", i), o.forEach(function (e) { + s[e + "SegmentLoader_"].off("appendsdone", u[e].updateend), s[e + "SegmentLoader_"].off("playlistupdate", u[e].reset), t.tech_.off(["seeked", "seeking"], u[e].reset) + }), t.checkCurrentTimeTimeout_ && T.clearTimeout(t.checkCurrentTimeTimeout_), t.cancelTimer_() + } + } + var t = e.prototype; + return t.monitorCurrentTime_ = function () { + this.checkCurrentTime_(), this.checkCurrentTimeTimeout_ && T.clearTimeout(this.checkCurrentTimeTimeout_), this.checkCurrentTimeTimeout_ = T.setTimeout(this.monitorCurrentTime_.bind(this), 250) + }, t.resetSegmentDownloads_ = function (e) { + var t = this.masterPlaylistController_[e + "SegmentLoader_"]; + 0 < this[e + "StalledDownloads_"] && this.logger_("resetting possible stalled download count for " + e + " loader"), this[e + "StalledDownloads_"] = 0, this[e + "Buffered_"] = t.buffered_() + }, t.checkSegmentDownloads_ = function (e) { + var t = this.masterPlaylistController_, + i = t[e + "SegmentLoader_"], + n = i.buffered_(), + r = function (e, t) { + if (e === t) return !1; + if (!e && t || !t && e) return !0; + if (e.length !== t.length) return !0; + for (var i = 0; i < e.length; i++) + if (e.start(i) !== t.start(i) || e.end(i) !== t.end(i)) return !0; + return !1 + }(this[e + "Buffered_"], n); + this[e + "Buffered_"] = n, r ? this.resetSegmentDownloads_(e) : (this[e + "StalledDownloads_"]++, this.logger_("found #" + this[e + "StalledDownloads_"] + " " + e + " appends that did not increase buffer (possible stalled download)", { + playlistId: i.playlist_ && i.playlist_.id, + buffered: Zu(n) + }), this[e + "StalledDownloads_"] < 10 || (this.logger_(e + " loader stalled download exclusion"), this.resetSegmentDownloads_(e), this.tech_.trigger({ + type: "usage", + name: "vhs-" + e + "-download-exclusion" + }), "subtitle" !== e && t.blacklistCurrentPlaylist({ + message: "Excessive " + e + " segment downloading detected." + }, 1 / 0))) + }, t.checkCurrentTime_ = function () { + if (this.tech_.seeking() && this.fixesBadSeeks_()) return this.consecutiveUpdates = 0, void(this.lastRecordedTime = this.tech_.currentTime()); + if (!this.tech_.paused() && !this.tech_.seeking()) { + var e = this.tech_.currentTime(), + t = this.tech_.buffered(); + if (this.lastRecordedTime === e && (!t.length || e + .1 >= t.end(t.length - 1))) return this.techWaiting_(); + 5 <= this.consecutiveUpdates && e === this.lastRecordedTime ? (this.consecutiveUpdates++, this.waiting_()) : e === this.lastRecordedTime ? this.consecutiveUpdates++ : (this.consecutiveUpdates = 0, this.lastRecordedTime = e) + } + }, t.cancelTimer_ = function () { + this.consecutiveUpdates = 0, this.timer_ && (this.logger_("cancelTimer_"), clearTimeout(this.timer_)), this.timer_ = null + }, t.fixesBadSeeks_ = function () { + if (!this.tech_.seeking()) return !1; + var e, t = this.seekable(), + i = this.tech_.currentTime(); + this.afterSeekableWindow_(t, i, this.media(), this.allowSeeksWithinUnsafeLiveWindow) && (e = t.end(t.length - 1)); + if (this.beforeSeekableWindow_(t, i)) { + var n = t.start(0); + e = n + (n === t.end(0) ? 0 : .1) + } + if ("undefined" != typeof e) return this.logger_("Trying to seek outside of seekable at time " + i + " with seekable range " + Ju(t) + ". Seeking to " + e + "."), this.tech_.setCurrentTime(e), !0; + var r = this.tech_.buffered(); + return !! function (e) { + var t = e.buffered, + i = e.targetDuration, + n = e.currentTime; + return !!t.length && (!(t.end(0) - t.start(0) < 2 * i) && (!(n > t.start(0)) && t.start(0) - n < i)) + }({ + buffered: r, + targetDuration: this.media().targetDuration, + currentTime: i + }) && (e = r.start(0) + .1, this.logger_("Buffered region starts (" + r.start(0) + ") just beyond seek point (" + i + "). Seeking to " + e + "."), this.tech_.setCurrentTime(e), !0) + }, t.waiting_ = function () { + if (!this.techWaiting_()) { + var e = this.tech_.currentTime(), + t = this.tech_.buffered(), + i = $u(t, e); + return i.length && e + 3 <= i.end(0) ? (this.cancelTimer_(), this.tech_.setCurrentTime(e), this.logger_("Stopped at " + e + " while inside a buffered region [" + i.start(0) + " -> " + i.end(0) + "]. Attempting to resume playback by seeking to the current time."), this.tech_.trigger({ + type: "usage", + name: "vhs-unknown-waiting" + }), void this.tech_.trigger({ + type: "usage", + name: "hls-unknown-waiting" + })) : void 0 + } + }, t.techWaiting_ = function () { + var e = this.seekable(), + t = this.tech_.currentTime(); + if (this.tech_.seeking() && this.fixesBadSeeks_()) return !0; + if (this.tech_.seeking() || null !== this.timer_) return !0; + if (this.beforeSeekableWindow_(e, t)) { + var i = e.end(e.length - 1); + return this.logger_("Fell out of live window at time " + t + ". Seeking to live point (seekable end) " + i), this.cancelTimer_(), this.tech_.setCurrentTime(i), this.tech_.trigger({ + type: "usage", + name: "vhs-live-resync" + }), this.tech_.trigger({ + type: "usage", + name: "hls-live-resync" + }), !0 + } + var n = this.tech_.vhs.masterPlaylistController_.sourceUpdater_, + r = this.tech_.buffered(); + if (this.videoUnderflow_({ + audioBuffered: n.audioBuffered(), + videoBuffered: n.videoBuffered(), + currentTime: t + })) return this.cancelTimer_(), this.tech_.setCurrentTime(t), this.tech_.trigger({ + type: "usage", + name: "vhs-video-underflow" + }), this.tech_.trigger({ + type: "usage", + name: "hls-video-underflow" + }), !0; + var a = Qu(r, t); + if (0 < a.length) { + var s = a.start(0) - t; + return this.logger_("Stopped at " + t + ", setting timer for " + s + ", seeking to " + a.start(0)), this.cancelTimer_(), this.timer_ = setTimeout(this.skipTheGap_.bind(this), 1e3 * s, t), !0 + } + return !1 + }, t.afterSeekableWindow_ = function (e, t, i, n) { + if (void 0 === n && (n = !1), !e.length) return !1; + var r = e.end(e.length - 1) + .1; + return !i.endList && n && (r = e.end(e.length - 1) + 3 * i.targetDuration), r < t + }, t.beforeSeekableWindow_ = function (e, t) { + return !!(e.length && 0 < e.start(0) && t < e.start(0) - .1) + }, t.videoUnderflow_ = function (e) { + var t = e.videoBuffered, + i = e.audioBuffered, + n = e.currentTime; + if (t) { + var r; + if (t.length && i.length) { + var a = $u(t, n - 3), + s = $u(t, n), + o = $u(i, n); + o.length && !s.length && a.length && (r = { + start: a.end(0), + end: o.end(0) + }) + } else { + Qu(t, n).length || (r = this.gapFromVideoUnderflow_(t, n)) + } + return !!r && (this.logger_("Encountered a gap in video from " + r.start + " to " + r.end + ". Seeking to current time " + n), !0) + } + }, t.skipTheGap_ = function (e) { + var t = this.tech_.buffered(), + i = this.tech_.currentTime(), + n = Qu(t, i); + this.cancelTimer_(), 0 !== n.length && i === e && (this.logger_("skipTheGap_:", "currentTime:", i, "scheduled currentTime:", e, "nextRange start:", n.start(0)), this.tech_.setCurrentTime(n.start(0) + ec), this.tech_.trigger({ + type: "usage", + name: "vhs-gap-skip" + }), this.tech_.trigger({ + type: "usage", + name: "hls-gap-skip" + })) + }, t.gapFromVideoUnderflow_ = function (e, t) { + for (var i = function (e) { + if (e.length < 2) return da.createTimeRanges(); + for (var t = [], i = 1; i < e.length; i++) { + var n = e.end(i - 1), + r = e.start(i); + t.push([n, r]) + } + return da.createTimeRanges(t) + }(e), n = 0; n < i.length; n++) { + var r = i.start(n), + a = i.end(n); + if (t - r < 4 && 2 < t - r) return { + start: r, + end: a + } + } + return null + }, e + }(), + Od = { + errorInterval: 30, + getSource: function (e) { + return e(this.tech({ + IWillNotUseThisInPlugins: !0 + }).currentSource_ || this.currentSource()) + } + }, + Dd = { + PlaylistLoader: Zl, + Playlist: ic, + utils: ac, + STANDARD_PLAYLIST_SELECTOR: function () { + var e = this.useDevicePixelRatio && T.devicePixelRatio || 1; + return function (e, t, i, n, r) { + var a = { + bandwidth: t, + width: i, + height: n, + limitRenditionByPlayerDimensions: r + }, + s = e.playlists.map(function (e) { + var t = e.attributes.RESOLUTION && e.attributes.RESOLUTION.width, + i = e.attributes.RESOLUTION && e.attributes.RESOLUTION.height; + return { + bandwidth: e.attributes.BANDWIDTH || T.Number.MAX_VALUE, + width: t, + height: i, + playlist: e + } + }); + Dc(s, function (e, t) { + return e.bandwidth - t.bandwidth + }); + var o = (s = s.filter(function (e) { + return !ic.isIncompatible(e.playlist) + })).filter(function (e) { + return ic.isEnabled(e.playlist) + }); + o.length || (o = s.filter(function (e) { + return !ic.isDisabled(e.playlist) + })); + var u = o.filter(function (e) { + return e.bandwidth * uc.BANDWIDTH_VARIANCE < t + }), + l = u[u.length - 1], + c = u.filter(function (e) { + return e.bandwidth === l.bandwidth + })[0]; + if (!1 === r) { + var d = c || o[0] || s[0]; + if (d && d.playlist) { + var h = "sortedPlaylistReps"; + return c && (h = "bandwidthBestRep"), o[0] && (h = "enabledPlaylistReps"), qc("choosing " + Lc(d) + " using " + h + " with options", a), d.playlist + } + return qc("could not choose a playlist with options", a), null + } + var p = u.filter(function (e) { + return e.width && e.height + }); + Dc(p, function (e, t) { + return e.width - t.width + }); + var f = p.filter(function (e) { + return e.width === i && e.height === n + }); + l = f[f.length - 1]; + var m, g, v, y = f.filter(function (e) { + return e.bandwidth === l.bandwidth + })[0]; + y || (g = (m = p.filter(function (e) { + return e.width > i || e.height > n + })).filter(function (e) { + return e.width === m[0].width && e.height === m[0].height + }), l = g[g.length - 1], v = g.filter(function (e) { + return e.bandwidth === l.bandwidth + })[0]); + var _ = v || y || c || o[0] || s[0]; + if (_ && _.playlist) { + var b = "sortedPlaylistReps"; + return v ? b = "resolutionPlusOneRep" : y ? b = "resolutionBestRep" : c ? b = "bandwidthBestRep" : o[0] && (b = "enabledPlaylistReps"), qc("choosing " + Lc(_) + " using " + b + " with options", a), _.playlist + } + return qc("could not choose a playlist with options", a), null + }(this.playlists.master, this.systemBandwidth, parseInt(Oc(this.tech_.el(), "width"), 10) * e, parseInt(Oc(this.tech_.el(), "height"), 10) * e, this.limitRenditionByPlayerDimensions) + }, + INITIAL_PLAYLIST_SELECTOR: function () { + var t = this, + e = this.playlists.master.playlists.filter(ic.isEnabled); + return Dc(e, function (e, t) { + return Mc(e, t) + }), e.filter(function (e) { + return !!xc(t.playlists.master, e).video + })[0] || null + }, + comparePlaylistBandwidth: Mc, + comparePlaylistResolution: function (e, t) { + var i, n; + return e.attributes.RESOLUTION && e.attributes.RESOLUTION.width && (i = e.attributes.RESOLUTION.width), i = i || T.Number.MAX_VALUE, t.attributes.RESOLUTION && t.attributes.RESOLUTION.width && (n = t.attributes.RESOLUTION.width), i === (n = n || T.Number.MAX_VALUE) && e.attributes.BANDWIDTH && t.attributes.BANDWIDTH ? e.attributes.BANDWIDTH - t.attributes.BANDWIDTH : i - n + }, + xhr: dl() + }; + ["GOAL_BUFFER_LENGTH", "MAX_GOAL_BUFFER_LENGTH", "BACK_BUFFER_LENGTH", "GOAL_BUFFER_LENGTH_RATE", "BUFFER_LOW_WATER_LINE", "MAX_BUFFER_LOW_WATER_LINE", "BUFFER_LOW_WATER_LINE_RATE", "BANDWIDTH_VARIANCE"].forEach(function (t) { + Object.defineProperty(Dd, t, { + get: function () { + return da.log.warn("using Vhs." + t + " is UNSAFE be sure you know what you are doing"), uc[t] + }, + set: function (e) { + da.log.warn("using Vhs." + t + " is UNSAFE be sure you know what you are doing"), "number" != typeof e || e < 0 ? da.log.warn("value of Vhs." + t + " must be greater than or equal to 0") : uc[t] = e + } + }) + }); + + function Md(e, t) { + for (var i = t.media(), n = -1, r = 0; r < e.length; r++) + if (e[r].id === i.id) { + n = r; + break + } e.selectedIndex_ = n, e.trigger({ + selectedIndex: n, + type: "change" + }) + } + var Rd = "videojs-vhs"; + Dd.canPlaySource = function () { + return da.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.") + }; + + function Nd(e) { + var t = e.player, + i = e.sourceKeySystems, + n = e.media, + r = e.audioMedia, + a = e.mainPlaylists, + s = function (e, t, i) { + if (!e) return e; + var n = { + video: t && t.attributes && t.attributes.CODECS, + audio: i && i.attributes && i.attributes.CODECS + }; + !n.audio && n.video && 1 < n.video.split(",").length && n.video.split(",").forEach(function (e) { + e = e.trim(), zl(e) ? n.audio = e : Gl(e) && (n.video = e) + }); + var r = n.video ? 'video/mp4;codecs="' + n.video + '"' : null, + a = n.audio ? 'audio/mp4;codecs="' + n.audio + '"' : null, + s = {}; + for (var o in e) s[o] = { + audioContentType: a, + videoContentType: r + }, t.contentProtection && t.contentProtection[o] && t.contentProtection[o].pssh && (s[o].pssh = t.contentProtection[o].pssh), "string" == typeof e[o] && (s[o].url = e[o]); + return da.mergeOptions(e, s) + }(i, n, r); + s && (!(t.currentSource().keySystems = s) || t.eme ? 11 !== da.browser.IE_VERSION && t.eme.initializeMediaKeys && function (e, i) { + return e.reduce(function (e, n) { + if (!n.contentProtection) return e; + var t = i.reduce(function (e, t) { + var i = n.contentProtection[t]; + return i && i.pssh && (e[t] = { + pssh: i.pssh + }), e + }, {}); + return Object.keys(t).length && e.push(t), e + }, []) + }(r ? a.concat([r]) : a, Object.keys(i)).forEach(function (e) { + t.eme.initializeMediaKeys({ + keySystems: e + }) + }) : da.log.warn("DRM encrypted source cannot be decrypted without a DRM plugin")) + } + + function Ud() { + if (!T.localStorage) return null; + var e = T.localStorage.getItem(Rd); + if (!e) return null; + try { + return JSON.parse(e) + } catch (e) { + return null + } + } + Dd.supportsNativeHls = function () { + if (!d || !d.createElement) return !1; + var t = d.createElement("video"); + if (!da.getTech("Html5").isSupported()) return !1; + return ["application/vnd.apple.mpegurl", "audio/mpegurl", "audio/x-mpegurl", "application/x-mpegurl", "video/x-mpegurl", "video/mpegurl", "application/mpegurl"].some(function (e) { + return /maybe|probably/i.test(t.canPlayType(e)) + }) + }(), Dd.supportsNativeDash = !!(d && d.createElement && da.getTech("Html5").isSupported()) && /maybe|probably/i.test(d.createElement("video").canPlayType("application/dash+xml")), Dd.supportsTypeNatively = function (e) { + return "hls" === e ? Dd.supportsNativeHls : "dash" === e && Dd.supportsNativeDash + }, Dd.isSupported = function () { + return da.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.") + }; + var Fd = function (a) { + function e(e, t, i) { + var n; + if (n = a.call(this, t, da.mergeOptions(i.hls, i.vhs)) || this, i.hls && Object.keys(i.hls).length && da.log.warn("Using hls options is deprecated. Use vhs instead."), t.options_ && t.options_.playerId) { + var r = da(t.options_.playerId); + r.hasOwnProperty("hls") || Object.defineProperty(r, "hls", { + get: function () { + return da.log.warn("player.hls is deprecated. Use player.tech().vhs instead."), t.trigger({ + type: "usage", + name: "hls-player-access" + }), Ve(n) + }, + configurable: !0 + }), r.hasOwnProperty("vhs") || Object.defineProperty(r, "vhs", { + get: function () { + return da.log.warn("player.vhs is deprecated. Use player.tech().vhs instead."), t.trigger({ + type: "usage", + name: "vhs-player-access" + }), Ve(n) + }, + configurable: !0 + }), r.hasOwnProperty("dash") || Object.defineProperty(r, "dash", { + get: function () { + return da.log.warn("player.dash is deprecated. Use player.tech().vhs instead."), Ve(n) + }, + configurable: !0 + }), n.player_ = r + } + if (n.tech_ = t, n.source_ = e, n.stats = {}, n.ignoreNextSeekingEvent_ = !1, n.setOptions_(), n.options_.overrideNative && t.overrideNativeAudioTracks && t.overrideNativeVideoTracks) t.overrideNativeAudioTracks(!0), t.overrideNativeVideoTracks(!0); + else if (n.options_.overrideNative && (t.featuresNativeVideoTracks || t.featuresNativeAudioTracks)) throw new Error("Overriding native HLS requires emulated tracks. See https://git.io/vMpjB"); + return n.on(d, ["fullscreenchange", "webkitfullscreenchange", "mozfullscreenchange", "MSFullscreenChange"], function (e) { + var t = d.fullscreenElement || d.webkitFullscreenElement || d.mozFullScreenElement || d.msFullscreenElement; + t && t.contains(n.tech_.el()) && n.masterPlaylistController_.smoothQualityChange_() + }), n.on(n.tech_, "seeking", function () { + this.ignoreNextSeekingEvent_ ? this.ignoreNextSeekingEvent_ = !1 : this.setCurrentTime(this.tech_.currentTime()) + }), n.on(n.tech_, "error", function () { + this.tech_.error() && this.masterPlaylistController_ && this.masterPlaylistController_.pauseLoading() + }), n.on(n.tech_, "play", n.play), n + } + Ge(e, a); + var t = e.prototype; + return t.setOptions_ = function () { + var t = this; + if (this.options_.withCredentials = this.options_.withCredentials || !1, this.options_.handleManifestRedirects = !1 !== this.options_.handleManifestRedirects, this.options_.limitRenditionByPlayerDimensions = !1 !== this.options_.limitRenditionByPlayerDimensions, this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || !1, this.options_.smoothQualityChange = this.options_.smoothQualityChange || !1, this.options_.useBandwidthFromLocalStorage = "undefined" != typeof this.source_.useBandwidthFromLocalStorage ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || !1, this.options_.customTagParsers = this.options_.customTagParsers || [], this.options_.customTagMappers = this.options_.customTagMappers || [], this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || !1, this.options_.handlePartialData = this.options_.handlePartialData || !1, "number" != typeof this.options_.blacklistDuration && (this.options_.blacklistDuration = 300), "number" != typeof this.options_.bandwidth && this.options_.useBandwidthFromLocalStorage) { + var e = Ud(); + e && e.bandwidth && (this.options_.bandwidth = e.bandwidth, this.tech_.trigger({ + type: "usage", + name: "vhs-bandwidth-from-local-storage" + }), this.tech_.trigger({ + type: "usage", + name: "hls-bandwidth-from-local-storage" + })), e && e.throughput && (this.options_.throughput = e.throughput, this.tech_.trigger({ + type: "usage", + name: "vhs-throughput-from-local-storage" + }), this.tech_.trigger({ + type: "usage", + name: "hls-throughput-from-local-storage" + })) + } + "number" != typeof this.options_.bandwidth && (this.options_.bandwidth = uc.INITIAL_BANDWIDTH), this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === uc.INITIAL_BANDWIDTH, ["withCredentials", "useDevicePixelRatio", "limitRenditionByPlayerDimensions", "bandwidth", "smoothQualityChange", "customTagParsers", "customTagMappers", "handleManifestRedirects", "cacheEncryptionKeys", "handlePartialData"].forEach(function (e) { + "undefined" != typeof t.source_[e] && (t.options_[e] = t.source_[e]) + }), this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions, this.useDevicePixelRatio = this.options_.useDevicePixelRatio + }, t.src = function (e, t) { + var i = this; + e && (this.setOptions_(), this.options_.src = function (e) { + return 0 === e.toLowerCase().indexOf("data:application/vnd.videojs.vhs+json,") ? JSON.parse(e.substring(e.indexOf(",") + 1)) : e + }(this.source_.src), this.options_.tech = this.tech_, this.options_.externVhs = Dd, this.options_.sourceType = Ia(t), this.options_.seekTo = function (e) { + i.tech_.setCurrentTime(e) + }, this.masterPlaylistController_ = new xd(this.options_), this.playbackWatcher_ = new Ld(da.mergeOptions(this.options_, { + seekable: function () { + return i.seekable() + }, + media: function () { + return i.masterPlaylistController_.media() + }, + masterPlaylistController: this.masterPlaylistController_ + })), this.masterPlaylistController_.on("error", function () { + var e = da.players[i.tech_.options_.playerId], + t = i.masterPlaylistController_.error; + "object" != typeof t || t.code ? "string" == typeof t && (t = { + message: t, + code: 3 + }) : t.code = 3, e.error(t) + }), this.masterPlaylistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : Dd.STANDARD_PLAYLIST_SELECTOR.bind(this), this.masterPlaylistController_.selectInitialPlaylist = Dd.INITIAL_PLAYLIST_SELECTOR.bind(this), this.playlists = this.masterPlaylistController_.masterPlaylistLoader_, this.mediaSource = this.masterPlaylistController_.mediaSource, Object.defineProperties(this, { + selectPlaylist: { + get: function () { + return this.masterPlaylistController_.selectPlaylist + }, + set: function (e) { + this.masterPlaylistController_.selectPlaylist = e.bind(this) + } + }, + throughput: { + get: function () { + return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate + }, + set: function (e) { + this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = e, this.masterPlaylistController_.mainSegmentLoader_.throughput.count = 1 + } + }, + bandwidth: { + get: function () { + return this.masterPlaylistController_.mainSegmentLoader_.bandwidth + }, + set: function (e) { + this.masterPlaylistController_.mainSegmentLoader_.bandwidth = e, this.masterPlaylistController_.mainSegmentLoader_.throughput = { + rate: 0, + count: 0 + } + } + }, + systemBandwidth: { + get: function () { + var e, t = 1 / (this.bandwidth || 1); + return e = 0 < this.throughput ? 1 / this.throughput : 0, Math.floor(1 / (t + e)) + }, + set: function () { + da.log.error('The "systemBandwidth" property is read-only') + } + } + }), this.options_.bandwidth && (this.bandwidth = this.options_.bandwidth), this.options_.throughput && (this.throughput = this.options_.throughput), Object.defineProperties(this.stats, { + bandwidth: { + get: function () { + return i.bandwidth || 0 + }, + enumerable: !0 + }, + mediaRequests: { + get: function () { + return i.masterPlaylistController_.mediaRequests_() || 0 + }, + enumerable: !0 + }, + mediaRequestsAborted: { + get: function () { + return i.masterPlaylistController_.mediaRequestsAborted_() || 0 + }, + enumerable: !0 + }, + mediaRequestsTimedout: { + get: function () { + return i.masterPlaylistController_.mediaRequestsTimedout_() || 0 + }, + enumerable: !0 + }, + mediaRequestsErrored: { + get: function () { + return i.masterPlaylistController_.mediaRequestsErrored_() || 0 + }, + enumerable: !0 + }, + mediaTransferDuration: { + get: function () { + return i.masterPlaylistController_.mediaTransferDuration_() || 0 + }, + enumerable: !0 + }, + mediaBytesTransferred: { + get: function () { + return i.masterPlaylistController_.mediaBytesTransferred_() || 0 + }, + enumerable: !0 + }, + mediaSecondsLoaded: { + get: function () { + return i.masterPlaylistController_.mediaSecondsLoaded_() || 0 + }, + enumerable: !0 + }, + buffered: { + get: function () { + return Zu(i.tech_.buffered()) + }, + enumerable: !0 + }, + currentTime: { + get: function () { + return i.tech_.currentTime() + }, + enumerable: !0 + }, + currentSource: { + get: function () { + return i.tech_.currentSource_ + }, + enumerable: !0 + }, + currentTech: { + get: function () { + return i.tech_.name_ + }, + enumerable: !0 + }, + duration: { + get: function () { + return i.tech_.duration() + }, + enumerable: !0 + }, + master: { + get: function () { + return i.playlists.master + }, + enumerable: !0 + }, + playerDimensions: { + get: function () { + return i.tech_.currentDimensions() + }, + enumerable: !0 + }, + seekable: { + get: function () { + return Zu(i.tech_.seekable()) + }, + enumerable: !0 + }, + timestamp: { + get: function () { + return Date.now() + }, + enumerable: !0 + }, + videoPlaybackQuality: { + get: function () { + return i.tech_.getVideoPlaybackQuality() + }, + enumerable: !0 + } + }), this.tech_.one("canplay", this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)), this.tech_.on("bandwidthupdate", function () { + i.options_.useBandwidthFromLocalStorage && function (e) { + if (!T.localStorage) return; + var t = Ud(); + t = t ? da.mergeOptions(t, e) : e; + try { + T.localStorage.setItem(Rd, JSON.stringify(t)) + } catch (e) { + return + } + }({ + bandwidth: i.bandwidth, + throughput: Math.round(i.throughput) + }) + }), this.masterPlaylistController_.on("selectedinitialmedia", function () { + ! function (i) { + var e = i.playlists; + i.representations = function () { + return e && e.master && e.master.playlists ? e.master.playlists.filter(function (e) { + return !sl(e) + }).map(function (e, t) { + return new nd(i, e, e.id) + }) : [] + } + }(i) + }), this.masterPlaylistController_.sourceUpdater_.on("ready", function () { + var e = i.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader; + Nd({ + player: i.player_, + sourceKeySystems: i.source_.keySystems, + media: i.playlists.media(), + audioMedia: e && e.media(), + mainPlaylists: i.playlists.master.playlists + }) + }), this.on(this.masterPlaylistController_, "progress", function () { + this.tech_.trigger("progress") + }), this.on(this.masterPlaylistController_, "firstplay", function () { + this.ignoreNextSeekingEvent_ = !0 + }), this.setupQualityLevels_(), this.tech_.el() && (this.mediaSourceUrl_ = T.URL.createObjectURL(this.masterPlaylistController_.mediaSource), this.tech_.src(this.mediaSourceUrl_))) + }, t.setupQualityLevels_ = function () { + var e = this, + t = da.players[this.tech_.options_.playerId]; + t && t.qualityLevels && !this.qualityLevels_ && (this.qualityLevels_ = t.qualityLevels(), this.masterPlaylistController_.on("selectedinitialmedia", function () { + ! function (t, e) { + e.representations().forEach(function (e) { + t.addQualityLevel(e) + }), Md(t, e.playlists) + }(e.qualityLevels_, e) + }), this.playlists.on("mediachange", function () { + Md(e.qualityLevels_, e.playlists) + })) + }, e.version = function () { + return { + "@videojs/http-streaming": "2.2.4", + "mux.js": "5.6.7", + "mpd-parser": "0.14.0", + "m3u8-parser": "4.5.0", + "aes-decrypter": "3.1.0" + } + }, t.version = function () { + return this.constructor.version() + }, t.canChangeType = function () { + return vd.canChangeType() + }, t.play = function () { + this.masterPlaylistController_.play() + }, t.setCurrentTime = function (e) { + this.masterPlaylistController_.setCurrentTime(e) + }, t.duration = function () { + return this.masterPlaylistController_.duration() + }, t.seekable = function () { + return this.masterPlaylistController_.seekable() + }, t.dispose = function () { + this.playbackWatcher_ && this.playbackWatcher_.dispose(), this.masterPlaylistController_ && this.masterPlaylistController_.dispose(), this.qualityLevels_ && this.qualityLevels_.dispose(), this.player_ && (delete this.player_.vhs, delete this.player_.dash, delete this.player_.hls), this.tech_ && this.tech_.vhs && delete this.tech_.vhs, this.tech_ && delete this.tech_.hls, this.mediaSourceUrl_ && T.URL.revokeObjectURL && (T.URL.revokeObjectURL(this.mediaSourceUrl_), this.mediaSourceUrl_ = null), a.prototype.dispose.call(this) + }, t.convertToProgramTime = function (e, t) { + return _l({ + playlist: this.masterPlaylistController_.media(), + time: e, + callback: t + }) + }, t.seekToProgramTime = function (e, t, i, n) { + return void 0 === i && (i = !0), void 0 === n && (n = 2), bl({ + programTime: e, + playlist: this.masterPlaylistController_.media(), + retryCount: n, + pauseAfterSeek: i, + seekTo: this.options_.seekTo, + tech: this.options_.tech, + callback: t + }) + }, e + }(da.getComponent("Component")), + Bd = { + name: "videojs-http-streaming", + VERSION: "2.2.4", + canHandleSource: function (e, t) { + void 0 === t && (t = {}); + var i = da.mergeOptions(da.options, t); + return Bd.canPlayType(e.type, i) + }, + handleSource: function (e, t, i) { + void 0 === i && (i = {}); + var n = da.mergeOptions(da.options, i); + return t.vhs = new Fd(e, t, n), da.hasOwnProperty("hls") || Object.defineProperty(t, "hls", { + get: function () { + return da.log.warn("player.tech().hls is deprecated. Use player.tech().vhs instead."), t.vhs + }, + configurable: !0 + }), t.vhs.xhr = dl(), t.vhs.src(e.src, e.type), t.vhs + }, + canPlayType: function (e, t) { + void 0 === t && (t = {}); + var i = da.mergeOptions(da.options, t).vhs.overrideNative, + n = void 0 === i ? !da.browser.IS_ANY_SAFARI : i, + r = Ia(e); + return r && (!Dd.supportsTypeNatively(r) || n) ? "maybe" : "" + } + }; + return ql("avc1.4d400d,mp4a.40.2") && da.getTech("Html5").registerSourceHandler(Bd, 0), da.VhsHandler = Fd, Object.defineProperty(da, "HlsHandler", { + get: function () { + return da.log.warn("videojs.HlsHandler is deprecated. Use videojs.VhsHandler instead."), Fd + }, + configurable: !0 + }), da.VhsSourceHandler = Bd, Object.defineProperty(da, "HlsSourceHandler", { + get: function () { + return da.log.warn("videojs.HlsSourceHandler is deprecated. Use videojs.VhsSourceHandler instead."), Bd + }, + configurable: !0 + }), da.Vhs = Dd, Object.defineProperty(da, "Hls", { + get: function () { + return da.log.warn("videojs.Hls is deprecated. Use videojs.Vhs instead."), Dd + }, + configurable: !0 + }), da.use || (da.registerComponent("Hls", Dd), da.registerComponent("Vhs", Dd)), da.options.vhs = da.options.vhs || {}, da.options.hls = da.options.hls || {}, da.registerPlugin ? da.registerPlugin("reloadSourceOnError", rd) : da.plugin("reloadSourceOnError", rd), da +}); +! function () { + ! function (a) { + var b = a && a.videojs; + b && (b.CDN_VERSION = "7.10.2") + }(window) +}(); \ No newline at end of file