react-native-community/react-native-video

Name: react-native-video

Owner: React Native Community

Description: A

Created: 2015-03-31 05:08:38.0

Updated: 2018-05-24 14:58:12.0

Pushed: 2018-05-23 19:49:13.0

Homepage: https://www.npmjs.com/package/react-native-video

Size: 10113

Language: Java

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

react-native-video

A <Video> component for react-native, as seen in react-native-login!

Requires react-native >= 0.40.0, for RN support of 0.19.0 - 0.39.0 please use a pre 1.0 version.

TOC
Installation

Using npm:

install --save react-native-video

or using yarn:

 add react-native-video

iOS

Run react-native link to link the react-native-video library.

If you would like to allow other apps to play music over your video component, add:

AppDelegate.m

ort <AVFoundation/AVFoundation.h>  // import

OOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

.
AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];  // allow
.

Note: you can also use the ignoreSilentSwitch prop, shown below.

tvOS

Run react-native link to link the react-native-video library.

react-native link don?t works properly with the tvOS target so we need to add the library manually.

First select your project in Xcode.

After that, select the tvOS target of your application and select « General » tab

Scroll to « Linked Frameworks and Libraries » and tap on the + button

Select RCTVideo-tvOS

Android

Run react-native link to link the react-native-video library.

Or if you have trouble, make the following additions to the given files manually:

android/settings.gradle

The newer ExoPlayer library will work for most people.

ude ':react-native-video'
ect(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android-exoplayer')

If you need to use the old Android media player based player, use the following instead:

ude ':react-native-video'
ect(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android')

android/app/build.gradle

ndencies {
..
ompile project(':react-native-video')

MainApplication.java

On top, where imports are:

rt com.brentvatne.react.ReactVideoPackage;

Add the ReactVideoPackage class to your list of exported packages.

rride
ected List<ReactPackage> getPackages() {
return Arrays.asList(
        new MainReactPackage(),
        new ReactVideoPackage()
);

Windows

Make the following additions to the given files manually:

windows/myapp.sln

Add the ReactNativeVideo project to your solution.

  1. Open the solution in Visual Studio 2015
  2. Right-click Solution icon in Solution Explorer > Add > Existing Project
  3. UWP: Select node_modules\react-native-video\windows\ReactNativeVideo\ReactNativeVideo.csproj
  4. WPF: Select node_modules\react-native-video\windows\ReactNativeVideo.Net46\ReactNativeVideo.Net46.csproj

windows/myapp/myapp.csproj

Add a reference to ReactNativeVideo to your main application project. From Visual Studio 2015:

  1. Right-click main application project > Add > Reference…
  2. UWP: Check ReactNativeVideo from Solution Projects.
  3. WPF: Check ReactNativeVideo.Net46 from Solution Projects.

MainPage.cs

Add the ReactVideoPackage class to your list of exported packages.

g ReactNative;
g ReactNative.Modules.Core;
g ReactNative.Shell;
g ReactNativeVideo; // <-- Add this
g System.Collections.Generic;


    public override List<IReactPackage> Packages
    {
        get
        {
            return new List<IReactPackage>
            {
                new MainReactPackage(),
                new ReactVideoPackage(), // <-- Add this
            };
        }
    }


Usage
ithin your render function, assuming you have a file called
background.mp4" in your project. You can include multiple videos
n a single screen if you like.

eo source={{uri: "background"}}   // Can be a URL or a local file.
   poster="https://baconmockup.com/300/200/" // uri to an image to display until the video plays
   posterResizeMode="contain"              // Poster resize mode. One of contain (default), cover, stretch, center, repeat
   ref={(ref) => {
     this.player = ref
   }}                                      // Store reference
   rate={1.0}                              // 0 is paused, 1 is normal.
   volume={1.0}                            // 0 is muted, 1 is normal.
   muted={true|false}                      // Mutes the audio entirely. Default false
   paused={true|false}                     // Pauses playback entirely. Default false
   resizeMode="cover"                      // Fill the whole screen at aspect ratio.*
   repeat={true|false}                     // Repeat forever. Default false
   playInBackground={true|false}           // Audio continues to play when app entering background. Default false
   playWhenInactive={true|false}           // [iOS] Video continues to play when control or notification center are shown. Default false
   ignoreSilentSwitch={"ignore"}           // [iOS] ignore | obey - When 'ignore', audio will still play with the iOS hard silent switch set to silent. When 'obey', audio will toggle with the switch. When not specified, will inherit audio settings as usual.
   progressUpdateInterval={250.0}          // [iOS] Interval to fire onProgress (default to ~250ms)
   onBuffer={this.onBuffer}                // Callback when remote video is buffering
   onEnd={this.onEnd}                      // Callback when playback finishes
   onError={this.videoError}               // Callback when video cannot be loaded
   onFullscreenPlayerWillPresent={this.fullScreenPlayerWillPresent} // Callback before fullscreen starts
   onFullscreenPlayerDidPresent={this.fullScreenPlayerDidPresent}   // Callback after fullscreen started
   onFullscreenPlayerWillDismiss={this.fullScreenPlayerWillDismiss} // Callback before fullscreen stops
   onFullscreenPlayerDidDismiss={this.fullScreenPlayerDidDissmiss}  // Callback after fullscreen stopped
   onLoadStart={this.loadStart}            // Callback when video starts to load
   onLoad={this.setDuration}               // Callback when video loads
   onProgress={this.setTime}               // Callback every ~250ms with currentTime
   onTimedMetadata={this.onTimedMetadata}  // Callback when the stream receive some metadata
   style={styles.backgroundVideo} />

ater to trigger fullscreen
.player.presentFullscreenPlayer()

isable fullscreen
.player.dismissFullscreenPlayer()

o set video position in seconds (seek)
.player.seek(0)

ater on in your styles..
styles = StyleSheet.create({
ckgroundVideo: {
position: 'absolute',
top: 0,
left: 0,
bottom: 0,
right: 0,


To see the full list of available props, you can check the propTypes of the Video.js component.

For more detailed info check this article

Android Expansion File Usage

Within your render function, assuming you have a file called “background.mp4” in your expansion file. Just add your main and (if applicable) patch version

eo
urce={{uri: "background", mainVer: 1, patchVer: 0}}

This will look for an .mp4 file (background.mp4) in the given expansion version.

Load files with the RN Asset System

The asset system introduced in RN 0.14 allows loading image resources shared across iOS and Android without touching native code. As of RN 0.31 the same is true of mp4 video assets for Android. As of RN 0.33 iOS is also supported. Requires react-native-video@0.9.0.

eo
urce={require('../assets/video/turntable.mp4')}

Play in background on iOS

To enable audio to play in background on iOS the audio session needs to be set to AVAudioSessionCategoryPlayback. See Apple documentation for additional details. (NOTE: there is now a ticket to expose this as a prop )

Examples
TODOS

MIT Licensed


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.