67
common/resources/client/player/providers/html-media/use-html-media-api.ts
Executable file
67
common/resources/client/player/providers/html-media/use-html-media-api.ts
Executable file
@@ -0,0 +1,67 @@
|
||||
import {HtmlMediaInternalStateReturn} from '@common/player/providers/html-media/use-html-media-internal-state';
|
||||
import {useContext, useMemo} from 'react';
|
||||
import {PlayerStoreContext} from '@common/player/player-context';
|
||||
import {PlayerProviderApi} from '@common/player/state/player-provider-api';
|
||||
|
||||
export function useHtmlMediaApi({
|
||||
ref,
|
||||
internalState,
|
||||
toggleTextTrackModes,
|
||||
}: HtmlMediaInternalStateReturn): PlayerProviderApi {
|
||||
const store = useContext(PlayerStoreContext);
|
||||
return useMemo(
|
||||
() => ({
|
||||
play: async () => {
|
||||
try {
|
||||
await ref.current?.play();
|
||||
} catch (e) {
|
||||
store.getState().emit('error', {sourceEvent: e});
|
||||
}
|
||||
internalState.current.timeRafLoop.start();
|
||||
},
|
||||
pause: () => {
|
||||
ref.current?.pause();
|
||||
internalState.current.timeRafLoop.stop();
|
||||
},
|
||||
stop: () => {
|
||||
if (ref.current) {
|
||||
ref.current.pause();
|
||||
ref.current.currentTime = 0;
|
||||
}
|
||||
},
|
||||
seek: (time: number) => {
|
||||
if (time !== internalState.current.currentTime && ref.current) {
|
||||
ref.current.currentTime = time;
|
||||
}
|
||||
},
|
||||
setVolume: (volume: number) => {
|
||||
if (ref.current) {
|
||||
ref.current.volume = volume / 100;
|
||||
}
|
||||
},
|
||||
setMuted: (muted: boolean) => {
|
||||
if (ref.current) {
|
||||
ref.current.muted = muted;
|
||||
}
|
||||
},
|
||||
setPlaybackRate: (value: number) => {
|
||||
if (ref.current) {
|
||||
ref.current.playbackRate = value;
|
||||
}
|
||||
},
|
||||
setTextTrackVisibility: isVisible => {
|
||||
toggleTextTrackModes(store.getState().currentTextTrack, isVisible);
|
||||
},
|
||||
setCurrentTextTrack: newTrackId => {
|
||||
toggleTextTrackModes(newTrackId, store.getState().textTrackIsVisible);
|
||||
},
|
||||
getCurrentTime: () => {
|
||||
return internalState.current.currentTime;
|
||||
},
|
||||
getSrc: () => {
|
||||
return ref.current?.src;
|
||||
},
|
||||
}),
|
||||
[ref, store, internalState, toggleTextTrackModes]
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user