日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

视频直播技术:最大限度保障流畅性和清晰度

發布時間:2025/3/8 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 视频直播技术:最大限度保障流畅性和清晰度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

直播和互動直播在2017年引起了人們的極大關注,應運而生的各種直播類APP多如牛毛。隨著互動直播的逐漸興起,交互成為直播APP的強需求。然而,實際網絡中的丟包、延遲、抖動等問題仍然嚴重影響了直播的效果。

針對上述問題,本文介紹了網易云信直播的網絡QoS技術,旨在幫助讀者了解在極差網絡環境下如何最大限度的保障直播的流暢性和清晰度。

?

相關閱讀推薦

《視頻直播關鍵技術:流暢、擁塞和延時追趕》

《短視頻技術詳解:Android端的短視頻開發技術》

視頻直播技術之iOS端推流

?

流暢性和清晰度定義

觀眾在觀看直播或者與主播進行互動直播的過程中,對音視頻流暢性和清晰度的感受可以通過視頻幀率、視頻PSNR(或SSIM)分值、音頻MOS分值等客觀參數指標來表征。越高的視頻幀率帶來的視頻流暢性越高,越高的視頻PSNR(或SSIM)分值帶來的視頻清晰度越高,越高的音頻MOS分值帶來的音頻流暢性和清晰度越高。

那么,如何通過提高網絡QoS技術改善網絡質量,從而提高上述的客觀指標呢?下面我們就單向直播和互動直播分別進行介紹。

?

?

單向直播的流暢性和清晰度

這里的單向直播特指通過RTMP/TCP協議將音視頻流推送到CDN,然后觀眾拉流觀看的一種直播方式。

眾所周知,TCP是一個面向連接的傳輸層協議,協議本身保證了傳輸的可靠性。通過調用開源框架librtmp,開發者可以非常容易的實現RTMP推流服務。然而,在網絡出現丟包和抖動的時候,TCP的擁塞控制策略會限制推流端的發送碼率,使得觀眾端出現突發的拉流卡頓,影響音視頻的流暢性。

通常情況下,應對網絡丟包的策略有前向錯誤隱藏(FEC)、音頻RED冗余、重傳等,應對網絡帶寬受限有音視頻的自適應碼率調節策略。考慮到TCP協議的特殊性,我們無法設計靈活的重傳和自適應碼率調節策略,數據發送的多少和頻率完全由TCP協議本身控制。這種情況下,我們可以做的是及時有效的檢測網絡可用帶寬,并調節音視頻編碼器的輸出碼率,做到碼率自適應。

具體的實現方法是,通過平臺(ios、Android或者Windows)相關的TCP socket接口獲取網絡信息,感知網絡擁塞,估算得到可用帶寬,及時調節音視頻編碼器的設置碼率,防止音視頻卡頓發生,保證流暢性。

?

?

互動直播的流暢性和清晰度

這里的互動直播特指連麥者通過RTP/UDP協議將音視頻流推送到中轉服務器,進行混流后再通過RTMP/TCP協議推送到CDN,然后觀眾拉流觀看的直播方式。

UDP不同于TCP,協議本身不關心數據是否及時可靠到達對端,只是完成“發送”的操作。由此,我們可以采用種類繁多的技術手段保證UDP協議數據的可靠達到。例如:前向錯誤隱藏(FEC)、音頻RED冗余、重傳等策略。根據網絡狀況和媒體數據的不同,我們采取相應的策略。

按照如下的技術分別介紹:

  • 帶寬估計
  • 帶寬估計的作用是準確的獲得當前的可用網絡帶寬,進而指導音視頻編碼器的帶寬分配,使得實際發送碼率不超過可用帶寬,從而不會引起延時增加和丟包。常用的帶寬估計方法包括根據丟包或者延遲變化估計帶寬,Google的WebRTC中就包含了完整的帶寬估計方法,值得大家學習借鑒。

  • 錯誤隱藏
  • 當接收端收到的音視頻數據已經發生了丟失,我們該如何恢復數據呢?從音視頻解碼的角度看,可以通過視頻(音頻)前一幀或者多幀數據恢復丟失的數據。然而,常用的視頻錯誤隱藏方法往往會對恢復的圖像造成馬賽克現象,錯誤隱藏的效果不佳。所以大多數情況不采用這類錯誤隱藏技術,而是解碼之前會判斷一幀數據是否完整,完整的數據才會被送入解碼器,不完整的數據直接丟棄。音頻領域的錯誤隱藏是另一種情況,音頻的錯誤隱藏技術要普遍優于視頻的錯誤隱藏,流行的音頻壓縮標準Opus、iLBC、iSAC/SILK等,都含有自己的PLC(Packet Loss Concealment)模塊,解碼器在檢測到丟幀的時候會自動進行錯誤隱藏,實際效果還可以接受。

  • 前向糾錯
  • 前向糾錯技術相當于在發送端多發一部分數據,這部分數據可能是原始數據的復本,也可能是多份原始數據相互計算的結果。如果原始數據在傳輸過程中發生了丟失,那么這部分冗余數據就可以發揮作用,幫助恢復丟失的原始數據。當然了,這種策略犧牲的是有限的網絡帶寬。

    視頻數據區別于音頻數據的一個特點是,視頻的數據包較大,一般情況會接近MTU大小,同時觀眾對視頻數據的端到端延遲不如音頻數據敏感。因此可以采用數目較大的FEC分組進行前向糾錯。而音頻數據包較小,數據包頭在整個數據包中的占比相對視頻要高出很多,所以進行RED冗余能夠使多個音頻包復用同一個包頭,提高數據利用率。另一方面,如果音頻數據采用FEC進行前向糾錯,勢必會增加延遲,影響通話體驗。

    因此,視頻數據較適宜采用FEC技術進行前向糾錯,音頻數據較適宜采用RED技術進行冗余操作。

  • 重傳
  • 除了前向糾錯技術,在網絡RTT較小的時候,我們也可以向發送端請求網絡中丟失的數據包,這就是重傳技術。這個技術適用于網絡RTT較小的情況,相比于FEC和RED,重傳可以大幅提高帶寬利用率,做到“丟哪個包要哪個包”,有針對性的重傳丟失的數據包。

    考慮到觀眾對音頻數據的敏感性,除非網絡RTT很小,否則音頻一般不采用重傳技術。視頻較多采用重傳技術進行錯誤恢復,根據重傳請求數據的不同又分為I幀請求和數據包請求。

    I幀請求是當接收端無法繼續解碼,而且發送端的GOP長度又很長的時候,需要及時請求發送端發送I幀,使得接收端根據這個I幀可以盡快恢復顯示。數據包請求則是根據丟失的數據包,向發送端有針對性的請求,這種情況下發送端需要緩存已經發出去的數據包,以備后續接收端的請求。

    ?

    以上簡單介紹了直播中提高流暢性和清晰度的幾種方法和策略。實際使用中還需要考慮多種技術的有機結合,以及服務器端與客戶端的相互配合,并結合用戶使用場景和客戶端設備性能等因素綜合考慮。

    另外,想要獲取更多產品干貨、技術干貨,記得關注網易云信博客

    ?

    總結

    以上是生活随笔為你收集整理的视频直播技术:最大限度保障流畅性和清晰度的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。