1. 程式人生 > >H264基礎概念

H264基礎概念

一、MPEG-4說明
1、VOP視訊編碼技術
VO(Video Object):視訊物件,它是場景中的某個物體,最簡單的情況下就是矩形框,它是有生命期的,由時間上連續的許多幀構成。
VOP(Video Object Plane):視訊物件平面,它可以看作是VO在某一時刻的取樣,即一幀VO。

2、運動估計與運動補償技術
I-VOP、P-VOP、B-VOP三種幀格式來表徵不同的運動補償型別。
幀內VOP(I-VOP):一個VOP與其他VOP分開編碼。
預測VOP(P-VOP):VOP可以基於前一個解碼後的VOP進行預測(利用運動補償)。
雙向內插VOP(B-VOP):VOP可以用過去的和未來VOP進行預測,B-VOP只能基於I-VOP和P-VOP進行插值。

二、H264說明
1、H264編碼的框架分兩層
VCL(Video Coding Layer):負責高效的視訊內容表示
NAL(Network Abstraction Layer):負責以網路所要求的恰當的方式對資料進行打包和傳送

2、重要變化
在H264中完全沒有I幀、P幀、B幀、IDR幀的概念,之所以沿用這些說法是為了表明資料的編碼模式。資料的組織形式從大到小排序是:序列(sequence)、影象(frame/field-picture)、片組(slice group)、片(slice)、巨集塊(macroblock)、塊(block)、子塊(sub-block)、畫素(pixel)。

3、資料組織形式
片(slice):影象分成一幀(frame)或兩場(field),而幀又可以分成一個或幾個片(slice),片由巨集塊組成。巨集塊是編碼處理的基本單元。一個slice編碼之後被打包進一個NALU,NALU除了容納slice還可以容納其它資料,如SPS、PPS、SEI等

4、編碼相關術語
NALU:H264編碼資料儲存或傳輸的基本單元,一般H264碼流最開始的兩個NALU是SPS和PPS,第三個NALU是IDR。SPS、PPS、SEI這三種NALU不屬於幀的範疇。
SPS(Sequence Parameter Sets):序列引數集,作用於一系列連續的編碼影象。
PPS(Picture Parameter Set):影象引數集,作用於編碼視訊序列中一個或多個獨立的影象。
SEI(Supplemental enhancement information):附加增強資訊,包含了視訊畫面定時等資訊,一般放在主編碼影象資料之前,在某些應用中,它可以被省略掉。
IDR(Instantaneous Decoding Refresh):即時解碼重新整理
HRD(Hypothetical Reference Decoder):假想碼流排程器

5、幀編碼模式

幀型別 描述 支援的框架
I(Intra) 只包含幀內預測的巨集塊(I) 全部
P(Predicted) 包含幀間預測巨集塊(P)和I型巨集塊 全部
B(Bi-Predictive) 包含幀間雙向預測巨集塊(B)和I型巨集塊 擴充套件和主
SP(Switching P) 利於在編碼的位元流中切換,包括I和P巨集塊 擴充套件
SI(Switching I) 利用在編碼的位元流中切換,包含SI巨集塊(一種特殊的幀內編碼巨集塊) 擴充套件

6、H264和AVC1的差異
FOURCC AVC1:H264 bitstream without start codes
FOURCC H264:H264 bitstream with start codes
帶有開始碼的H264視訊一般是用於無線發射、有線廣播或者HD-DVD中,這些資料流的開始都有一個開始碼0x000001或者0x00000001,“NALU”是NAL(網路適配層)以網路所要求的恰當方式對資料進行打包和傳送的基本單元;

沒有開始碼的H264視訊主要是儲存在MP4格式的檔案中,它的資料流的開始是1、2或者4個位元組表示長度資料,“NALU”簡單說是H264格式中的最基本的單元,是一個數據包。

三、H.264、x264、H264、AVC1區別和聯絡

1、H.264是MPEG4的第十部分,是一個標準。
國際上兩個視訊專家組(VCEG和MPEG)合作提出的標準,兩個專家組各有各的叫法,所以既叫H.264,也叫AVC。

2、x264是一個編碼器,他參照的標準是H.264。
H.264是需要付費的編碼格式,而x264是符合H.264標準的一個開源專案,是免費的,也就是H264的一個簡化版,不支援某些高階特性。但x264非常優秀,並不比H264的商業編碼器差。

3、h264與AVC1都是FourCC(他倆通常在什麼情況下使用呢?)
FOURCC為AVC1,沒有開始碼的H.264視訊,主要就是用MP4或MKV等封裝的檔案,也就是你平時在電腦上看的那種,它的資料流開始是1、2或者4個位元組表示長度資料。x264編碼出來的都是這種。
FOURCC為H264,是帶有開始碼的H.264視訊,一般是用於無線發射、有線廣播或者HD-DVD中的。這些資料流的開始都有一個開始碼:0x000001 或者 0x00000001。

4、如果在編碼符合H.264標準的檔案時,如果沒有用到x264編碼器,那麼通常使用的是哪個編碼器?(就是那個支援顯示卡加速的那個)
符合H.264標準的編碼器,也就是H.264的商業編碼器,和免費的x264了。
至於支援顯示卡加速的編碼格式,根據顯示卡不同,支援的也不一樣。大概也就是H264(x264/AVC1)、VC-1、MPEG-1、MPEG-2、MPEG-4、WMV3。。。當然除了H264(x264/AVC1),其他都不是H.264標準的


四、網址引用

3.3.2 H264編碼技術
http://book.51cto.com/art/200804/70271.htm

3.4.1 MPEG-4結構分析
http://book.51cto.com/art/200804/70331.htm

H264/AVC視訊解碼時AVC1和H264的區別
http://blog.csdn.net/ameyume/article/details/7542979

關於H.264 x264 h264 AVC1之間的那些事
http://zhidao.baidu.com/question/526734824.html