首頁 web前端 js教程 react-native-video實現視訊全螢幕播放的方法

react-native-video實現視訊全螢幕播放的方法

May 29, 2018 pm 03:06 PM
native react video

這篇文章主要介紹了react-native-video實現影片全螢幕播放的方法,現在分享給大家,也給大家做個參考。

react-native-video 是github上一個專用於React Native做影片播放的元件。這個組件是React Native上功能最全最好用的影片播放組件,還在持續開發之中,雖然還有些bug,但基本上不影響使用,強力推薦。

本篇文章主要介紹下怎麼使用react-native-video播放視頻,以及如何實現全屏播放,屏幕旋轉時視頻播放器大小隨之調整,顯示全屏或收起全屏。

首先來看看react-native-video有哪些功能。

基本功能

  1. 控製播放速率

  2. 控制音量大小

  3. 支援靜音功能
  4. 支援播放和暫停
  5. #支援後台音訊播放
  6. 支援客製化樣式,例如設定寬高
  7. 豐富的事件調用,如onLoad,onEnd,onProgress,onBuffer等等,可以透過對應的事件進行UI上的客製化處理,如onBuffer時我們可以顯示一個進度條提示使用者影片正在緩衝。
  8. 支援全螢幕播放,使用presentFullscreenPlayer方法。這個方法在iOS上可行,在android上不起作用。參考 issue#534 ,#726也是同樣的問題。
  9. 支援跳轉進度,使用seek方法跳到指定的地方進行播放

#可以載入遠端視訊位址播放,也可以載入RN本地存放的影片。

注意事項

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={&#39;cover&#39;}
 playWhenInactive={false}
 playInBackground={false}
 ignoreSilentSwitch={&#39;ignore&#39;}
 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(&#39;通过onLayout得到的宽度:&#39; + width);
 console.log(&#39;通过onLayout得到的高度:&#39; + 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需要設定轉屏功能才能讓介面自動旋轉,請自行查閱相關設定方法。 #########播放控制######

上面實現了全螢幕播放還不夠,我們還需要一個工具列來控制影片的播放,例如顯示進度,播放暫停和全螢幕按鈕。具體想法如下:

  1. 使用一個View將Video元件包起來,View的寬高和Video一致,方便轉屏時改變大小

  2. 設定一個透明的遮罩層覆蓋在Video組件上,點擊遮罩層顯示或隱藏工具列

  3. 工具列中要顯示播放按鈕、進度列、全螢幕按鈕、目前播放時間、影片總時長。工具列以絕對位置佈局,覆蓋在Video組件底部

  4. 使用react-native-orientation中的lockToPortrait和lockToLandscape方法強制旋轉螢幕,使用unlockAllOrientations在螢幕旋轉以後撤銷轉屏限制。

這樣才算是一個有模有樣的影片播放器。下面是垂直螢幕和橫屏的效果圖

#再也不必為presentFullscreenPlayer方法不起作用而煩惱了,全螢幕播放實現起來其實很簡單。具體程式碼請看demo: https://github.com/mrarronz/react-native-blog-examples/tree/master/Chapter7-VideoPlayer/VideoExample 。

上面是我整理給大家的,希望今後對大家有幫助。

相關文章:

Angular學習筆記之整合三方UI框架、控制項的範例

Node.js實作註冊郵箱啟動功能的方法範例

Webpack 之babel-loader檔案預處理器詳解

以上是react-native-video實現視訊全螢幕播放的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何利用React和RabbitMQ建立可靠的訊息應用 如何利用React和RabbitMQ建立可靠的訊息應用 Sep 28, 2023 pm 08:24 PM

如何利用React和RabbitMQ建立可靠的訊息傳遞應用程式引言:現代化的應用程式需要支援可靠的訊息傳遞,以實現即時更新和資料同步等功能。 React是一種流行的JavaScript庫,用於建立使用者介面,而RabbitMQ是一種可靠的訊息傳遞中間件。本文將介紹如何結合React和RabbitMQ建立可靠的訊息傳遞應用,並提供具體的程式碼範例。 RabbitMQ概述:

React Router使用指南:如何實現前端路由控制 React Router使用指南:如何實現前端路由控制 Sep 29, 2023 pm 05:45 PM

ReactRouter使用指南:如何實現前端路由控制隨著單頁應用的流行,前端路由成為了一個不可忽視的重要部分。 ReactRouter作為React生態系統中最受歡迎的路由庫,提供了豐富的功能和易用的API,使得前端路由的實作變得非常簡單和靈活。本文將介紹ReactRouter的使用方法,並提供一些具體的程式碼範例。安裝ReactRouter首先,我們需要

摩托羅拉 Razr 50 Ultra 出現在洩露的預告視頻中,配有防水外殼和巨大的副顯示屏 摩托羅拉 Razr 50 Ultra 出現在洩露的預告視頻中,配有防水外殼和巨大的副顯示屏 Jun 20, 2024 pm 09:31 PM

過去幾週,摩托羅拉 Razr 50 和 Razr 50 Ultra 最重要的規格和歐元價格已經洩露。現在,極其可靠的洩密者 @MysteryLupin 能夠發布下面嵌入的預告視頻,其中

PHP、Vue和React:如何選擇最適合的前端框架? PHP、Vue和React:如何選擇最適合的前端框架? Mar 15, 2024 pm 05:48 PM

PHP、Vue和React:如何選擇最適合的前端框架?隨著互聯網技術的不斷發展,前端框架在Web開發中起著至關重要的作用。 PHP、Vue和React作為三種代表性的前端框架,每一種都具有其獨特的特徵和優勢。在選擇使用哪種前端框架時,開發人員需要根據專案需求、團隊技能和個人偏好做出明智的決策。本文將透過比較PHP、Vue和React這三種前端框架的特徵和使

Java框架與前端React框架的整合 Java框架與前端React框架的整合 Jun 01, 2024 pm 03:16 PM

Java框架與React框架的整合:步驟:設定後端Java框架。建立專案結構。配置建置工具。建立React應用程式。編寫RESTAPI端點。配置通訊機制。實戰案例(SpringBoot+React):Java程式碼:定義RESTfulAPI控制器。 React程式碼:取得並顯示API回傳的資料。

如何利用React開發一個響應式的後台管理系統 如何利用React開發一個響應式的後台管理系統 Sep 28, 2023 pm 04:55 PM

如何利用React開發一個響應式的後台管理系統隨著互聯網的快速發展,越來越多的企業和組織需要一個高效、靈活、易於管理的後台管理系統來處理日常的操作事務。 React作為目前最受歡迎的JavaScript庫之一,提供了一種簡潔、高效和可維護的方式來建立使用者介面。本文將介紹如何利用React開發一個響應式的後台管理系統,並給出具體的程式碼範例。建立React專案首先

Pixel 9 Pro XL 與 iPhone 15 Pro Max 相機比較顯示谷歌在視頻和變焦性能方面取得了令人驚訝的勝利 Pixel 9 Pro XL 與 iPhone 15 Pro Max 相機比較顯示谷歌在視頻和變焦性能方面取得了令人驚訝的勝利 Aug 24, 2024 pm 12:32 PM

Google Pixel 9 Pro 和 Pro XL 是Google對三星 Galaxy S24 Ultra 和蘋果 iPhone 15 Pro 和 Pro Max 等產品的回應。 YouTube 上的 Daniel Sin(請觀看下文)將 Google Pixel 9 Pro XL 與 iPhone 15 Pro Max 進行了一些比較

Panasonic Lumix S9 供應短缺,儘管有負面報道,但仍完成富士 X100VI 的冒充行為 Panasonic Lumix S9 供應短缺,儘管有負面報道,但仍完成富士 X100VI 的冒充行為 Jun 14, 2024 am 09:36 AM

自從今年早些時候推出以來,松下 Lumix S9 就一直陷入爭議。

See all articles