在之前的文章里,我們說了不少關于音視頻相關的內容,但是一直沒有系統的來介紹視頻通信,接下來我們將出一個系列關于視頻通信的文章。幫助大家對視頻通信有一個更全面的認識。系列文大綱如下:
視頻通信采集
視頻通信處理
視頻通信編碼與封裝
視頻通信的傳輸與推流
今天給大家帶來是我們系列文章的第一篇《視頻通信采集》
視頻通信采集是視頻通信的第一步,采集主要包括兩個方面:視頻采集和音頻采集。
視頻主要是通過攝像頭進行采集,這里面涉及到攝像頭的相關操作以及攝像頭的參數設置,由于各個廠商的攝像頭存在差異,因此這方面也會有一些差異。音頻則通過麥克風進行采集,不同產品的麥克風對音頻采樣率的支持不同。
音視頻通信采集技術要點
- 圖像采集技術要點:
攝像頭、圖像比例、兼容性等問題
- 音頻采集技術要點:
麥克風、音頻采樣率、回聲消除處理、緩沖區大小等問題
在iOS開發中,對音視頻的采集都可以用<AVFoundation>框架。而Android開發主要是基于其C/S層架構,客戶端提供調用接口,而實現工作則是在服務端完成。
圖像采集
采集內容
視頻中我們看到的內容是由圖片一張張組合連續播放而成。圖像的采集過程主要由攝像頭等設備拍攝成 YUV 的原始數據,然后經過編碼器壓縮成數據分發出去。
圖像是一個視頻內容的主要部分。圖像采集時主要涉及到下面的參數:
圖像格式:通常采用 YUV 格式存儲原始數據信息,其中包含用 8 位黑白表示的灰度圖,以及由 RGB 組合成的彩色圖。
傳輸通道:正常情況下視頻的拍攝只需 1 路通道,隨著 3D、VR等技術的日漸成熟,為了拍攝一個360° 的視頻,需要進行不同角度的拍攝,然后經過多通道傳輸后合成。
分辨率:現在的設備屏幕尺寸的日益增多增大,視頻采集過程中原始視頻分辨率就起著越來越重要的作用,因為后續處理環節中使用的所有視頻分辨率的定義都以原始視頻分辨率為基礎。
采樣頻率:采樣頻率反映了采集卡處理圖像的速度和能力。在進行高度圖像采集時,需要注意采集卡的采樣頻率是否滿足要求。采樣率越高,圖像質量越高,同時保存這些圖像信息的數據量也越大。
以上,構成了一個視頻采集的主要技術參數,而對于視頻通信開發者來說,在了解這些細節后,有利于在實際開發中對采集環節中技術參數的控制,減少后續編碼環節的壓力。
采集源
圖像的采集源有攝像頭、屏幕錄制等,視頻通信的采集源主要是攝像頭,通過攝像頭獲取圖像信息。這里簡單說一下Android和iOS。
Android中很多基本的架構都是C/S層架構。Android Camera的架構也是C/S架構,service端為Client進程提供豐富的接口,使它能輕松獲得Camera數據的地址,然后處理這些數據。但是在Android中調用攝像頭需要相應的權限,而且權限申請在Android 6.0后變成了動態申請。
而iOS端視頻采集,相比安卓更加便利,使用AVFoundation框架提供的一系列的API即可實現。
音頻采集
在說音頻采集內容之前,先了解一些音頻基礎知識:
PCM:脈沖編碼調制,一種將聲音數字化的方法。
采樣精度(bit pre sample):每個聲音樣本的采樣位數。
聲道(channel):相互獨立的音頻信號數,單聲道(mono)立體聲(Stereo)
語音幀(frame):在音頻數據中,幀(frame)是所有通道的一個樣本。
采樣頻率(sample rate):每秒鐘采集多少個聲音樣本
采集內容
聲音在經過麥克風后,會轉換成一連串電壓變化的信號。要將這樣的電壓變化的信號轉化成為PCM信號則需要進行三個過程:抽樣、量化、編碼。要實現這三個過程,則需要使用三個參數,它們是:
- 采樣頻率
采樣頻率即每秒鐘取得聲音樣本的次數。采樣頻率越高,聲音的質量也就越好,聲音的還原度越高,但同時它占的資源比越多。由于人耳的對聲音的頻率分辨有限,太高或太低的頻率并不能分辨出來。在16位聲卡中有22KHz、44KHz等幾級,目前的常用采樣頻率不超過48KHz。
- 采樣位數
采樣位數(采樣值)即將采樣樣本幅度量化。它是用來衡量聲音波動變化的一個參數。它的數值越大,分辨率也就越高,所發出聲音的強度越強。
在計算機中采樣位數一般有8位和16位之分,8位不是說把縱坐標分成8份,而是分成2的8次方即256份; 同理16位是把縱坐標分成2的16次方65536份。采樣位數的值越大,其記錄的波形就越接近原始信號。
- 聲道數
聲道主要有單聲道和立體聲之分,單聲道的聲音只能使用一個喇叭發聲(有的也處理成兩個喇叭輸出同一個聲道的聲音),立體聲的pcm可以使兩個喇叭都發聲(一般左右聲道有分工) ,更能感受到空間效果。
說完采樣頻率、采樣位數和聲道數,接下來我們看一下PCM文件所占容量公式:
PCM文件存儲量 = (采樣頻率·采樣位數·聲道數·時間)/8 (單位:字節數)
采集源
音頻源:音頻源相比視頻源來說,其采集源有限主要就是麥克風。安卓端音頻采集大都使用AudioRecord,iOS端則會使用蘋果自身的Audio Unit進行采樣。
緩沖區:說完音頻源接下來就說一下緩沖區。緩沖區是麥克風采集到的數據后放置的一個地方。數據庫在這里進行存放,再被讀取獲得錄制的音頻數據。這里會牽扯到緩沖區大小。緩沖區設置得大一些,可以增加系統的穩定性;而把緩沖區設置得小一寫,則會提升系統的響應時間,減少音頻延遲。
以上就是我們視頻通信采集的所有內容,下一篇我們將介紹視頻處理。