react-native-video中文文檔

附上原github地址:react-native-video

簡介

一個react-native視頻播放組件荒典,可以實現(xiàn)視頻播放的效果舍败。
要求react-native版本 >= 0.40.0澈歉;對于RN支持0.19.0 - 0.39.0芯丧,請使用1.0之前的版本沿癞。

最新版本(3.0.0)改動

3.0版對現(xiàn)有行為進行了許多更改。 請參閱#更新

目錄

  • 安裝
  • 使用
  • 更新

一裕循、安裝

使用npm安裝依賴庫:

npm install --save react-native-video

或者用yarn:

yarn add react-native-video

IOS環(huán)境下:

直接運行下面命令來鏈接react-native-video庫。

react-native link 

如果你想允許其他應用在你的視頻組件上播放音樂净刮,請打開AppDelegate.m文件并且添加:

AppDelegate.m

#import <AVFoundation/AVFoundation.h>  // import

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...
  [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient error:nil];  // allow
  ...
}

Android環(huán)境下:

直接運行下面命令來鏈接react-native-video庫剥哑。

react-native link 

如果上面的方式失敗了,那么你可以嘗試手動添加配置淹父,這步比較麻煩株婴。

android/settings.gradle
較新的ExoPlayer庫適用于大多數(shù)人。(推薦使用這個庫)

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

如果您需要使用舊的基于Android MediaPlayer的播放器暑认,請改用以下內容:

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

android/app/build.gradle

dependencies {
   ...
   compile project(':react-native-video')
}

MainApplication.java
在java文件頂部位置記得添加import:

import com.brentvatne.react.ReactVideoPackage;

將ReactVideoPackage類添加到導出的包列表中:

@Override
protected List<ReactPackage> getPackages() {
    return Arrays.asList(
            new MainReactPackage(),
            new ReactVideoPackage()
    );
}

二督暂、使用

//在渲染函數(shù)中,假設你的項目中有一個名為“background.mp4”的文件穷吮。 
//如果你愿意逻翁,可以在一個屏幕上添加多個視頻。
<Video source={{uri: "background"}}   // 可以是一個 URL 或者 本地文件
       ref={(ref) => {
         this.player = ref
       }}                                      
       onBuffer={this.onBuffer}                // 遠程視頻緩沖時的回調
       onEnd={this.onEnd}                      // 播放完成后的回調
       onError={this.videoError}               // 播放失敗后的回調
       onFullscreenPlayerWillPresent={this.fullScreenPlayerWillPresent} // 全屏啟動前的回調
       onFullscreenPlayerDidPresent={this.fullScreenPlayerDidPresent}   // 全屏啟動后的回調
       onFullscreenPlayerWillDismiss={this.fullScreenPlayerWillDismiss} // 全屏停止前的回調
       onFullscreenPlayerDidDismiss={this.fullScreenPlayerDidDismiss}  // 全屏停止后的回調
       style={styles.backgroundVideo} />

// 稍后觸發(fā)全屏
this.player.presentFullscreenPlayer()

// 禁止全屏
this.player.dismissFullscreenPlayer()

// 設置視頻播放的位置(從0秒開始)
this.player.seek(0)

// 設置組件樣式
var styles = StyleSheet.create({
  backgroundVideo: {
    position: 'absolute',
    top: 0,
    left: 0,
    bottom: 0,
    right: 0,
  },
});

可配置屬性

  • allowsExternalPlayback
  • audioOnly
  • ignoreSilentSwitch
  • muted
  • paused
  • playInBackground
  • playWhenInactive
  • poster
  • posterResizeMode
  • progressUpdateInterval
  • rate
  • repeat
  • resizeMode
  • selectedTextTrack
  • stereoPan
  • textTracks
  • useTextureView
  • volume

事件屬性

  • onLoad
  • onLoadStart
  • onProgress
  • onTimedMetadata

方法

  • seek
1捡鱼、可配置參數(shù)

allowsExternalPlayback
指示播放器是否允許切換到AirPlay或HDMI等外部播放模式八回。

  • true(默認) - 運行切換到其他外部播放模式
  • false - 不允許切換到其他外部播放模式
    適用平臺:IOS

audioOnly
指示播放器是否應僅播放音軌而不是顯示視頻軌道,而是顯示視頻poster(海報)。

  • false(默認) - 僅正常播放視頻
  • true - 展示海報和播放視頻
    如果audioOnly設置為true缠诅,那么poster屬性必須有值設置進去溶浴。
    適用平臺:IOS、Android通用

ignoreSilentSwitch
控制iOS靜默開關行為管引。

  • "inherit"(默認) - 使用默認的AVPlayer開關行為
  • "ignore" - 即使設置了靜音開關士败,也要播放音頻
  • "obey" - 如果設置了靜音開關,請勿播放音頻
    適用平臺:IOS

muted
控制音頻是否靜音褥伴。

  • false(默認) - 不要靜音
  • true - 靜音
    適用平臺:IOS谅将、Android通用

paused
控制播放器是否暫停。

  • false(默認) - 暫停播放
  • true - 不要暫停播放
    適用平臺:IOS重慢、Android通用

playInBackground
確定應用程序在后臺時是否應繼續(xù)播放媒體饥臂。 這允許客戶繼續(xù)收聽音頻。

  • false (默認) - 不繼續(xù)播放視頻
  • true - 后臺繼續(xù)播放視頻

注意:要在IOS適用此功能似踱,你還必須:

  • Enable Background Audio 在你的Xcode項目中
  • 將ignoreSilentSwitch 屬性值prop設置為"ignore"
    適用平臺:iOS隅熙、Android ExoPlayer、 Android MediaPlayer

playWhenInactive
在通知或控制中心位于視頻前面時是否應繼續(xù)播放媒體核芽。

  • false(默認) - 不繼續(xù)播放視頻
  • true - 繼續(xù)播放視頻
    適用平臺:IOS

poster
加載視頻時要顯示的圖像值:帶有海報URL的字符串囚戚,例如“https://baconmockup.com/300/200/”。
適用平臺:IOS轧简、Android


posterResizeMode
確定當幀與原始視頻尺寸不匹配時如何調整海報圖像的大小驰坊。

  • "contain"(默認) - 均勻縮放圖像(保持圖像的縱橫比),使圖像的尺寸(寬度和高度)等于或小于視圖的相應尺寸(減去填充)
  • "center" - 使圖像沿兩個維度居中吉懊。 如果圖像大于視圖,請將其均勻縮小以使其包含在視圖中
  • "cover" - 均勻縮放圖像(保持圖像的縱橫比)假勿,使圖像的尺寸(寬度和高度)等于或大于視圖的相應尺寸(減去填充)
  • "none" - 不調整大小
  • "repeat" - 重復圖像以覆蓋視圖的框架借嗽。 圖像將保持其大小和縱橫比 (僅限iOS)
  • "stretch" - 獨立縮放寬度和高度,這可能會改變src的寬高比
    適用平臺:IOS转培、Android

progressUpdateInterval
onProgress事件之間的毫秒延遲(以毫秒為單位)恶导。
默認: 250.0
適用平臺:IOS、Android


rate
視頻播放的速率浸须。

  • 0.0 - 暫停播放
  • 1.0 - 正常速率播放
  • 其他值 - 自定義速率惨寿,例如0.5慢速播放或者2.0快速播放
    適用平臺:IOS、Android

注意:對于Android的播放器删窒,rate屬性僅在Android6.0或者更高版本中生效裂垦。


repeat
確定在到達結尾時是否重復播放視頻。

  • flase(默認) - 不重復播放
  • true - 重復播放
    適用平臺:IOS肌索、Android

resizeMode
確定當幀與原始視頻尺寸不匹配時如何調整視頻大小蕉拢。

  • "none"(默認) - 不匹配大小
  • "contain" - 均勻縮放視頻(保持視頻的寬高比),使視頻的尺寸(寬度和高度)等于或小于視圖的相應尺寸(減去填充)
  • "cover" - 均勻縮放視頻(保持視頻的寬高比),使圖像的尺寸(寬度和高度)等于或大于視圖的相應尺寸(減去填充)
  • "stretch" - 獨立縮放寬度和高度晕换,這可能會改變src的寬高比
    適用平臺:IOS午乓、 Android ExoPlayer、Android MediaPlayer

selectedTextTrack
配置顯示哪個文本軌道(標題或副標題)(如果有)闸准。

selectedTextTrack={{
  type: Type,
  value: Value
}}

例子:

selectedTextTrack={{
  type: "title",
  value: "English Subtitles"
}}
Type Value Description
"system"(默認) N/A 僅在啟用了字幕的系統(tǒng)首選項時顯示標題
"disabled" N/A 不顯示文本軌道
"title" string 顯示標題為值的文本軌道益愈,例如 “法國1”
"language" string 顯示指定為值的語言顯示文本軌道,例如“FR”
"index" number 顯示指定為值的索引的文本軌道夷家,例如0

iOS和Android(僅限4.4及更高版本)均提供設置蒸其,以便為聽障人士提供字幕。 如果選擇“系統(tǒng)”并啟用了字幕設置瘾英,iOS / Android將查找與該客戶的語言匹配的標題并顯示它枣接。
如果匹配指定類型(和值,如果適用)的軌道不可用缺谴,則不會顯示任何文本軌道但惶。 如果多個曲目符合條件,則將使用第一個匹配湿蛔。
適用平臺:Android ExoPlayer膀曾,IOS


stereoPan
調整左右音頻通道的平衡。 接受-1.0和1.0之間的任何值阳啥。

  • -1.0 - 滿左音頻
  • 0.0(默認) - 居中
  • 1.0 - 滿右音頻
    適用平臺:Android MediaPlayer

textTracks
加載一個或多個“sidecar”文本軌道添谊。 這需要一組表示每個軌道的對象。 每個對象應具有以下格式:

Property Description
title 文本軌道的名稱
language 代表語言的2個字母ISO 639-1代碼
type Mime類型的軌道 :TextTrackType.SRT - .srt SubRip Subtitle察迟、TextTrackType.TTML - .ttml TTML斩狱、TextTrackType.VTT - .vtt WebVTT(這個也一般用不到)
uri 文本軌道的URL。目前扎瓶,僅支持在網(wǎng)絡服務器上托管的種類

例子:

import { TextTrackType }, Video from 'react-native-video';

textTracks={[
  {
    title: "English CC",
    language: "en",
    type: "text/vtt", TextTrackType.VTT,
    uri: "https://bitdash-a.akamaihd.net/content/sintel/subtitles/subtitles_en.vtt"
  },
  {
    title: "Spanish Subtitles",
    language: "es",
    type: "application/x-subrip", TextTrackType.SRT,
    uri: "https://durian.blender.org/wp-content/content/subtitles/sintel_es.srt"
  }
]}

這不支持iOS所踊,因為AVPlayer不支持它。 必須將文本軌道作為HLS播放列表的一部分加載概荷。
適用平臺:Android ExoPlayer


useTextureView
輸出到TextureView而不是默認的SurfaceView秕岛。 通常,您需要使用SurfaceView误证,因為它更高效并提供更好的性能继薛。 但是,SurfaceViews有兩個限制:

  • 它無法使用動畫愈捅,轉換或縮放
  • 你無法覆蓋多個SurfaceView
    useTextureView只能在設置源的同時進行設置遏考。
  • false(默認) - 使用SurfaceView
  • true - 使用TextureView
    適用平臺:Android ExoPlayer

volume
調整音量

  • 1.0 - 滿音量
  • 0.0 - 將音頻靜音
  • 其他值 - 減小音量
    適用平臺:IOS、Android

2蓝谨、事件參數(shù)

onLoad
加載媒體并準備播放時調用的回調函數(shù)诈皿。
Payload(有效負載):

Property Value Description
currentPosition number 視頻開始播放的時間(以秒為單位)
duration number 視頻時間長度(以秒為單位)
naturalSize object 屬性:width - 視頻編碼的寬度(以像素為單位)林束;height - 視頻編碼的高度(以像素為單位);orientation - "portrait"或者"landscape"
textTracks array 一組文本跟蹤信息對象稽亏,具有以下屬性:index ,title ,language,type

例子:

{ 
 canPlaySlowForward: true,
 canPlayReverse: false,
 canPlaySlowReverse: false,
 canPlayFastForward: false,
 canStepForward: false,
 canStepBackward: false,
 currentTime: 0,
 duration: 5910.208984375,
 naturalSize: {
    height: 1080
    orientation: 'landscape'
    width: '1920'
 },
 textTracks: [
   { title: '#1 French', language: 'fr', index: 0, type: 'text/vtt' },
   { title: '#2 English CC', language: 'en', index: 1, type: 'text/vtt' },
   { title: '#3 English Director Commentary', language: 'en', index: 2, type: 'text/vtt' }
 ]
}

適用平臺:IOS壶冒、Android


onLoadStart
媒體開始加載時調用的回調函數(shù)。
Payload(有效負載):

Property Description
isNetwork boolean
type string
uri string

例子:

{
  isNetwork: true,
  type: '',
  uri: 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8'
}

適用平臺:IOS截歉、Android


onProgress
視頻播放過程中每個間隔進度單位(通常不足一秒胖腾,你可以打印日志測試下)調用的回調,其中包含有關媒體當前正在播放的位置的信息瘪松。

Property Description
currentTime number
playableDuration number
seekableDuration number

例子:

{
  currentTime: 5.2,
  playableDuration: 34.6,
  seekableDuration: 888
}

onTimedMetadata
當定時元數(shù)據(jù)可用時調用的回調函數(shù).

Property Type Description
metadata array Array of metadata objects

例子:

{
  metadata: [
    { value: 'Streaming Encoder', identifier: 'TRSN' },
    { value: 'Internet Stream', identifier: 'TRSO' },
    { value: 'Any Time You Like', identifier: 'TIT2' }
  ]
}

適用平臺:IOS咸作、Android ExoPlayer


3、方法

方法對引用Video元素的ref引用進行操作宵睦。 你可以使用以下代碼創(chuàng)建引用:

return (
  <Video source={...}
    ref => (this.player = ref) />
);

seek(seconds)
seek(這里翻譯成定位)到由秒表示的指定位置记罚。 seconds是一個浮點值。
注意:seek()只能在onLoad事件觸發(fā)后調用壳嚎。
例子:

this.player.seek(200); // 將開始播放時間定為3min20s處

適用平臺:IOS桐智、Android


seek(seconds, tolerance) - 精確的seek
默認情況下,iOS在目標位置的100毫秒內尋找烟馅。 如果您需要更高的準確度说庭,可以使用搜索公差方法:

seek(seconds, tolerance) 

tolerance是允許的秒位置的最大距離(以毫秒為單位)。 使用更精確的公差可能導致尋求更長時間郑趁。 如果要精確搜索刊驴,請將容差設置為0。
例子:

this.player.seek(120, 50); // 定位到2分鐘精度 +/- 50毫秒處

適用平臺:IOS


三寡润、更新

Veriosn 3.0

所有平臺現(xiàn)在都可以自動播放

以前捆憎,在Android ExoPlayer上,如果未設置暫停的道具梭纹,則媒體不會自動開始播放躲惰。唯一可行的方法是設置paused = {false}。如果未設置暫停栗柒,則已更改為自動播放礁扮,以便跨平臺的行為保持一致知举。

從后臺返回時瞬沦,所有平臺現(xiàn)在都保持暫停狀態(tài)

以前,在Android MediaPlayer上雇锡,如果您在應用程序進入后臺并設置暫停的道具時設置了AppState事件逛钻,那么當您返回應用程序時視頻將暫停,它將被忽略锰提。

請注意曙痘,Windows沒有應用程序進入后臺的概念芳悲,因此這不適用于此。

默認情況下使用Android SDK 27

版本3.0將Android構建工具和SDK更新為版本27. React Native正在切換到SDK 27边坤,以準備Google要求新的Android應用程序在2018年8月之前使用SDK 26名扛。

您將需要安裝版本27 SDK和版本27.0.3 buildtools或修改build.gradle文件以配置react-native-video以使用與應用程序其余部分相同的構建設置,如下所述茧痒。

使用應用build設置

您需要在頂級build.gradle文件(而不是app / build.gradle)中創(chuàng)建project.ext部分肮韧。使用app / build.gradle文件中的值填寫下面示例中的值。

//頂級build文件旺订,您可以在其中添加所有子項目/模塊共有的配置選項弄企。

buildscript {
    ... //各種其他設置都在這里
}

allprojects {
    ... //各種其他設置都在這里

    project.ext {
        compileSdkVersion = 23
        buildToolsVersion =“23.0.1”

        minSdkVersion = 16
        targetSdkVersion = 22
    }
}

如果遇到Could not find com.android.support:support-annotations:27.0.0.。重新安裝Android支持存儲庫区拳。

這里提供一個出現(xiàn)上述 "Could not find com.android.support:support-annotations:27.0.0."錯誤時的解決方法拘领。

這是從gituhb的issue上找到的:
只需在項目的android / build.gradle中指定Google的maven存儲庫:

allprojects {
    repositories {
        maven { url 'https://maven.google.com' }
    }
}

這是因為Android原生庫依賴于最新版本的Android支持注釋庫,該庫歷史上是通過SDK管理器安裝的樱调,但現(xiàn)在只能從https://maven.google.com獲取约素。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市本涕,隨后出現(xiàn)的幾起案子业汰,更是在濱河造成了極大的恐慌,老刑警劉巖菩颖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件样漆,死亡現(xiàn)場離奇詭異,居然都是意外死亡晦闰,警方通過查閱死者的電腦和手機放祟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來呻右,“玉大人跪妥,你說我怎么就攤上這事∩模” “怎么了眉撵?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長落塑。 經(jīng)常有香客問我纽疟,道長,這世上最難降的妖魔是什么憾赁? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任污朽,我火速辦了婚禮,結果婚禮上龙考,老公的妹妹穿的比我還像新娘蟆肆。我一直安慰自己矾睦,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布炎功。 她就那樣靜靜地躺著枚冗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蛇损。 梳的紋絲不亂的頭發(fā)上官紫,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音州藕,去河邊找鬼束世。 笑死,一個胖子當著我的面吹牛床玻,可吹牛的內容都是我干的毁涉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼锈死,長吁一口氣:“原來是場噩夢啊……” “哼贫堰!你這毒婦竟也來了?” 一聲冷哼從身側響起待牵,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤其屏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缨该,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體偎行,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年贰拿,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛤袒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡膨更,死狀恐怖妙真,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情荚守,我是刑警寧澤珍德,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站矗漾,受9級特大地震影響锈候,放射性物質發(fā)生泄漏。R本人自食惡果不足惜缩功,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一晴及、第九天 我趴在偏房一處隱蔽的房頂上張望都办。 院中可真熱鬧嫡锌,春花似錦虑稼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至啦桌,卻和暖如春溯壶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背甫男。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工且改, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人板驳。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓又跛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親若治。 傳聞我的和親對象是個殘疾皇子慨蓝,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容