
Security News
Risky Biz Podcast: Making Reachability Analysis Work in Real-World Codebases
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
@zezosoft/zezo-ott-react-native-video-player
Advanced tools
React Native OTT Video Player for Android & iOS. Supports playlists, seasons, auto-next playback, subtitles, theming, analytics, fullscreen mode, and custom controls. π Powered by ZezoSoft.
The ZezoOTT Video Player is a powerful React Native component crafted for OTT platforms.
It delivers a seamless full-screen video playback experience, powered by a centralized VideoPlayer Store for state management.
yarn add @zezosoft/zezo-ott-react-native-video-player
or
npm install @zezosoft/zezo-ott-react-native-video-player
Prop | Type | Description |
---|---|---|
onClose | () => void | Triggered when the player is closed. |
isFocused | boolean | Controls playback focus. Automatically pauses when the screen is not active. |
seekTime | number | null | Starts playback from a given time (in seconds). |
mode | 'fullscreen' | 'normal' | Sets the display mode of the player. |
onSeek | (time: number) => void | Fired when the user manually seeks to a new playback position. |
autoNext | boolean | Automatically plays the next episode/video after completion. |
event | { onPressEpisode?: ({ episode }: { episode: MediaEpisode }) => Promise<boolean> } | Event hooks (e.g. custom handling for episode selection). |
theme | Partial<VideoPlayerTheme> | Customize the look & feel of the player (colors, metrics, etc.). |
onWatchProgress | (progress: ExtendedWatchProgress) => void | Reports playback analytics such as watch time, current time, and completion. |
import React from 'react';
import { VideoPlayer } from '@zezosoft/zezo-ott-react-native-video-player';
export default function App() {
return (
<VideoPlayer
isFocused={true}
onClose={() => console.log('Player closed')}
autoNext={true}
onWatchProgress={(progress) => {
console.log('Watch Progress:', progress);
}}
/>
);
}
<VideoPlayer
autoNext={true}
event={{
onPressEpisode: async ({ episode }) => {
console.log('Next episode:', episode.title);
return true; // return false to block playback
},
}}
/>
<VideoPlayer
theme={{
colors: {
primary: '#E50914',
background: '#000000',
onBackground: '#FFFFFF',
},
metrics: {
controlButtonSize: 42,
},
}}
/>
// ContentDetailsScreen.tsx
import { useVideoPlayerStore } from '@zezosoft/zezo-ott-react-native-video-player';
import { useNavigation } from '@react-navigation/native';
export default function ContentDetailsScreen({ contentData }) {
const {
resetStore,
setPlayList,
setContentSeasons,
setActiveSeason,
setCurrentTrackIndex,
setActiveTrack,
} = useVideoPlayerStore();
const navigation = useNavigation();
const handlePlay = () => {
resetStore();
setContentSeasons(contentData.seasons);
setActiveSeason(contentData.seasons[0]);
const playlist = contentData.seasons[0].episodes.map((ep) => ({
id: ep.id,
title: ep.name,
contentId: contentData.id,
sourceLink: ep.sourceLink,
type: contentData.type,
}));
setPlayList(playlist);
setCurrentTrackIndex(0);
setActiveTrack(playlist[0]);
navigation.navigate('VideoPlayerScreen');
};
return <Button title="Play" onPress={handlePlay} />;
}
// VideoPlayerScreen.tsx
import { VideoPlayer } from '@zezosoft/zezo-ott-react-native-video-player';
export default function VideoPlayerScreen() {
return <VideoPlayer isFocused={true} autoNext={true} />;
}
The VideoPlayerStore is a centralized state store that powers the ZezoOTT Video Player.
It manages playback state, tracks, UI controls, analytics, and content navigation.
import { useVideoPlayerStore } from '@zezosoft/zezo-ott-react-native-video-player';
import React from 'react';
export default function VideoPlayerExample() {
const {
setPlayList,
setActiveSeason,
setActiveTrack,
setContentSeasons,
setCurrentTrackIndex,
resetStore,
playList,
activeTrack,
activeSeason,
} = useVideoPlayerStore();
const contentData = {
id: 'movie123',
type: 'series',
name: 'My Series',
seasons: [
{
id: 'season1',
name: 'Season 1',
seasonNumber: 1,
episodes: [
{
id: 'ep1',
name: 'Episode 1',
sourceLink: 'https://example.com/ep1.mp4',
},
{
id: 'ep2',
name: 'Episode 2',
sourceLink: 'https://example.com/ep2.mp4',
},
],
},
],
};
const setupPlayer = () => {
resetStore();
setContentSeasons(contentData.seasons);
setActiveSeason(contentData.seasons[0]);
const playlist = contentData.seasons[0].episodes.map((ep) => ({
id: ep.id,
title: ep.name,
contentId: contentData.id,
sourceLink: ep.sourceLink,
type: contentData.type,
}));
setPlayList(playlist);
setCurrentTrackIndex(0);
setActiveTrack(playlist[0]);
};
return (
<div>
<button onClick={setupPlayer}>Load Series</button>
<h3>Active Season: {activeSeason?.name}</h3>
<ul>
{playList.map((track) => (
<li key={track.id}>
{track.title} {activeTrack?.id === track.id ? '(Playing)' : ''}
</li>
))}
</ul>
</div>
);
}
resetStore()
before loading new content.rate
and label
in sync.controlsTimer
.OnLoadData
β always null-check.setError
for surfacing playback issues.contentSeasons
and activeSeason
before setting playlist.If fullscreen doesnβt work, ensure you install react-native-orientation-locker:
yarn add react-native-orientation-locker
# or
npm install react-native-orientation-locker
π Known issues: react-native-orientation-locker issues
π Zezo OTT Demo App
Made with passion by:
Licensed under the MIT License.
β‘ Powered by ZezoSoft
FAQs
React Native OTT Video Player for Android & iOS. Supports playlists, seasons, auto-next playback, subtitles, theming, analytics, fullscreen mode, and custom controls. π Powered by ZezoSoft.
The npm package @zezosoft/zezo-ott-react-native-video-player receives a total of 7 weekly downloads. As such, @zezosoft/zezo-ott-react-native-video-player popularity was classified as not popular.
We found that @zezosoft/zezo-ott-react-native-video-player demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
This episode explores the hard problem of reachability analysis, from static analysis limits to handling dynamic languages and massive dependency trees.
Security News
/Research
Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socketβs AI scanner detected the supply chain attack and flagged the malware.
Security News
CISAβs 2025 draft SBOM guidance adds new fields like hashes, licenses, and tool metadata to make software inventories more actionable.