1.0.16 • Published 10 months ago
react-native-video-vlc v1.0.16
react-native-video-vlc
react-native-video-vlc is a React Native library that provides a native video component based on VLC, enabling smooth and customizable video playback in your React Native applications.
Features
- Customizable video playback with support for multiple resize modes.
- Audio and subtitle track selection.
- Progress updates and event handling.
- Native VLC capabilities for robust media handling.
- Text track sideloading and delay support.
Installation
To install the library, run:
npm install react-native-video-vlcOr with yarn:
yarn add react-native-video-vlcUsage
Here is an example of how to use the VideoVLC component:
import { StyleSheet } from 'react-native';
import VideoVLC from 'react-native-video-vlc';
const App = () => {
return (
<VideoVLC
style={styles.container}
source={{ uri: 'https://commondatastorage.googleapis.com/gtv-videos-bucket/sample/BigBuckBunny.mp4' }}
onProgress={(e) => console.log('Progress:', e)}
onError={(e) => console.error('Error:', e)}
onLoad={(e) => console.log('Video Loaded:', e)}
onEnd={() => console.log('Video Ended')}
/>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
},
});
export default App;Props
Main Props
| Prop | Type | Default | Description |
|---|---|---|---|
source | ReactVideoVLCSource | null | Video source. Supports remote URLs or local files. |
repeat | boolean | false | If true, the video will loop indefinitely. |
resizeMode | EnumValues<VideoResizeMode> | none | Defines how the video should be resized within its container. |
paused | boolean | false | Pauses the video playback when true. |
muted | boolean | false | Mutes the audio when true. |
volume | number | 100 | Sets the audio volume (0-100). |
progressUpdateInterval | number | 250 | Interval (ms) for onProgress updates. |
selectedTextTrack | number | null | Index of the selected text (subtitle) track. |
selectedAudioTrack | number | null | Index of the selected audio track. |
textTrackDelay | number | 0 | Delay for text (subtitle) tracks in seconds. |
Source Properties
| Property | Type | Default | Description |
|---|---|---|---|
uri | string | NodeRequire | null | The video source URI. Supports both remote and local sources. |
minLoadRetryCount | number | 0 | Minimum retry attempts for loading. |
mediaOptions | string[] | null | VLC-specific media options. |
headers | Headers | {} | HTTP headers for fetching the video. A record of key-value pairs where the key is the header name and the value is the header value. Example: { 'Authorization': 'Bearer token' }. |
startPosition | number | 0 | Start position of the video in seconds. |
textTracks | SideloadTrack[] | [] | Array of subtitle tracks to sideload. See SideloadTrack for details. |
SideloadTrack
| Property | Type | Description |
|---|---|---|
title | string | The title of the subtitle track. Optional. |
language | string | The language code of the subtitle track (e.g., 'en', 'fr'). Optional. |
uri | string | URI of the subtitle file to sideload. Required. |
Events
| Event | Callback Parameters | Description |
|---|---|---|
onEnd | () | Called when the video playback finishes. |
onBuffer | OnBufferData | Triggered during buffering. Contains: { isBuffering: boolean }. |
onError | OnVideoErrorData | Triggered when an error occurs. Contains: { error: { errorString: string, errorCode: number } }. |
onLoad | OnLoadData | Called when the video is loaded. Provides detailed information. See OnLoadData below. |
onLoadStart | () | Triggered when the video starts loading. |
onProgress | OnProgressData | Called at regular intervals with progress information (in seconds). Contains: { currentTime: number, seekableDuration: number, progress: number }. |
onPlaybackStateChanged | OnPlaybackStateChangedData | Triggered when playback state changes. Contains: { isPlaying: boolean, isSeeking: boolean }. |
OnLoadData
The onLoad event provides the following data:
| Property | Type | Description |
|---|---|---|
currentTime | number | Current playback position (in seconds) when the video is loaded. |
duration | number | Total duration of the video (in seconds). |
naturalSize | object | Contains the video's dimensions and orientation. |
naturalSize.width | number | Width of the video in pixels. |
naturalSize.height | number | Height of the video in pixels. |
naturalSize.orientation | 'landscape', 'portrait', 'square' | The video's orientation. |
videoTracks | Array<{ id: number, selected: boolean, title?: string, language?: string }> | Details of available video tracks. Each track has an ID, selection state, title (optional), and language (optional). |
audioTracks | Array<{ id: number, selected: boolean, title?: string, language?: string }> | Details of available audio tracks. Each track has an ID, selection state, title (optional), and language (optional). |
textTracks | Array<{ id: number, selected: boolean, title?: string, language?: string }> | Details of available text (subtitle) tracks. Each track has an ID, selection state, title (optional), and language (optional). |
Enums
VideoResizeMode
none: Default mode.cover: Scale the video uniformly to cover the container.stretch: Stretch the video to fill the container.original: Display the video in its original size.16:9,16:10,4:3,5:4,2.35:1,2.21:1,2.39:1: Aspect ratio presets.
Ref Methods
The VideoVLC component exposes the following methods via a ref:
| Method | Parameters | Description |
|---|---|---|
seek | time: number | Seeks the video to the specified time (in seconds). |
To use the ref methods, you can follow this example:
import React, { useRef } from 'react';
import { StyleSheet, View, Button } from 'react-native';
import VideoVLC from 'react-native-video-vlc';
const App = () => {
const videoRef = useRef(null);
const handleSeek = () => {
if (videoRef.current) {
videoRef.current.seek(30); // Seek to 30 seconds
}
};
return (
<View style={styles.container}>
<VideoVLC
style={styles.video}
ref={videoRef}
source={{ uri: 'https://example.com/video.mp4' }}
resizeMode="cover"
/>
<Button title="Seek to 30s" onPress={handleSeek} />
</View>
);
};
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: 'center',
alignItems: 'center',
backgroundColor: '#000',
},
video: {
width: '100%',
height: 300
}
});
export default App;Contributing
Contributions are welcome! Feel free to open issues or submit pull requests on GitHub.
License
react-native-video-vlc is released under the MIT License. See LICENSE for details.