@videojs/html 10.0.0-beta.28 → 10.0.0-beta.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/{adapter-XTen-YVQ.js → adapter-CEnNWvii.js} +17 -4
- package/cdn/adapter-CEnNWvii.js.map +1 -0
- package/cdn/adapter-DaKW8NzI.js +2 -0
- package/cdn/adapter-DaKW8NzI.js.map +1 -0
- package/cdn/audio-headless.dev.js +1 -1
- package/cdn/audio-headless.js +1 -1
- package/cdn/audio-minimal-ui.dev.js +2 -2
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +5 -5
- package/cdn/audio-minimal.dev.js.map +1 -1
- package/cdn/audio-minimal.js +1 -1
- package/cdn/audio-minimal.js.map +1 -1
- package/cdn/audio-ui.dev.js +2 -2
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +5 -5
- package/cdn/audio.dev.js.map +1 -1
- package/cdn/audio.js +1 -1
- package/cdn/audio.js.map +1 -1
- package/cdn/background.dev.js +1 -1
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/compounds-C4YYLyL2.js +8 -0
- package/cdn/compounds-C4YYLyL2.js.map +1 -0
- package/cdn/{compounds-nk9RJtBK.js → compounds-C73u1MeO.js} +63 -59
- package/cdn/compounds-C73u1MeO.js.map +1 -0
- package/cdn/create-player-BU8LDJDL.js +2 -0
- package/cdn/create-player-BU8LDJDL.js.map +1 -0
- package/cdn/{create-player-DK9WOywd.js → create-player-Db1CIvlK.js} +58 -46
- package/cdn/create-player-Db1CIvlK.js.map +1 -0
- package/cdn/{default-BqQDVloS.js → default-A3aM0skz.js} +2 -2
- package/cdn/default-A3aM0skz.js.map +1 -0
- package/cdn/default-BDyhiTCm.js +2 -0
- package/cdn/default-BDyhiTCm.js.map +1 -0
- package/cdn/{default-I2LasfxC.js → default-C1_k1NeB.js} +2 -2
- package/cdn/default-C1_k1NeB.js.map +1 -0
- package/cdn/default-DHrMd4ie.js +2 -0
- package/cdn/default-DHrMd4ie.js.map +1 -0
- package/cdn/error-surface-BID4D3DW.js +59 -0
- package/cdn/error-surface-BID4D3DW.js.map +1 -0
- package/cdn/{select-tracks-nRPBa1NC.js → error-surface-D0bo71gD.js} +442 -48
- package/cdn/error-surface-D0bo71gD.js.map +1 -0
- package/cdn/gesture-element-CeRy1IVs.js +2 -0
- package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
- package/cdn/{gesture-element-6Ld1YwIL.js → gesture-element-DB67OYCE.js} +3 -3
- package/cdn/gesture-element-DB67OYCE.js.map +1 -0
- package/cdn/{hls-js-C4P_b2tT.js → hls-js-CiE4wOrG.js} +2 -2
- package/cdn/{hls-js-C4P_b2tT.js.map → hls-js-CiE4wOrG.js.map} +1 -1
- package/cdn/{hls-js-CATW7NBm.js → hls-js-DBKRCbQm.js} +2 -2
- package/cdn/{hls-js-CATW7NBm.js.map → hls-js-DBKRCbQm.js.map} +1 -1
- package/cdn/{hls-js-BEuVm0u9.js → hls-js-DX2NGCAr.js} +2 -2
- package/cdn/{hls-js-BEuVm0u9.js.map → hls-js-DX2NGCAr.js.map} +1 -1
- package/cdn/{hls-js-WCNy9MVh.js → hls-js-JeH8yvsP.js} +2 -2
- package/cdn/{hls-js-WCNy9MVh.js.map → hls-js-JeH8yvsP.js.map} +1 -1
- package/cdn/i18n-CpBDXf6M.js +2 -0
- package/cdn/{i18n-Dc7WM2xd.js.map → i18n-CpBDXf6M.js.map} +1 -1
- package/cdn/{i18n-Ch4t6EjV.js → i18n-D0nhPa0m.js} +2 -2
- package/cdn/{i18n-Ch4t6EjV.js.map → i18n-D0nhPa0m.js.map} +1 -1
- package/cdn/{live-button-element-DaHgnYdw.js → live-button-element-Co8z2LkI.js} +2 -2
- package/cdn/{live-button-element-DaHgnYdw.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
- package/cdn/{live-button-element-Bae44kBN.js → live-button-element-zE-8uoR2.js} +3 -3
- package/cdn/{live-button-element-Bae44kBN.js.map → live-button-element-zE-8uoR2.js.map} +1 -1
- package/cdn/live-video-minimal.dev.js +11 -9
- package/cdn/live-video-minimal.dev.js.map +1 -1
- package/cdn/live-video-minimal.js +1 -1
- package/cdn/live-video-minimal.js.map +1 -1
- package/cdn/live-video.dev.js +12 -10
- package/cdn/live-video.dev.js.map +1 -1
- package/cdn/live-video.js +1 -1
- package/cdn/live-video.js.map +1 -1
- package/cdn/media/hls-audio.dev.js +1 -1
- package/cdn/media/hls-audio.js +1 -1
- package/cdn/media/hls-background-video.dev.js +1 -1
- package/cdn/media/hls-background-video.js +1 -1
- package/cdn/media/hls-video.dev.js +1 -1
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/mux-audio/hls-js.dev.js +1 -1
- package/cdn/media/mux-audio/hls-js.js +1 -1
- package/cdn/media/mux-audio/spf.dev.js +2 -2
- package/cdn/media/mux-audio/spf.js +1 -1
- package/cdn/media/mux-audio.dev.js +1 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-background-video.dev.js +1 -1
- package/cdn/media/mux-background-video.js +1 -1
- package/cdn/media/mux-data.dev.js +1 -1
- package/cdn/media/mux-data.dev.js.map +1 -1
- package/cdn/media/mux-data.js +1 -1
- package/cdn/media/mux-data.js.map +1 -1
- package/cdn/media/mux-video/hls-js.dev.js +1 -1
- package/cdn/media/mux-video/hls-js.js +1 -1
- package/cdn/media/mux-video/spf.dev.js +2 -2
- package/cdn/media/mux-video/spf.js +1 -1
- package/cdn/media/mux-video.dev.js +1 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/vimeo-video.dev.js +27 -5
- package/cdn/media/vimeo-video.dev.js.map +1 -1
- package/cdn/media/vimeo-video.js +1 -1
- package/cdn/media/vimeo-video.js.map +1 -1
- package/cdn/{media-Uxm0d3Vx.js → media-BI8caj07.js} +3 -3
- package/cdn/{media-Uxm0d3Vx.js.map → media-BI8caj07.js.map} +1 -1
- package/cdn/{media-COIe3uI5.js → media-BNuI0Im7.js} +19 -6
- package/cdn/media-BNuI0Im7.js.map +1 -0
- package/cdn/media-CQxFuDcv.js +2 -0
- package/cdn/{media-CPVSKLdk.js.map → media-CQxFuDcv.js.map} +1 -1
- package/cdn/media-D4tG62L5.js +2 -0
- package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
- package/cdn/{media-oa3nyL2o.js → media-DI6DvYm3.js} +3 -3
- package/cdn/{media-oa3nyL2o.js.map → media-DI6DvYm3.js.map} +1 -1
- package/cdn/media-DU3Xf5XR.js +2 -0
- package/cdn/media-DU3Xf5XR.js.map +1 -0
- package/cdn/media-mYKOAsk3.js +825 -0
- package/cdn/media-mYKOAsk3.js.map +1 -0
- package/cdn/media-zReLnePj.js +2 -0
- package/cdn/media-zReLnePj.js.map +1 -0
- package/cdn/{minimal-DQCLKRyR.js → minimal-3OmH0xQS.js} +2 -2
- package/cdn/minimal-3OmH0xQS.js.map +1 -0
- package/cdn/{minimal-DLosvq31.js → minimal-6w_Vyyl9.js} +2 -2
- package/cdn/minimal-6w_Vyyl9.js.map +1 -0
- package/cdn/minimal-BWLTn7oQ.js +2 -0
- package/cdn/minimal-BWLTn7oQ.js.map +1 -0
- package/cdn/minimal-DIGrklyh.js +2 -0
- package/cdn/minimal-DIGrklyh.js.map +1 -0
- package/cdn/{minimal-ui-CRKvUmB8.js → minimal-ui-BCIESK8f.js} +8 -8
- package/cdn/{minimal-ui-CRKvUmB8.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
- package/cdn/minimal-ui-BXrq3z4U.js +2 -0
- package/cdn/{minimal-ui-Et2Wcn7r.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
- package/cdn/{minimal-ui-BpHxIo4z.js → minimal-ui-DEalpMk6.js} +4 -4
- package/cdn/{minimal-ui-BpHxIo4z.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
- package/cdn/{minimal-ui-8iRZf_72.js → minimal-ui-vY3QgohH.js} +2 -2
- package/cdn/{minimal-ui-8iRZf_72.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
- package/cdn/{player-DM9rUXg-.js → player-B3GlPF90.js} +2 -2
- package/cdn/{player-DM9rUXg-.js.map → player-B3GlPF90.js.map} +1 -1
- package/cdn/player-CtTC7qa5.js +2 -0
- package/cdn/{player-rCFqzWrA.js.map → player-CtTC7qa5.js.map} +1 -1
- package/cdn/player-DKkph8UM.js +2 -0
- package/cdn/{player-BRQLp5bX.js.map → player-DKkph8UM.js.map} +1 -1
- package/cdn/{player-CKTAtwit.js → player-DPDmTRvg.js} +2 -2
- package/cdn/{player-CKTAtwit.js.map → player-DPDmTRvg.js.map} +1 -1
- package/cdn/player-DrDd7LJi.js +2 -0
- package/cdn/{player-BloX4l6F.js.map → player-DrDd7LJi.js.map} +1 -1
- package/cdn/{player-B2oraRyD.js → player-L5UpZmT4.js} +2 -2
- package/cdn/{player-B2oraRyD.js.map → player-L5UpZmT4.js.map} +1 -1
- package/cdn/{poster-element-BGr1VQJB.js → poster-element-B5tdJ2ub.js} +179 -38
- package/cdn/poster-element-B5tdJ2ub.js.map +1 -0
- package/cdn/poster-element-B8QwXSU_.js +2 -0
- package/cdn/poster-element-B8QwXSU_.js.map +1 -0
- package/cdn/{error-surface-drmCvBVW.js → relocation-pipelines-Dh8CcgHw.js} +5 -343
- package/cdn/relocation-pipelines-Dh8CcgHw.js.map +1 -0
- package/cdn/relocation-pipelines-DunE4gcV.js +2 -0
- package/cdn/relocation-pipelines-DunE4gcV.js.map +1 -0
- package/cdn/{seek-button-element-XMTLIxZj.js → seek-button-element-5co-k0Dx.js} +4 -4
- package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
- package/cdn/{seek-button-element-FlgBVoGM.js → seek-button-element-B8TkILg-.js} +2 -2
- package/cdn/{seek-button-element-FlgBVoGM.js.map → seek-button-element-B8TkILg-.js.map} +1 -1
- package/cdn/shallow-equal-C7S8rj2f.js +16 -0
- package/cdn/shallow-equal-C7S8rj2f.js.map +1 -0
- package/cdn/shallow-equal-KV1zFqZi.js +2 -0
- package/cdn/shallow-equal-KV1zFqZi.js.map +1 -0
- package/cdn/{skin-element-DL-Kqa5f.js → skin-element-DrkI8xuM.js} +2 -2
- package/cdn/{skin-element-DL-Kqa5f.js.map → skin-element-DrkI8xuM.js.map} +1 -1
- package/cdn/{skin-element-DNytI-uu.js → skin-element-DvX6Bxsv.js} +2 -2
- package/cdn/{skin-element-DNytI-uu.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
- package/cdn/{text-element-DeWBNKXb.js → text-element-BoY6AhMn.js} +2 -2
- package/cdn/{text-element-DeWBNKXb.js.map → text-element-BoY6AhMn.js.map} +1 -1
- package/cdn/{text-element-D88ArbZz.js → text-element-cg6l21cd.js} +2 -2
- package/cdn/{text-element-D88ArbZz.js.map → text-element-cg6l21cd.js.map} +1 -1
- package/cdn/time-slider-chapters-element-BfLjdnU4.js +2 -0
- package/cdn/time-slider-chapters-element-BfLjdnU4.js.map +1 -0
- package/cdn/{time-slider-chapters-element-DJ0abZXI.js → time-slider-chapters-element-CznFQWFm.js} +5 -5
- package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
- package/cdn/{ui-BU3_2gDQ.js → ui-BwzqkJNK.js} +7 -7
- package/cdn/{ui-BU3_2gDQ.js.map → ui-BwzqkJNK.js.map} +1 -1
- package/cdn/ui-DayfItun.js +2 -0
- package/cdn/{ui-C0isALTQ.js.map → ui-DayfItun.js.map} +1 -1
- package/cdn/ui-PSnD-pv8.js +2 -0
- package/cdn/{ui-DVpkE1MN.js.map → ui-PSnD-pv8.js.map} +1 -1
- package/cdn/{ui-BsaWWE4y.js → ui-fnKp94a7.js} +9 -9
- package/cdn/{ui-BsaWWE4y.js.map → ui-fnKp94a7.js.map} +1 -1
- package/cdn/video-headless.dev.js +1 -1
- package/cdn/video-headless.js +1 -1
- package/cdn/video-minimal-ui.dev.js +2 -2
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +8 -6
- package/cdn/video-minimal.dev.js.map +1 -1
- package/cdn/video-minimal.js +1 -1
- package/cdn/video-minimal.js.map +1 -1
- package/cdn/video-ui.dev.js +2 -2
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +9 -7
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -1
- package/cdn/video.js.map +1 -1
- package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.css +103 -101
- package/dist/default/define/audio/skin.css +68 -69
- package/dist/default/define/live-audio/minimal-skin.css +103 -101
- package/dist/default/define/live-audio/skin.css +68 -69
- package/dist/default/define/live-video/minimal-skin.css +140 -120
- package/dist/default/define/live-video/minimal-skin.js +1 -1
- package/dist/default/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/live-video/skin.css +89 -76
- package/dist/default/define/live-video/skin.js +1 -1
- package/dist/default/define/live-video/skin.js.map +1 -1
- package/dist/default/define/live-video/skin.tailwind.js +1 -1
- package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
- package/dist/default/define/ui/gesture.js +7 -0
- package/dist/default/define/ui/gesture.js.map +1 -0
- package/dist/default/define/video/minimal-skin.css +140 -120
- package/dist/default/define/video/minimal-skin.js +1 -1
- package/dist/default/define/video/minimal-skin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/video/skin.css +89 -76
- package/dist/default/define/video/skin.js +1 -1
- package/dist/default/define/video/skin.js.map +1 -1
- package/dist/default/define/video/skin.tailwind.js +1 -1
- package/dist/default/define/video/skin.tailwind.js.map +1 -1
- package/dist/default/icons/dist/element/default/icons.js +1 -1
- package/dist/default/icons/dist/element/default/icons.js.map +1 -1
- package/dist/default/icons/dist/element/minimal/icons.js +1 -1
- package/dist/default/icons/dist/element/minimal/icons.js.map +1 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js +1 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js +1 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/render/default/index.js +1 -1
- package/dist/default/icons/dist/render/default/index.js.map +1 -1
- package/dist/default/icons/dist/render/minimal/index.js +1 -1
- package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/default/media/hls-background-video/media.js +18 -0
- package/dist/default/media/hls-background-video/media.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/default/store/provider-mixin.js +22 -8
- package/dist/default/store/provider-mixin.js.map +1 -1
- package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
- package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
- package/dist/default/ui/captions-radio-group/captions-radio-group-element.js +1 -1
- package/dist/default/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
- package/dist/default/ui/gesture/gesture-element.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/default/ui/menu/context.js.map +1 -1
- package/dist/default/ui/menu/menu-element.js +28 -27
- package/dist/default/ui/menu/menu-element.js.map +1 -1
- package/dist/default/ui/menu/menu-radio-group-element.js +14 -14
- package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -1
- package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
- package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
- package/dist/default/ui/poster/poster-element.js +138 -8
- package/dist/default/ui/poster/poster-element.js.map +1 -1
- package/dist/default/ui/quality-radio-group/quality-radio-group-element.js +1 -1
- package/dist/default/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
- package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.css +103 -101
- package/dist/dev/define/audio/skin.css +68 -69
- package/dist/dev/define/live-audio/minimal-skin.css +103 -101
- package/dist/dev/define/live-audio/skin.css +68 -69
- package/dist/dev/define/live-video/minimal-skin.css +140 -120
- package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.js +3 -1
- package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/live-video/skin.css +89 -76
- package/dist/dev/define/live-video/skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.js +3 -1
- package/dist/dev/define/live-video/skin.js.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.js +4 -2
- package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
- package/dist/dev/define/ui/gesture.d.ts +8 -0
- package/dist/dev/define/ui/gesture.d.ts.map +1 -0
- package/dist/dev/define/ui/gesture.js +7 -0
- package/dist/dev/define/ui/gesture.js.map +1 -0
- package/dist/dev/define/video/minimal-skin.css +140 -120
- package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.js +3 -1
- package/dist/dev/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/skin.css +89 -76
- package/dist/dev/define/video/skin.d.ts.map +1 -1
- package/dist/dev/define/video/skin.js +3 -1
- package/dist/dev/define/video/skin.js.map +1 -1
- package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/skin.tailwind.js +4 -2
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/media/hls-background-video/media.d.ts +16 -0
- package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
- package/dist/dev/media/hls-background-video/media.js +18 -0
- package/dist/dev/media/hls-background-video/media.js.map +1 -1
- package/dist/dev/packages/icons/dist/element/default/icons.js +1 -1
- package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -1
- package/dist/dev/packages/icons/dist/element/minimal/icons.js +1 -1
- package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -1
- package/dist/dev/packages/icons/dist/html/default/airplay-exit.js +1 -1
- package/dist/dev/packages/icons/dist/html/default/airplay-exit.js.map +1 -1
- package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js +1 -1
- package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js.map +1 -1
- package/dist/dev/packages/icons/dist/render/default/index.js +1 -1
- package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -1
- package/dist/dev/packages/icons/dist/render/minimal/index.js +1 -1
- package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/dev/store/provider-mixin.d.ts.map +1 -1
- package/dist/dev/store/provider-mixin.js +24 -8
- package/dist/dev/store/provider-mixin.js.map +1 -1
- package/dist/dev/store/types.d.ts +2 -2
- package/dist/dev/store/types.d.ts.map +1 -1
- package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
- package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
- package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js +1 -1
- package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.d.ts +7 -7
- package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.d.ts +6 -6
- package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/dev/ui/menu/context.d.ts +8 -8
- package/dist/dev/ui/menu/context.d.ts.map +1 -1
- package/dist/dev/ui/menu/context.js.map +1 -1
- package/dist/dev/ui/menu/menu-element.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-element.js +28 -27
- package/dist/dev/ui/menu/menu-element.js.map +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.js +14 -14
- package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -1
- package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
- package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
- package/dist/dev/ui/poster/poster-element.d.ts +20 -18
- package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
- package/dist/dev/ui/poster/poster-element.js +145 -8
- package/dist/dev/ui/poster/poster-element.js.map +1 -1
- package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js +1 -1
- package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.d.ts +2 -2
- package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/concepts/skins.md +91 -78
- package/docs/how-to/customize-skins.md +411 -377
- package/docs/reference/menu.md +3 -19
- package/docs/reference/popover.md +2 -2
- package/docs/reference/poster.md +211 -21
- package/docs/reference/slider.md +1 -1
- package/docs/reference/time-slider.md +1 -1
- package/docs/reference/tooltip.md +6 -6
- package/docs/reference/volume-slider.md +1 -1
- package/package.json +14 -9
- package/cdn/adapter-Bk03SAxn.js +0 -2
- package/cdn/adapter-Bk03SAxn.js.map +0 -1
- package/cdn/adapter-XTen-YVQ.js.map +0 -1
- package/cdn/compounds-BEO1d3ZM.js +0 -8
- package/cdn/compounds-BEO1d3ZM.js.map +0 -1
- package/cdn/compounds-nk9RJtBK.js.map +0 -1
- package/cdn/create-player-DK9WOywd.js.map +0 -1
- package/cdn/create-player-hSdQMP5p.js +0 -2
- package/cdn/create-player-hSdQMP5p.js.map +0 -1
- package/cdn/default-BqQDVloS.js.map +0 -1
- package/cdn/default-CXWVp2oG.js +0 -2
- package/cdn/default-CXWVp2oG.js.map +0 -1
- package/cdn/default-Dw6cIEqT.js +0 -2
- package/cdn/default-Dw6cIEqT.js.map +0 -1
- package/cdn/default-I2LasfxC.js.map +0 -1
- package/cdn/error-surface-DCT1m2p1.js +0 -2
- package/cdn/error-surface-DCT1m2p1.js.map +0 -1
- package/cdn/error-surface-drmCvBVW.js.map +0 -1
- package/cdn/gesture-element-6Ld1YwIL.js.map +0 -1
- package/cdn/gesture-element-BC48ucj9.js +0 -2
- package/cdn/gesture-element-BC48ucj9.js.map +0 -1
- package/cdn/i18n-Dc7WM2xd.js +0 -2
- package/cdn/media-BTipOcKo.js +0 -2
- package/cdn/media-Bmablv4g.js +0 -2
- package/cdn/media-Bmablv4g.js.map +0 -1
- package/cdn/media-COIe3uI5.js.map +0 -1
- package/cdn/media-CPVSKLdk.js +0 -2
- package/cdn/media-Dq4zmIJa.js +0 -2
- package/cdn/media-Dq4zmIJa.js.map +0 -1
- package/cdn/media-suYcjCG2.js +0 -445
- package/cdn/media-suYcjCG2.js.map +0 -1
- package/cdn/minimal-BedCvMBG.js +0 -2
- package/cdn/minimal-BedCvMBG.js.map +0 -1
- package/cdn/minimal-BoP112ye.js +0 -2
- package/cdn/minimal-BoP112ye.js.map +0 -1
- package/cdn/minimal-DLosvq31.js.map +0 -1
- package/cdn/minimal-DQCLKRyR.js.map +0 -1
- package/cdn/minimal-ui-Et2Wcn7r.js +0 -2
- package/cdn/player-BRQLp5bX.js +0 -2
- package/cdn/player-BloX4l6F.js +0 -2
- package/cdn/player-rCFqzWrA.js +0 -2
- package/cdn/poster-element-BGr1VQJB.js.map +0 -1
- package/cdn/poster-element-DBmgOyep.js +0 -2
- package/cdn/poster-element-DBmgOyep.js.map +0 -1
- package/cdn/seek-button-element-XMTLIxZj.js.map +0 -1
- package/cdn/select-tracks-nRPBa1NC.js.map +0 -1
- package/cdn/select-tracks-xV1s28xD.js +0 -59
- package/cdn/select-tracks-xV1s28xD.js.map +0 -1
- package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +0 -1
- package/cdn/time-slider-chapters-element-DW8YyJn8.js +0 -2
- package/cdn/time-slider-chapters-element-DW8YyJn8.js.map +0 -1
- package/cdn/ui-C0isALTQ.js +0 -2
- package/cdn/ui-DVpkE1MN.js +0 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { C as updateMediaSourceDuration, G as attachMediaSourceAsSourceElement, H as getResolvedSelectedTrackDuration, K as trackCurrentTime, P as endOfStream, R as collectErrors, T as setupAudioBufferActors, U as parseMultivariantPlaylist, V as calculatePresentationDuration, W as canPlayTrack, bt as effect, c as reportUnsupportedTrackConditions, ct as makeShareSignals, ht as SVTA_NO_SUPPORTED_AUDIO_TRACK, lt as createComposition, n as hasUnsupportedFeatureCause, q as loadAudioSegments, r as withAlternativeMediaSuggestion, s as UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE, t as firstFatal, v as resolveAudioTrack, vt as SVTA_UNSUPPORTED_PLAYBACK_FEATURE, w as setupMediaSource, x as resolvePresentation } from "./error-surface-D0bo71gD.js";
|
|
2
2
|
import { t as HTMLMediaElementHost } from "./media-host-C4WnQ_uQ.js";
|
|
3
|
-
import {
|
|
3
|
+
import { c as setupFailoverMonitor, d as setupAirPlay, f as deriveCdnPriority, g as trackLoadTriggers, i as switchAudioTrack, l as recoverEndStall, m as establishStartMediaTime, n as relocationPipelinesFor, p as deriveSharedMinStartMediaTime, s as syncPreload, u as applyStartPosition } from "./relocation-pipelines-Dh8CcgHw.js";
|
|
4
4
|
|
|
5
5
|
//#region ../spf/dist/dev/playback/engines/hls/engine-audio-only.js
|
|
6
6
|
const shareSignals = makeShareSignals(["userAudioTrackSelection", "disableRemotePlayback"]);
|
|
@@ -260,4 +260,4 @@ var HlsAudioMedia = class extends HlsAudioMediaBase {};
|
|
|
260
260
|
|
|
261
261
|
//#endregion
|
|
262
262
|
export { HlsAudioMedia as t };
|
|
263
|
-
//# sourceMappingURL=media-
|
|
263
|
+
//# sourceMappingURL=media-BI8caj07.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-Uxm0d3Vx.js","names":["#config","#engine","#createEngine","#stopErrorSync","#signals","#setError","#error","#reportedCode","#withSuggestion","#cancelPendingPlay","#preload","#disableRemotePlayback","#loadstartListener"],"sources":["../../spf/dist/dev/playback/engines/hls/engine-audio-only.js","../../spf/dist/dev/playback/adapters/hls-audio/adapter.js","../../media/dist/dev/dom/audio-host/audio-host.js","../../spf/dist/dev/playback/adapters/hls-audio/media.js"],"sourcesContent":["import { createComposition } from \"../../../core/composition/create-composition.js\";\nimport { makeShareSignals } from \"../../../core/composition/share-signals.js\";\nimport { loadAudioSegments } from \"../../behaviors/dom/load-segments.js\";\nimport { trackCurrentTime } from \"../../behaviors/dom/track-current-time.js\";\nimport { trackLoadTriggers } from \"../../behaviors/dom/track-load-triggers.js\";\nimport { deriveSharedMinStartMediaTime, establishStartMediaTime } from \"../../behaviors/establish-start-media-time.js\";\nimport { attachMediaSourceAsSourceElement } from \"../../../media/dom/mse/mediasource-setup.js\";\nimport { canPlayTrack } from \"../../../media/dom/capabilities.js\";\nimport { parseMultivariantPlaylist } from \"../../../media/hls/parse-multivariant.js\";\nimport { getResolvedSelectedTrackDuration } from \"../../../media/utils/track-selection.js\";\nimport { calculatePresentationDuration } from \"../../behaviors/calculate-presentation-duration.js\";\nimport { collectErrors } from \"../../behaviors/collect-errors.js\";\nimport { deriveCdnPriority } from \"../../behaviors/derive-cdn-priority.js\";\nimport { setupAirPlay } from \"../../behaviors/dom/airplay.js\";\nimport { applyStartPosition } from \"../../behaviors/dom/apply-start-position.js\";\nimport { endOfStream } from \"../../behaviors/dom/end-of-stream.js\";\nimport { recoverEndStall } from \"../../behaviors/dom/recover-end-stall.js\";\nimport { setupAudioBufferActors } from \"../../behaviors/dom/setup-buffer-actors.js\";\nimport { setupMediaSource } from \"../../behaviors/dom/setup-mediasource.js\";\nimport { updateMediaSourceDuration } from \"../../behaviors/dom/update-mediasource-duration.js\";\nimport { resolvePresentation } from \"../../behaviors/resolve-presentation.js\";\nimport { resolveAudioTrack } from \"../../behaviors/resolve-track.js\";\nimport { setupFailoverMonitor } from \"../../behaviors/setup-failover-monitor.js\";\nimport { syncPreload } from \"../../behaviors/sync-preload.js\";\nimport { switchAudioTrack } from \"../../behaviors/track-switching.js\";\nimport { relocationPipelinesFor } from \"../../primitives/relocation-pipelines.js\";\nimport { reportUnsupportedTrackConditions } from \"../../primitives/report-track-conditions.js\";\n//#region src/playback/engines/hls/engine-audio-only.ts\nconst shareSignals = makeShareSignals([\"userAudioTrackSelection\", \"disableRemotePlayback\"]);\n/**\n* Create an audio-only HLS playback engine.\n*\n* Subtractive composition variant of `createHlsVideoEngine`: omits\n* video-side behaviors (`resolveVideoTrack`, `switchVideoTrack`,\n* `setupVideoBufferActors`, `loadVideoSegments`) and text-track behaviors\n* (`switchTextTrack`, `resolveTextTrack`, `syncTextTracks`,\n* `setupTextTrackActors`, `loadTextTrackSegments`). The remaining audio\n* pipeline composes unchanged.\n*\n* Handles both truly audio-only HLS sources (no video stream-inf) and\n* mixed-AV HLS sources where the audio rendition is selected and video /\n* subtitle renditions are ignored at composition time. The variant decision\n* is encoded by adapter choice; this engine does not branch on source\n* shape.\n*\n* @example\n* ```ts\n* let signals: HlsAudioEngineSignals;\n* const engine = createHlsAudioEngine({\n* preferredAudioLanguage: 'en',\n* onSignalsReady: (refs) => {\n* signals = refs;\n* },\n* });\n*\n* signals.context.mediaElement.set(audioEl);\n* signals.state.presentation.set({ url: 'https://example.com/stream.m3u8' });\n* ```\n*/\nfunction createHlsAudioEngine(config = {}) {\n\tconst deriveStartMediaTime = config.deriveStartMediaTime ?? deriveSharedMinStartMediaTime;\n\tconst finalConfig = {\n\t\t...config,\n\t\tderiveStartMediaTime,\n\t\tattachMediaSource: attachMediaSourceAsSourceElement,\n\t\tcanPlayTrack: config.canPlayTrack ?? canPlayTrack,\n\t\treportUnsupportedTrackConditions: config.reportUnsupportedTrackConditions ?? reportUnsupportedTrackConditions,\n\t\tresolveDuration: config.resolveDuration ?? getResolvedSelectedTrackDuration,\n\t\tparsePresentation: config.parsePresentation ?? parseMultivariantPlaylist,\n\t\taudioMessagePipelines: relocationPipelinesFor(\"audio\", deriveStartMediaTime)\n\t};\n\treturn createComposition([\n\t\tsyncPreload,\n\t\ttrackLoadTriggers,\n\t\tresolvePresentation,\n\t\tderiveCdnPriority,\n\t\tsetupFailoverMonitor,\n\t\tcollectErrors,\n\t\tswitchAudioTrack,\n\t\tresolveAudioTrack,\n\t\tcalculatePresentationDuration,\n\t\tsetupMediaSource,\n\t\tupdateMediaSourceDuration,\n\t\testablishStartMediaTime,\n\t\tsetupAudioBufferActors,\n\t\tsetupAirPlay,\n\t\ttrackCurrentTime,\n\t\tapplyStartPosition,\n\t\tloadAudioSegments,\n\t\tendOfStream,\n\t\trecoverEndStall,\n\t\tshareSignals\n\t], { config: finalConfig });\n}\n//#endregion\nexport { createHlsAudioEngine };\n\n//# sourceMappingURL=engine-audio-only.js.map","import { effect } from \"../../../core/signals/effect.js\";\nimport { SVTA_NO_SUPPORTED_AUDIO_TRACK, SVTA_UNSUPPORTED_PLAYBACK_FEATURE } from \"../../../media/errors.js\";\nimport { createHlsAudioEngine } from \"../../engines/hls/engine-audio-only.js\";\nimport { UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE } from \"../../primitives/error-messages.js\";\nimport { firstFatal, hasUnsupportedFeatureCause, withAlternativeMediaSuggestion } from \"../hls-video/error-surface.js\";\n//#region src/playback/adapters/hls-audio/adapter.ts\nconst hlsAudioMediaDefaultProps = {\n\tsrc: \"\",\n\tpreload: \"\",\n\tdisableRemotePlayback: false\n};\n/**\n* Which reported conditions this composition treats as fatal. Only the audio\n* verdict: an audio-only engine composes no video selection, so\n* `SVTA_NO_SUPPORTED_VIDEO_TRACK` is never reported and surfacing it would\n* describe a track type this media doesn't have.\n*/\nconst FATAL_SVTA_CODES = /* @__PURE__ */ new Set([SVTA_NO_SUPPORTED_AUDIO_TRACK]);\n/**\n* Mixin that adds SPF audio-only HLS playback to any base class.\n*\n* @fires error - Fired when a fatal condition is reported. Read `error` for it.\n*\n* Parallel to `HlsVideoMediaMixin` with one substantive difference: the\n* underlying engine is the audio-only variant (`createHlsAudioEngine`),\n* which omits video and text-track behaviors. The src / preload /\n* disableRemotePlayback / play() contract per the WHATWG HTML spec is identical\n* to the default adapter.\n*\n* Selecting this adapter is the variant decision: instantiating\n* `HlsAudioMediaElement` opts the consumer into audio-only\n* delivery even when the source is a mixed-AV HLS manifest.\n*\n* @example\n* class HlsAudioMedia extends HlsAudioMediaMixin(HTMLVideoElementHost) {}\n*\n* const media = new HlsAudioMedia();\n* media.attach(document.querySelector('video'));\n* media.src = 'https://stream.mux.com/abc123.m3u8';\n*/\nfunction HlsAudioMediaMixin(BaseClass) {\n\tclass HlsAudioMediaImpl extends BaseClass {\n\t\t/**\n\t\t* A complete sentence naming the Media to reach for when this one can't play\n\t\t* a source. Appended to the copy this adapter logs.\n\t\t*\n\t\t* Empty here, and overridden the same way as on the video adapter — see its\n\t\t* note. `hls-audio` has no better-equipped sibling of its own; the\n\t\t* Mux audio Media built on this engine does, and points at the hls.js-backed\n\t\t* one.\n\t\t*/\n\t\tstatic get alternativeMediaSuggestion() {}\n\t\t#engine;\n\t\t#config;\n\t\t#signals;\n\t\t#preload = hlsAudioMediaDefaultProps.preload;\n\t\t#disableRemotePlayback = hlsAudioMediaDefaultProps.disableRemotePlayback;\n\t\t#error = null;\n\t\t/** Reported condition currently surfaced — see the video adapter's note. */\n\t\t#reportedCode = null;\n\t\t#stopErrorSync;\n\t\t/** Pending loadstart listener from a deferred play() retry, if any. */\n\t\t#loadstartListener = null;\n\t\tconstructor(...args) {\n\t\t\tsuper(...args);\n\t\t\tconst { config } = args?.[0] ?? {};\n\t\t\tthis.#config = config;\n\t\t\tthis.#engine = this.#createEngine();\n\t\t\tthis.#stopErrorSync = effect(() => {\n\t\t\t\tconst errors = this.#signals.state.errors.get();\n\t\t\t\tthis.#setError(firstFatal(errors, FATAL_SVTA_CODES), errors);\n\t\t\t});\n\t\t}\n\t\t/**\n\t\t* The current fatal error, or `null`. Only *fatal* conditions appear here —\n\t\t* the engine reports non-fatal ones too, which stay in `engine.state.errors`.\n\t\t* Resets per source. Fires `'error'` when set.\n\t\t*/\n\t\tget error() {\n\t\t\treturn this.#error;\n\t\t}\n\t\t#setError(reported, errors) {\n\t\t\tif (!reported) {\n\t\t\t\tthis.#error = null;\n\t\t\t\tthis.#reportedCode = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.#reportedCode === reported.code) return;\n\t\t\tthis.#reportedCode = reported.code;\n\t\t\tconst unsupported = hasUnsupportedFeatureCause(errors);\n\t\t\tif (unsupported) console.error(this.#withSuggestion(UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE), { conditions: errors });\n\t\t\tthis.#error = {\n\t\t\t\tcode: unsupported ? SVTA_UNSUPPORTED_PLAYBACK_FEATURE : reported.code,\n\t\t\t\tmessage: reported.message ?? \"\",\n\t\t\t\t...reported.data === void 0 ? {} : { data: reported.data }\n\t\t\t};\n\t\t\tthis.dispatchEvent?.(new Event(\"error\"));\n\t\t}\n\t\t/**\n\t\t* Underlying playback engine — the low-level SPF reactive composition that\n\t\t* drives playback. An advanced escape hatch for direct engine access;\n\t\t* normal playback is driven through this element's own properties and\n\t\t* methods.\n\t\t*/\n\t\tget engine() {\n\t\t\treturn this.#engine;\n\t\t}\n\t\tattach(mediaElement) {\n\t\t\tsuper.attach?.(mediaElement);\n\t\t\tthis.#signals.context.mediaElement.set(mediaElement);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#cancelPendingPlay();\n\t\t\tthis.#signals.context.mediaElement.set(void 0);\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#cancelPendingPlay();\n\t\t\tthis.#stopErrorSync();\n\t\t\tthis.#engine.destroy();\n\t\t}\n\t\t/** Preload type (`'none'` / `'metadata'` / `'auto'`). */\n\t\tget preload() {\n\t\t\treturn this.#preload;\n\t\t}\n\t\tset preload(value) {\n\t\t\tthis.#preload = value;\n\t\t\tif (value) this.#signals.state.preload.set(value);\n\t\t}\n\t\tget disableRemotePlayback() {\n\t\t\treturn this.#disableRemotePlayback;\n\t\t}\n\t\tset disableRemotePlayback(value) {\n\t\t\tthis.#disableRemotePlayback = value;\n\t\t\tthis.#signals.state.disableRemotePlayback.set(value);\n\t\t}\n\t\tget src() {\n\t\t\treturn this.#signals.state.presentation.get()?.url ?? \"\";\n\t\t}\n\t\tset src(value) {\n\t\t\tif (value === this.src) return;\n\t\t\tthis.#cancelPendingPlay();\n\t\t\tthis.#signals.state.presentation.set(value ? { url: value } : void 0);\n\t\t}\n\t\tplay() {\n\t\t\tconst mediaElement = this.#signals.context.mediaElement.get();\n\t\t\tif (!mediaElement) return Promise.reject(/* @__PURE__ */ new Error(\"HlsAudioMediaElement: no media element attached\"));\n\t\t\tthis.#signals.state.loadActivated.set(true);\n\t\t\treturn mediaElement.play().catch((err) => {\n\t\t\t\tif (this.src) return new Promise((resolve, reject) => {\n\t\t\t\t\tconst listener = () => {\n\t\t\t\t\t\tthis.#loadstartListener = null;\n\t\t\t\t\t\tmediaElement.play().then(resolve, reject);\n\t\t\t\t\t};\n\t\t\t\t\tthis.#loadstartListener = listener;\n\t\t\t\t\tmediaElement.addEventListener(\"loadstart\", listener, { once: true });\n\t\t\t\t});\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\t/** `message`, plus the alternative-Media sentence when this class names one. */\n\t\t#withSuggestion(message) {\n\t\t\treturn withAlternativeMediaSuggestion(message, this);\n\t\t}\n\t\t#createEngine() {\n\t\t\treturn createHlsAudioEngine({\n\t\t\t\t...this.#config,\n\t\t\t\tonSignalsReady: (signals) => {\n\t\t\t\t\tthis.#signals = signals;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t#cancelPendingPlay() {\n\t\t\tif (!this.#loadstartListener) return;\n\t\t\tthis.#signals.context.mediaElement.get()?.removeEventListener(\"loadstart\", this.#loadstartListener);\n\t\t\tthis.#loadstartListener = null;\n\t\t}\n\t}\n\treturn HlsAudioMediaImpl;\n}\n/** Standalone SPF audio-only media adapter with no base class. */\nvar HlsAudioMediaElement = class extends HlsAudioMediaMixin(class {}) {};\n//#endregion\nexport { HlsAudioMediaElement, HlsAudioMediaMixin, hlsAudioMediaDefaultProps };\n\n//# sourceMappingURL=adapter.js.map","import { HTMLMediaElementHost } from \"../media-host/media-host.js\";\n//#region src/dom/audio-host/audio-host.ts\nvar HTMLAudioElementHost = class extends HTMLMediaElementHost {};\n//#endregion\nexport { HTMLAudioElementHost };\n\n//# sourceMappingURL=audio-host.js.map","import { HlsAudioMediaMixin } from \"./adapter.js\";\nimport { HTMLAudioElementHost } from \"@videojs/media/dom/audio-host\";\n//#region src/playback/adapters/hls-audio/media.ts\nconst HlsAudioMediaBase = HlsAudioMediaMixin(HTMLAudioElementHost);\nvar HlsAudioMedia = class extends HlsAudioMediaBase {};\n//#endregion\nexport { HlsAudioMedia };\n\n//# sourceMappingURL=media.js.map"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-BI8caj07.js","names":["#config","#engine","#createEngine","#stopErrorSync","#signals","#setError","#error","#reportedCode","#withSuggestion","#cancelPendingPlay","#preload","#disableRemotePlayback","#loadstartListener"],"sources":["../../spf/dist/dev/playback/engines/hls/engine-audio-only.js","../../spf/dist/dev/playback/adapters/hls-audio/adapter.js","../../media/dist/dev/dom/audio-host/audio-host.js","../../spf/dist/dev/playback/adapters/hls-audio/media.js"],"sourcesContent":["import { createComposition } from \"../../../core/composition/create-composition.js\";\nimport { makeShareSignals } from \"../../../core/composition/share-signals.js\";\nimport { loadAudioSegments } from \"../../behaviors/dom/load-segments.js\";\nimport { trackCurrentTime } from \"../../behaviors/dom/track-current-time.js\";\nimport { trackLoadTriggers } from \"../../behaviors/dom/track-load-triggers.js\";\nimport { deriveSharedMinStartMediaTime, establishStartMediaTime } from \"../../behaviors/establish-start-media-time.js\";\nimport { attachMediaSourceAsSourceElement } from \"../../../media/dom/mse/mediasource-setup.js\";\nimport { canPlayTrack } from \"../../../media/dom/capabilities.js\";\nimport { parseMultivariantPlaylist } from \"../../../media/hls/parse-multivariant.js\";\nimport { getResolvedSelectedTrackDuration } from \"../../../media/utils/track-selection.js\";\nimport { calculatePresentationDuration } from \"../../behaviors/calculate-presentation-duration.js\";\nimport { collectErrors } from \"../../behaviors/collect-errors.js\";\nimport { deriveCdnPriority } from \"../../behaviors/derive-cdn-priority.js\";\nimport { setupAirPlay } from \"../../behaviors/dom/airplay.js\";\nimport { applyStartPosition } from \"../../behaviors/dom/apply-start-position.js\";\nimport { endOfStream } from \"../../behaviors/dom/end-of-stream.js\";\nimport { recoverEndStall } from \"../../behaviors/dom/recover-end-stall.js\";\nimport { setupAudioBufferActors } from \"../../behaviors/dom/setup-buffer-actors.js\";\nimport { setupMediaSource } from \"../../behaviors/dom/setup-mediasource.js\";\nimport { updateMediaSourceDuration } from \"../../behaviors/dom/update-mediasource-duration.js\";\nimport { resolvePresentation } from \"../../behaviors/resolve-presentation.js\";\nimport { resolveAudioTrack } from \"../../behaviors/resolve-track.js\";\nimport { setupFailoverMonitor } from \"../../behaviors/setup-failover-monitor.js\";\nimport { syncPreload } from \"../../behaviors/sync-preload.js\";\nimport { switchAudioTrack } from \"../../behaviors/track-switching.js\";\nimport { relocationPipelinesFor } from \"../../primitives/relocation-pipelines.js\";\nimport { reportUnsupportedTrackConditions } from \"../../primitives/report-track-conditions.js\";\n//#region src/playback/engines/hls/engine-audio-only.ts\nconst shareSignals = makeShareSignals([\"userAudioTrackSelection\", \"disableRemotePlayback\"]);\n/**\n* Create an audio-only HLS playback engine.\n*\n* Subtractive composition variant of `createHlsVideoEngine`: omits\n* video-side behaviors (`resolveVideoTrack`, `switchVideoTrack`,\n* `setupVideoBufferActors`, `loadVideoSegments`) and text-track behaviors\n* (`switchTextTrack`, `resolveTextTrack`, `syncTextTracks`,\n* `setupTextTrackActors`, `loadTextTrackSegments`). The remaining audio\n* pipeline composes unchanged.\n*\n* Handles both truly audio-only HLS sources (no video stream-inf) and\n* mixed-AV HLS sources where the audio rendition is selected and video /\n* subtitle renditions are ignored at composition time. The variant decision\n* is encoded by adapter choice; this engine does not branch on source\n* shape.\n*\n* @example\n* ```ts\n* let signals: HlsAudioEngineSignals;\n* const engine = createHlsAudioEngine({\n* preferredAudioLanguage: 'en',\n* onSignalsReady: (refs) => {\n* signals = refs;\n* },\n* });\n*\n* signals.context.mediaElement.set(audioEl);\n* signals.state.presentation.set({ url: 'https://example.com/stream.m3u8' });\n* ```\n*/\nfunction createHlsAudioEngine(config = {}) {\n\tconst deriveStartMediaTime = config.deriveStartMediaTime ?? deriveSharedMinStartMediaTime;\n\tconst finalConfig = {\n\t\t...config,\n\t\tderiveStartMediaTime,\n\t\tattachMediaSource: attachMediaSourceAsSourceElement,\n\t\tcanPlayTrack: config.canPlayTrack ?? canPlayTrack,\n\t\treportUnsupportedTrackConditions: config.reportUnsupportedTrackConditions ?? reportUnsupportedTrackConditions,\n\t\tresolveDuration: config.resolveDuration ?? getResolvedSelectedTrackDuration,\n\t\tparsePresentation: config.parsePresentation ?? parseMultivariantPlaylist,\n\t\taudioMessagePipelines: relocationPipelinesFor(\"audio\", deriveStartMediaTime)\n\t};\n\treturn createComposition([\n\t\tsyncPreload,\n\t\ttrackLoadTriggers,\n\t\tresolvePresentation,\n\t\tderiveCdnPriority,\n\t\tsetupFailoverMonitor,\n\t\tcollectErrors,\n\t\tswitchAudioTrack,\n\t\tresolveAudioTrack,\n\t\tcalculatePresentationDuration,\n\t\tsetupMediaSource,\n\t\tupdateMediaSourceDuration,\n\t\testablishStartMediaTime,\n\t\tsetupAudioBufferActors,\n\t\tsetupAirPlay,\n\t\ttrackCurrentTime,\n\t\tapplyStartPosition,\n\t\tloadAudioSegments,\n\t\tendOfStream,\n\t\trecoverEndStall,\n\t\tshareSignals\n\t], { config: finalConfig });\n}\n//#endregion\nexport { createHlsAudioEngine };\n\n//# sourceMappingURL=engine-audio-only.js.map","import { effect } from \"../../../core/signals/effect.js\";\nimport { SVTA_NO_SUPPORTED_AUDIO_TRACK, SVTA_UNSUPPORTED_PLAYBACK_FEATURE } from \"../../../media/errors.js\";\nimport { createHlsAudioEngine } from \"../../engines/hls/engine-audio-only.js\";\nimport { UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE } from \"../../primitives/error-messages.js\";\nimport { firstFatal, hasUnsupportedFeatureCause, withAlternativeMediaSuggestion } from \"../hls-video/error-surface.js\";\n//#region src/playback/adapters/hls-audio/adapter.ts\nconst hlsAudioMediaDefaultProps = {\n\tsrc: \"\",\n\tpreload: \"\",\n\tdisableRemotePlayback: false\n};\n/**\n* Which reported conditions this composition treats as fatal. Only the audio\n* verdict: an audio-only engine composes no video selection, so\n* `SVTA_NO_SUPPORTED_VIDEO_TRACK` is never reported and surfacing it would\n* describe a track type this media doesn't have.\n*/\nconst FATAL_SVTA_CODES = /* @__PURE__ */ new Set([SVTA_NO_SUPPORTED_AUDIO_TRACK]);\n/**\n* Mixin that adds SPF audio-only HLS playback to any base class.\n*\n* @fires error - Fired when a fatal condition is reported. Read `error` for it.\n*\n* Parallel to `HlsVideoMediaMixin` with one substantive difference: the\n* underlying engine is the audio-only variant (`createHlsAudioEngine`),\n* which omits video and text-track behaviors. The src / preload /\n* disableRemotePlayback / play() contract per the WHATWG HTML spec is identical\n* to the default adapter.\n*\n* Selecting this adapter is the variant decision: instantiating\n* `HlsAudioMediaElement` opts the consumer into audio-only\n* delivery even when the source is a mixed-AV HLS manifest.\n*\n* @example\n* class HlsAudioMedia extends HlsAudioMediaMixin(HTMLVideoElementHost) {}\n*\n* const media = new HlsAudioMedia();\n* media.attach(document.querySelector('video'));\n* media.src = 'https://stream.mux.com/abc123.m3u8';\n*/\nfunction HlsAudioMediaMixin(BaseClass) {\n\tclass HlsAudioMediaImpl extends BaseClass {\n\t\t/**\n\t\t* A complete sentence naming the Media to reach for when this one can't play\n\t\t* a source. Appended to the copy this adapter logs.\n\t\t*\n\t\t* Empty here, and overridden the same way as on the video adapter — see its\n\t\t* note. `hls-audio` has no better-equipped sibling of its own; the\n\t\t* Mux audio Media built on this engine does, and points at the hls.js-backed\n\t\t* one.\n\t\t*/\n\t\tstatic get alternativeMediaSuggestion() {}\n\t\t#engine;\n\t\t#config;\n\t\t#signals;\n\t\t#preload = hlsAudioMediaDefaultProps.preload;\n\t\t#disableRemotePlayback = hlsAudioMediaDefaultProps.disableRemotePlayback;\n\t\t#error = null;\n\t\t/** Reported condition currently surfaced — see the video adapter's note. */\n\t\t#reportedCode = null;\n\t\t#stopErrorSync;\n\t\t/** Pending loadstart listener from a deferred play() retry, if any. */\n\t\t#loadstartListener = null;\n\t\tconstructor(...args) {\n\t\t\tsuper(...args);\n\t\t\tconst { config } = args?.[0] ?? {};\n\t\t\tthis.#config = config;\n\t\t\tthis.#engine = this.#createEngine();\n\t\t\tthis.#stopErrorSync = effect(() => {\n\t\t\t\tconst errors = this.#signals.state.errors.get();\n\t\t\t\tthis.#setError(firstFatal(errors, FATAL_SVTA_CODES), errors);\n\t\t\t});\n\t\t}\n\t\t/**\n\t\t* The current fatal error, or `null`. Only *fatal* conditions appear here —\n\t\t* the engine reports non-fatal ones too, which stay in `engine.state.errors`.\n\t\t* Resets per source. Fires `'error'` when set.\n\t\t*/\n\t\tget error() {\n\t\t\treturn this.#error;\n\t\t}\n\t\t#setError(reported, errors) {\n\t\t\tif (!reported) {\n\t\t\t\tthis.#error = null;\n\t\t\t\tthis.#reportedCode = null;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (this.#reportedCode === reported.code) return;\n\t\t\tthis.#reportedCode = reported.code;\n\t\t\tconst unsupported = hasUnsupportedFeatureCause(errors);\n\t\t\tif (unsupported) console.error(this.#withSuggestion(UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE), { conditions: errors });\n\t\t\tthis.#error = {\n\t\t\t\tcode: unsupported ? SVTA_UNSUPPORTED_PLAYBACK_FEATURE : reported.code,\n\t\t\t\tmessage: reported.message ?? \"\",\n\t\t\t\t...reported.data === void 0 ? {} : { data: reported.data }\n\t\t\t};\n\t\t\tthis.dispatchEvent?.(new Event(\"error\"));\n\t\t}\n\t\t/**\n\t\t* Underlying playback engine — the low-level SPF reactive composition that\n\t\t* drives playback. An advanced escape hatch for direct engine access;\n\t\t* normal playback is driven through this element's own properties and\n\t\t* methods.\n\t\t*/\n\t\tget engine() {\n\t\t\treturn this.#engine;\n\t\t}\n\t\tattach(mediaElement) {\n\t\t\tsuper.attach?.(mediaElement);\n\t\t\tthis.#signals.context.mediaElement.set(mediaElement);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#cancelPendingPlay();\n\t\t\tthis.#signals.context.mediaElement.set(void 0);\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#cancelPendingPlay();\n\t\t\tthis.#stopErrorSync();\n\t\t\tthis.#engine.destroy();\n\t\t}\n\t\t/** Preload type (`'none'` / `'metadata'` / `'auto'`). */\n\t\tget preload() {\n\t\t\treturn this.#preload;\n\t\t}\n\t\tset preload(value) {\n\t\t\tthis.#preload = value;\n\t\t\tif (value) this.#signals.state.preload.set(value);\n\t\t}\n\t\tget disableRemotePlayback() {\n\t\t\treturn this.#disableRemotePlayback;\n\t\t}\n\t\tset disableRemotePlayback(value) {\n\t\t\tthis.#disableRemotePlayback = value;\n\t\t\tthis.#signals.state.disableRemotePlayback.set(value);\n\t\t}\n\t\tget src() {\n\t\t\treturn this.#signals.state.presentation.get()?.url ?? \"\";\n\t\t}\n\t\tset src(value) {\n\t\t\tif (value === this.src) return;\n\t\t\tthis.#cancelPendingPlay();\n\t\t\tthis.#signals.state.presentation.set(value ? { url: value } : void 0);\n\t\t}\n\t\tplay() {\n\t\t\tconst mediaElement = this.#signals.context.mediaElement.get();\n\t\t\tif (!mediaElement) return Promise.reject(/* @__PURE__ */ new Error(\"HlsAudioMediaElement: no media element attached\"));\n\t\t\tthis.#signals.state.loadActivated.set(true);\n\t\t\treturn mediaElement.play().catch((err) => {\n\t\t\t\tif (this.src) return new Promise((resolve, reject) => {\n\t\t\t\t\tconst listener = () => {\n\t\t\t\t\t\tthis.#loadstartListener = null;\n\t\t\t\t\t\tmediaElement.play().then(resolve, reject);\n\t\t\t\t\t};\n\t\t\t\t\tthis.#loadstartListener = listener;\n\t\t\t\t\tmediaElement.addEventListener(\"loadstart\", listener, { once: true });\n\t\t\t\t});\n\t\t\t\tthrow err;\n\t\t\t});\n\t\t}\n\t\t/** `message`, plus the alternative-Media sentence when this class names one. */\n\t\t#withSuggestion(message) {\n\t\t\treturn withAlternativeMediaSuggestion(message, this);\n\t\t}\n\t\t#createEngine() {\n\t\t\treturn createHlsAudioEngine({\n\t\t\t\t...this.#config,\n\t\t\t\tonSignalsReady: (signals) => {\n\t\t\t\t\tthis.#signals = signals;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t#cancelPendingPlay() {\n\t\t\tif (!this.#loadstartListener) return;\n\t\t\tthis.#signals.context.mediaElement.get()?.removeEventListener(\"loadstart\", this.#loadstartListener);\n\t\t\tthis.#loadstartListener = null;\n\t\t}\n\t}\n\treturn HlsAudioMediaImpl;\n}\n/** Standalone SPF audio-only media adapter with no base class. */\nvar HlsAudioMediaElement = class extends HlsAudioMediaMixin(class {}) {};\n//#endregion\nexport { HlsAudioMediaElement, HlsAudioMediaMixin, hlsAudioMediaDefaultProps };\n\n//# sourceMappingURL=adapter.js.map","import { HTMLMediaElementHost } from \"../media-host/media-host.js\";\n//#region src/dom/audio-host/audio-host.ts\nvar HTMLAudioElementHost = class extends HTMLMediaElementHost {};\n//#endregion\nexport { HTMLAudioElementHost };\n\n//# sourceMappingURL=audio-host.js.map","import { HlsAudioMediaMixin } from \"./adapter.js\";\nimport { HTMLAudioElementHost } from \"@videojs/media/dom/audio-host\";\n//#region src/playback/adapters/hls-audio/media.ts\nconst HlsAudioMediaBase = HlsAudioMediaMixin(HTMLAudioElementHost);\nvar HlsAudioMedia = class extends HlsAudioMediaBase {};\n//#endregion\nexport { HlsAudioMedia };\n\n//# sourceMappingURL=media.js.map"],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t as shallowEqual } from "./shallow-equal-C7S8rj2f.js";
|
|
1
2
|
import { t as HlsJsMedia } from "./media-BavrGKqa.js";
|
|
2
3
|
import { a as createMuxVideoURL, i as createMuxStoryboardURL, n as createMuxPosterURL, o as parseMuxVideoURL, r as createMuxQuery, s as parseJwt, t as MUX_VIDEO_DOMAIN } from "./source-BWMOkdJ6.js";
|
|
3
4
|
|
|
@@ -43,9 +44,11 @@ const muxMediaDefaultProps = {
|
|
|
43
44
|
};
|
|
44
45
|
/**
|
|
45
46
|
* @fires sourcechange - Fired when `source` changes, either directly or by parsing a new `src`. Read `source` for the new value.
|
|
47
|
+
* @fires contentdatachange - Fired when the derived `contentData` changes. Read `contentData` for the new value.
|
|
46
48
|
*/
|
|
47
49
|
var MuxMedia = class extends HlsJsMedia {
|
|
48
50
|
#source = muxMediaDefaultProps.source;
|
|
51
|
+
#contentData = {};
|
|
49
52
|
/**
|
|
50
53
|
* Media source URL. Setting a Mux stream URL
|
|
51
54
|
* (`https://stream.mux.com/<playback-id>.m3u8?...`) extracts the playback ID
|
|
@@ -96,11 +99,13 @@ var MuxMedia = class extends HlsJsMedia {
|
|
|
96
99
|
const source = value ?? null;
|
|
97
100
|
if (source === this.#source) return;
|
|
98
101
|
this.#source = source;
|
|
102
|
+
const contentDataChanged = this.#refreshContentData();
|
|
99
103
|
super.source = source && {
|
|
100
104
|
...source,
|
|
101
105
|
src: createMuxVideoURL(source) ?? source.src ?? "",
|
|
102
106
|
...withMuxDrm(source)
|
|
103
107
|
};
|
|
108
|
+
if (contentDataChanged) this.dispatchEvent(new Event("contentdatachange"));
|
|
104
109
|
}
|
|
105
110
|
/**
|
|
106
111
|
* Image URLs `source` describes rather than plays: `poster` from its `poster`
|
|
@@ -108,17 +113,25 @@ var MuxMedia = class extends HlsJsMedia {
|
|
|
108
113
|
* URL can't be built — no playback ID, or signed playback without a matching
|
|
109
114
|
* image token.
|
|
110
115
|
*
|
|
111
|
-
*
|
|
112
|
-
*
|
|
116
|
+
* Derived from `source` and nothing else. The same object is handed back
|
|
117
|
+
* until one of those URLs changes, and `contentdatachange` announces it when
|
|
118
|
+
* it does. Nothing here is applied for you, apart from the thumbnail track
|
|
113
119
|
* `<mux-video>` adds from `storyboard` (and drops for live streams).
|
|
114
120
|
*/
|
|
115
121
|
get contentData() {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
return this.#contentData;
|
|
123
|
+
}
|
|
124
|
+
/** Rebuild the derived bag, reporting whether anything about it changed. */
|
|
125
|
+
#refreshContentData() {
|
|
126
|
+
const poster = createMuxPosterURL(this.#source);
|
|
127
|
+
const storyboard = createMuxStoryboardURL(this.#source);
|
|
128
|
+
const next = {
|
|
119
129
|
...poster && { poster },
|
|
120
130
|
...storyboard && { storyboard }
|
|
121
131
|
};
|
|
132
|
+
if (shallowEqual(this.#contentData, next)) return false;
|
|
133
|
+
this.#contentData = next;
|
|
134
|
+
return true;
|
|
122
135
|
}
|
|
123
136
|
};
|
|
124
137
|
/**
|
|
@@ -141,4 +154,4 @@ function withMuxDrm(source) {
|
|
|
141
154
|
|
|
142
155
|
//#endregion
|
|
143
156
|
export { MuxMedia as t };
|
|
144
|
-
//# sourceMappingURL=media-
|
|
157
|
+
//# sourceMappingURL=media-BNuI0Im7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-BNuI0Im7.js","names":["#source","#refreshContentData","#contentData"],"sources":["../../media/dist/dev/dom/mux/drm.js","../../media/dist/dev/dom/mux/media.js"],"sourcesContent":["import { MUX_VIDEO_DOMAIN, createMuxQuery } from \"./source/source.js\";\nimport { parseJwt } from \"@videojs/utils/jwt\";\n//#region src/dom/mux/drm.ts\n/**\n* Build the license servers a source describes, keyed by EME key system id —\n* `source.drm` as any other source would name it. Mux signs one license token\n* per playback ID and serves every system from a URL derived from it, so\n* `drm.token` is all a caller provides.\n*\n* Returns `undefined` when no license token is present, or when the token is\n* not scoped to DRM — an unsigned license request is always rejected, so there\n* is nothing useful to configure.\n*\n* Separate from `./source` because it is the one part of the Mux source an\n* engine that licenses differently — or, like SPF today, doesn't license at\n* all — has nothing to do with.\n*\n* @internal\n*/\nfunction createMuxDrmSystems(source) {\n\tif (!source?.playbackId) return void 0;\n\tconst { playbackId, customDomain = MUX_VIDEO_DOMAIN, drm } = source;\n\tconst { token } = drm ?? {};\n\tif (!token || parseJwt(token)?.aud !== \"d\") return void 0;\n\tconst query = createMuxQuery({ token });\n\tconst url = (path) => `https://license.${customDomain}/${path}/${playbackId}${query}`;\n\treturn {\n\t\t\"com.apple.fps\": {\n\t\t\tlicenseUrl: url(\"license/fairplay\"),\n\t\t\tserverCertificateUrl: url(\"appcert/fairplay\")\n\t\t},\n\t\t\"com.widevine.alpha\": { licenseUrl: url(\"license/widevine\") },\n\t\t\"com.microsoft.playready\": { licenseUrl: url(\"license/playready\") }\n\t};\n}\n//#endregion\nexport { createMuxDrmSystems };\n\n//# sourceMappingURL=drm.js.map","import { HlsJsMedia } from \"../hls-js/media.js\";\nimport { createMuxPosterURL, createMuxStoryboardURL, createMuxVideoURL, parseMuxVideoURL } from \"./source/source.js\";\nimport { createMuxDrmSystems } from \"./drm.js\";\nimport { shallowEqual } from \"@videojs/utils/object\";\n//#region src/dom/mux/media.ts\nconst muxMediaDefaultProps = {\n\tsrc: \"\",\n\tsource: null\n};\n/**\n* @fires sourcechange - Fired when `source` changes, either directly or by parsing a new `src`. Read `source` for the new value.\n* @fires contentdatachange - Fired when the derived `contentData` changes. Read `contentData` for the new value.\n*/\nvar MuxMedia = class extends HlsJsMedia {\n\t#source = muxMediaDefaultProps.source;\n\t#contentData = {};\n\t/**\n\t* Media source URL. Setting a Mux stream URL\n\t* (`https://stream.mux.com/<playback-id>.m3u8?...`) extracts the playback ID\n\t* and query params into `source`; other URLs are kept as a plain `source.src`.\n\t*\n\t* Only playback options carry over. Mux identity comes from the URL, and the\n\t* signed `poster`, `storyboard`, and `drm` tokens are scoped to a playback ID,\n\t* so carrying them onto a different source would build rejected URLs.\n\t*/\n\tget src() {\n\t\treturn super.src;\n\t}\n\tset src(value) {\n\t\tif (super.src === value) return;\n\t\tconst { type, preferPlayback, engine, maxAutoResolution, capRenditionToPlayerSize, minAutoResolution } = this.#source ?? {};\n\t\tconst source = {\n\t\t\t...type && { type },\n\t\t\t...preferPlayback && { preferPlayback },\n\t\t\t...engine && { engine },\n\t\t\t...maxAutoResolution && { maxAutoResolution },\n\t\t\t...capRenditionToPlayerSize !== void 0 && { capRenditionToPlayerSize },\n\t\t\t...minAutoResolution && { minAutoResolution },\n\t\t\t...parseMuxVideoURL(value) ?? (value ? { src: value } : null)\n\t\t};\n\t\tthis.source = Object.keys(source).length > 0 ? source : null;\n\t}\n\t/**\n\t* Structured Mux source. Setting it derives `src` from the playback ID,\n\t* custom domain, and `playback` params (appended as `snake_case` query\n\t* params). A `playback.token` replaces all other params — signed URLs bake\n\t* them into the token. Engine options live under `engine`.\n\t*\n\t* A `drm.token` fills in `drm` itself: Mux's FairPlay, Widevine, and\n\t* PlayReady license servers for this playback ID, so protected media plays\n\t* whichever path the browser takes. License servers named alongside the token\n\t* win, key by key, for content Mux does not license.\n\t*\n\t* `playback.maxResolution` and `playback.minResolution` are server-side: they\n\t* decide which renditions Mux puts in the manifest at all. The inherited\n\t* `maxAutoResolution` and `minAutoResolution` only look like their pair —\n\t* those are client-side and bound which of the renditions that *do* arrive\n\t* adaptive selection reaches for. The two halves are independent.\n\t*/\n\tget source() {\n\t\treturn this.#source;\n\t}\n\tset source(value) {\n\t\tconst source = value ?? null;\n\t\tif (source === this.#source) return;\n\t\tthis.#source = source;\n\t\tconst contentDataChanged = this.#refreshContentData();\n\t\tsuper.source = source && {\n\t\t\t...source,\n\t\t\tsrc: createMuxVideoURL(source) ?? source.src ?? \"\",\n\t\t\t...withMuxDrm(source)\n\t\t};\n\t\tif (contentDataChanged) this.dispatchEvent(new Event(\"contentdatachange\"));\n\t}\n\t/**\n\t* Image URLs `source` describes rather than plays: `poster` from its `poster`\n\t* params, `storyboard` from its `storyboard` params. A key is absent when the\n\t* URL can't be built — no playback ID, or signed playback without a matching\n\t* image token.\n\t*\n\t* Derived from `source` and nothing else. The same object is handed back\n\t* until one of those URLs changes, and `contentdatachange` announces it when\n\t* it does. Nothing here is applied for you, apart from the thumbnail track\n\t* `<mux-video>` adds from `storyboard` (and drops for live streams).\n\t*/\n\tget contentData() {\n\t\treturn this.#contentData;\n\t}\n\t/** Rebuild the derived bag, reporting whether anything about it changed. */\n\t#refreshContentData() {\n\t\tconst poster = createMuxPosterURL(this.#source);\n\t\tconst storyboard = createMuxStoryboardURL(this.#source);\n\t\tconst next = {\n\t\t\t...poster && { poster },\n\t\t\t...storyboard && { storyboard }\n\t\t};\n\t\tif (shallowEqual(this.#contentData, next)) return false;\n\t\tthis.#contentData = next;\n\t\treturn true;\n\t}\n};\n/**\n* Resolve Mux's DRM authoring input into the license servers the HLS layer\n* licenses from. Which engine ends up playing is decided later, and both read\n* `drm`, so a signed Mux source plays either way.\n*\n* `token` is Mux's own input and stops here — it names no license server, and a\n* key system is what everything downstream expects to find. Servers the caller\n* named win, key by key, so their own licensing replaces the derived URLs.\n*/\nfunction withMuxDrm(source) {\n\tconst { token: _token, ...systems } = source.drm ?? {};\n\tconst drm = {\n\t\t...createMuxDrmSystems(source),\n\t\t...systems\n\t};\n\treturn { drm: Object.keys(drm).length > 0 ? drm : void 0 };\n}\n//#endregion\nexport { MuxMedia, muxMediaDefaultProps };\n\n//# sourceMappingURL=media.js.map"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAmBA,SAAS,oBAAoB,QAAQ;CACpC,IAAI,CAAC,QAAQ,YAAY,OAAO,KAAK;CACrC,MAAM,EAAE,YAAY,eAAe,kBAAkB,QAAQ;CAC7D,MAAM,EAAE,UAAU,OAAO,CAAC;CAC1B,IAAI,CAAC,SAAS,SAAS,KAAK,CAAC,EAAE,QAAQ,KAAK,OAAO,KAAK;CACxD,MAAM,QAAQ,eAAe,EAAE,MAAM,CAAC;CACtC,MAAM,OAAO,SAAS,mBAAmB,aAAa,GAAG,KAAK,GAAG,aAAa;CAC9E,OAAO;EACN,iBAAiB;GAChB,YAAY,IAAI,kBAAkB;GAClC,sBAAsB,IAAI,kBAAkB;EAC7C;EACA,sBAAsB,EAAE,YAAY,IAAI,kBAAkB,EAAE;EAC5D,2BAA2B,EAAE,YAAY,IAAI,mBAAmB,EAAE;CACnE;AACD;;;;AC7BA,MAAM,uBAAuB;CAC5B,KAAK;CACL,QAAQ;AACT;;;;;AAKA,IAAI,WAAW,cAAc,WAAW;CACvC,UAAU,qBAAqB;CAC/B,eAAe,CAAC;;;;;;;;;;CAUhB,IAAI,MAAM;EACT,OAAO,MAAM;CACd;CACA,IAAI,IAAI,OAAO;EACd,IAAI,MAAM,QAAQ,OAAO;EACzB,MAAM,EAAE,MAAM,gBAAgB,QAAQ,mBAAmB,0BAA0B,sBAAsB,KAAKA,WAAW,CAAC;EAC1H,MAAM,SAAS;GACd,GAAG,QAAQ,EAAE,KAAK;GAClB,GAAG,kBAAkB,EAAE,eAAe;GACtC,GAAG,UAAU,EAAE,OAAO;GACtB,GAAG,qBAAqB,EAAE,kBAAkB;GAC5C,GAAG,6BAA6B,KAAK,KAAK,EAAE,yBAAyB;GACrE,GAAG,qBAAqB,EAAE,kBAAkB;GAC5C,GAAG,iBAAiB,KAAK,MAAM,QAAQ,EAAE,KAAK,MAAM,IAAI;EACzD;EACA,KAAK,SAAS,OAAO,KAAK,MAAM,CAAC,CAAC,SAAS,IAAI,SAAS;CACzD;;;;;;;;;;;;;;;;;;CAkBA,IAAI,SAAS;EACZ,OAAO,KAAKA;CACb;CACA,IAAI,OAAO,OAAO;EACjB,MAAM,SAAS,SAAS;EACxB,IAAI,WAAW,KAAKA,SAAS;EAC7B,KAAKA,UAAU;EACf,MAAM,qBAAqB,KAAKC,oBAAoB;EACpD,MAAM,SAAS,UAAU;GACxB,GAAG;GACH,KAAK,kBAAkB,MAAM,KAAK,OAAO,OAAO;GAChD,GAAG,WAAW,MAAM;EACrB;EACA,IAAI,oBAAoB,KAAK,cAAc,IAAI,MAAM,mBAAmB,CAAC;CAC1E;;;;;;;;;;;;CAYA,IAAI,cAAc;EACjB,OAAO,KAAKC;CACb;;CAEA,sBAAsB;EACrB,MAAM,SAAS,mBAAmB,KAAKF,OAAO;EAC9C,MAAM,aAAa,uBAAuB,KAAKA,OAAO;EACtD,MAAM,OAAO;GACZ,GAAG,UAAU,EAAE,OAAO;GACtB,GAAG,cAAc,EAAE,WAAW;EAC/B;EACA,IAAI,aAAa,KAAKE,cAAc,IAAI,GAAG,OAAO;EAClD,KAAKA,eAAe;EACpB,OAAO;CACR;AACD;;;;;;;;;;AAUA,SAAS,WAAW,QAAQ;CAC3B,MAAM,EAAE,OAAO,QAAQ,GAAG,YAAY,OAAO,OAAO,CAAC;CACrD,MAAM,MAAM;EACX,GAAG,oBAAoB,MAAM;EAC7B,GAAG;CACJ;CACA,OAAO,EAAE,KAAK,OAAO,KAAK,GAAG,CAAC,CAAC,SAAS,IAAI,MAAM,KAAK,EAAE;AAC1D"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{t as e}from"./listen-4VrUltMW.js";import{n as t}from"./text-track-CG8USvNG.js";import{$ as n,A as r,C as i,E as a,G as o,H as s,J as c,K as l,P as u,Q as d,R as f,T as p,U as ee,V as m,W as te,Y as ne,a as re,at as h,b as ie,bt as g,c as ae,ct as oe,dt as _,et as se,ft as v,gt as ce,ht as le,i as ue,it as y,j as de,k as fe,lt as pe,mt as me,n as he,nt as ge,ot as b,pt as x,q as _e,r as ve,rt as S,s as ye,st as be,t as xe,tt as Se,ut as Ce,v as we,vt as C,w,x as T,y as E}from"./error-surface-BID4D3DW.js";import{t as D}from"./types-CtRpsVFF.js";import{t as O}from"./mixin-BqN0V06a.js";import{t as k}from"./video-host-DIjP224l.js";import{a as Te,c as Ee,d as De,f as Oe,g as ke,h as Ae,i as je,l as Me,m as Ne,n as A,o as Pe,p as Fe,r as Ie,s as Le,t as Re,u as ze}from"./relocation-pipelines-DunE4gcV.js";function Be(e,t){return new Promise((n,r)=>{if(t?.aborted){r(t.reason);return}let i=()=>{clearTimeout(a),r(t?.reason)},a=setTimeout(()=>{t?.removeEventListener(`abort`,i),n()},e);t?.addEventListener(`abort`,i,{once:!0})})}function j(e){return`${S(e)?.mediaSequence??0}:${e.segments.length}`}function M(e){return S(e)?.targetDuration||6}function Ve(e,t){if(Number.isFinite(e.duration))return null;let n=M(e);return(!t||j(e)!==j(t)?n:n/2)*1e3}function He(e){return S(e)?.holdBack??3*M(e)}function N(e,t){if(!y(e)||!t)return 0;let n=d(e,t);return n&&h(n)?He(n):0}function P(e,t){if(!y(e)||!t)return null;let n=d(e,t);if(!n||!h(n)||n.segments.length===0||Number.isFinite(n.duration))return null;let{segments:r}=n,i=r[r.length-1];return{start:r[0].startTime,end:i.startTime+i.duration}}function F(e){return e.selectedVideoTrackId?.get()??e.selectedAudioTrackId?.get()}function I(e,t,r){if(!e||t===void 0)return null;let i=P(e,t);if(i)return i;for(let t of n(e,r)){let n=P(e,t.id);if(n)return n}return null}function L(e){let t=e.presentation.get(),n=I(t,e.selectedVideoTrackId?.get(),`video`),r=I(t,e.selectedAudioTrackId?.get(),`audio`);if(n&&r){let e=Math.max(n.start,r.start),t=Math.min(n.end,r.end);return e<t?{start:e,end:t}:null}return n??r}function R({state:e,config:t}){let n=L(e);if(!n)return null;let r=t?.resolveLiveLatency?.(e.presentation.get(),F(e))??0;return{...n,liveEdgeStart:Math.max(n.start,n.end-r)}}let z=null;function Ue(){return z||(z=document.createElement(`video`),z.muted=!0,z.preload=`none`,z.style.display=`none`,z.crossOrigin=`anonymous`),z}function We(e){let t=Ue(),n=document.createElement(`track`);return n.kind=`subtitles`,new Promise((r,i)=>{let a=()=>{let e=[],t=n.track;if(t.cues)for(let n=0;n<t.cues.length;n++){let r=t.cues[n];r&&e.push(r)}s(),r(e)},o=()=>{s(),i(Error(`Failed to load VTT segment: ${e}`))},s=()=>{n.removeEventListener(`load`,a),n.removeEventListener(`error`,o),t.removeChild(n)};n.addEventListener(`load`,a),n.addEventListener(`error`,o),t.appendChild(n),n.track.mode=`hidden`,n.src=e})}function Ge(e,t){let{snapshotSignal:n,getState:r,transition:i}=be({value:`active`,context:e}),a=()=>x(()=>n.get().context),o=e=>me(n,{context:e});return{get snapshot(){return n},send(e){if(r()===`destroyed`)return;let n=a(),i=t(n,e);i!==n&&o(i)},destroy(){r()!==`destroyed`&&i(`destroyed`)}}}function B(e,t){return t.some(t=>t.startTime===e.startTime&&t.endTime===e.endTime&&t.text===e.text)}function Ke(e){return Ge({loaded:{},segments:{}},(t,n)=>{if(n.type===`clear`)return{loaded:{},segments:{}};let{meta:r,cues:i}=n,{trackId:a,id:o,startTime:s,duration:c}=r,l=Array.from(e.textTracks).find(e=>e.id===a);if(!l)return t;let u=t.loaded[a]??[],d=t.segments[a]??[],f=i.filter(e=>!B(e,u)),p=d.some(e=>e.id===o);if(f.length===0&&p)return t;for(let e of f)l.addCue(e);return{...t,loaded:{...t.loaded,[a]:[...u,...f]},segments:p?t.segments:{...t.segments,[a]:[...d,{id:o,startTime:s,duration:c}]}}})}function qe(e,t,n={},i={state:{},context:{},config:{}}){let a={...se,...n.forwardBuffer},o={state:i.state,context:i.context,config:{...i.config,textTracksActor:e,resolveSegment:t}},s=(n.messagePipelines??Ie)(),c=t=>{let{track:n,range:r}=t;if(!r)return[];let i=n.id,o=v(e.snapshot).context.segments[i]??[];return Se(n.segments,o,r.start,a).map(e=>({segment:e,trackId:i}))},l=(e,{getContext:t,setContext:n})=>new de(async r=>{if(r.aborted)return;let i={op:e};n({...t(),inFlightTrackId:e.trackId,inFlightSegmentId:e.segment.id});try{for(let e of s){if(r.aborted)return;await e(i,r,o)}}catch(e){console.error(`Failed to load text-track segment:`,e)}finally{n({...t(),inFlightTrackId:null,inFlightSegmentId:null})}}),u=(e,t)=>{for(let n of e)t.runner.schedule(l(n,t)).then(void 0,e=>{e instanceof Error&&e.name===`AbortError`||(console.error(`Unexpected error in text-track segment loader:`,e),t.runner.abortPending())})};return fe({runner:()=>new r,initial:`idle`,context:{inFlightTrackId:null,inFlightSegmentId:null},states:{idle:{on:{load:(e,t)=>{let n=c(e);n.length!==0&&(t.transition(`loading`),u(n,t))}}},loading:{onSettled:`idle`,on:{load:(e,t)=>{let{context:n,runner:r}=t,i=c(e);n.inFlightTrackId!==null&&n.inFlightSegmentId!==null&&i.some(e=>e.trackId===n.inFlightTrackId&&e.segment.id===n.inFlightSegmentId)?(r.abortPending(),u(i.filter(e=>e.trackId!==n.inFlightTrackId||e.segment.id!==n.inFlightSegmentId),t)):(r.abortAll(),u(i,t))}}}}})}function Je({state:e,context:t,config:n}){return g(()=>{let r=t.mediaElement.get();if(!r)return;let i=Ke(r),a=qe(i,n.resolveTextTrackSegment,{forwardBuffer:n.forwardBuffer,messagePipelines:n.textMessagePipelines},{state:e,context:t,config:n});return t.textTracksActor.set(i),t.textTrackSegmentLoaderActor.set(a),()=>{i.destroy(),a.destroy(),t.textTracksActor.set(void 0),t.textTrackSegmentLoaderActor.set(void 0)}})}const Ye={stateKeys:[],contextKeys:[`mediaElement`,`textTracksActor`,`textTrackSegmentLoaderActor`],setup:Je};function Xe(e){return async t=>{let n=Date.now(),r=e(await t.run(),t.previous);return r===null?!1:(await Be(Math.max(0,r-(Date.now()-n)),t.signal),!0)}}const V=`track[data-src-track]`;function Ze(e,t){for(let n of t){let t=document.createElement(`track`);t.id=n.id,t.kind=n.kind,t.label=n.label,t.toggleAttribute(`data-src-track`,!0),n.language&&(t.srclang=n.language),e.appendChild(t)}}function Qe(e){let n=e.querySelectorAll(V);for(let e of n){let n=e.track;if(n.mode===`showing`&&t(n))return n}}function $e(e){let t=e.querySelectorAll(V);for(let e of t)e.remove()}function H(e,n){for(let r=0;r<e.length;r++){let i=e[r];t(i)&&(i.mode=i.id===n?`showing`:`disabled`)}}function et(e,t){return e&&t?`live`:`inactive`}function tt({state:t,context:n,config:r}){let i=_(()=>et(n.mediaElement.get(),R({state:t,config:r})));return b({initial:`inactive`,monitor:()=>i.get(),states:{inactive:{},live:{entry:()=>{let e=n.mediaElement.get(),{liveEdgeStart:i}=R({state:t,config:r});e.currentTime>=i||t.startPosition.set(i)},effects:()=>{let{start:i,liveEdgeStart:a}=R({state:t,config:r}),o=v(n.mediaElement),s=()=>{o.paused||o.currentTime<i-.1&&(o.currentTime=a)};return s(),e(o,`play`,s)}}}})}const nt={stateKeys:[`presentation`,`startPosition`],contextKeys:[`mediaElement`],setup:tt};function rt({state:e,context:t}){return g(()=>{let n=t.mediaSource.get(),r=L(e);!n||!r||n.setLiveSeekableRange(r.start,r.end)})}const it={stateKeys:[`presentation`],contextKeys:[`mediaSource`],setup:rt};function at(e,t){return!t||!e?`preconditions-unmet`:n(e,`text`).length>0?`sync-active`:`preconditions-unmet`}function ot(e,t){if(!e)return`off`;let n=t.find(t=>t.id===e)?.language;return n?{language:n}:{id:e}}function st({state:t,context:r,config:i}){let{addSubtitlesTracksToMedia:a,getShowingSubtitlesTrackFromMedia:o,removeAllSubtitlesTracksFromMedia:s}=i,c=_(()=>at(t.presentation.get(),r.mediaElement.get()));return b({initial:`preconditions-unmet`,monitor:()=>c.get(),states:{"preconditions-unmet":{},"sync-active":{entry:()=>{let i=r.mediaElement.get(),c=n(t.presentation.get(),`text`);a(i,c),H(i.textTracks,t.selectedTextTrackId.get());let l=!0,u=setTimeout(()=>{l=!1},0),d=e(i.textTracks,`change`,()=>{if(l){H(i.textTracks,t.selectedTextTrackId.get());return}let e=o(i)?.id||void 0;e!==t.selectedTextTrackId.get()&&t.userTextTrackSelection.set(ot(e,c))});return()=>{d(),clearTimeout(u),s(i),v(r.textTracksActor)?.send({type:`clear`})}},effects:()=>{H(v(r.mediaElement).textTracks,t.selectedTextTrackId.get())}}}})}const ct=Ce({stateKeys:[`presentation`,`selectedTextTrackId`,`userTextTrackSelection`],contextKeys:[`mediaElement`,`textTracksActor`],setup:st}),lt=oe([`userVideoTrackSelection`,`userAudioTrackSelection`,`userTextTrackSelection`,`disableRemotePlayback`]);function ut(e={}){let t=e.deriveStartMediaTime??Fe,n={...e,deriveStartMediaTime:t,attachMediaSource:o,canPlayTrack:e.canPlayTrack??te,reportUnsupportedTrackConditions:e.reportUnsupportedTrackConditions??ae,resolveTextTrackSegment:e.resolveTextTrackSegment??We,textMessagePipelines:Re,resolveDuration:e.resolveDuration??s,parsePresentation:e.parsePresentation??ee,addSubtitlesTracksToMedia:e.addSubtitlesTracksToMedia??Ze,getShowingSubtitlesTrackFromMedia:e.getShowingSubtitlesTrackFromMedia??Qe,removeAllSubtitlesTracksFromMedia:e.removeAllSubtitlesTracksFromMedia??$e,videoMessagePipelines:A(`video`,t),audioMessagePipelines:A(`audio`,t),gateFirstParse:Ae,resolveLiveLatency:N,reschedule:e.reschedule??Xe(Ve)};return pe([Le,ke,T,Oe,Ee,f,ie,we,E,m,w,i,Ne,a,p,De,l,ze,Pe,je,Te,ne,_e,it,nt,u,Me,ct,Ye,c,lt],{config:n,initialState:{bandwidthState:{fastEstimate:0,fastTotalWeight:0,slowEstimate:0,slowTotalWeight:0,bytesSampled:0}}})}const U={src:``,preload:``,disableRemotePlayback:!1,streamType:D.UNKNOWN};function dt(e,t){if(!y(e)||!t)return NaN;let n=d(e,t);if(!n||!h(n))return NaN;let r=S(n);return r?r.playlistType===`EVENT`?1/0:ge(r)===`live`?0:NaN:NaN}const ft=new Set([ce,le]);function pt(e){class t extends e{static get alternativeMediaSuggestion(){}#e;#t;#n;#r=U.preload;#i=U.disableRemotePlayback;#a=U.streamType;#o=!1;#s=NaN;#c=null;#l=null;#u=new Set;#d;#f;#p=null;constructor(...e){super(...e);let{config:t}=e?.[0]??{};this.#t=t,this.#e=this.#b(),this.#d=g(()=>{let e=this.#n.state.presentation.get();this.#m(e?.streamType??D.UNKNOWN),this.#g(dt(e,F(this.#n.state))),this.#y(e)}),this.#f=g(()=>{let e=this.#n.state.errors.get();this.#_(xe(e,ft),e)})}get engine(){return this.#e}get error(){return this.#c}get streamType(){return this.#a}set streamType(e){if(e===D.UNKNOWN){this.#o=!1,this.#h(this.#n.state.presentation.get()?.streamType??D.UNKNOWN);return}this.#o=!0,this.#h(e)}get liveEdgeStart(){return R({state:this.#n.state,config:{resolveLiveLatency:N}})?.liveEdgeStart??NaN}get targetLiveWindow(){return this.#s}#m(e){this.#o||this.#h(e)}#h(e){this.#a!==e&&(this.#a=e,this.dispatchEvent?.(new Event(`streamtypechange`)))}#g(e){Object.is(this.#s,e)||(this.#s=e,this.dispatchEvent?.(new Event(`targetlivewindowchange`)))}#_(e,t){if(!e){this.#c=null,this.#l=null;return}if(this.#l===e.code)return;this.#l=e.code;let n=he(t);n&&console.error(this.#v(ye),{conditions:t}),this.#c={code:n?C:e.code,message:e.message??``,...e.data===void 0?{}:{data:e.data}},this.dispatchEvent?.(new Event(`error`))}attach(e){super.attach?.(e),this.#n.context.mediaElement.set(e)}detach(){this.#x(),this.#n.context.mediaElement.set(void 0),super.detach?.()}destroy(){this.#x(),this.#d(),this.#f(),this.#e.destroy()}get preload(){return this.#r}set preload(e){this.#r=e,e&&this.#n.state.preload.set(e)}get disableRemotePlayback(){return this.#i}set disableRemotePlayback(e){this.#i=e,this.#n.state.disableRemotePlayback.set(e)}get src(){return this.#n.state.presentation.get()?.url??``}set src(e){e!==this.src&&(this.#x(),this.#n.state.presentation.set(e?{url:e}:void 0))}play(){let e=this.#n.context.mediaElement.get();return e?(this.#n.state.loadActivated.set(!0),e.play().catch(t=>{if(this.src)return new Promise((t,n)=>{let r=()=>{this.#p=null,e.play().then(t,n)};this.#p=r,e.addEventListener(`loadstart`,r,{once:!0})});throw t})):Promise.reject(Error(`HlsVideoMediaElement: no media element attached`))}#v(e){return ve(e,this)}#y(e){if(!y(e)){this.#u.clear();return}let t=F(this.#n.state),n=t?d(e,t):void 0;if(!n||!h(n))return;let r=S(n);r&&(r.lowLatency&&!this.#u.has(`lowLatency`)&&(this.#u.add(`lowLatency`),console.warn(this.#v(re))),r.playlistType===`EVENT`&&!this.#u.has(`dvr`)&&(this.#u.add(`dvr`),console.warn(this.#v(ue))))}#b(){return ut({...this.#t,onSignalsReady:e=>{this.#n=e}})}#x(){this.#p&&=(this.#n.context.mediaElement.get()?.removeEventListener(`loadstart`,this.#p),null)}}return t}function mt(e){return e?K({tracks:n(e,`video`),keyFn:q}):[]}function ht(e){return e?K({tracks:n(e,`audio`),keyFn:J}):[]}function W(e,t){if(!e||!t)return;let n=d(e,t);return n?.type===`video`?n:void 0}function G(e,t){if(!e||!t)return;let n=d(e,t);return n?.type===`audio`?n:void 0}function gt(e,t){for(let n in e)if(e[n]!==t[n])return!1;return!0}function K({tracks:e,keyFn:t}){let n=[],r=[];for(let i of e){let e=t(i);!e||n.some(t=>gt(t,e))||(n.push(e),r.push(i))}return r}function q(e){return e?{width:e.width,height:e.height,bandwidth:e.bandwidth}:void 0}function J(e){return e?{language:e.language,name:e.name}:void 0}function Y(e,t){return!!t&&e.width===t.width&&e.height===t.height&&e.bandwidth===t.bandwidth}function X(e,t){return!!t&&(e.language??``)===(t.language??``)&&e.name===t.name}const _t=e=>e.frameRateNumerator/(e.frameRateDenominator??1),Z=e=>({width:e.width,height:e.height,bandwidth:e.bitrate}),Q=e=>({language:e.language,name:e.label}),$=(e,t)=>e.length===t.length&&e.every((e,n)=>e.id===t[n].id);function vt(e){class t extends e{#e=new AbortController;#t=!1;#n=[];#r=[];constructor(...e){super(...e);let{state:t}=this.engine,{signal:n}=this.#e,r=_(()=>mt(t.presentation.get()),{equals:$}),i=_(()=>ht(t.presentation.get()),{equals:$}),a=()=>{let e=r.get();if(this.#n=e,this.#o(),!e.length)return;let n=this.addVideoTrack(`main`);n.selected=!0;let i=x(()=>W(t.presentation.get(),t.selectedVideoTrackId.get()));for(let t of e){let e=n.addRendition(``,t.width,t.height,t.codecs.join(`,`),t.bandwidth,t.frameRate?_t(t.frameRate):void 0);e.id=t.id,e.active=Y(Z(e),i)}},o=()=>{let e=W(t.presentation.get(),t.selectedVideoTrackId.get());for(let t of this.videoRenditions)t.active=Y(Z(t),e)},s=()=>{let e=i.get();if(this.#r=e,this.#s(),!e.length)return;let n=x(()=>G(t.presentation.get(),t.selectedAudioTrackId.get()));for(let t of e){let e=this.addAudioTrack(t.default?`main`:`alternative`,t.name,t.language??``);e.id=t.id,e.enabled=X(Q(e),n)}},c=()=>{let e=G(t.presentation.get(),t.selectedAudioTrackId.get());for(let t of this.audioTracks)t.enabled=X(Q(t),e)},l=_(()=>t.presentation.get()?.url),u=[g(a),g(o),g(s),g(c),g(()=>{l.get(),t.userVideoTrackSelection.set(void 0),t.userAudioTrackSelection.set(void 0)})];this.videoRenditions.addEventListener(`change`,this.#i,{signal:n}),this.audioTracks.addEventListener(`change`,this.#a,{signal:n}),n.addEventListener(`abort`,()=>u.forEach(e=>e()),{once:!0})}destroy(){this.#t||(this.#t=!0,this.#e.abort(),this.#o(),this.#s(),super.destroy?.())}#i=()=>{let{userVideoTrackSelection:e}=this.engine.state,t=this.videoRenditions.selectedIndex,n=t<0?void 0:this.videoRenditions[t],r=this.#n.find(e=>e.id===n?.id);e.set(q(r))};#a=()=>{let{presentation:e,selectedAudioTrackId:t,userAudioTrackSelection:n}=this.engine.state,r=G(e.get(),t.get()),i=[...this.audioTracks].find(e=>X(Q(e),r)),a=[...this.audioTracks].filter(e=>e.enabled),o=a.find(e=>e!==i)??a[0];if(!o)return;for(let e of a)e!==o&&(e.enabled=!1);if(o===i)return;let s=this.#r.find(e=>e.id===o.id);n.set(J(s))};#o(){for(let e of[...this.videoTracks])this.removeVideoTrack(e)}#s(){for(let e of[...this.audioTracks])this.removeAudioTrack(e)}}return t}const yt=vt(O(pt(k)));var bt=class extends yt{};export{bt as t};
|
|
2
|
+
//# sourceMappingURL=media-CQxFuDcv.js.map
|