export type PlaybackStatePayload = { nativeEvent: { target: number; state: "Opening" | "Buffering" | "Playing" | "Paused" | "Error"; currentTime: number; duration: number; isBuffering: boolean; isPlaying: boolean; }; }; export type ProgressUpdatePayload = { nativeEvent: { currentTime: number; duration: number; isPlaying: boolean; isBuffering: boolean; }; }; export type VideoLoadStartPayload = { nativeEvent: { target: number; }; }; export type PipStartedPayload = { nativeEvent: { pipStarted: boolean; }; }; export type VideoStateChangePayload = PlaybackStatePayload; export type VideoProgressPayload = ProgressUpdatePayload; export type VlcPlayerSource = { uri: string; type?: string; isNetwork?: boolean; autoplay?: boolean; externalSubtitles: { name: string; DeliveryUrl: string }[]; initOptions?: any[]; mediaOptions?: { [key: string]: any }; startPosition?: number; }; export type TrackInfo = { name: string; index: number; language?: string; }; export type ChapterInfo = { name: string; timeOffset: number; duration: number; }; export type VlcPlayerViewProps = { source: VlcPlayerSource; style?: Record; progressUpdateInterval?: number; paused?: boolean; muted?: boolean; volume?: number; videoAspectRatio?: string; onVideoProgress?: (event: ProgressUpdatePayload) => void; onVideoStateChange?: (event: PlaybackStatePayload) => void; onVideoLoadStart?: (event: VideoLoadStartPayload) => void; onVideoLoadEnd?: (event: VideoLoadStartPayload) => void; onVideoError?: (event: PlaybackStatePayload) => void; onPipStarted?: (event: PipStartedPayload) => void; }; export interface VlcPlayerViewRef { startPictureInPicture: () => Promise; play: () => Promise; pause: () => Promise; stop: () => Promise; seekTo: (time: number) => Promise; setAudioTrack: (trackIndex: number) => Promise; getAudioTracks: () => Promise; setSubtitleTrack: (trackIndex: number) => Promise; getSubtitleTracks: () => Promise; setSubtitleDelay: (delay: number) => Promise; setAudioDelay: (delay: number) => Promise; takeSnapshot: (path: string, width: number, height: number) => Promise; setRate: (rate: number) => Promise; nextChapter: () => Promise; previousChapter: () => Promise; getChapters: () => Promise; setVideoCropGeometry: (geometry: string | null) => Promise; getVideoCropGeometry: () => Promise; setSubtitleURL: (url: string, name: string) => Promise; }