React Native封裝視頻播放器組件

前言

videoPlayer視頻播放器Demo是從作者前段時間開源的RN項目OneM中抽離出來的獨立的Demo示例型型,如果想看完整的OneM項目請點擊,Demo示例支持iOS法梯、Android雙平臺運行勾缭。

預(yù)覽效果圖

gif

播放器支持功能

  • 支持播放 \ 暫停
  • 支持橫豎屏切換
  • 支持鎖屏
  • 支持緩存播放及緩存進(jìn)度
  • 支持播放進(jìn)度拖拽到指定位置播放

使用到的技術(shù)點

  • 項目使用到react-native-video媒體播放組件
  • IconFont字體react-native-vector-icons提揍,以及自定義的字體庫
  • 使用到react-native-orientation組件來完成橫豎屏切換

核心代碼

<Video source={{uri: url}}
               ref={ref => this.player = ref}
               rate={this.state.rate}
               volume={1.0}
               muted={false}
               paused={this.state.paused}
               resizeMode="cover"
               repeat={true}
               playInBackground={false}
               playWhenInactive={false}
               ignoreSilentSwitch={"ignore"}
               progressUpdateInterval={250.0}
               onLoadStart={(data) => this.loadStart(data)}
               onLoad={data => this.setDuration(data)}
               onProgress={(data) => this.setTime(data)}
               onEnd={(data) => this.onEnd(data)}
               onError={(data) => this.videoError(data)}
               onBuffer={(data) => this.onBuffer(data)}
               onTimedMetadata={(data) => this.onTimedMetadata(data)}
               style={[styles.videoPlayer]}
        />

react-native-video 組件使用講解

<Video source={{uri: "background"}}   // Can be a URL or a local file.
       ref={(ref) => {
         this.player = ref
       }}                                      // Store reference
       rate={1.0}                              // 0 is paused, 1 is normal.
       volume={1.0}                            // 0 is muted, 1 is normal.
       muted={false}                           // Mutes the audio entirely.
       paused={false}                          // Pauses playback entirely.
       resizeMode="cover"                      // Fill the whole screen at aspect ratio.*
       repeat={true}                           // Repeat forever.
       playInBackground={false}                // Audio continues to play when app entering background.
       playWhenInactive={false}                // [iOS] Video continues to play when control or notification center are shown.
       ignoreSilentSwitch={"ignore"}           // [iOS] ignore | obey - When 'ignore', audio will still play with the iOS hard silent switch set to silent. When 'obey', audio will toggle with the switch. When not specified, will inherit audio settings as usual.
       progressUpdateInterval={250.0}          // [iOS] Interval to fire onProgress (default to ~250ms)
       onLoadStart={this.loadStart}            // Callback when video starts to load
       onLoad={this.setDuration}               // Callback when video loads
       onProgress={this.setTime}               // Callback every ~250ms with currentTime
       onEnd={this.onEnd}                      // Callback when playback finishes
       onError={this.videoError}               // Callback when video cannot be loaded
       onBuffer={this.onBuffer}                // Callback when remote video is buffering
       onTimedMetadata={this.onTimedMetadata}  // Callback when the stream receive some metadata
       style={styles.backgroundVideo} />
       

Android拓展用法

<Video source={{uri: "background", mainVer: 1, patchVer: 0}} // Looks for .mp4 file (background.mp4) in the given expansion version.
       rate={1.0}                   // 0 is paused, 1 is normal.
       volume={1.0}                 // 0 is muted, 1 is normal.
       muted={false}                // Mutes the audio entirely.
       paused={false}               // Pauses playback entirely.
       resizeMode="cover"           // Fill the whole screen at aspect ratio.
       repeat={true}                // Repeat forever.
       onLoadStart={this.loadStart} // Callback when video starts to load
       onLoad={this.setDuration}    // Callback when video loads
       onProgress={this.setTime}    // Callback every ~250ms with currentTime
       onEnd={this.onEnd}           // Callback when playback finishes
       onError={this.videoError}    // Callback when video cannot be loaded
       style={styles.backgroundVideo} />

詳細(xì)的react-native-video使用方法請參照官方文檔:https://github.com/react-native-community/react-native-video

react-native-video組件使用步驟

  • npm install react-native-video --save
  • react-native link react-native-video --save

播放器Demo源碼

https://github.com/guangqiang-liu/react-native-video-demo

查看IconFont功能請參考

自定義IconFont庫

同時作者使用react-native-video組件也開源了一個音樂播放器Demo示例,有興趣的同學(xué)也可以點擊查看學(xué)習(xí)畸冲。

http://www.reibang.com/p/7ddaf6ae9dd2

總結(jié)

視頻播放器功能和作者開源的音樂播放器差不多嫉髓,都是使用react-native-video組件進(jìn)行封裝的,很多地方的處理邏輯都是一樣的邑闲,建議同學(xué)們兩個示例項目結(jié)合著學(xué)習(xí)算行。如果感覺這篇文章對你有幫助 請 給個 star 給個關(guān)注 謝謝。

福利時間

  • 作者React Native開源項目OneM地址(按照企業(yè)開發(fā)標(biāo)準(zhǔn)搭建框架設(shè)計開發(fā)):https://github.com/guangqiang-liu/OneM (歡迎小伙伴們 star)
  • 作者簡書主頁:包含50多篇RN開發(fā)相關(guān)的技術(shù)文章http://www.reibang.com/u/023338566ca5 (歡迎小伙伴們:多多關(guān)注苫耸,多多點贊)
  • 作者React Native QQ技術(shù)交流群:620792950 歡迎小伙伴進(jìn)群交流學(xué)習(xí)
  • 友情提示:在開發(fā)中有遇到RN相關(guān)的技術(shù)問題州邢,歡迎小伙伴加入交流群(620792950),在群里提問褪子、互相交流學(xué)習(xí)量淌。交流群也定期更新最新的RN學(xué)習(xí)資料給大家,謝謝支持嫌褪!
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末呀枢,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子笼痛,更是在濱河造成了極大的恐慌裙秋,老刑警劉巖琅拌,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摘刑,居然都是意外死亡进宝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進(jìn)店門枷恕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來即彪,“玉大人,你說我怎么就攤上這事活尊×バ#” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵蛹锰,是天一觀的道長深胳。 經(jīng)常有香客問我,道長铜犬,這世上最難降的妖魔是什么舞终? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮癣猾,結(jié)果婚禮上敛劝,老公的妹妹穿的比我還像新娘。我一直安慰自己纷宇,他們只是感情好夸盟,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著像捶,像睡著了一般上陕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上拓春,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天释簿,我揣著相機(jī)與錄音,去河邊找鬼硼莽。 笑死庶溶,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懂鸵。 我是一名探鬼主播偏螺,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼矾瑰!你這毒婦竟也來了砖茸?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤殴穴,失蹤者是張志新(化名)和其女友劉穎凉夯,沒想到半個月后货葬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡劲够,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年震桶,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片征绎。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡蹲姐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出人柿,到底是詐尸還是另有隱情柴墩,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布凫岖,位于F島的核電站江咳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哥放。R本人自食惡果不足惜歼指,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望甥雕。 院中可真熱鬧踩身,春花似錦、人聲如沸社露。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呵哨。三九已至赁濒,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間孟害,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工挪拟, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留挨务,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓玉组,卻偏偏與公主長得像谎柄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子惯雳,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容