diff --git a/.gitignore b/.gitignore index d477ec05..ce0db63c 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ DerivedData *.ipa *.xcuserstate project.xcworkspace +Pods # Android/IJ # @@ -29,6 +30,9 @@ project.xcworkspace .gradle local.properties *.hprof +.project +.settings +.classpath # node.js # @@ -46,3 +50,7 @@ buck-out/ \.buckd/ android/app/libs android/keystores/debug.keystore + +# windows +Deploy.binlog +msbuild.binlog \ No newline at end of file diff --git a/API.md b/API.md new file mode 100644 index 00000000..daec7e99 --- /dev/null +++ b/API.md @@ -0,0 +1,1539 @@ +## Table of Contents + +* [Installation](#installation) + * [iOS](#ios-installation) + * [tvOS](#tvos-installation) + * [Android](#android-installation) + * [Windows](#windows-installation) + * [react-native-dom](#react-native-dom-installation) +* [Examples](#examples) + * [iOS](#ios-example) + * [Android](#android-example) + * [Windows](#windows-example) +* [Usage](#usage) +* [iOS App Transport Security](#ios-app-transport-security) +* [Audio Mixing](#audio-mixing) +* [Android Expansion File Usage](#android-expansion-file-usage) +* [Updating](#updating) + +## Installation + +Using npm: + +```shell +npm install --save react-native-video +``` + +or using yarn: + +```shell +yarn add react-native-video +``` + +Then follow the instructions for your platform to link react-native-video into your project: + +### iOS installation +
+ iOS details + +#### Standard Method + +**React Native 0.60 and above** + +Run `npx pod-install`. Linking is not required in React Native 0.60 and above. + +**React Native 0.59 and below** + +Run `react-native link react-native-video` to link the react-native-video library. + +#### Enable Static Linking for dependencies in your ios project Podfile + +Add `use_frameworks! :linkage => :static` just under `platform :ios` in your ios project Podfile. + +[See the example ios project for reference](examples/basic/ios/Podfile#L5) + +#### Using CocoaPods (required to enable caching) + +Setup your Podfile like it is described in the [react-native documentation](https://facebook.github.io/react-native/docs/integration-with-existing-apps#configuring-cocoapods-dependencies). + +Depending on your requirements you have to choose between the two possible subpodspecs: + +Video only: + +```diff + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' ++ `pod 'react-native-video', :path => '../node_modules/react-native-video/react-native-video.podspec'` +end +``` + +Video with caching ([more info](docs/caching.md)): + +```diff + pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec' ++ `pod 'react-native-video/VideoCaching', :path => '../node_modules/react-native-video/react-native-video.podspec'` +end +``` + +
+ +### tvOS installation +
+ tvOS details + +`react-native link react-native-video` doesn’t work 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 installation +
+ Android details + +Linking is not required in React Native 0.60 and above. +If your project is using React Native < 0.60, run `react-native link react-native-video` 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. + +```gradle +include ':react-native-video' +project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android-exoplayer') +``` + +If you need to use the old Android MediaPlayer based player, use the following instead: + +```gradle +include ':react-native-video' +project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android') +``` + +#### **android/app/build.gradle** + +From version >= 5.0.0, you have to apply these changes: + +```diff +dependencies { + ... + compile project(':react-native-video') ++ implementation "androidx.appcompat:appcompat:1.0.0" +- implementation "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}" + +} +``` + +#### **android/gradle.properties** + +Migrating to AndroidX (needs version >= 5.0.0): + +```gradle.properties +android.useAndroidX=true +android.enableJetifier=true +``` + +#### **MainApplication.java** + +If using com.facebook.react.PackageList to auto import native dependencies, there are no updates required here. Please see the android example project for more details. +/examples/basic/android/app/src/main/java/com/videoplayer/MainApplication.java + +##### For manual linking + +On top, where imports are: + +```java +import com.brentvatne.react.ReactVideoPackage; +``` + +Add the `ReactVideoPackage` class to your list of exported packages. + +```java +@Override +protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new ReactVideoPackage() + ); +} +``` +
+ +### Windows installation +
+ Windows RNW C++/WinRT details + +#### Autolinking + +**React Native Windows 0.63 and above** + +Autolinking should automatically add react-native-video to your app. + +#### Manual Linking + +**React Native Windows 0.62** + +Make the following additions to the given files manually: + +##### **windows\myapp.sln** + +Add the _ReactNativeVideoCPP_ project to your solution (eg. `windows\myapp.sln`): + +1. Open your solution in Visual Studio 2019 +2. Right-click Solution icon in Solution Explorer > Add > Existing Project... +3. Select `node_modules\react-native-video\windows\ReactNativeVideoCPP\ReactNativeVideoCPP.vcxproj` + +##### **windows\myapp\myapp.vcxproj** + +Add a reference to _ReactNativeVideoCPP_ to your main application project (eg. `windows\myapp\myapp.vcxproj`): + +1. Open your solution in Visual Studio 2019 +2. Right-click main application project > Add > Reference... +3. Check _ReactNativeVideoCPP_ from Solution Projects + +##### **pch.h** + +Add `#include "winrt/ReactNativeVideoCPP.h"`. + +##### **app.cpp** + +Add `PackageProviders().Append(winrt::ReactNativeVideoCPP::ReactPackageProvider());` before `InitializeComponent();`. + +**React Native Windows 0.61 and below** + +Follow the manual linking instuctions for React Native Windows 0.62 above, but substitute _ReactNativeVideoCPP61_ for _ReactNativeVideoCPP_. + +
+ +### react-native-dom installation +
+ react-native-dom details + +Make the following additions to the given files manually: + +#### **dom/bootstrap.js** + +Import RCTVideoManager and add it to the list of nativeModules: + +```javascript +import { RNDomInstance } from "react-native-dom"; +import { name as appName } from "../app.json"; +import RCTVideoManager from 'react-native-video/dom/RCTVideoManager'; // Add this + +// Path to RN Bundle Entrypoint ================================================ +const rnBundlePath = "./entry.bundle?platform=dom&dev=true"; + +// React Native DOM Runtime Options ============================================= +const ReactNativeDomOptions = { + enableHotReload: false, + nativeModules: [RCTVideoManager] // Add this +}; +``` +
+ +## Examples + +Run `yarn xbasic install` before running any of the examples. + +### iOS Example +``` +yarn xbasic ios +``` + +### Android Example +``` +yarn xbasic android +``` + +### Windows Example +``` +yarn xbasic windows +``` + +## Usage + +```javascript +// Load the module + +import Video from 'react-native-video'; + +// Within your render function, assuming you have a file called +// "background.mp4" in your project. You can include multiple videos +// on a single screen if you like. + +