import "@vidstack/react/player/styles/base.css"; import React, { useEffect, useRef } from "react"; import { isHLSProvider, MediaPlayer, MediaProvider, Poster, type MediaCanPlayDetail, type MediaCanPlayEvent, type MediaPlayerInstance, type MediaProviderAdapter, type MediaProviderChangeEvent, } from "@vidstack/react"; import { VideoLayout } from "./VideoLayout"; interface Props { video_url: string; thumbnailUrl?: string; } export default function VideoPlayer({ video_url, thumbnailUrl }: Props) { const player = useRef(null); useEffect(() => { // Subscribe to state updates. return player.current!.subscribe(({ paused, viewType }) => { // console.log('is paused?', '->', state.paused); // console.log('is audio view?', '->', state.viewType === 'audio'); }); }, []); function onProviderChange( provider: MediaProviderAdapter | null, nativeEvent: MediaProviderChangeEvent ) { // We can configure provider's here. if (isHLSProvider(provider)) { provider.config = {}; } } // We can listen for the `can-play` event to be notified when the player is ready. function onCanPlay( detail: MediaCanPlayDetail, nativeEvent: MediaCanPlayEvent ) { // ... } return ( {thumbnailUrl ? ( ) : null} ); }