UNPKG

vidstack

Version:

Build awesome media experiences on the web.

59 lines (56 loc) 2.05 kB
import { onDispose } from 'maverick.js'; import { X as canUseVideoPresentation, W as canUsePictureInPicture, Y as canPlayHLSNatively, Z as ATTACH_VIDEO } from '../../media-core.js'; import { H as HTMLMediaProvider } from '../html/provider.js'; import { N as NativeHLSTextTracks } from './native-hls-text-tracks.js'; import { V as VideoPictureInPicture } from './picture-in-picture.js'; import { V as VideoPresentation, F as FullscreenPresentationAdapter, P as PIPPresentationAdapter } from './presentation/video-presentation.js'; import 'maverick.js/element'; import 'maverick.js/std'; import '../type-check.js'; import '../audio/loader.js'; import 'maverick.js/ssr'; import '../hls/loader.js'; import './loader.js'; import '../html/html–media-events.js'; import '../hls/hls.js'; import '../../media-ui.js'; import '../../icons/icon.js'; import 'media-captions'; import '../html/native-audio-tracks.js'; class VideoProvider extends HTMLMediaProvider { constructor(video, context) { super(video); this.$$PROVIDER_TYPE = "VIDEO"; if (canUseVideoPresentation()) { const presentation = new VideoPresentation(video, context); this.fullscreen = new FullscreenPresentationAdapter(presentation); this.pictureInPicture = new PIPPresentationAdapter(presentation); } else if (canUsePictureInPicture()) { this.pictureInPicture = new VideoPictureInPicture(video, context); } } get type() { return "video"; } setup(context) { super.setup(context); if (canPlayHLSNatively(this.video)) { new NativeHLSTextTracks(this.video, context); } context.textRenderers[ATTACH_VIDEO](this.video); onDispose(() => { context.textRenderers[ATTACH_VIDEO](null); }); if (this.type === "video") context.delegate._dispatch("provider-setup", { detail: this }); } /** * The native HTML `<video>` element. * * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLVideoElement} */ get video() { return this._media; } } export { VideoProvider };