【成豐主流線(xiàn)】技術(shù)分享 |一起來(lái)充電視頻相關(guān)的基礎知識
來(lái)源:成豐主流線(xiàn) 編輯:VI菲 2023-01-06 13:58:59 加入收藏
前言:隨著(zhù)音視頻技術(shù)不斷發(fā)展,新的技術(shù)概念不斷涌現,比如視頻方面,高清分辨率為什么又叫1080P,帶寬和bps比特率的含義,hevc視頻編碼標準有什么作用?俗話(huà)說(shuō)萬(wàn)丈高樓平地起,今天我們和大家分享的文章,非常詳細的解釋了視頻技術(shù)相關(guān)的基礎知識,大家一起來(lái)充充電吧。
本文將視頻相關(guān)的理論知識與基礎概念劃分為 11 個(gè)知識點(diǎn):
1.視頻
2.分辨率
3.比特率
4.采樣率
5.幀率
6.視頻編碼
7.編碼標準
8.視頻封裝格式
9.視頻解碼
10.視頻播放原理
11.視頻與流媒體
1.視頻
根據人眼視覺(jué)暫留原理,每秒超過(guò) 24 幀的圖像變化看上去是平滑連續的,這樣的連續畫(huà)面配合音頻叫視頻。
2.分辨率
分辨率是以橫向和縱向的像素數量來(lái)衡量的,表示平面圖像的精細程度。視頻精細程度并不只取決于視頻分辨率,還取決于屏幕分辨率。
1080P 的 P 指 Progressive scan(逐行掃描),即垂直方向像素點(diǎn),也就是 "高",所以 1920X1080 叫 1080P, 不叫 1920P。
當 720P 的視頻在 1080P 屏幕上播放時(shí),需要將圖像放大,放大操作也叫上采樣。
「上采樣」 幾乎都是采用內插值方法,即在原有圖像的像素點(diǎn)之間采用合適的插值算法插入新的元素,所以圖像放大也稱(chēng)為圖像插值。
簡(jiǎn)單的記錄一下插值算法:

(1)鄰插值算法:
將四個(gè)像素(放大一倍)用原圖一個(gè)像素的顏色填充,較簡(jiǎn)單易實(shí)現,早期的時(shí)候應用比較普遍,但會(huì )產(chǎn)生明顯的鋸齒邊緣和馬賽克現象。
(2)雙線(xiàn)性插值法:
是對鄰插值法的一種改進(jìn),先對兩水平方向進(jìn)行一階線(xiàn)性插值,再在垂直方向上進(jìn)行一階線(xiàn)性插值。能有效地彌補鄰插值算法的不足,但還存在鋸齒現象并會(huì )導致一些不期望的細節柔化。
(3)雙三次插值法:
是對雙線(xiàn)性插值法的改進(jìn),它不僅考慮到周?chē)膫€(gè)直接相鄰像素點(diǎn)灰度值的影響,還考慮到它們灰度值變化率的影響,使插值生成的像素灰度值延續原圖像灰度變化的連續性,從而使放大圖像濃淡變化自然平滑。
除此之外還有很多更復雜效果更優(yōu)的算法,比如小波插值、分形等等。
當 1080P 的視頻在 720P 屏幕上播放時(shí),需要將圖像縮小,縮小操作也叫下采樣。
「下采樣」 的定義為:對于一個(gè)樣值序列,間隔幾個(gè)樣值取樣一次,得到新序列。
對于一幅分辨率為 MxN 的圖像,對其進(jìn)行 s 倍下采樣,即得到 (M/s)x(N/s) 分辨率的圖像(s 應為 M、N 的公約數),就是把原始圖像 sxs 窗口內的圖像變成一個(gè)像素,這個(gè)像素點(diǎn)的值就是窗口內所有像素的均值。
最佳體驗為屏幕與視頻分辨率相同且全屏播放,視頻分辨率過(guò)高的話(huà)屏幕沒(méi)有能力去呈現,視頻分辨率過(guò)低的話(huà)無(wú)法發(fā)揮屏幕的能力。
3.比特率
比特率即碼率,在不同領(lǐng)域有不同的含義,在多媒體領(lǐng)域,指單位時(shí)間播放音頻或視頻的比特數,可以理解成吞吐量或帶寬。
單位為 bps , 即 bits per second,每秒傳輸的數據量,常用單位有:kbps、mbps 等。
計算公式:碼率(kbps)= 文件大小(kb)/ 時(shí)長(cháng)(s)
通俗一點(diǎn)理解就是取樣率,取樣率越大,精度就越高,圖像質(zhì)量越好,但數據量也越大,所以要找到一個(gè)平衡點(diǎn):用最低的比特率達到最少的失真。
在一個(gè)視頻中,不同時(shí)段畫(huà)面的復雜程度是不同的,比如高速變化的場(chǎng)景和幾乎靜止的場(chǎng)景,所需的數據量也是不同的,若都使用同一種比特率是不太合理的,所以引入了動(dòng)態(tài)比特率。
(1)動(dòng)態(tài)比特率
簡(jiǎn)稱(chēng)為 VBR,即 Variable Bit Rate,比特率可以隨著(zhù)圖像復雜程度的不同而隨之變化。
圖像內容簡(jiǎn)單的片段采用較小的碼率,圖像內容復雜的片段采用較大的碼率,這樣既保證了播放質(zhì)量,又兼顧了數據量的限制。
比如 RMVB 視頻文件,其中的 VB 就是指 VBR,表示采用動(dòng)態(tài)比特率編碼方式,達到播放質(zhì)量與體積兼得的效果。
(2)靜態(tài)比特率
簡(jiǎn)稱(chēng)為 CBR,即 Constant Bit Rate,比特率恒定。
圖像內容復雜的片段質(zhì)量不穩定,圖像內容簡(jiǎn)單的片段質(zhì)量較好。上面列出的計算公式顯然是針對 CBR ,除 VBR 和 CBR 外,還有 CVBR(Constrained VariableBit Rate) 、ABR (Average Bit Rate) 等等。
4.采樣率
定義:每秒從連續信號中提取并組成離散信號的采樣個(gè)數,單位為赫茲(Hz)。對于取樣率、采樣率和抽樣率,沒(méi)必要糾結它們的區別,都是同義詞。
(1)音頻中的采樣率
指把音頻信號數字化后 1 個(gè)通道 1 秒鐘采取多少個(gè)樣本,如 44.1kHz 的采樣率,就是指 1 個(gè)通道 1 秒鐘有 44.1k 個(gè)數據。
(2)視頻中的采樣率
視頻一般不標識采樣率屬性,比如:

采樣率本身就是一個(gè)可泛化的概念,對于視頻來(lái)說(shuō),若非要用采樣率來(lái)描述的話(huà),那就要分為兩個(gè)層面:幀頻和場(chǎng)頻。
從幀頻層面來(lái)說(shuō),采樣率就是指幀率,指 1 秒鐘顯示多少幀圖像。
從場(chǎng)頻層面來(lái)說(shuō),采樣率就是指像素頻率,指 1 秒鐘顯示多少個(gè)像素。
像素頻率是顯示器的一個(gè)指標,可以理解成顯示器的最大帶寬,可以起到限制分辨率和刷新率的作用,根據含義可得出一個(gè)公式:
「像素頻率 = 幀率 X 幀像素數量」
對于:

幀率 = 138.5 x 1024 x 1024 / 1920 / 1080 ≈ 70.04 , 得出的 70Hz 為正常的幀率范圍,也可以反向確定對像素頻率的理解是正確的。
5.幀率
定義:用于測量顯示幀數的量度。單位為 FPS(Frames per Second,每秒顯示幀數)或赫茲(Hz)。
幀率越高,畫(huà)面越流暢、逼真,對顯卡的處理能力要求越高,數據量越大。
1 中提到每秒超過(guò) 24 幀的圖像變化看上去是平滑連續的,這是針對電影等視頻而言,對游戲來(lái)說(shuō) 24 幀是不流暢的。
為什么 24fps 的電影感覺(jué)流暢,而 24fps 的游戲就感覺(jué)很卡呢?
第一個(gè)原因:兩者圖像生成原理不同
電影的一幀在一段時(shí)間曝光,每一幀都包含一段時(shí)間的信息,而游戲的畫(huà)面則是由顯卡計算生成的,一幀只包含那一瞬間的信息。
比如一個(gè)圓從左上角移動(dòng)到右下角:

前者為電影的一幀,后者為游戲的一幀,可以看到在電影中動(dòng)作會(huì )出現拖影,給人以動(dòng)感的效果,連貫而不卡。
第二個(gè)原因:電影的FPS是穩定的,而游戲則是不穩定的
電影若為 24fps,那就表示每隔 1/24 秒刷新一次畫(huà)面,幀間隔是固定的。
游戲若為 60fps,表示大約每隔 1/60 秒刷新一次畫(huà)面,幀間隔是不穩定的,即使 1 秒能顯示 60 幀,那也可能是前半秒顯示了 59 幀,后半秒顯示了 1 幀。
6.視頻編碼
定義:通過(guò)特定的壓縮技術(shù),將某個(gè)視頻格式的文件轉換成另一種視頻格式。視頻數據在時(shí)域和空域層面都有極強的相關(guān)性,這也表示有大量的「時(shí)域冗余信息」 和「空域冗余信息」 ,壓縮技術(shù)就是去掉數據中的冗余信息。
(1)去除時(shí)域冗余信息
運動(dòng)補償:通過(guò)先前的局部圖像來(lái)預測、補償當前的局部圖像,可有效減少幀序列冗余信息。
運動(dòng)表示:不同區域的圖像使用不同的運動(dòng)矢量來(lái)描述運動(dòng)信息,運動(dòng)矢量通過(guò)熵編碼進(jìn)行壓縮(熵編碼在編碼過(guò)程中不會(huì )丟失信息)。
運動(dòng)估計:從視頻序列中抽取運動(dòng)信息。
通用的壓縮標準使用基于塊的運動(dòng)估計和運動(dòng)補償。
(2)去除空域冗余信息
變換編碼:將空域信號變換到另一正交矢量空間,使其相關(guān)性下降,數據冗余度減小。
量化編碼:對變換編碼產(chǎn)生的變換系數進(jìn)行量化,控制編碼器的輸出位率。
熵編碼:對變換、量化后得到的系數和運動(dòng)信息,進(jìn)行進(jìn)一步的無(wú)損壓縮。
視頻壓縮編碼技術(shù)可分為兩大類(lèi):無(wú)損壓縮和有損壓縮。
(1)無(wú)損壓縮
無(wú)損壓縮也稱(chēng)為可逆編碼,重構后的數據與原數據完全相同,適用于磁盤(pán)文件的壓縮等。無(wú)損壓縮主要采用熵編碼方式,包括香農編碼、哈夫曼編碼和算術(shù)編碼等。
<1>香農編碼
香農編碼采用信源符號的累計概率分布函數來(lái)分配碼字,效率不高,實(shí)用性不大,但對其他編碼方法有很好的理論指導意義。
<2>哈夫曼編碼
哈夫曼編碼完全依據出現概率來(lái)構造異字頭的平均長(cháng)度最短的碼字。
基本方法為:先對圖像數據掃描一遍,計算出各種像素出現的概率,按概率的大小指定不同長(cháng)度的唯一碼字,由此得到一張該圖像的霍夫曼碼表。
編碼后的圖像數據記錄的是每個(gè)像素的碼字,而碼字與實(shí)際像素值的對應關(guān)系記錄在碼表中。
<3>算術(shù)編碼
算術(shù)編碼是用符號的概率和編碼間隔兩個(gè)基本參數來(lái)描述的,在給定符號集和符號概率的情況下,算術(shù)編碼可以給出接近最優(yōu)的編碼結果。
使用算術(shù)編碼的壓縮算法通常先要對輸入符號的概率進(jìn)行估計,然后再編碼,估計越準,編碼結果就越接近最優(yōu)的結果。
(2)有損壓縮
有損壓縮也稱(chēng)為不可逆編碼,重構后的數據與原數據有差異,適用于任何允許有失真的場(chǎng)景,例如視頻會(huì )議、可視電話(huà)、視頻廣播、視頻監控等。
編碼方式包括預測編碼、變換編碼、量化編碼、混合編碼等。
7.編碼標準
定義:為保證編碼的正確性,編碼要規范化、標準化,所以就有了編碼標準。
研制視頻編碼標準的有兩大正式組織:ISO/IEC(國際標準化組織)、ITU-T(國際電信聯(lián)盟通信標準部)。
ISO/IEC 制定的編碼標準有:MPEG-1、MPEG-2、MPEG-4、MPEG-7、MPEG-21 和 MPEG-H 等。
ITU-T 制定的編碼標準有:H.261、H.262、H.263、H.264 和 H.265 等。
MPEG-x 和 H.26x 標準的視頻編碼都是采用有損壓縮的混合編碼方式,主要區別在于處理圖像的分辨率、預測精度、搜索范圍、量化步長(cháng)等參數的不同,所以其應用場(chǎng)合也不同。
MPEG-x 系列:
(1)MPEG-1
MPEG-1 共 5 部分。
第 2 部分視頻編碼方案,規定了逐行掃描視頻的編碼方案。
第 3 部分音頻編碼方案,將音頻流的壓縮分為 3 層并依次增大壓縮比,廣為流傳的 MP3(MPEG-1 Layer 3)就是按照此部分編碼方案壓縮之后的文件格式。
(2)MPEG-2
MPEG-2 共 11 個(gè)部分,在 MPEG-1 的基礎上提高了碼率和質(zhì)量。
第 2 部分視頻編碼方案,規定了隔行掃描視頻的編碼方案,是和 ITU-T 共同開(kāi)發(fā)的,ITU-T 稱(chēng)其為 H.262。
第 3 部分音頻編碼方案,延續了 MPEG-1 的 3 層壓縮方案,壓縮后文件格式仍為 MP3,但在壓縮算法上有所改進(jìn)。
第 7 部分首次提出 AAC(MPEG Advanced Audio Coding)編碼,目的以更小的容量和更好的音質(zhì)取代 MP3 格式。
(3)MPEG-4
MPEG-4 共 27 個(gè)部分,更加注重多媒體系統的交互性和靈活性。
第 3 部分音頻編碼方案,優(yōu)化了 AAC 編碼算法,并在推出后逐漸取代 MP3,比如和視頻封裝在一起的音頻優(yōu)先考慮 AAC 格式,但就民用而言大部分還是使用 MP3 格式。
第 10 部分提出 AVC(Advanced Video Coding)編碼,是和 ITU-T 共同開(kāi)發(fā)的,ITU-T 稱(chēng)其為 H.264。
第 14 部分提出了 MP4 格式封裝,官方文件后綴名是 ".mp4",還有其他的以 mp4 為基礎進(jìn)行的擴展或縮水版本的格式,包括:M4V, 3GP, F4V 等。
(4)MPEG-7
MPEG-7 不同于 MPEG-1、MPEG-2、MPEG-4,它不是音視頻壓縮標準。
MPEG-7 被稱(chēng)為 "多媒體內容描述接口",目的就是產(chǎn)生一種描述多媒體信息的標準,并將該描述與所描述的內容相聯(lián)系,以實(shí)現快速有效的檢索。
(5)MPEG-12
MPEG-12 其實(shí)就是一些關(guān)鍵技術(shù)的集成,通過(guò)這種集成環(huán)境對全球數字媒體資源進(jìn)行管理,實(shí)現內容描述、創(chuàng )建、發(fā)布、使用、識別、收費管理、版權保護等功能。
(6)MPEG-H
MPEG-H 包含了 1 個(gè)數字容器標準、1 個(gè)視頻壓縮標準、1 個(gè)音頻壓縮標準和 2 個(gè)一致性測試標準。
其中視頻壓縮標準為高效率視頻編碼(HEVC),和 ITU-T 聯(lián)合開(kāi)發(fā),相比 H.264/MPEG-4 AVC 數據壓縮率增加了 1 倍。
H.26x 系列:
(1)H.261
H.261 是第一個(gè)實(shí)用的數字視頻編碼標準,使用了混合編碼框架,包括了基于運動(dòng)補償的幀間預測,基于離散余弦變換的空域變換編碼,量化,zig-zag 掃描和熵編碼。
H.261 的設計相當成功,之后的視頻編碼國際標準基本上都是基于 H.261 的設計框架,包括 MPEG-1,MPEG-2/H.262,H.263,甚至 H.264。
(2)H.262
H.262 由 MPEG-1 擴充而來(lái),支持隔行掃描,在技術(shù)內容上和 MPEG-2 視頻標準一致,DVD 就是采用了該技術(shù)。
(3)H.263
H.263 是一種用于視頻會(huì )議的低碼率視頻編碼標準,在 H.261 基礎上發(fā)展而來(lái)。
與 H.261 相比采用了半象素的運動(dòng)補償,并增加了 4 種有效的壓縮編碼模式,在低碼率下能夠提供比 H.261 更好的圖像效果。
H.263 于 1995 年推出第一版,后續在 1998 年和 2000 年還推出了第二版 H.263+、第三版 H.263++ 。
(4)H.264
H.264 又稱(chēng)為 MPEG-4 第 10 部分,即 MPEG-4 AVC,它是一種面向塊,基于運動(dòng)補償的視頻編碼標準。
于 2003 年正式發(fā)布,現在已經(jīng)成為高精度視頻錄制、壓縮和發(fā)布的最常用格式之一。
H.264 可以在低碼率情況下提供高質(zhì)量的視頻圖像,相比 H.263 可節省 50% 的碼率。
相比 H.263,H.264 不需設置較多的編碼選項,降低了編碼的復雜度。
H.264 可以根據不同的環(huán)境使用不同的傳輸和播放速率,并且提供了豐富的錯誤處理工具,可以很好的控制或消除丟包和誤碼。
H.264 性能的改進(jìn)是以增加復雜性為代價(jià)而獲得的,H.264 編碼的計算復雜度大約相當于 H.263 的 3 倍,解碼復雜度大約相當于 H.263 的 2 倍。
H.264 協(xié)議中定義了三種幀,分別為 I 幀、P 幀以及 B 幀。
<1>I 幀
I幀即幀內編碼幀、關(guān)鍵幀,可以理解為一幀畫(huà)面的完整保留,解碼時(shí)只需要本幀數據就可以完成,不需要參考其他畫(huà)面,數據量比較大。
<2>P 幀
P幀即前向預測編碼幀,記錄當前幀跟上一關(guān)鍵幀(或P幀)的差別,解碼時(shí)依賴(lài)之前緩存的畫(huà)面,疊加上本幀定義的差別,才能生成最終畫(huà)面,數據量較 I 幀小很多。
<3>B 幀
B幀即雙向預測編碼幀,記錄當前幀跟前后幀的差別,解碼時(shí)依賴(lài)前面的I幀(或P幀)和后面的P幀,數據量比I幀和P幀小很多。
數據壓縮比大約為:I幀:P幀:B幀 = 7:20:50,可見(jiàn) P 幀和 B 幀極大的節省了數據量,節省出來(lái)的空間可以用來(lái)多保存一些 I 幀,以實(shí)現在相同碼率下,提供更好的畫(huà)質(zhì)。
(5)H.265
H.265 即高效視頻編碼(High Efficiency Video Coding ,簡(jiǎn)稱(chēng) HEVC),于 2013 年正式推出。
H.265 編碼架構和 H.264 相似,主要也包含,幀內預測、幀間預測、轉換、量化、去區塊濾波器、熵編碼等模塊。
H.265 編碼架構整體被分為編碼單位、預測單位和轉換單位。
H.265 在 H.264 的基礎之上,使用先進(jìn)的技術(shù)用以改善碼流、編碼質(zhì)量、延時(shí)和算法復雜度之間的關(guān)系,達到最優(yōu)化設置。
在碼率減少 51-74% 的情況下,H.265 編碼視頻的質(zhì)量還能與 H.264 編碼視頻近似甚至更好。
H.265 可以在有限帶寬下傳輸更高質(zhì)量的網(wǎng)絡(luò )視頻,智能手機、平板機等移動(dòng)設備將能直接在線(xiàn)播放 1080p 的全高清視頻,讓網(wǎng)絡(luò )視頻跟上了顯示屏 “高分辨率化” 的腳步。
來(lái)張圖感受一下吧:

除 MPEG-x 和 H.26x 系列標準外,還有其他的編碼標準,如谷歌的 VP 系列,對視頻編碼標準歸納一下,如圖:

8.視頻封裝格式
視頻封裝格式如 mp4、mkv,用來(lái)存儲或傳輸編碼數據,可以理解成一個(gè)容器。
封裝就是按照一定規則把音視頻、字幕等數據組織起來(lái),包含編碼類(lèi)型等公共信息,播放器可以按照這些信息來(lái)匹配解碼器、同步音視頻。
不同的封裝格式支持的視音頻編碼格式是不一樣的,比如 MKV 格式支持比較多,RMVB 則主要支持 Real 公司的視音頻編碼格式。
https://en.wikipedia.org/wiki/Comparison_of_video_container_formats 列出了常見(jiàn)的視頻封裝格式,可以查看各封裝格式支持的音視頻編碼格式等信息。
9.視頻解碼
定義:將視頻壓縮編碼過(guò)的數據,解壓縮成為視頻原始數據,即視頻編碼的反過(guò)程。
對于一個(gè)播放器來(lái)說(shuō),很重要的一個(gè)指標就是能支持多少種視頻解碼。
10.視頻播放原理
播放一個(gè)本地視頻文件,需要經(jīng)過(guò)解封裝,解碼音視頻,音視頻同步等步驟。

「解封裝」 :就是將輸入的封裝格式的數據,分離成為音頻壓縮編碼數據和視頻壓縮編碼數據。例如,FLV 格式的數據,經(jīng)過(guò)解封裝操作后,輸出 H.264 編碼的視頻碼流和 AAC 編碼的音頻碼流。
「解碼」 :將視頻/音頻壓縮編碼數據,解碼成為非壓縮的視頻/音頻原始數據。
音頻的壓縮編碼標準包含 AAC,MP3,AC-3 等等,視頻的壓縮編碼標準則包含 H.264,MPEG2,VC-1 等等。
解碼是整個(gè)系統中最重要也是最復雜的一個(gè)環(huán)節。
通過(guò)解碼,壓縮編碼的視頻數據輸出成為非壓縮的顏色數據,例如 YUV420P,RGB 等等;壓縮編碼的音頻數據輸出成為非壓縮的音頻抽樣數據,例如 PCM 數據。
「音視頻同步」 :根據解封裝模塊處理過(guò)程中獲取到的參數信息,同步解碼出來(lái)的視頻和音頻數據,并將視頻音頻數據送至系統的顯卡和聲卡播放出來(lái)。
11.視頻與流媒體
上面播放原理中分析的是本地視頻文件,如果播放的是互聯(lián)網(wǎng)上的視頻,步驟則為:解協(xié)議,解封裝,解碼音視頻,音視頻同步,多了一個(gè)解協(xié)議的步驟。
「解協(xié)議」 :將流媒體協(xié)議的數據,解析為標準的相應的封裝格式數據。
視音頻在網(wǎng)絡(luò )上傳播的時(shí)候,常常采用各種流媒體協(xié)議,例如 HTTP,RTMP, MMS 等等。這些協(xié)議在傳輸視音頻數據的同時(shí),也會(huì )傳輸一些信令數據。
這些信令數據包括對播放的控制(播放,暫停,停止),或者對網(wǎng)絡(luò )狀態(tài)的描述等。
解協(xié)議的過(guò)程中會(huì )去除掉信令數據而只保留視音頻數據。例如,采用 RTMP 協(xié)議傳輸的數據,經(jīng)過(guò)解協(xié)議操作后,輸出 FLV 格式的數據。
評論comment