React Native實(shí)現(xiàn)基于HLS協(xié)議的視頻直播應(yīng)用

React Native(以下簡(jiǎn)稱RN)給我們提供了一種開(kāi)發(fā)原生應(yīng)用的新方案,它允許我們用前端語(yǔ)言開(kāi)發(fā)跨平臺(tái)的原生應(yīng)用石挂,對(duì)于熟悉前端的開(kāi)發(fā)人員來(lái)說(shuō)可以用極低的成本開(kāi)發(fā)原生應(yīng)用崔泵。目前已經(jīng)有眾多線上案例舞萄。

一: 項(xiàng)目介紹

本文介紹的是基于RN實(shí)現(xiàn)的一款在特殊應(yīng)用場(chǎng)景下的視頻直播APP(以下稱為L(zhǎng)ive App),實(shí)現(xiàn)的功能有:

  • 基于HLS的視頻直播
  • 基于Socket的私有協(xié)議
  • 節(jié)目分類信息展示
  • 節(jié)目列表展示
  • 播放歷史展示
  • Android+IOS平臺(tái)支持


    全屏.png

應(yīng)用場(chǎng)景

應(yīng)用場(chǎng)景.png

注:家庭媒體中心是我們應(yīng)用場(chǎng)景下的server,可以理解成用戶家中的機(jī)頂盒


家庭媒體中心自帶路由功能管削,手機(jī)端通過(guò)WLAN連接到家庭媒體中心倒脓,至此Live App就可以從家庭媒體中心獲取頻道列表以及建立基于Socket的連接,實(shí)現(xiàn)App與家庭媒體中心的控制連接含思。

二: 第三方庫(kù)

目前Live App使用到的第三方庫(kù)主要有:

  • react-native-video
  • react-native-tcp
  • react-navigation
  • react-native-device-info
  • react-native-network-info
  • react-native-storage
  • react-native-splash-screen
  • react-native-scrollable-tab-view

為了做到跨平臺(tái)崎弃,在第三方庫(kù)選用的時(shí)候一定要注意其是否支持跨平臺(tái),不要將平臺(tái)兼容性問(wèn)題都遺留到測(cè)試階段含潘。

三: react-native-video使用介紹

RN本身并沒(méi)有提供原生的視頻播放組件饲做,這里我們使用官方推薦的第三方視頻播放組件react-native-video

在使用react-native-video庫(kù)遏弱。
react-native-video源碼中提供的三個(gè)主要文件android-exoplayer,android,ios盆均。
安卓平臺(tái)下實(shí)現(xiàn)基于HLS的視頻直播我們應(yīng)該使用android-exoplayer,官方對(duì)其的介紹是:

  • Android Video library built by Google, with a lot of support
  • Supports DASH, HlS, & SmoothStreaming adaptive streams
  • Supports formats such as MP4, M4A, FMP4, WebM, MKV, MP3, Ogg, WAV, MPEG-TS, MPEG-PS, FLV and ADTS (AAC).

若要使用exoplayer提供的功能漱逸,需要設(shè)置文件android/settings.gradle

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

至于IOS平臺(tái)可按官方文檔中介紹的使用泪姨。

四:react-native-tcp使用介紹

使用react-native-tcp的目的是實(shí)現(xiàn)基于Socket的私有協(xié)議,在Live App與家庭媒體中心之間我們規(guī)定了一套控制協(xié)議來(lái)實(shí)現(xiàn)諸如節(jié)目列表獲取饰抒,視頻播放等控制命令肮砾。
react-native-tcp使用到的API

  • Socket() 用來(lái)創(chuàng)建套接字
  • connect() 用來(lái)套接字的連接
  • write() 用來(lái)發(fā)送信息
  • on() 用來(lái)接收信息

在使用react-native-tcp是遇到Object Null的問(wèn)題,可以按照issue中提供的思路解決袋坑。

總結(jié)

作為一位前端開(kāi)發(fā)者仗处,在初次接觸RN的時(shí)候會(huì)被android和IOS開(kāi)發(fā)環(huán)境的搭建,編譯過(guò)程以及編譯報(bào)錯(cuò)而嚇到枣宫,但是當(dāng)你對(duì)開(kāi)發(fā)環(huán)境稍許了解后你會(huì)發(fā)現(xiàn)這真是一種特別棒的開(kāi)發(fā)體驗(yàn)婆誓。對(duì)公司或部門來(lái)說(shuō)RN提供了新的解決方案,對(duì)于前端開(kāi)發(fā)者來(lái)說(shuō)相當(dāng)于又有了新的戰(zhàn)場(chǎng)也颤。

在使用第三方庫(kù)餓過(guò)程中我們很可能會(huì)遇到各種各樣的坑洋幻,這里建議遇到問(wèn)題后首先到github上查看相關(guān)issue,大部分問(wèn)題都可以在這里得到答案歇拆。

Live App已經(jīng)實(shí)現(xiàn)了我們的主要應(yīng)用場(chǎng)景鞋屈,這足以證明在我們的應(yīng)用場(chǎng)景下使用RN開(kāi)發(fā)應(yīng)用是更高效的一種開(kāi)發(fā)方式范咨。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市厂庇,隨后出現(xiàn)的幾起案子渠啊,更是在濱河造成了極大的恐慌,老刑警劉巖权旷,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件替蛉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拄氯,警方通過(guò)查閱死者的電腦和手機(jī)躲查,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)译柏,“玉大人镣煮,你說(shuō)我怎么就攤上這事”陕螅” “怎么了典唇?”我有些...
    開(kāi)封第一講書人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胯府。 經(jīng)常有香客問(wèn)我介衔,道長(zhǎng),這世上最難降的妖魔是什么骂因? 我笑而不...
    開(kāi)封第一講書人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任炎咖,我火速辦了婚禮,結(jié)果婚禮上寒波,老公的妹妹穿的比我還像新娘乘盼。我一直安慰自己,他們只是感情好影所,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布蹦肴。 她就那樣靜靜地躺著,像睡著了一般猴娩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上勺阐,一...
    開(kāi)封第一講書人閱讀 51,692評(píng)論 1 305
  • 那天卷中,我揣著相機(jī)與錄音,去河邊找鬼渊抽。 笑死蟆豫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的懒闷。 我是一名探鬼主播十减,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼栈幸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了帮辟?” 一聲冷哼從身側(cè)響起速址,我...
    開(kāi)封第一講書人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎由驹,沒(méi)想到半個(gè)月后芍锚,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔓榄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年并炮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甥郑。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逃魄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出澜搅,到底是詐尸還是另有隱情伍俘,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布店展,位于F島的核電站养篓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏赂蕴。R本人自食惡果不足惜柳弄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望概说。 院中可真熱鬧碧注,春花似錦、人聲如沸糖赔。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)放典。三九已至逝变,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奋构,已是汗流浹背壳影。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留弥臼,地道東北人宴咧。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像径缅,于是被迫代替她去往敵國(guó)和親掺栅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烙肺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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