您好,登錄后才能下訂單哦!
react-native-video 是github上一個專用于React Native做視頻播放的組件。這個組件是React Native上功能最全最好用的視頻播放組件,還在持續開發之中,雖然還有些bug,但基本不影響使用,強力推薦。
本篇文章主要介紹下怎么使用react-native-video播放視頻,以及如何實現全屏播放,屏幕旋轉時視頻播放器大小隨之調整,顯示全屏或收起全屏。
首先來看看react-native-video有哪些功能。
基本功能
注意事項
react-native-video通過source屬性設置視頻,播放遠程視頻時使用uri來設置視頻地址,如下:
source={{uri: http://www.xxx.com/xxx/xxx/xxx.mp4}}
播放本地視頻時,使用方式如下:
source={require('../assets/video/turntable.mp4')}
需要注意的是,source屬性不能為空,uri或本地資源是必須要設置的,否則會導致app閃退。uri不能設置為空字符串,必須是一個具體的地址。
安裝配置
使用 npm i -S react-native-video 或 yarn add react-native-video 安裝,完成之后使用 react-native link react-native-video 命令link這個庫。
Android端在執行完link命令后,gradle中就已經完成了配置。iOS端還需要手動配置一下,這里簡單說一下,與官方說明不同的是,我們一般不使用tvOS的,選中你自己的target,在build phases中先移除掉自動link進來的 libRCTVideo.a 這個庫,然后點擊下方加號重新添加 libRCTVideo.a ,注意不要選錯。
視頻播放
實現視頻播放其實很簡單,我們只需要給Video組件設置一下source資源,然后設置style調整Video組件寬高就行了。
<Video ref={(ref) => this.videoPlayer = ref} source={{uri: this.state.videoUrl}} rate={1.0} volume={1.0} muted={false} resizeMode={'cover'} playWhenInactive={false} playInBackground={false} ignoreSilentSwitch={'ignore'} progressUpdateInterval={250.0} style={{width: this.state.videoWidth, height: this.state.videoHeight}} />
其中videoUrl是我們用來設置視頻地址的變量,videoWidth和videoHeight是用來控制視頻寬高的。
全屏播放的實現
視頻全屏播放其實就是在橫屏情況下全屏播放,豎屏一般都是非全屏的。要實現設備橫屏時視頻全屏顯示,說起來很簡單,就是通過改變Video組件寬高來實現。
上面我們把videoWidth和videoHeight存放在state中,目的就是為了通過改變兩個變量的值來刷新UI,使視頻寬高能隨之改變。問題是,怎樣在設備的屏幕旋轉時及時獲取到改變后的寬高呢?
豎屏時我設置的視頻初始寬度為設備屏幕的寬度,高度為寬度的9/16,即按16:9的比例顯示。橫屏時視頻的寬度應為屏幕的寬度,高度應為當前屏幕的高度。由于橫屏時設備寬高發生了變化,及時獲取到寬高就能及時刷新UI,視頻就能全屏展示了。
剛開始我想到的辦法是使用 react-native-orientation 監聽設備轉屏的事件,在回調方法中判斷當前是橫屏還是豎屏,這個在iOS上是可行的,但是在Android上橫屏和豎屏時獲取到寬高值總是不匹配的(比如,橫屏寬384高582,豎屏寬582高384,顯然不合理),這樣就無法做到統一處理。
所以,監聽轉屏的方案是不行的,不僅費時還得不到想要的結果。更好的方案是在render函數中使用View作為最底層容器,給它設置一個"flex:1"的樣式,使其充滿屏幕,在View的onLayout方法中獲取它的寬高。無論屏幕怎么旋轉,onLayout都可以獲取到當前View的寬高和x、y坐標。
/// 屏幕旋轉時寬高會發生變化,可以在onLayout的方法中做處理,比監聽屏幕旋轉更加及時獲取寬高變化 _onLayout = (event) => { //獲取根View的寬高 let {width, height} = event.nativeEvent.layout; console.log('通過onLayout得到的寬度:' + width); console.log('通過onLayout得到的高度:' + height); // 一般設備橫屏下都是寬大于高,這里可以用這個來判斷橫豎屏 let isLandscape = (width > height); if (isLandscape){ this.setState({ videoWidth: width, videoHeight: height, isFullScreen: true, }) } else { this.setState({ videoWidth: width, videoHeight: width * 9/16, isFullScreen: false, }) } };
這樣就實現了屏幕在旋轉時視頻也隨之改變大小,橫屏時全屏播放,豎屏回歸正常播放。注意,Android和iOS需要配置轉屏功能才能使界面自動旋轉,請自行查閱相關配置方法。
播放控制
上面實現了全屏播放還不夠,我們還需要一個工具欄來控制視頻的播放,比如顯示進度,播放暫停和全屏按鈕。具體思路如下:
這樣才算是一個有模有樣的視頻播放器。下面是豎屏和橫屏的效果圖
再也不必為presentFullscreenPlayer方法不起作用而煩惱了,全屏播放實現起來其實很簡單。具體代碼請看demo: https://github.com/mrarronz/react-native-blog-examples/tree/master/Chapter7-VideoPlayer/VideoExample 。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。