RTMP播放器开发填坑之道
好多開發者提到,在目前開源播放器如此泛濫的情況下,為什么還需要做自研框架的RTMP播放器,自研和開源播放器,到底好在哪些方面?以下大概聊聊我們的一點經驗,感興趣的,可以關注?github:
1.?低延遲:大多數RTMP的播放都面向直播場景,如果延遲過大,嚴重影響體驗,所以,低延遲是衡量一個好的RTMP播放器非常重要的指標,目前大牛直播SDK的RTMP直播播放延遲比開源播放器更優異(大牛直播SDK延遲在1秒左右,開源播放器如VLC,延遲在5-7秒),而且長時間運行下,大牛直播SDK播放端不會造成延遲累積,開源或第三方播放器,長時間運行,容易產生延遲累積;
部分服務器會緩存GOP,確??焖賹崿F首屏播放,又不影響延遲,對此,我們設計了快速啟動接口,快速render第一幀的同時,追到最新的播放數據:
2. 音視頻同步處理:大多播放器為了追求低延遲,甚至不做音視頻同步,拿到audio video直接播放,導致a/v不同步,還有就是時間戳亂跳等各種問題,大牛直播SDK提供的播放器,具備好的時間戳同步和異常時間戳矯正機制;
備注:如果是超低延遲模式下,可以0 buffer,不做音視頻同步:
3. 支持多實例:大牛直播SDK提供的RTMP直播播放SDK支持在設備性能允許的情況下,支持多實例播放RTMP流數據,大多開源播放器對多實例支持不太友好;
除了常規的多實例外,比如大屏監控場景下,盡管我們CPU占用已經是行業內非常低的了,但是好多廠家下,不是每路都需要全幀播放,針對此種情況,我們做了實時只播放關鍵幀和全幀播放的接口設計,比如8個實例,其中不太重要的幾路數據,可以設置只播放關鍵幀,需要重點關注時,點擊全幀率播放即可,這樣既節省了系統開銷,又實現了多路播放的目的:
4. 支持buffer time設置:在一些有網絡抖動的場景,播放器需要支持buffer time設置,一般來說,以毫秒計,開源播放器對此支持不夠友好;
5. 實時靜音:比如,多窗口播放RTMP流,如果每個audio都播放出來,體驗非常不好,所以實時靜音功能非常必要,開源播放器不具備實時靜音功能;
6. 視頻view旋轉:好多攝像頭由于安裝限制,導致圖像倒置,所以一個好的RTMP播放器應該支持如視頻view實時旋轉(0° 90° 180° 270°)、水平反轉、垂直反轉,開源或第三方播放器不具備此功能;
7. 支持解碼后audio/video數據輸出:大牛直播SDK接觸到好多開發者,希望能在播放的同時,獲取到YUV或RGB數據,進行人臉匹配等算法分析,開源播放器不具備此功能;
8. 實時快照:感興趣或重要的畫面,實時截取下來非常必要,一般播放器不具備快照能力,開源播放器不具備此功能;
9. 網絡抖動處理(如斷網重連):穩定的網絡處理機制、支持如斷網重連等,開源播放器對網絡異常處理支持較差;
10. 長期運行穩定性:大牛直播SDK提供的RTMP直播播放SDK適用于長時間運行,開源播放器對長時間運行穩定性支持較差;
11. 實時下載速度反饋:大牛直播SDK提供音視頻流實時下載回調,并可設置回調時間間隔,確保實時下載速度反饋,以此來監聽網絡狀態,開源播放器不具備此能力;
12. 異常狀態處理、Event狀態回調:如播放的過程中斷網,大牛直播SDK提供的播放器可實時回調相關狀態,確保上層模塊感知處理,開源播放器對此支持不好;
13. 設置視頻填充模式(等比例顯示):好多情況下,有些場景需要全view鋪滿播放,有些為了防止視頻拉伸,可以設置成等比例縮放顯示;
14. D3D檢測:一般來說市面上的大多Windows都支持D3D,有些小眾化的,只支持GDI模式繪制,所以為了更好的兼容性,這個接口非常必要;
15. 實時音量調節:實時音量調節特別是在多路播放的場景下,如大屏窗體環境下,通過更細粒度的音量調節,實現更好的播放體驗;
16. 只播放關鍵幀:特別是大屏多實例場景播放的時候,盡管我們已經CPU占用非常低了,如果只是查看大概的監控情景,實現更多路的播放,只播放關鍵幀是個非常好的功能點,如果需要原始幀播放,可以實時調節即可;
17. 特定機型硬解碼:特定機型硬解碼,也主要是用于多路播放場景下,通過硬解碼,實現更低的CPU占用目的。
總結
以上是生活随笔為你收集整理的RTMP播放器开发填坑之道的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【学术相关】11 个好用的科研工具推荐!
- 下一篇: Numpy简易入门