最近做的一個RN項目,需要用到Video組件,首當其衝,自然就是react-native-video
了。
react-native-video
:一個RN的Video組件
關於react-native-video
的用法,其實npm
官網上已經說的很清楚了,但對於初學者來說,可能還要踩一些坑,正好現在用到,記錄下詳細使用步驟吧。
IOS
平臺的用法很簡單,就不多說,這裏我只說下Android
平臺上的,同時我也是在Android
平臺上使用,下面所說的每一個步驟,都是經過我親自檢驗的。
1. 安裝模塊
首先,在初始化了RN項目之後,通過npm
在項目中添加react-native-video
:
npm install react-native-video –save
RN不像原生Andriod
或者IOS
,RN在開發的時候,是可以動態刷新查看效果,類似於混合App的開發,但是又不同於混合App,一些原生開發的組件,是無法做到直接動態刷新的,想要在引入原生組件之後,還能看到效果,一個辦法就是重新編譯安裝一遍,但是這種方法明顯太浪費時間,另外一個方法就是使用rnpm
。
rnpm
也是一個npm
模塊,可以使用npm
添加到項目中:
npm install rnpm –save
所以在安裝完react-native-video
以及rnpm
之後,需要繼續在控制檯中輸入:
rnpm link react-native-video
或者直接 rnpm link
除了react-native-video
之外,以下組件都是原生開發,wrapper了一層js,因此在使用的時候,都需要link .a到project中:
react-native-vector-icons//字體圖標
react-native-image-picker//讀入照片
react-native-camera//相機
react-native-linear-gradient//顏色漸變
react-native-search-bar//search bar
react-native-tableview//原生的tableview,可以在list右側顯示索引
react-native-video //Video組件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
2.引入原生模塊
因爲react-native-video
是原生組件,所以安裝完react-native-video
之後,還需要修改Java代碼。
詳細步驟如下:
2.1 IOS平臺
如果是IOS
平臺,那麼就比較簡單了,找到AppDelegate.m
文件:
1. 首先導入包,在此文件頂部添加如下代碼:
`#import <AVFoundation/AVFoundation.h>`
2. 然後,修改下面的代碼:
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
...
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil]; // allow
...
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2.1 Andriod平臺
Andriod
平臺稍微麻煩一點。
1. 首先,找到 android/settings.gradle 這個文件,在其中加入以下代碼:
include ':react-native-video'
project(':react-native-video').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-video/android')
2. 找到 android/app/build.gradle 這個文件,在 * dependencies *大括號的方法中添加如下代碼:
compile project(':react-native-video')
就像這樣:
dependencies {
...
compile project(':react-native-video')
}
3. 如果你的 react-native版本<0.29,那麼找到MainActivity.java 這個文件,在最頂部添加:import com.brentvatne.react.ReactVideoPackage;
並且在下面的代碼中添加:new ReactVideoPackage()
如果你的 react-native版本>=0.29,那麼就找到MainApplication.java這個文件,在頂部添加:import com.brentvatne.react.ReactVideoPackage;
並且在下面的代碼中添加:new ReactVideoPackage()
就像這樣:
@Override
protected List<ReactPackage> getPackages() {
return Arrays.<ReactPackage>asList(
new MainReactPackage(),
new ReactVideoPackage()
);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
3. 使用方法
借鑑npm
官網上的例子:
<Video source={{uri: "background"}} // 視頻的URL地址,或者本地地址,都可以.
rate={1.0} // 控制暫停/播放,0 代表暫停paused, 1代表播放normal.
volume={1.0} // 聲音的放大倍數,0 代表沒有聲音,就是靜音muted, 1 代表正常音量 normal,更大的數字表示放大的倍數
muted={false} // true代表靜音,默認爲false.
paused={false} // true代表暫停,默認爲false
resizeMode="cover" // 視頻的自適應伸縮鋪放行爲,
repeat={true} // 是否重複播放
playInBackground={false} // 當app轉到後臺運行的時候,播放是否暫停
playWhenInactive={false} // [iOS] Video continues to play when control or notification center are shown. 僅適用於IOS
onLoadStart={this.loadStart} // 當視頻開始加載時的回調函數
onLoad={this.setDuration} // 當視頻加載完畢時的回調函數
onProgress={this.setTime} // 進度控制,每250ms調用一次,以獲取視頻播放的進度
onEnd={this.onEnd} // 當視頻播放完畢後的回調函數
onError={this.videoError} // 當視頻不能加載,或出錯後的回調函數
style={styles.backgroundVideo} />
// 樣式
var styles = StyleSheet.create({
backgroundVideo: {
position: 'absolute',
top: 0,
left: 0,
bottom: 0,
right: 0,
},
});
Android擴展文件使用
//在你的渲染功能,假設你有一個名爲
// “background.mp4”在您的擴展文件。只需添加主要和(如果適用)補丁版本
< Video source = {{uri: “ background ”,mainVer: 1,patchVer: 0 }} //在給定的擴展版本中查找.mp4文件(background.mp4)。
rate = { 1.0 } // 0暫停,1是正常的。
volume = { 1.0 } // 0靜音,1是正常的。
muted = { false } //完全靜音。
paused = { false } //完全暫停播放。
resizeMode = “ cover ” //以縱橫比填充整個屏幕。
repeat = { true } //永遠重複。
onLoadStart = { this。loadStart } //視頻開始加載時的回調
onLoad = { this。setDuration } //視頻加載時的回調
onProgress = { this。時刻設定 } //回調每250毫秒〜與currentTime的
onEnd = {此。onEnd } //播放完成時的回調
onError = { this。videoError } //視頻無法加載時回調
style = { styles。backgroundVideo } / >
在iOS背景播放
要使音頻在iOS背景下播放,需要將音頻會話設置爲AVAudioSessionCategoryPlayback