所謂參考幀,就是在其他幀解碼時(shí)需要參照的幀。比如一個(gè)I幀可能被一個(gè)或多個(gè)B幀參考,一個(gè)B幀可能被某個(gè)P幀參考。
從這個(gè)表我們也可以看出來(lái),DIR的I幀是非常重要的,它一丟,那么這個(gè)序列的所有幀都沒(méi)辦法解碼了;序列參數(shù)集和圖像參數(shù)集也很重要,沒(méi)有序列參數(shù)集,這個(gè)序列的幀就沒(méi)法解;沒(méi)有圖像參數(shù)集,那用到這個(gè)圖像參數(shù)集的幀都沒(méi)法解。
③ nal_unit_type:NALU類型取值如下表所示:
Nal_unit_type NAL類型 C
0 未使用
1 非IDR圖像中不采用數(shù)據(jù)劃分的片段 2,3,4
2 非IDR圖像中A類數(shù)據(jù)劃分片段 2
3 非IDR圖像中B類數(shù)據(jù)劃分片段 3
4 非IDR圖像中C類數(shù)據(jù)劃分片段 4
5 IDR圖像的片 2,3
6 補(bǔ)充增強(qiáng)信息單元(SEI) 5
7 序列參數(shù)集 0
8 圖像參數(shù)集 1
9 分界符 6
10 序列結(jié)束 7
11 碼流結(jié)束 8
12 填充 9
13…23 保留
24…31 不保留(RTP打包時(shí)會(huì)用到)
RTP打包時(shí)的擴(kuò)展類型
24 STAP-A Single-time aggregation packet
25 STAP-B Single-time aggregation packet
26 MTAP16 Multi-time aggregation packet
27 MTAP24 Multi-time aggregation packet
28 FU-A Fragmentation unit
29 FU-B Fragmentation unit
30-31 undefined
NALU的順序要求:
H.264/AVC標(biāo)準(zhǔn)對(duì)送到解碼器的NAL單元順序是有嚴(yán)格要求的,如果NAL單元的順序是混亂的,必須將其重新依照規(guī)范組織后送入解碼器,否則解碼器不能夠正確解碼。
1)序列參數(shù)集NAL單元
必須在傳送所有以此參數(shù)集為參考的其他NAL單元之前傳送,不過(guò)允許這些NAL單元中間出現(xiàn)重復(fù)的序列參數(shù)集NAL單元。
所謂重復(fù)的詳細(xì)解釋為:序列參數(shù)集NAL單元都有其專門的標(biāo)識(shí),如果兩個(gè)序列參數(shù)集NAL單元的標(biāo)識(shí)相同,就可以認(rèn)為后一個(gè)只不過(guò)是前一個(gè)的拷貝,而非新的序列參數(shù)集。
2)圖像參數(shù)集NAL單元
必須在所有以此參數(shù)集為參考的其他NAL單元之前傳送,不過(guò)允許這些NAL單元中間出現(xiàn)重復(fù)的圖像參數(shù)集NAL單元,這一點(diǎn)與上述的序列參數(shù)集NAL單元是相同的。
3)不同基本編碼圖像中的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元在順序上不可以相互交叉,即不允許屬于某一基本編碼圖像的一系列片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元中忽然出現(xiàn)另一個(gè)基本編碼圖像的片段(slice)單元片段和數(shù)據(jù)劃分片段(data partition)單元。
4)參考圖像的影響:如果一幅圖像以另一幅圖像為參考,則屬于前者的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元必須在屬于后者的片段和數(shù)據(jù)劃分片段之后,無(wú)論是基本編碼圖像還是冗余編碼圖像都必須遵守這個(gè)規(guī)則。
5)基本編碼圖像的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元必須在屬于相應(yīng)冗余編碼圖像的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前。
6)如果數(shù)據(jù)流中出現(xiàn)了連續(xù)的無(wú)參考基本編碼圖像,則圖像序號(hào)小的在前面。
7)如果arbitrary_slice_order_allowed_flag置為1,一個(gè)基本編碼圖像中的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元的順序是任意的,如果arbitrary_slice_order_allowed_flag置為零,則要按照片段中第一個(gè)宏塊的位置來(lái)確定片段的順序,若使用數(shù)據(jù)劃分,則A類數(shù)據(jù)劃分片段在B類數(shù)據(jù)劃分片段之前,B類數(shù)據(jù)劃分片段在C類數(shù)據(jù)劃分片段之前,而且對(duì)應(yīng)不同片段的數(shù)據(jù)劃分片段不能相互交叉,也不能與沒(méi)有數(shù)據(jù)劃分的片段相互交叉。
8)如果存在SEI(補(bǔ)充增強(qiáng)信息)單元的話,它必須在它所對(duì)應(yīng)的基本編碼圖像的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前,并同時(shí)必須緊接在上一個(gè)基本編碼圖像的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元后邊。假如SEI屬于多個(gè)基本編碼圖像,其順序僅以第一個(gè)基本編碼圖像為參照。
9)如果存在圖像分割符的話,它必須在所有SEI 單元、基本編碼圖像的所有片段slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前,并且緊接著上一個(gè)基本編碼圖像那些NAL單元。
10)如果存在序列結(jié)束符,且序列結(jié)束符后還有圖像,則該圖像必須是IDR(即時(shí)解碼器刷新)圖像。序列結(jié)束符的位置應(yīng)當(dāng)在屬于這個(gè)IDR圖像的分割符、SEI 單元等數(shù)據(jù)之前,且緊接著前面那些圖像的NAL單元。如果序列結(jié)束符后沒(méi)有圖像了,那么它的就在比特流中所有圖像數(shù)據(jù)之后。
11)流結(jié)束符在比特流中的最后。
(2)RBSP
RBSP數(shù)據(jù)是下表中的一種:
RBSP類型 縮寫 描述
參數(shù)集 PS 序列的全局信息,如圖像尺寸、視頻格式等
增強(qiáng)信息 SEI 視頻序列解碼的增強(qiáng)信息
圖像界定符 PD 視頻圖像的邊界
編碼片 SLICE 編碼片的頭信息和數(shù)據(jù)
數(shù)據(jù)分割 DP片層的數(shù)據(jù),用語(yǔ)錯(cuò)誤恢復(fù)解碼
序列結(jié)束符 表明一個(gè)序列的結(jié)束,下一個(gè)圖像為IDR圖像
流結(jié)束符 表明該流中已沒(méi)有圖像
填充數(shù)據(jù) 亞元數(shù)據(jù),用于填充字節(jié)
從前面的分析我們知道,VCL層出來(lái)的是編碼完的視頻幀數(shù)據(jù),這些幀可能是I、B、P幀,而且這些幀可能屬于不同的序列,再者同一個(gè)序列還有相對(duì)應(yīng)的一套序列參數(shù)集和圖片參數(shù)集等等,所以要完成視頻的解碼,不僅需要傳輸VCL層編碼出來(lái)的視頻幀數(shù)據(jù),還需要傳輸序列參數(shù)集、圖像參數(shù)集等數(shù)據(jù)。
參數(shù)集:包括序列參數(shù)集 SPS和圖像參數(shù)集 PPS。SPS包含的是針對(duì)一連續(xù)編碼視頻序列的參數(shù),如標(biāo)識(shí)符 seq_parameter_set_id、幀數(shù)及 POC 的約束、參考幀數(shù)目、解碼圖像尺寸和幀場(chǎng)編碼模式選擇標(biāo)識(shí)等等。PPS對(duì)應(yīng)的是一個(gè)序列中某一幅圖像或者某幾幅圖像,其參數(shù)如標(biāo)識(shí)符 pic_parameter_set_id、可選的 seq_parameter_set_id、熵編碼模式選擇標(biāo)識(shí)、片組數(shù)目、初始量化參數(shù)和去方塊濾波系數(shù)調(diào)整標(biāo)識(shí)等等。
數(shù)據(jù)分割:組成片的編碼數(shù)據(jù)存放在3個(gè)獨(dú)立的DP(數(shù)據(jù)分割,A、B、C)中,各自包含一個(gè)編碼片的子集。分割A包含片頭和片中每個(gè)宏塊頭數(shù)據(jù)。分割B包含幀內(nèi)和 SI 片宏塊的編碼殘差數(shù)據(jù)。分割 C包含幀間宏塊的編碼殘差數(shù)據(jù)。每個(gè)分割可放在獨(dú)立的 NAL 單元并獨(dú)立傳輸。
3.2.4.H.264封裝模式
H.264有兩種封裝模式:
(1)annexb模式:傳統(tǒng)模式,有start code, SPS和PPS是在ES中;
(2)mp4模式:沒(méi)有start code,SPS和PPS是封裝在container中,每一個(gè)frame前面是這個(gè)frame的長(zhǎng)度;SPS的頭部是0x67,PPS的頭部是0x68,要保持對(duì)數(shù)據(jù)的敏感性。
4.VC-1編碼技術(shù)?
VC-1即Video Codec One(視頻解碼方案一)。它起源于微軟公司的Windows Media Video 9。VC-1是繼MPEG-2 TS和H.264之后,最后被認(rèn)可的高清編碼標(biāo)準(zhǔn)格式。VC-1雖然是最后被認(rèn)可的高清編碼格式,不過(guò)因?yàn)橛形④浀暮笈_(tái),所以這種編碼格式不能小窺。相對(duì)于MPEG2,VC-1的壓縮比更高,但相對(duì)于H.264而言,編碼解碼的計(jì)算則要稍小一些。
總的來(lái)說(shuō),從壓縮比上來(lái)看,H.264的壓縮比率更高一些,也就是同樣的視頻,通過(guò)H.264編碼算法壓出來(lái)的視頻容量要比VC-1的更小,但是VC-1格式的視頻在解碼計(jì)算方面則更小一些,一般通過(guò)高性能的CPU就可以很流暢的觀看高清視頻。目前來(lái)看,VC-1可能是一個(gè)比較好的平衡,輔以微軟的支持,應(yīng)該是一只不可忽視的力量。一般來(lái)說(shuō),VC-1多為 “.wmv”后綴,但這都不是絕對(duì)的,具體的編碼格式還是要通過(guò)軟件來(lái)查詢。
5.WMV編碼技術(shù)
WMV(Windows Media Video)是微軟開發(fā)的一系列視頻編解碼和其相關(guān)的視頻編碼格式的統(tǒng)稱,是微軟Windows媒體框架的一部分。WMV包含三種不同的編解碼:作為RealVideo的競(jìng)爭(zhēng)對(duì)手,最初為Internet上的流應(yīng)用而設(shè)計(jì)開發(fā)的WMV原始的視頻壓縮技術(shù);另一種是為滿足特定內(nèi)容需要的WMV屏幕和WMV圖像的壓縮技術(shù);在經(jīng)過(guò)SMPTE(Society of Motion Picture and Television Engineers)學(xué)會(huì)標(biāo)準(zhǔn)化以后,WMV版本9被采納作為物理介質(zhì)的發(fā)布格式,比如高清DVD和藍(lán)光光碟,即所謂的VC-1。
微軟也開發(fā)了一種稱之為ASF(Advanced Systems Format)的數(shù)字容器格式,用來(lái)保存WMV的視頻編碼。在同等視頻質(zhì)量下,WMV格式的文件可以邊下載邊播放,因此很適合在網(wǎng)上播放和傳輸。
6.Divx、Xvid編碼技術(shù)
我們還可以經(jīng)常看的到Divx、Xvid,這兩個(gè)也很容易弄混。
其實(shí)兩者確實(shí)有很大淵源。DivX是一種將影片的音頻由MP3來(lái)壓縮、視頻由MPEG-4技術(shù)來(lái)壓縮的數(shù)字多媒體壓縮格式。DivX就是從微軟公司MPEG-4 v3編碼技術(shù)中派生出的最為知名以及被廣大DVDRipper廣泛采用的視頻編碼技術(shù)。用它編碼的視頻文件不僅最大程度上還原了DVD原本的畫面質(zhì)量,而且可以允許你選擇幾乎所有格式的音頻。它的視頻部分采用的是微軟的MPEG-4技術(shù)進(jìn)行壓縮,而音頻部分則是采用MP3或WMA進(jìn)行壓縮,然后把視頻和音頻部分進(jìn)行完美組合成讓我們耳目一新的AVI文件,就是DivX影片了。DivX最早是由國(guó)外的一名電腦游戲玩家和一名黑客制作,他們破解了微軟的MPEG-4視頻壓縮算法而后重新改寫并重新命名為DivX。
XviD是目前世界上最常用的視頻編碼解碼器(codec),而且是第一個(gè)真正開放源代碼的,通過(guò)GPL協(xié)議發(fā)布。在很多次的codec比較中,XviD的表現(xiàn)令人驚奇的好,總體來(lái)說(shuō)是目前最優(yōu)秀、最全能的codec。可以說(shuō)XviD是與Divx一脈相承而又有所加強(qiáng)的。
評(píng)論
查看更多