直播軟件開(kāi)發(fā),低延遲視頻流播放的方案
直播軟件開(kāi)發(fā)的視頻流不僅僅是在本地傳播,還需要考慮到跨地區(qū)傳遞時(shí)網(wǎng)絡(luò)情況、帶寬限制等,當(dāng)然對(duì)于免費(fèi)直播軟件開(kāi)發(fā)視頻流的要求自然是低延遲、低資源消耗。但真正達(dá)到這兩點(diǎn)并不容易。
?

一、最經(jīng)典的直播系統(tǒng)方案
不論是web端還是APP端,RTMP協(xié)議永遠(yuǎn)都屬于優(yōu)先考慮使用的實(shí)時(shí)傳輸協(xié)議,延遲低、實(shí)時(shí)性好。不過(guò)過(guò)了今年之后,RTMP協(xié)議在web端的應(yīng)用可能會(huì)受到影響,瀏覽器需要借助flash插件才能播放,但今年12月之后,瀏覽器不再支持flash插件的應(yīng)用。
盡管我們還有RTSP、HLS等協(xié)議,但對(duì)于免費(fèi)直播軟件開(kāi)發(fā)來(lái)說(shuō),RTSP更適合視頻監(jiān)控、視頻會(huì)議、IP電話等場(chǎng)景;而HLS則延遲太高不符合要求。
?

二、低延遲優(yōu)化
通過(guò)對(duì)比,現(xiàn)在RTMP仍然是最優(yōu)的傳輸協(xié)議,那么如何對(duì)RTSP協(xié)議進(jìn)行優(yōu)化降低延遲呢?
1.推流端ffmpeg可以通過(guò)控制一些參數(shù)來(lái)降低推流的延遲,比如提高編碼的效率、減少緩沖大小等,必要情況下會(huì)犧牲一部分視頻質(zhì)量來(lái)彌補(bǔ)延遲造成的缺口。
2.拉流端flvjs可以開(kāi)啟enableStashBuffer來(lái)提高實(shí)時(shí)性。
?

三、如何實(shí)現(xiàn)多線程優(yōu)化
視頻的解碼,對(duì)CPU來(lái)說(shuō)占用率很高,這也是為什么直播軟件開(kāi)發(fā)會(huì)在必要情況下?tīng)奚徊糠忠曨l質(zhì)量、降低視頻分辨率等手段來(lái)降低視頻碼率,雖然不能太好的降低CPU的消耗情況,但最起碼能保證JSMpeg播放器不會(huì)崩潰。就是說(shuō)用戶(hù)雖然觀感上會(huì)受到影響,但還不至于不能看直播。
用戶(hù)的實(shí)際觀看場(chǎng)景中,可能存在一個(gè)瀏覽器播放多路視頻的情況,基于不同視頻網(wǎng)站的播放線路不同,如果所有的視頻都在瀏覽器主進(jìn)程中進(jìn)行解碼渲染,頁(yè)面操作會(huì)非常的差。針對(duì)直播軟件開(kāi)發(fā)的解碼播放情況,這種問(wèn)題同樣存在,為了降低影響,最好將JSMpeg分離到worker中,保證主進(jìn)程可以響應(yīng)用戶(hù)交互的同時(shí),保證JSMpeg崩潰不會(huì)連累主進(jìn)程。
?
如果以上方法還不行,不足以降低直播軟件開(kāi)發(fā)的延遲,還可以通過(guò)調(diào)節(jié)播放的速度、丟掉積累的幀來(lái)保證延遲帶來(lái)的影響。
聲明:以上內(nèi)容為云豹科技作者本人原創(chuàng),未經(jīng)作者本人同意,禁止轉(zhuǎn)載,否則將追究相關(guān)法律責(zé)任