Available in Classic and VPC
The Video Player Enhancement TV SDK is a React Native video player SDK for Android TV, Apple TV (tvOS), and Fire TV.
TV-specific component
@sgrsoft/vpe-reactnative-tv-sdk is a TV-specific video player SDK built on react-native-tvos. It provides the same API as the Web SDK (vpe-react-sdk), allowing you to build a consistent development experience across platforms.
Key features
The TV SDK provides the following main features:
- Native playback for HLS/DASH/MP4 (ExoPlayer/AVPlayer)
- DRM support (Widevine + FairPlay)
- IMA ads (Google Interactive Media Ads)
- Playlist (automatic playback of the next item)
- Subtitles (VTT/SMI with automatic EUC-KR decoding)
- Declarative layout customization
- Live streaming with Low Latency HLS (LL-HLS)
- Multilingual (ko/en/ja)
- Resume playback (onExit + initialPosition)
- D-pad/remote control navigation
- Interface capture prevention
Differences from the web SDK
The main differences between the web SDK and the TV SDK are as follows:
| Item | Web SDK | TV SDK |
|---|---|---|
| Platform | Browser (React/Next.js) | Android TV / tvOS / Fire TV |
| Streaming engine | Based on browser MSE | Native engine (ExoPlayer/AVPlayer) |
| Full screen | requestFullscreen() |
Always Full screen (no-op) |
| PiP | requestPictureInPicture() |
Not supported (no-op) |
| Volume | Slider UI | System volume (MuteBtn = mute toggle) |
| Input | Mouse/keyboard | Remote control D-pad |
| Ads | IMA | IMA |
| TV-specific props | - | onBack, onExit, initialPosition |
Language support
The SDK detects the device language settings to support Korean (ko), English (en), and Japanese (ja).
Version compatibility
The following table shows the version compatibility for the TV SDK.
| Item | Minimum | Recommended |
|---|---|---|
| react-native-tvos | 0.83.1-1 | 0.84.0-0 |
| React | 19.x | 19.2.x |
| Node.js | 22.11+ | 22.x LTS |
| tvOS | 15.1+ | 16.0+ |
| Android API | 24 (7.0) | 28+ |
| TypeScript | 5.0+ | 5.8.x |
Quick start
You can quickly configure the player with the following sample code.
import React, { useRef } from 'react';
import { View, StyleSheet } from 'react-native';
import { VpePlayer } from '@sgrsoft/vpe-reactnative-tv-sdk';
import type { PlayerHandle } from '@sgrsoft/vpe-reactnative-tv-sdk';
export default function PlayerScreen() {
const playerRef = useRef<PlayerHandle>(null);
return (
<View style={styles.container}>
<VpePlayer
ref={playerRef}
accessKey="YOUR_ACCESS_KEY"
options={{
playlist: [{
file: 'https://example.com/video.m3u8',
description: { title: 'Video title' },
}],
autostart: true,
}}
onBack={() => {
// Handle back action
}}
onEvent={(event) => {
if (event.type === 'ready') {
console.log('Player ready');
}
}}
/>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1, backgroundColor: '#000' },
});