forked from EXT/VR180-Web-Player
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
type VideoEventCallbacks = {
|
|
onEnded: () => void;
|
|
onPlaybackStateChange: () => void;
|
|
onTimelineChange: () => void;
|
|
onVolumeChange: () => void;
|
|
};
|
|
|
|
type BindVideoEventsOptions = VideoEventCallbacks & {
|
|
playButton: HTMLButtonElement | undefined;
|
|
video: HTMLVideoElement;
|
|
};
|
|
|
|
export function bindVideoEvents({
|
|
onEnded,
|
|
onPlaybackStateChange,
|
|
onTimelineChange,
|
|
onVolumeChange,
|
|
playButton,
|
|
video
|
|
}: BindVideoEventsOptions): void {
|
|
video.onloadedmetadata = () => {
|
|
if (isFinite(video.duration) && playButton) {
|
|
playButton.disabled = false;
|
|
}
|
|
|
|
onTimelineChange();
|
|
onPlaybackStateChange();
|
|
onVolumeChange();
|
|
};
|
|
|
|
video.oncanplaythrough = () => {
|
|
if (playButton && video.readyState >= video.HAVE_FUTURE_DATA) {
|
|
playButton.disabled = false;
|
|
}
|
|
};
|
|
|
|
video.ontimeupdate = () => {
|
|
if (isFinite(video.duration)) {
|
|
onTimelineChange();
|
|
}
|
|
};
|
|
|
|
video.onplaying = onPlaybackStateChange;
|
|
video.onpause = onPlaybackStateChange;
|
|
video.onerror = (event) => {
|
|
const videoError = video.error;
|
|
const errorDetail = videoError ? `Code: ${videoError.code}, Message: ${videoError.message}` : 'Unknown error';
|
|
console.error('VIDEO_ERROR_EVENT:', event, 'Details:', errorDetail);
|
|
if (playButton) playButton.disabled = true;
|
|
};
|
|
|
|
video.addEventListener('ended', onEnded);
|
|
video.addEventListener('volumechange', onVolumeChange);
|
|
}
|