知其然要知其所以然,只有了解了OBS和直播的邏輯,才能找到對應的解決辦法,所以做了大量的技術調研。我們來看下目前傳統直播的流程。如下圖
從推流到播放,會引入延遲的環節有編碼延遲、網絡丟包和網絡抖動、視頻的分段傳輸、節點、播放器的緩存等等。由于RTMP基于TCP不會丟包,所以當網絡狀態差時,服務器會將包緩存起來,導致累計的延遲。一個經過優化的RTMP-CDN網絡端到端的延遲大概在2-3秒,移動端考慮兼容性多為HLS流即M3U8協議,延遲會更高,基于15秒到1分鐘之間。
我們從上得知RTMP協議是無法修改的,CDN拉流是目前行業已經成熟的方案,如果要基于這套傳輸鏈路,只能從OBS的軟件編碼配置上優化。OBS確實也提供了低延遲的方案,如下圖。
這一套參數的邏輯就是盡可能的優化編碼和緩存,達到低延遲的效果,解決了推流部分的問題,但極容易造成推流卡頓,也并沒有解決移動端HLS拉流延遲的問題,所以這不是最優方案。
別走,干貨來了,OBS無延遲最優解
正當我發愁的時候,發現我們公司采購的直播平臺推出了無延遲的直播模式,所以我趕緊去創建無延遲直播間體驗了一下,發現確實是沒什么延遲的。
特別好奇怎么做到的,我打開了該直播平臺的軟件目錄,發現基本上和OBS一致,所以我斷定OBS也可以做真正的無延遲。
左邊是公司采購的直播平臺目錄,右邊是OBS Studio的安裝目錄
經過對比后,我發現相比于OBS,該平臺的直播軟件多出來了幾個dll庫文件,其中有些關鍵信息RTC。
RTC這個協議是谷歌提出的開放實時通信框架,確實能實現實時交互,難道是在OBS中加入RTC?帶著這份好奇,我專門咨詢了該平臺的售后,他們說近期會推出OBS無延遲的插件,豁然開朗,那我就等等。
終于在經過一段時間的等待后,我拿到了OBS的無延遲插件包,確實如我所想,是將他們自主研發的RTC庫打包到了OBS中,在經過一定的文件配置后就可以實現無延遲直播了。配置的流程大致如下。
大家點擊查看吧