直播 背景 技术体系 乐视云直播Demo
生活随笔
收集整理的這篇文章主要介紹了
直播 背景 技术体系 乐视云直播Demo
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
背景
最近工作需要做一款直播APP,恩是的,從RTMP協(xié)議的實(shí)現(xiàn)開始到處理服務(wù)器高并發(fā)、負(fù)載均衡、客戶端播放器實(shí)現(xiàn)等等等.....估計(jì)全部寫完我也到而立之年了吧......BOSS們估計(jì)也是發(fā)現(xiàn)了我的困惑,所以打算集成第三方sdk開發(fā),現(xiàn)在大部分的直播產(chǎn)品都會(huì)借助第三方的直播技術(shù),這樣也可以保證直播的質(zhì)量。最后著重測(cè)試的還是阿里云和樂視云的第三方sdk,阿里云的直播產(chǎn)品剛出不久,感覺文檔以及調(diào)試過程還不是很清晰,現(xiàn)在一直沒弄明白為啥推流推出去了但是另外一邊拉流拉不了,也不知道是播放器的問題還是咋的,用戰(zhàn)旗的直播間測(cè)試就可以拉到流,希望有大牛可以在評(píng)論區(qū)告知一二。本文講的是樂視云直播Demo的使用過程,感覺樂視在文檔邏輯上比阿里云還是強(qiáng)很多的至少,條理清晰邏輯嚴(yán)謹(jǐn),能讓新手很快找到方向。那么本文的目的呢,是給出一個(gè)最簡(jiǎn)單清晰的Demo整理路線,讓各位做到真正的1分鐘看懂實(shí)現(xiàn)集成樂視sdk的直播Demo實(shí)現(xiàn)過程。
樂視云直播測(cè)試案例
- 登陸注冊(cè),進(jìn)入后在頂部產(chǎn)品項(xiàng)里選擇移動(dòng)直播,文檔在這里
- 進(jìn)入移動(dòng)直播頁(yè)面后,點(diǎn)擊免費(fèi)開通(免費(fèi)使用5G流量)
- 進(jìn)入移動(dòng)直播"應(yīng)用管理"界面,點(diǎn)擊創(chuàng)建應(yīng)用,只需輸入名字、類型、平臺(tái)就可以了,之后我們會(huì)看到幾個(gè)很重要的參數(shù):推流域名、播放域名、發(fā)布點(diǎn)名稱(live)以及簽名密鑰,有了這幾個(gè)東西,我們就可以開始直播測(cè)試了。
- 我們可以進(jìn)行清晰度選擇、錄制、安全等設(shè)置
- 分別下載推流SDK和播放SDK,將內(nèi)含的Demo運(yùn)行到手機(jī)上。
- 推流端配置。打開手機(jī)的推流端應(yīng)用,依次輸入推流域名,簽名密鑰,以及流名稱。然后點(diǎn)擊開始直播,就可以直播推流了。
- 播放端配置。只需設(shè)置播放地址即可,如【rtmp://17546.mpush.live.lecloud.com/live/bqt】
- 直播過程中,可對(duì)所有"直播流"進(jìn)行控制
樂視推流端部分代碼(設(shè)置自己的參數(shù))
/**?*?無皮膚版和有皮膚版的區(qū)別?*?無皮膚:SDK不去猜測(cè)你的業(yè)務(wù)邏輯。只是提供最基本的接口,比如開始推流、切換濾鏡、切換攝像頭等。?*?有皮膚:SDK提供一種業(yè)務(wù)邏輯的使用辦法。比如DEMO中展示的,你點(diǎn)擊按鈕就可以開始推流,點(diǎn)擊下方各個(gè)圖標(biāo)就能實(shí)現(xiàn)功能切換等?*?*?*?1、所有推流SDK功能和最簡(jiǎn)單的DEMO,可以直接查看RecorderTestActivity?*?其中:如果移動(dòng)直播查看CameraView,云直播查看LeCameraView?*?*?????2、在AndroidManifest.xml?中,我們默認(rèn)設(shè)置MainActivity的啟動(dòng)方式,MainAcivity提供了漂亮的UI界面。?*?????如果你需要看看?RecorderTestActivity?的運(yùn)行效果,需要自己在AndroidManifest.xml中進(jìn)行設(shè)置,使用RecorderTestActivity直接啟動(dòng)就行了?*?*?????3、對(duì)于我們提供的UI層,理論不建議修改,但是如果你們確實(shí)需要,也可以自己修改,但是出現(xiàn)任何BUG需要自己調(diào)試。?*/public?class?MainActivity?extends?Activity?{????//?移動(dòng)直播【推流域名】,在官網(wǎng)移動(dòng)直播創(chuàng)建應(yīng)用后可拿到????private?static?final?String?DEFAULT_DOMAINNAME?=?"17546.mpush.live.lecloud.com";//216.mpush.live.lecloud.com????//?移動(dòng)直播【推流簽名密鑰】,在官網(wǎng)移動(dòng)直播創(chuàng)建應(yīng)用后可拿到????private?static?final?String?DEFAULT_APPKEY?=?"V86NL7KWKW1SL530F1KN";//KIVK8X67PSPU9518B1WA????//?移動(dòng)直播【推流地址】,?當(dāng)用戶知道自己需要推流的地址后可以使用????private?static?final?String?DEFAULT_PUSHSTREAM?=?"rtmp://17546.mpush.live.lecloud.com/live/bqt";//rtmp://216.mpush.live.lecloud.com/live/demo????//?樂視云直播推流【用戶ID】,用戶可以在官網(wǎng)用戶中心拿到。另外,我的UUID為yt1jdrioib????private?static?final?String?DEFAULT_LETV_USERID?=?"835278";//800053????//樂視云直播推流【用戶私鑰】,用戶可以在官網(wǎng)用戶中心拿到????private?static?final?String?DEFAULT_LETV_APPKEY?=?"14659a5bf736682623ca3f2f69129a16";//60ca65970dc1a15ad421d46f524b99b7????//樂視【云直播推流ID】,用戶開通云直播功能,可以在創(chuàng)建活動(dòng)后拿到????private?static?final?String?DEFAULT_LETV_STREAMID?=?"A2016120500000gx";????//默認(rèn)流名稱使用的是設(shè)備的IMEI號(hào)????private?String?default_streamid?=?"IMEI";技術(shù)實(shí)現(xiàn)層面
技術(shù)相對(duì)都比較成熟,設(shè)備也都支持硬編碼。github上有現(xiàn)成的開源實(shí)現(xiàn),推流、美顏、水印、彈幕、點(diǎn)贊動(dòng)畫、濾鏡、播放都有。技術(shù)其實(shí)不是很難,而且現(xiàn)在很多云廠商都提供SDK,七牛云、金山云、樂視云、騰訊云、百度云、斗魚直播伴侶推流端,功能幾乎都是一樣的,沒啥亮點(diǎn),不同的是整個(gè)直播平臺(tái)服務(wù)差異和接入的簡(jiǎn)易性。后端現(xiàn)在 RTMP/HTTP-FLV 清一色,App掛個(gè)源站直接接入云廠商或CDN就OK。直播優(yōu)化層面
其實(shí)最難的難點(diǎn)是提高首播時(shí)間、服務(wù)質(zhì)量Qos(Quality of Service),如何在丟包率20%的情況下還能保障穩(wěn)定、流暢的直播體驗(yàn),需要考慮以下方案:- 1.為加快首播時(shí)間,收流服務(wù)器主動(dòng)推送 GOP :(Group of Pictures:策略影響編碼質(zhì)量)。所謂GOP,意思是畫面組,一個(gè)GOP就是一組連續(xù)的畫面至邊緣節(jié)點(diǎn),邊緣節(jié)點(diǎn)緩存 GOP,播放端則可以快速加載,減少回源延遲
- 2.GOP丟幀,為解決延時(shí),為什么會(huì)有延時(shí),網(wǎng)絡(luò)抖動(dòng)、網(wǎng)絡(luò)擁塞導(dǎo)致的數(shù)據(jù)發(fā)送不出去,丟完之后所有的時(shí)間戳都要修改,切記。要不客戶端就會(huì)卡一個(gè) GOP的時(shí)間,是由于 PTS(Presentation Time Stamp,PTS主要用于度量解碼后的視頻幀什么時(shí)候被顯示出來) 和 DTS 的原因,或者播放器修正 DTS 和 PTS 也行(推流端丟GOD更復(fù)雜,丟 p 幀之前的 i 幀會(huì)花屏)
- 3.純音頻丟幀,要解決音視頻不同步的問題,要讓視頻的delta增量到你丟掉音頻的delta之后,再發(fā)音頻,要不就會(huì)音視頻不同步
- 4.源站主備切換和斷線重連
- 5.根據(jù)TCP擁塞窗口做智能調(diào)度,當(dāng)擁塞窗口過大說明節(jié)點(diǎn)服務(wù)質(zhì)量不佳,需要切換節(jié)點(diǎn)和故障排查
- 6.增加上行、下行帶寬探測(cè)接口,當(dāng)帶寬不滿足時(shí)降低視頻質(zhì)量,即降低碼率
- 7.定時(shí)獲取最優(yōu)的推流、拉流鏈路IP,盡可能保證提供最好的服務(wù)
- 8.監(jiān)控必須要,監(jiān)控各個(gè)節(jié)點(diǎn)的Qos狀態(tài),來做整個(gè)平臺(tái)的資源配置優(yōu)化和調(diào)度
- 9.如果產(chǎn)品從推流端、CDN、播放器都是自家的,保障 Qos 優(yōu)勢(shì)非常大
- 10.當(dāng)直播量非常大時(shí),要加入集群管理和調(diào)度,保障 Qos
- 11.播放端通過增加延時(shí)來減少網(wǎng)絡(luò)抖動(dòng),通過快播來減少延時(shí)。
運(yùn)營(yíng)成本和客戶體驗(yàn)
根據(jù)網(wǎng)上的數(shù)據(jù),斗魚 TV 為 3 億人民幣,戰(zhàn)旗 TV 為 1.5 億人民幣,龍珠為 1.2 億人民幣,虎牙為 3000 萬 + 人民幣。運(yùn)營(yíng)和推廣:這個(gè)就比較燒錢了,一些做移動(dòng)直播、游戲直播、秀場(chǎng)直播的A輪至少得上千萬。用戶體驗(yàn):流暢、不卡頓、不花屏、斷線重連、丟包策略、首畫加載速度、豐富的禮物系統(tǒng),為了提高用戶體驗(yàn),可以在后臺(tái)加載其他頁(yè)面數(shù)據(jù),但要在用戶體驗(yàn)和內(nèi)存優(yōu)化方面找到平衡點(diǎn)。流媒體傳輸
- TCP:TCP為點(diǎn)對(duì)點(diǎn)的協(xié)議,雖然能保證了數(shù)據(jù)傳輸?shù)目煽啃?#xff0c;但是對(duì)服務(wù)器資源耗費(fèi)較大,在數(shù)據(jù)流大的場(chǎng)合難以保證數(shù)據(jù)流傳輸?shù)膶?shí)時(shí)性。
- UDP:UDP為不可靠傳輸協(xié)議,不需要維護(hù)連接狀態(tài),也不認(rèn)為每個(gè)數(shù)據(jù)包都必須到達(dá)接受端,因此網(wǎng)絡(luò)負(fù)荷比TCP小,傳輸速度也要比TCP快;但在網(wǎng)絡(luò)越擁擠時(shí),越有更多的數(shù)據(jù)包丟失。
- RTMP:RTMP一個(gè)專門為高效傳輸視頻、音頻和數(shù)據(jù)而設(shè)計(jì)的協(xié)議,它通過建立一個(gè)二進(jìn)制TCP連接或者連接HTTP隧道實(shí)現(xiàn)實(shí)時(shí)的視頻和聲音傳輸。
- FFmpeg:FFmpeg是一套可以用來記錄、轉(zhuǎn)換數(shù)字音頻、視頻,并能將其轉(zhuǎn)化為流的開源計(jì)算機(jī)程序。采用LGPL或GPL許可證。它提供了錄制、轉(zhuǎn)換以及流化音視頻的完整解決方案。
備用服務(wù)器
給沒架設(shè)服務(wù)器的朋友來一套福利:備用服務(wù)器地址(親測(cè)可用):rtmp://live.hkstv.hk.lxdns.com:1935/live/stream123
rtmp://live.hkstv.hk.lxdns.com:1935/live/hks(將hks名稱改成其他的,比如aaa)
rtmp://202.69.69.180:443/live/aaa(rtmp://202.69.69.180:443/webcast/bshdlive-pc)
rtmp://v1.one-tv.com:1935/live/aaa(rtmp://v1.one-tv.com:1935/live/mpegts.stream)
rtmp://203.207.99.19:1935/live/aaa(rtmp://203.207.99.19:1935/live/CCTV1)
rtmp://202.117.80.19:1935/live/aaa(rtmp://202.117.80.19:1935/live/live4)
rtmp://ams.studytv.cn/live/aaa(rtmp://ams.studytv.cn/livepkgr/264)
rtmp://60.174.36.89:1935/live/aaa(rtmp://60.174.36.89:1935/live/vod3)
轉(zhuǎn)載于:https://www.cnblogs.com/baiqiantao/p/7f23d3e0eaf1f91d60c4c2f296707493.html
總結(jié)
以上是生活随笔為你收集整理的直播 背景 技术体系 乐视云直播Demo的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第5月第8天 jsonmodel
- 下一篇: 生成器的使用