網絡語音視頻技術淺議 Visual Studio 2010(轉)

      咱們在開發實踐中經常會涉及到網絡語音視頻技術。諸如即時通信、視頻會議、遠程醫療、遠程教育、網絡監控等等,這些網絡多媒體應用系統都離不開網絡語音視頻技術。本人才疏學淺,對於網絡語音視頻技術也僅僅是略知皮毛,這裏只想將本身瞭解到的一些最基礎的知識分享給你們,管中窺豹,略見一斑,更重要的是拋磚引玉,但願更多的朋友們一塊兒來探討,同時,有講得不正確的地方也但願你們批評指正。html

 

一.基本流程

   不管是即時通信、視頻會議,仍是遠程醫療、遠程教育、網絡監控等等系統,都須要獲取到遠程的語音、視頻信息,在咱們的直觀印象中好像咱們就是直接的訪問到了對方的攝像頭,麥克風、顯示器、聲卡等等設備,可是事實上這些語音視頻信息要通過以下的基本流程才能呈如今咱們的面前。 算法

    就拿我最近正在研究的 OMCS 語音視頻框架來講,其提供了攝像頭鏈接器、麥克風鏈接器、桌面鏈接器、電子白板鏈接器等API,能讓咱們就像訪問本地設備同樣訪問遠程設備,可是它實際上是把艱難困苦留給了本身,簡單清晰的API才能讓咱們帶走。其實說白了,OMCS 所作的主要工做就是實現了多媒體設備【麥克風、攝像頭、桌面、電子白板】的採集、編碼、網絡傳送、解碼、播放(或顯示)等相關的一整套流程。附:語音視頻示例Demo下載網絡

  雖然 OMCS 使用起來如此方便,可是咱們仍然有必要了解其背後的相關原理,尤爲是這些最基本的原理。 框架

 

二.基本環節

  1.採集

    採集是第一個環節。所謂「巧婦難爲無米之炊」,首先咱們要從多媒體設備上拿到第一手材料。對於音頻而言,就是要從麥克風、聲卡等設備獲取到音頻信號;對於視頻而言,就是要從顯示器、攝像頭等設備獲取到圖像信息。如何獲取到這些信息呢?因而咱們須要採集。編碼

    所謂採集又能夠拆分紅採樣集聚兩個步驟來理解。這就比如「曹聰稱象」,先將大的整體分解成一個個樣本,再將分解獲得的樣本整合起來,其思想無非就是用樣原本模擬整體。spa

 

(1)對於視頻而言,採集的過程就如同下圖所示

 

    咱們知道,視頻老是連續的,可是咱們能夠將其分解爲一張張的圖片,即圖片幀,到時候咱們再將獲得的這些圖片按照相應的時序來播放就能夠基本還原成原來的視頻了。計算機網絡

    在這裏,有幾個重要的量是咱們須要關注的。3d

   a.分辨率

    首先咱們要關注每個樣本的大小,由於樣本的大小意味着其所包含的數據量的多少,而一個數據量大的樣本比一個數據量小的樣本更可以反映整體。就拿圖中的例子來講,咱們對一隻鴿子的起飛過程進行連續的拍照,可是咱們用高像素來拍和用低像素來拍,到時候連續翻看的時候,效果確定是不同的。由於每一個圖像幀的數據量的大小將影響到所得視頻的清晰度。而這個圖像幀的大小是用一個什麼量來表示的呢?這個量就是分辨率。圖像的分辨率越高,所包含的像素點就越多,所包含的數據量就越大,就越可以反映原始圖像的原本面貌。視頻

   b.幀頻

    其次,原始的視頻是連續的,咱們採集獲得的圖像都是離散的。那麼這個離散的程度確定也會影響到所得視頻的效果。若是圖片的離散程度過大,那麼所得視頻看起來就會顯得一卡一卡,而若是離散的程度足夠小,那麼所得視頻就會顯得流暢天然。因此樣本之間的離散程度,影響到的是視頻的流暢性。而這個離散程度是用什麼量來表示的呢?這個量就是幀頻。幀頻對於採集而言就是每秒採集到多少幀圖像,天然,幀頻越大,畫面就越流暢。htm

 

(2)對於音頻而言,採集的過程也能夠用相似地用下圖來講明

    相似於視頻的採集,音頻的採集也須要將連續的整體分解成離散的樣本,而後再「曹聰稱象」,組裝成總體。

    一樣,音頻採集中也有幾個重要的量須要咱們關注。

   a.採樣深度

    相似於視頻採集,咱們須要關注每個樣本的數據量的大小。對於音頻採集而言,樣本的數據量的大小由什麼來表示呢?咱們用採樣深度來表示,所謂採樣深度又可稱爲採樣位數,即每次採樣聲音數據的比特數。一樣,採樣深度的大小也會影響到所得音頻的清晰度。若是採樣位數太低,所獲得的音頻聽起來就會含混不清。

   b.採樣率

    相似於視頻採集,咱們也須要關注樣本之間的離散程度。對於音頻採集而言,這個離散程度咱們用採樣率來表示,即每秒鐘採集的樣本的個數。採樣頻率的大小會影響到所得音頻的流暢程度。若是採樣頻率太低,則聲音聽起來就會有卡頓。

總結:

   不管是視頻採集仍是音頻採集,說到底都是樣本採集,而咱們採集的目的,無非就是想用樣原本模擬整體,至於這個模擬效果的好壞由兩個因素來決定,一是每一個樣本的數據量的大小,二是樣本之間的密集程度。即,樣本數據量越大,樣本之間的密度越大,就越可以表明整體,就越可以反映出整體的原本面貌。因此,咱們能夠給出這樣一個總公式——

   樣本反映整體的效果 = 單個樣本數據量的大小 X 樣本之間的密集程度

   而後,對於視頻採集和音頻採集而言,能夠給出以下兩個子公式——

    1.所得視頻的效果 = 分辨率 X 幀頻

    2.所得音頻的效果 = 採樣深度 X 採樣率

附:集示例Demo(含錄製)

  2.編碼

    對於採集獲得的原始語音視頻數據,直接放到網絡上傳輸,數據量會很是大,會佔用到很是大的帶寬。因此須要對原始數據進行編碼和壓縮。 因此,在實際的語音通話應用中,編碼這個環節是不可缺乏的。目前有不少經常使用的語音編碼技術,像G.72九、iLBC、AAC、SPEEX等等。

    同時咱們也應該注意到,編碼壓縮的過程當中不可避免的要丟失一些信息,而這也將影響到所得語音視頻的效果。     因此咱們再定義一個量:壓縮率,表示原始數據的壓縮程度,壓縮程度越高,意味着丟失的數據越多,所以由壓縮數據還原獲得的語音視頻,距離原始語音視頻的本色越遠,失真越大。     因此咱們將這個因素補充到剛纔的出的公式中。

   1.所得視頻的效果 = 分辨率 X 幀頻 / 壓縮率

    2.所得音頻的效果 = 採樣深度 X 採樣率 / 壓縮率

 

  3.傳輸

    數據傳輸,這個是計算機網絡的基礎知識,想必你們都很熟悉,我就再也不贅述了。可是有一點須要注意的就是,在諸如即時通信、視頻會議、遠程醫療、遠程教育等對實時性要求很高的網絡多媒體應用系統中,網絡的低延遲和高平穩是保證通信的實時性的重要條件。

  4.解碼

    當接收方接收到通過編碼的數據後,會對其進行解碼,以恢復成爲可供直接播放的語音視頻數據。

  5.播放

    完成解碼後,便可將獲得的語音視頻幀提交給相關設備進行播放。

附:採集+播放示例Demo

 

三.更多技術

     然而,實際中的網絡語音視頻技術的實現遠非基本流程中所介紹的那樣簡單,其涉及到至關多的技術細節須要處理,甚至涉及到至關多很有難度的技術問題須要克服。因爲這些技術不是本文所介紹的重點,更不是本人所可以駕馭的範疇,因此僅羅列以下,供你們參考。

    1.迴音消除 AEC

    2.噪聲抑制 DENOISE

    3.抖動緩衝區 JitterBuffer

    4.靜音檢測 VAD

    5.混音算法

    想要對這些技術瞭解更多的朋友請參見知名博主zhuweisky 的博客《淺談網絡語音技術》

    在此我要感謝zhuweisky,感謝他對我在網絡語音視頻技術方面的指點,即使是本文,也是我對其本人的博文中的相關內容的一個闡釋與發揮。

    正如錢鍾書先生所言:當咱們吃到一個很好吃的雞蛋時,老是忍不住想要認識一下生下那個蛋的母雞。

    最後,也但願zhuweisky之後能與咱們分享更多的技術與心得。

 

http://www.cnblogs.com/woyipiaolingjiu/p/4745114.html

相關文章
相關標籤/搜索