1.0.16 • Published 9 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.