@zezosoft/zezo-ott-react-native-video-player
Version:
Production-ready React Native OTT video player library for Android & iOS. Features: playlists, seasons, auto-next playback, subtitles (SRT/VTT), custom theming, analytics tracking, fullscreen mode, gesture controls, ads player (pre-roll/mid-roll/post-roll
70 lines (63 loc) • 1.9 kB
text/typescript
import { Linking } from 'react-native';
import type { VideoAd } from '../../VideoPlayer/store/videoPlayer.type';
import { useVideoPlayerStore } from '../../VideoPlayer/store/videoPlayerStore';
import { useAdsPlayerStore } from '../store/adsPlayerStore';
import { createRef } from 'react';
import type { AdsPlayerRef } from '../AdsPlayer';
export const adVideoRef = createRef<AdsPlayerRef>();
export const getDomainFromUrl = (url: string | undefined): string => {
if (!url) return '';
const domain = url.replace(/^https?:\/\//, '').split('/')[0];
return domain || '';
};
export const handleAdClickThrough = async (
ad: VideoAd,
onAdTracking?: ({
ad,
trackingUrl,
event,
}: {
ad: VideoAd;
trackingUrl: string;
event: string;
}) => void
): Promise<void> => {
if (!ad.clickThroughUrl) return;
try {
const canOpen = await Linking.canOpenURL(ad.clickThroughUrl);
if (canOpen) {
await Linking.openURL(ad.clickThroughUrl);
if (ad.tracking?.click && onAdTracking) {
onAdTracking({
ad,
trackingUrl: ad.tracking.click,
event: 'click',
});
}
}
} catch (error) {
console.error('Error opening ad URL:', error);
}
};
export const hideAdControls = (): void => {
const { setControlsVisible } = useVideoPlayerStore.getState();
const { isAdPaused } = useAdsPlayerStore.getState();
if (isAdPaused) {
return;
}
setControlsVisible(false);
};
export const showAdControls = (): void => {
const { setControlsVisible } = useVideoPlayerStore.getState();
setControlsVisible(true);
};
export const toggleAdControls = (): void => {
const { controlsVisible, setControlsVisible } =
useVideoPlayerStore.getState();
const { isAdPaused } = useAdsPlayerStore.getState();
if (isAdPaused) {
setControlsVisible(true);
} else {
setControlsVisible(!controlsVisible);
}
};