webrtc音頻引擎總結

    該篇文章將基於voice_engine模塊對webrt音頻做個總結,但是不包括網絡傳輸部分的細節介紹。關於webrtc的網絡模塊,將會在接下來的時間以單獨的網絡模塊介紹與大家分享。

   voice_engine 引擎模塊的代碼結構


include文件夾下的所有.h文件,都是在調用webrtc音頻引擎的時候必須包含的頭文件。其中現在的版本沒有voe_file.h頭文件,我的這個版本本來沒有,早期的版本是有該頭文件滴,我加這個是爲了解決新版的語音錄音存儲,因爲公司要保持錄音文件。


該模塊除include下還有很多的文件,不能一一介紹,有一定知識基礎的可以自行研究,下面我只介紹下學習瀏覽這些源碼的方法。

 

      voice_engine模塊主要是一個集成模塊,把音頻處理相關的業務、網絡傳輸、編解碼、採集播放、已經前面幾篇介紹的工程集成到一個模塊,這樣我們在使用的時候就不用自己去組裝這些模塊,直接調用voice_engine就可以實現音頻通話。

      我們知道在語音通話中有源和源的受體,源需要產生聲音,源要通過介質傳輸到受體,然後受體才能聽到聲音,所謂的webrtc引擎實際上解決的就是該問題。

     1,源的產生,也是前面介紹的audio_device模塊,由該模塊從源採集數據,從而產生的數字音頻源;

     2,源的處理-採集,由於直接採集的源數據,可能參雜着一些雜質,比如噪音,我們就需要對源數據進行處理,那麼相應的就有audio_processing等相關模塊對採集的數據進行處理; 然後進行數據的壓縮,爲傳輸做準備。

     3,源的傳輸,網絡的傳輸基本都是基於UPD或者TCP進行數據傳輸,webrtc採用的是基於UDP的RTP傳輸協議和RTCP傳輸控制協議進行傳輸;

     4,源的處理-播放,由於收到的數據都是經過壓縮的音頻數據,所以我們就需要進行解壓處理。如果涉及到多路音頻,我們可能還需要進行混音播放處理;也是通過audio_processing等相關模塊進行處理;

     5,源的播放,該模塊也是使用audio_device進行處理播放。

   基本根據上面的5步能完成整個音頻數據的交互。兩個人進行音頻會話,每個人完成一次1~5的步驟就可以進行一次時事通話了。

  
   這裏重點提一下多人會話的情況:

    webrtc在進行多人音頻或者視頻會話的時候,都會進行寫重複的操作。同時與多少個人進行會話就會編碼壓縮多少次,也會重複傳輸相同的數據多少次。  也就是1~5步驟的2和3操作存在冗餘的情況。這樣操作會消耗更多的CPU、內存以及帶寬資源。(這個地方回家再具體給大家補上,現在上班了,沒有相關軟件畫圖指明,因爲版權原因公司不能隨便安裝沒有購買版權的軟件)


      


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章