音視頻的一些基礎(chǔ)概念總結(jié)

本文中涉及到的一些編碼,圖像等的具體處理在代碼上的體現(xiàn)可查看:[總結(jié)]視音頻編解碼技術(shù)零基礎(chǔ)學(xué)習(xí)方法

基本概念-顏色

RGB和YUV:圖像常見的兩類數(shù)字化表達(dá)。

RGB是基于三原色原理,對紅綠藍(lán)三個顏色通道疊加得到各式各樣的顏色。主要用來在顯示器上顯示(渲染)。

常見的RGB格式:

  • RGB 1:2色,每個像素用1位表示

  • RGB 4:16色,每個像素用4位表示

  • RGB 8:256色,每個像素用8位表示

  • RGB 565:每個像素16位表示,R5位 G6位 B5位

  • RGB 16/555:每個像素16位表示,R5位 G5位 B5位 剩下1位不用

  • RGB 24:每個像素24位表示,R8位 G8位 B8位

  • RGB 32:每個像素32位表示,R8位 G8位 B8位 剩下8位不用

  • ARGB 32:每個像素32位表示,R8位 G8位 B8位 剩下8位 標(biāo)識 Alpha通道。

    一個像素所使用的位數(shù)不同,顯示出來的色彩豐富度不同,位數(shù)越大,色彩越豐富。

YUV是另一種編碼方式,Y表示明亮度,U表示色度,V表示濃度。描述影像的色彩及飽和度,用于指定像素的顏色。主要用于食品信號的壓縮、傳輸和存儲。

YCbCr:YUV的另外一種表示YUV是信號領(lǐng)域,YCbCr是數(shù)字圖像領(lǐng)域。Cr紅色分量信號,Cb藍(lán)色分量信號,Y除了g綠色分量信號,還疊加了亮度信號。

常見的YUV/YCbCr格式的采樣方法有:
4:4:4 、 4;2:2 、 4:2:0 、 4:1:1。


4:4:4
4:2:2
4:2:0
4:1:1

其中4:2:0并不意味只有Y,Cb沒有Cr,它指的是對每行掃描線來說只有一種色度分量以2:1的抽樣率存儲。
YUV的存儲格式:
平面格式:先連續(xù)存儲所有像素點的Y分量,然后存儲U分量,最后是V分量。
打包模式:每個像素點的YUV分量連續(xù)交替存儲.

YUV格式:
image.png
image.png

RGB和YUV的轉(zhuǎn)化。
RGB轉(zhuǎn)YUV:
Y = (0.257 * R) + (0.504 * G) + (0.098 * B) + 16
Cr = V = (0.439 * R) - (0.368 * G) - (0.071 * B) + 128
Cb = U = -( 0.148 * R) - (0.291 * G) + (0.439 * B) + 128
YUV轉(zhuǎn)RGB:
B = 1.164(Y - 16) + 2.018(U - 128)
G = 1.164(Y - 16) - 0.813(V - 128) - 0.391(U - 128)
R = 1.164(Y - 16) + 1.596(V - 128)
RGB用來顯示,YUV用來傳輸

基本概念-視頻

視頻:連續(xù)的圖像變化每秒超過24幀(frame)畫面以上時,看上去就是平滑連續(xù)的視覺效果,這樣連續(xù)的畫面叫做視頻。
幀(Frame):影像中常用的最小單位,一幀就是一副靜止的畫面。
幀速率(FPS):每秒說傳輸?shù)膱D片個數(shù),或者可以理解為處理器每秒刷新的次數(shù)。FPS越高,畫面越流暢。
轉(zhuǎn)碼:實質(zhì)是一種針對特定的音視頻格式內(nèi)容壓縮成另一種視頻格式的方式。

  • (原視頻 -- 解碼 -- 像素數(shù)據(jù) -- 編碼 -- 目標(biāo)視頻)
  • (原音頻 -- 解碼 -- 音頻數(shù)據(jù) -- 編碼 -- 目標(biāo)音頻)
    為什么要編碼?
    一段網(wǎng)絡(luò)上的視頻信號數(shù)字化后占用大量的存儲空間和數(shù)據(jù)帶寬,比如高清視頻的碼率往往可以達(dá)到200Mb/s、120分鐘的電影將占到180G以上,通過編碼后,下載的電影也就2G-8G。
    為什么要解碼?
    編碼過的內(nèi)容無法直接使用,使用(觀看)時必須解壓縮,還原為原始的信號(比如視頻中某個點的顏色等)
    采樣頻率:錄音設(shè)備在一秒鐘內(nèi)對聲音信號的采樣次數(shù),它用赫茲(Hz)來表示,比如44.1KHz采樣率的聲音就是要花費44000個數(shù)據(jù)點來描述1秒鐘的聲音波形。原則上采樣率越高,聲音質(zhì)量越好。
    常見的CD采樣頻率是44.1KHz ,因為人能夠感受到的最高頻率是20KHz
    碼率/比特率:1秒內(nèi)傳輸?shù)谋忍財?shù)
    壓縮:使用更少的數(shù)據(jù)來表達(dá)更多的信息。
  • 有損壓縮:通過刪除不必要或者不重要的內(nèi)容減少數(shù)據(jù)量。
  • 無損壓縮:壓縮過程中不丟失任何信息。

視頻的構(gòu)成
image.png
一個完整的視頻文件是由音頻和視頻兩部分組成的,而音頻和視頻又是由封裝格式和編碼格式構(gòu)成的

通常我們看見的視頻文件的后綴名就是封裝格式比如MP4,3GP,RMVB,MOV。這些封裝格式里邊還有一層編碼文件。常見的視頻編碼格式有H.264,mpeg-4,常見的音頻編碼格式有MP3、AAC。

常見的音視頻封裝格式編碼格式以及他們的發(fā)展歷程

視頻編碼(壓縮)方式/編碼(壓縮)原理/概念

視頻數(shù)據(jù)有極強(qiáng)的相關(guān)性,幀與幀之間有大量冗余信息,壓縮的本質(zhì)就是去除這些冗余信息。
壓縮的方向:

  • 空間冗余,視頻的背景和整體顏色相近并且平穩(wěn)變化,可以利用幀內(nèi)編碼進(jìn)行壓縮;(無損)
  • 時間冗余,兩個視頻幀之間具有強(qiáng)相關(guān)性,利用運動估計和運動補(bǔ)償進(jìn)行幀間壓縮;(無損)
    • 運動補(bǔ)償:通過先前的局部圖像來預(yù)測,補(bǔ)償當(dāng)前的局部圖像;
    • 運動表示:不同區(qū)域的圖像需要使用不同的運動矢量來描述運動信息;
    • 運動估計:從視頻序列中抽取運動信息的一整套技術(shù)。
  • 結(jié)構(gòu)冗余,圖像內(nèi)部存在相似性,通過這種關(guān)系可以進(jìn)行分形編碼;
  • 編碼冗余,出現(xiàn)概率大的顏色編碼長度短,概率小的顏色編碼長度長;(可變長度編碼)
  • 視覺冗余,利用人眼對亮度和色度的敏感度不同,在編碼時進(jìn)行數(shù)據(jù)壓縮;(有損壓縮)
    GOP概念:它代表兩個I幀之間形成的一組連續(xù)的圖像幀。
    通常在編碼器設(shè)置參數(shù)時,必須會設(shè)置一個gop_size的值,其實就是代表2個I幀之間的幀數(shù)目。在一個GOP組中容量最大的就是I幀,所以相對而言,gop_size設(shè)置的越大,整個視頻畫面質(zhì)量就會越好。但是解碼端必須從接受的第一個I幀開始才可以正確解碼出原始圖像,否則無法正確解碼。
    IPB幀:
    簡略:
  • I幀是關(guān)鍵幀,解碼時只需要本幀數(shù)據(jù);
  • P幀是參考幀,表示這一幀與前一個關(guān)鍵幀(或P幀)的差別;
  • B幀是雙向參考幀,表示本幀與前后幀的差別;(B幀壓縮率高,解碼復(fù)雜,直播中較少用)
  • IDR幀是第一個I幀,為的是和其他I幀區(qū)別開,方便控制編碼和解碼;
    編碼角度來理解IPB:
  • I幀通過視頻壓縮算法解壓成一張單獨的完整視頻畫面,I幀去掉的是視頻幀在空間維度上的冗余信息;
  • P幀需要參考其前面的一個I幀或者P幀來解碼成一張完整的視頻畫面;
  • B幀需要參考其前一個I幀或者P幀,以及后面的一個P幀來生成一張完整的視頻畫面,所以P幀和B幀去掉的是視頻幀在時間維度上的冗余信息。

DTS:Decode Timestamp 解碼時間戳。用于解碼階段進(jìn)行視頻的同步和輸出。
PTS:Presentation Timestamp 顯示時間戳
硬編碼:使用GPU計算,性能高 VideoToolBox、AudioToolBox。但是特性支持有限,而且壓縮率一般偏低
軟編碼:使用CPU來進(jìn)行編碼計算,實現(xiàn)簡單直接,升級容易,但是CPU負(fù)載重。壓縮率比較高,而且支持的H264特性也會比硬編碼多很多,相對來說比較可控。

  • 視頻:使用ffmpeg,x264算法吧視頻原始數(shù)據(jù)YUV/RGB編碼成H264

  • 音頻:使用fdk_aac將音頻數(shù)據(jù)PCM轉(zhuǎn)換成AAC。

    在優(yōu)勢方面,軟件編碼兼容性好,能解碼所有的視頻格式文件,畫質(zhì)清晰、畫面精致,速度較快。而硬件編碼的優(yōu)勢在于它的編碼速度非??烨倚蕵O高,由于GPU承擔(dān)起了編碼的重?fù)?dān),因此硬編碼對CPU的占用率低,就算長時間高清錄制視頻手機(jī)也不會發(fā)燙降頻。
    在劣勢方面,軟件編碼的CPU占用率高,一些性能比較差的手機(jī)可能會因CPU發(fā)熱而降頻、卡頓,無法流暢錄制、播放視頻,同時使用軟件編碼的方式可能會讓軟件包體變大,手機(jī)內(nèi)存占用率變高。而硬件編碼的確定就更明顯,在某些智能手機(jī)上,由于機(jī)型區(qū)別,采取硬件編碼的方式可能會出現(xiàn)兼容性上的問題,還有硬件編碼畫面不夠精細(xì)的問題一直都很難解決。

播放一個網(wǎng)絡(luò)上的視頻需要的步驟

1.解協(xié)議:將流媒體協(xié)議的數(shù)據(jù),解析為標(biāo)準(zhǔn)的響應(yīng)的封裝格式數(shù)據(jù)。
2.解封裝:將輸入的封裝格式的數(shù)據(jù),分離成音頻流壓縮編碼數(shù)據(jù)和視頻流壓縮編碼數(shù)據(jù)。
3.解碼:就是將視頻/音頻壓縮編碼數(shù)據(jù),解碼成為非壓縮的視頻/音頻原始數(shù)據(jù)。

  • 把壓縮編碼的視頻數(shù)據(jù),輸出成為非壓縮的顏色數(shù)據(jù),例如YUV420P,RGB等等;
  • 把壓縮編碼的音頻數(shù)據(jù),輸出成為非壓縮的音頻抽樣數(shù)據(jù),例如PCM數(shù)據(jù)。

    4.音視頻同步:根據(jù)封裝模塊處理過程中獲取的參數(shù)信息,同步解碼出來的視頻和音頻數(shù)據(jù),并將其發(fā)送到系統(tǒng)的顯卡和聲卡播放出來。
    image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容