H264基礎概念
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標準的
四、網址引用
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