音視頻原始文件
- 采集的音頻原始文件為PCM格式。
- 采集的視頻原始文件為YUV/RGB格式。
由于采集的原始的音視頻文件數據量超大,不易于傳輸和存儲,所以必須要對音視頻文件進行編碼壓縮。
音視頻編碼
視頻編碼的主要作用是將視頻像素數據(RGB,YUV等)壓縮成為視頻碼流,從而降低視頻的數據量。如果視頻不經過壓縮編碼的話,體積通常是非常大的,一部電影可能就要上百G的空間。視頻編碼是視音頻技術中最重要的技術之一。視頻碼流的數據量占了視音頻總數據量的絕大部分。高效率的視頻編碼在同等的碼率下,可以獲得更高的視頻質量。
A. 軟編軟解與硬編解碼的概念
1. 軟編軟解: 利用CPU做視頻的編碼和解碼; 占用CPU資源,編解碼效率不高;
2. 硬編解碼: 利用GPU或者專用處理器來對視頻流進行編解碼,也就是硬件編碼和解碼.在iOS 8.0后,
蘋果將該Video/Audio ToolBox(之前在Mac系統中使用)框架引入iOS系統。
在此之前我們通常使用的FFmpeg多媒體庫,利用CPU來進行視頻的編解碼,占用CPU資源,效率低下,俗稱軟編解碼.而蘋果在2014年的iOS8中,開放了VideoToolbox.framwork框架,此框架使用GPU或專用的處理器來進行編解碼,俗稱硬編解碼.而此框架在此之前只有MAC OS系統中可以使用,在iOS作為私有框架.終于蘋果在iOS8.0中得到開放引入.
B. 編碼格式
音頻編碼格式:AAC
AAC(Advanced Audio Coding),中文名:高級音頻編碼,出現于1997年,基于MPEG-2的音頻編碼技術。由Fraunhofer IIS、杜比實驗室、AT&T、Sony等公司共同開發,目的是取代MP3格式。2000年,MPEG-4標準出現后,AAC重新集成了其特性,加入了SBR技術和PS技術,為了區別于傳統的MPEG-2 AAC又稱為MPEG-4 AAC。視頻編碼格式:H264
H.264,同時也是MPEG-4第十部分,是由ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態圖像專家組(MPEG)聯合組成的聯合視頻組(JVT,Joint Video Team)提出的高度壓縮數字視頻編解碼器標準。這個標準通常被稱之為H.264/AVC(或者AVC/H.264或者H.264/MPEG-4 AVC或MPEG-4/H.264 AVC)而明確的說明它兩方面的開發者。
視頻封裝格式
封裝格式的主要作用是把編碼壓縮后的視頻碼流和音頻碼流按照一定的格式存儲在一個文件中。現如今流行的封裝格式如下表所示:
封裝格式和編碼格式的區別:
編碼(codec),比如視頻編碼h264,h265,音頻編碼aac,mp3,它存在的目的主要是壓縮原始數據的體積。封裝格式(container),比如mp4,mkv,用來存儲/傳輸編碼數據,并按一定規則把音視頻、字幕等數據組織起來,里面都會有一些信息,比如當前流中包含哪些編碼類型,時間戳等,播放器可以按照這些信息來匹配解碼器、同步音視頻。
視頻播放流程
視頻播放器播放一個互聯網上的視頻文件,需要經過以下幾個步驟:解協議,解封裝,解碼視音頻,視音頻同步。如果播放本地文件則不需要解協議,為以下幾個步驟:解封裝,解碼視音頻,視音頻同步。他們的過程如圖所示。
流媒體協議是服務器與客戶端之間通信遵循的規定。當前網絡上主要的流媒體協議如表所示。
VideoToolbox的基本數據
Video Toolbox視頻編解碼前后需要應用的數據結構進行說明。
CVPixelBuffer:編碼前和解碼后的圖像數據結構。此內容包含一系列的CVPixelBufferPool內容
CMBlockBuffer:編碼后,結果圖像的數據結構。
CMTime、CMClock和CMTimebase:時間戳相關。時間以64-bit/32-bit的形式出現。
pixelBufferAttributes:字典設置.可能包括Width/height、pixel format type、? Compatibility (e.g., OpenGL ES, Core Animation)
CMVideoFormatDescription:圖像存儲方式,編解碼器等格式描述。
CMSampleBuffer:存放編解碼前后的視頻圖像的容器數據結構。
音視頻質量
開始中我們要了解幾種影響音視頻的質量的關鍵概念:
碼流(也通常稱碼率、比特率)
指在單位時間傳輸或解碼的位數(數據流量),是視頻中畫面質量控制的最重要部分。在分辨率相同的情況下,碼流越大,壓縮的比例就越小,畫面質量越高,視頻文件的體積也就越大.碼流越大,說明單位時間內采樣率越大,數據流和精度也越高,所以圖像畫面質量越好、越清晰,但要求設備的解碼能力也越強;采樣率(也稱為采樣速度或采樣頻率)
指每秒從連續的信號中提取并組成離散信號的采樣個數,使用Hz(赫茲)來表示。 能夠將模擬信號轉換成數字信號時的采樣頻率,也就是單位時間內采樣多少點。一個采樣點數據有多少個比特。采集的數值越大,音視頻的質量越好。比特率
指每秒傳送的比特數,單位我bps(Bit Per Second),比特率越大,輸送的數據也就越大,音質越好.視頻中的比特率通常為碼率。
比特率 =采樣率 * 采用位數 *聲道數.幀速度(幀率)
指每秒刷新圖片的幀數(FPS),幀數越多,圖像動作越流暢.分辨率
即為幀的大小.每一幀都是一副圖像。一個音頻編碼率為128Kbps,視頻編碼率為800Kbps的文件,其總編碼率為928Kbps,意思是經過編碼后的數據每秒鐘需要用928K比特來表示。
計算輸出文件大小公式:
音頻編碼率(KBit為單位)/8 +視頻編碼率(KBit為單位)/8 *影片總長度(秒為單位)
=文件大小(MB為單位)
由此從上述概念可知:
碼流、采樣率、幀率值越大,視頻和音頻的質量和清晰度越大.分辨率影響圖像大小,所以分辨率越高,圖像越大,分辨率越低,圖像越小。
因此,碼率一定的情況下,分辨率越高,圖像越不清晰.
但事實情況下,硬件設備也會影響,我們不能無限制的讓這些參數變大,同時,碼率一定的情況下,分辨率在一定的范圍內取值圖像都是清晰的;同樣分辨率一定,碼率在一定的范圍內取值也都是清晰。