vidstack
Version:
Build awesome media experiences on the web.
61 lines (58 loc) • 2.09 kB
JavaScript
import { onDispose } from 'maverick.js';
import { a0 as canUseVideoPresentation, $ as canUsePictureInPicture, Y as canPlayHLSNatively, a1 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/dom';
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 {
$$PROVIDER_TYPE = "VIDEO";
get type() {
return "video";
}
fullscreen;
pictureInPicture;
constructor(video, context) {
super(video);
if (canUseVideoPresentation(video)) {
const presentation = new VideoPresentation(video, context);
this.fullscreen = new FullscreenPresentationAdapter(presentation);
this.pictureInPicture = new PIPPresentationAdapter(presentation);
} else if (canUsePictureInPicture(video)) {
this.pictureInPicture = new VideoPictureInPicture(video, context);
}
}
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 };