1.MPEG2-TS編碼技術(shù) 1.1.MPEG-TS簡介
MPEG2-TS(Transport Stream“傳輸流”;又稱TS、TP、MPEG-TS或M2T)是用于音效、圖像與數(shù)據(jù)的通信協(xié)定,最早應(yīng)用于DVD的實(shí)時(shí)傳送節(jié)目。
區(qū)別:
DVD節(jié)目中的MPEG2格式,確切地說是MPEG2-PS,全稱是Program Stream(程序流),而TS的全稱則是Transport Stream(傳輸流)。MPEG2-PS主要應(yīng)用于存儲的具有固定時(shí)長的節(jié)目,如DVD電影,可添加字幕等一些程序操作。而MPEG-TS則主要應(yīng)用于實(shí)時(shí)傳送的節(jié)目,比如實(shí)時(shí)廣播的電視節(jié)目。
簡單地說,將DVD上的VOB文件的前面一截cut掉(或者是數(shù)據(jù)損壞數(shù)據(jù))就會導(dǎo)致整個(gè)文件無法解碼,而電視節(jié)目是任何時(shí)候打開電視機(jī)都能解碼(收看)的。所以MPEG2-TS格式的特點(diǎn)就是從視頻流的任一片段開始都是可以獨(dú)立解碼。
1.2.基本概念及TS流概述
(1)ES流(Elementary Stream,基本流):數(shù)字電視各組成部分編碼后所形成的直接表示基本元素內(nèi)容的流,包含視頻、音頻或數(shù)據(jù)的連續(xù)碼流。
(2)PES流(Paketized Elementary Stream,打包基本碼流):是將基本的碼流ES流根據(jù)需要分成長度不等的數(shù)據(jù)包,并加上包頭就形成了打包的基本碼流PES流。
(3)PS流(Program Stream,節(jié)目流):將一個(gè)節(jié)目的多個(gè)組成部分按照它們之間的互相關(guān)系進(jìn)行組織并加入各組成部分關(guān)系描述后的碼流。PS流是一種多路復(fù)用數(shù)字音頻、視頻等的封裝容器,它是一個(gè)或多個(gè)具有共同的時(shí)間基準(zhǔn)的PES流合并成一個(gè)整體流,主要用于節(jié)目存儲。其包長不固定,且較長,一旦失去同步信息,接收機(jī)無法確定下一包的同步位置,會造成失步,導(dǎo)致嚴(yán)重的信息丟失。PS流適用于誤碼小、信道較好的環(huán)境,如演播室、家庭環(huán)境和存儲介質(zhì)中。
(4)TS流(Transport Stream,傳輸流):是將一個(gè)節(jié)目的多個(gè)組成部分按照它們之間的互相關(guān)系進(jìn)行組織并加入各組成部分關(guān)系描述和節(jié)目組成信息,并進(jìn)一步封裝成傳輸包后的碼流。TS流是將視頻、音頻、PSI等數(shù)據(jù)打包成傳輸包進(jìn)行傳送。主要用于節(jié)目傳輸。TS的傳輸包長度固定,一般為188字節(jié)。
(5)TS流和PS流是MPEG-2標(biāo)準(zhǔn)中規(guī)定的兩種輸出碼流。TS格式中,從視頻流的任意一片斷開始都可以獨(dú)立解碼,而PS格式不可以。由于TS流具備較強(qiáng)的抵抗傳輸誤碼的能力,因此目前在傳輸媒體中進(jìn)行傳輸?shù)腗PEG-2碼流基本上都采用了TS流的包格式。
(6)TS流的播放:播放前將TS流文件的后綴名改為.mpg或者.mpeg,用可以直接播放MPEG-TS流的播放器(一般的播放器都可以)打開播放即可。
(7)TS流的優(yōu)點(diǎn):
① 動態(tài)帶寬分配:由于TS的傳輸包長度是固定的,因此可過PID將規(guī)定的信道總頻帶在視頻、音頻和數(shù)據(jù)信息進(jìn)行實(shí)時(shí)的、靈活的分配。利用這一特性,可在廣播付費(fèi)節(jié)目前實(shí)時(shí)地將解密鑰匙插入到TS流中送給廣大用戶。
② 可分級性:允許一個(gè)復(fù)用的傳輸碼流與其他視音頻基本碼流進(jìn)行二次復(fù)用,生產(chǎn)占用頻帶給寬的更高一級的TS流。
③ 可擴(kuò)展性
④ 抗干擾性
⑤ 接收機(jī)成本低廉
(8)TS流的形成過程:
① 壓縮【顯示單元】產(chǎn)生【進(jìn)入單元】,連續(xù)的【進(jìn)入單元】組成一個(gè)基本碼流。
② 對ES(基本碼流)進(jìn)行打包形成PES。
③ 在PES包中加入定時(shí)信息(PTS/DTS)。
④ 將PES包內(nèi)容分配到一系列固定長度的傳輸包中。
⑤ 在傳輸包中加入定時(shí)信息(PCR)。
⑥ 在傳輸包中加入節(jié)目專用信息(PSI) 。
⑦ 連續(xù)輸出傳輸包形成具有恒定比特率的MPEG-TS流。
1.3.基本流程
下圖是在MPEG-2系統(tǒng)中編碼端實(shí)現(xiàn)單一碼流的詳細(xì)過程:
(1)A/D轉(zhuǎn)換后,通過MPEG-2壓縮編碼得到ES基本流。該流數(shù)據(jù)量很大,并且只是I P B幀的取樣信息。
(2)通過PES打包器,打包并在每個(gè)幀中插入PTS/DTS標(biāo)識,編程PES。原來是流的格式,現(xiàn)在成了數(shù)據(jù)包的分割形式。
(3)PES根據(jù)需要打包成PS或者TS包進(jìn)行存儲。
1.4.TS流傳輸包(簡稱TS包)結(jié)構(gòu)分析
MPEG-2中規(guī)定TS傳輸包的長度為188字節(jié)。但通信媒介會為包添加錯(cuò)誤校驗(yàn)字節(jié),從而有了不同于188字節(jié)的包長。例如:
DVB規(guī)定中,使用204字節(jié)作為包長:① 通過調(diào)制器時(shí),在每個(gè)傳輸包后增加了16字節(jié)的里德所羅門前向糾錯(cuò)碼,因而形成了204字節(jié)的數(shù)據(jù)包。調(diào)制后總存在204字節(jié)的數(shù)據(jù)包。② 調(diào)制之前存復(fù)用器插入RS碼或虛構(gòu)的RS碼。
ATSC規(guī)定中,使用208字節(jié)作為包長:添加20字節(jié)的RS(Reed-Solomon)前向糾錯(cuò)碼。與DVB不同,ATSC規(guī)定RS碼只能出現(xiàn)在調(diào)制的TS流中。
所有的TS包都分為包頭和凈荷部分。TS包中可以填入很多東西(填入的東西都是填入到凈荷部分),有:視頻、音頻、數(shù)據(jù)(包括PSI、SI以及其它任何形式的數(shù)據(jù))。
包頭信息分析見1.4.1。TS包自適應(yīng)區(qū)由自適應(yīng)區(qū)長、各種標(biāo)志指示符、與插入標(biāo)志有關(guān)的信息和填充數(shù)據(jù)4部分組成。其中標(biāo)志部分由間斷指示符、隨機(jī)存取指示符、ES優(yōu)化指示符、PCR標(biāo)志、接點(diǎn)標(biāo)志、傳輸專用數(shù)據(jù)標(biāo)志、原始PCR標(biāo)志、自適應(yīng)區(qū)擴(kuò)展標(biāo)志8個(gè)部分組成。重要的是標(biāo)志部分的PCR字段,可給編解碼器的27MHz時(shí)鐘提供同步資料,進(jìn)行同步。其過程是,通過PLL,用解碼時(shí)本地用PCR相位與輸入的瞬時(shí)PCR相位鎖相比較,確定解碼過程是否同步,若不同步,則用這個(gè)瞬時(shí)PCR調(diào)整時(shí)鐘頻率。因?yàn)?,?shù)字圖像采用了復(fù)雜而不同的壓縮編碼算法,造成每幅圖像的數(shù)據(jù)各不相同,使直接從壓縮編碼圖像數(shù)據(jù)的開始部分獲取時(shí)鐘信息成為不可能。為此,選擇了某些(而非全部)TS包的自適應(yīng)區(qū)來傳送定時(shí)信息。于是,被選中的TS包的自適應(yīng)區(qū),可用于測定包信息的控制bit和重要的控制信息。自適應(yīng)區(qū)無須伴隨每個(gè)包都發(fā)送,發(fā)送多少主要由選中的TS包的傳輸專用時(shí)標(biāo)參數(shù)決定。標(biāo)志中的隨機(jī)存取指示符和接點(diǎn)標(biāo)志,在節(jié)目變動時(shí),為隨機(jī)進(jìn)入I幀壓縮的數(shù)據(jù)流提供隨機(jī)進(jìn)入點(diǎn),也為插入當(dāng)?shù)毓?jié)目提供方便。自適應(yīng)區(qū)中的填充數(shù)據(jù)是由于PES包長不可能正好轉(zhuǎn)為TS包的整數(shù)倍,最后的TS包保留一小部分有用容量,通過填充字節(jié)加以填補(bǔ),這樣可以防止緩存器下溢,保持總碼率恒定不變。
1.4.1.TS包包頭
TS包的包頭提供關(guān)于傳輸方面的信息:同步、有無差錯(cuò)、有無加擾、PCR(節(jié)目參考時(shí)鐘)等標(biāo)志。TS包的包頭長度不固定,前32比特(4個(gè)字節(jié))固定,后面可能跟有自適應(yīng)字段(適配域)。32個(gè)比特(4個(gè)字節(jié))是最小包頭。包頭的結(jié)構(gòu)固定如下:
typedef struct TS_packet_header { unsigned sync_byte : 8; unsigned transport_error_indicator : 1; unsigned payload_unit_start_indicator : 1; unsigned transport_priority : 1; unsigned PID : 13; unsigned transport_scrambling_control : 2; unsigned adaption_field_control : 2; unsigned continuity_counter : 4; } TS_packet_header;
sync_byte(同步字節(jié)):固定為0100 0111 (0x47);該字節(jié)由解碼器識別,使包頭和有效負(fù)載可相互分離。
transport_error_indicator(傳輸錯(cuò)誤指示):‘1’表示在相關(guān)的傳輸包中至少有一個(gè)不可糾正的錯(cuò)誤位。當(dāng)被置1后,在錯(cuò)誤被糾正之前不能重置為0。
payload_unit_start_indicator(開始指示):為1時(shí),在前4個(gè)字節(jié)之后會有一個(gè)調(diào)整字節(jié),其數(shù)值為后面調(diào)整字段的長度length。因此有效載荷開始的位置應(yīng)再偏移1+[length]個(gè)字節(jié)。
transport_priority(傳輸優(yōu)先級):‘1’表明優(yōu)先級比其他具有相同PID 但此位沒有被置‘1’的分組高。
PID:指示存儲與分組有效負(fù)載中數(shù)據(jù)的類型。PID值0x0000-0x000F保留。其中0x0000為PAT保留;0x0001為CAT保留;0x1fff為分組保留,即空包。
transport_scrambling_control(加擾控制):表示TS流分組有效負(fù)載的加密模式??瞻鼮椤?0’,如果傳輸包包頭中包括調(diào)整字段,不應(yīng)被加密。
adaptation_field_control(適配域控制):表示包頭是否有調(diào)整字段或有效負(fù)載?!?0’為ISO/IEC未來使用保留;‘01’僅含有效載荷,無調(diào)整字段;‘10’ 無有效載荷,僅含調(diào)整字段;‘11’ 調(diào)整字段后為有效載荷,調(diào)整字段中的前一個(gè)字節(jié)表示調(diào)整字段的長度length,有效載荷開始的位置應(yīng)再偏移[length]個(gè)字節(jié)??瞻鼞?yīng)為‘10’。
continuity_counter(連續(xù)性計(jì)數(shù)器):隨著每一個(gè)具有相同PID的TS流分組而增加,當(dāng)它達(dá)到最大值后又回復(fù)到0。范圍為0~15。
適配域:
1.4.2.TS包凈荷部分
TS包中凈荷所傳輸?shù)男畔▋煞N類型:
① 視頻、音頻的PES包以及輔助數(shù)據(jù);
② 節(jié)目專用信息PSI。
當(dāng)然,TS包也可以是空包??瞻脕硖畛銽S流,可能在重新進(jìn)行多路復(fù)用時(shí)被插入或刪除。
在系統(tǒng)復(fù)用時(shí),視頻、音頻的ES流需進(jìn)行打包形成視頻、音頻的PES流,輔助數(shù)據(jù)(如圖文電視信息)不需要打成PES包。PES包非定長,音頻的PES包小于等于64K,視頻的一般為一幀一個(gè)PES包。一幀圖象的PES包通常要由許多個(gè)TS包來傳輸。MPEG-2中規(guī)定,一個(gè)PES包必須由整數(shù)個(gè)TS包來傳輸。如果承載一個(gè)PES包的最后一個(gè)TS包沒能裝滿,則用填充字節(jié)來填滿;當(dāng)下一個(gè)新的PES包形成時(shí),需用新的TS包來開始傳輸。
(1)PES相關(guān)
PES是打包過的ES,已經(jīng)插入PTS和DTS,一般一個(gè)PES是一幀圖像。
圖1-2 一個(gè)打包基本流(PES)包的組成
PES經(jīng)過打包成TS或PS流,往往一個(gè)PES會分存到多個(gè)TS包中。
① PES包的包起始碼:
包起始碼前綴是一個(gè)固定的碼字結(jié)構(gòu),它的值是0x000001,用于收發(fā)兩端對PES包進(jìn)行同步。
② PES包的長度:
PES包的長度是可變的,PES包長度域有兩個(gè)字節(jié),共16比特,因此PES包的最大長度是65535字節(jié)
③ PES包頭:
PES包頭的功能根據(jù)特定的應(yīng)用場合有所不同,包括加擾控制,優(yōu)先級,ES流速率和CRC等,其中有兩個(gè)重要的工作:PTS和DTS。
可以看到PTS/DTS是打在PES包里面的,這兩個(gè)parameters是解決視音頻同步顯示,防止解碼器輸入緩存上溢或下溢的關(guān)鍵。PTS表示 顯示單元出現(xiàn)在系統(tǒng)目標(biāo)解碼器(STD:system target decoder)的時(shí)間,DTS表示將存取單元全部字節(jié)從STD的ES解碼緩存器移走的時(shí)刻。每個(gè)I、P、B幀的包頭都有一個(gè)PTS和DTS,但PTS與DTS對B幀都是一樣的,無須標(biāo)出B幀的DTS。對I幀和P幀,顯示前一定要存儲于視頻解碼器的重新排序緩存器中,經(jīng)過延遲(重新排序)后再顯示,一定要分別標(biāo)明PTS和DTS。
(2)節(jié)目專用信息PSI(Program Specific Information)
管理各種類型的TS數(shù)據(jù)包,需要有些特殊的TS包來確立各個(gè)TS數(shù)據(jù)包之間的關(guān)系。這些特殊的TS包里所包含的信息就是節(jié)目專用信息。在不同的標(biāo)準(zhǔn)中它有不同的名字:
① MPEG-2中稱為PSI;
② DVB標(biāo)準(zhǔn)根據(jù)實(shí)際需要,對PSI擴(kuò)展,稱為SI信息;
③ ATSC標(biāo)準(zhǔn)中為PSIP信息;
MPEG-2中,規(guī)定的對PSI信息的描述方法有以下幾種:
- 表Table:節(jié)目信息的結(jié)構(gòu)性的描述;
- 節(jié)目關(guān)聯(lián)表Program Association Table(PAT)0x0000
- 節(jié)目映射表Program Map Tables(PMT)
- 條件接收表Conditional Access Table(CAT)0x0001
- 網(wǎng)絡(luò)信息表Network Information Table(NIT)0x0010
- 傳送流描述表Transport Stream Description Table(TSDT)
- 節(jié)Section:將表格的內(nèi)容映射到TS流中;
專用段Private_ section
- 描述符Descriptor:提供有關(guān)節(jié)目構(gòu)成(視頻流、音頻流、語言、層次、系統(tǒng)時(shí)鐘和碼率等多方面)的信息;
ITU-T Rec.H.222.0 | ISO/IEC 13818-1中定義的 PSI表可被分成一段或多段置于傳輸流分組中。一段就是一個(gè)語法結(jié)構(gòu),用來將ITU-T Rec.H.222.0 | ISO/IEC 13818-1中定義的PSI表映射到傳輸流分組中。
1)PAT表
TS流中包含一個(gè)或者多個(gè)PAT表。PAT表由PID為0x0000的TS包傳送,其作用是為復(fù)用的每一路傳送流提供所包含的節(jié)目和節(jié)目編號,以及對應(yīng)節(jié)目的PMT的位置即PMT的TS包的PID值,同時(shí)還提供NIT的位置,即NIT的TS包的PID的值。
table_id:固定為0x00,標(biāo)志該表是PAT表。
section_syntax_indicator:段語法標(biāo)志位,固定為1。
section_length:表示這個(gè)字節(jié)后面有用的字節(jié)數(shù),包括CRC32。節(jié)目套數(shù):(section length-9)/4
transport_stream_id:16位字段,表示該TS流的ID,區(qū)別于同一個(gè)網(wǎng)絡(luò)中其它多路復(fù)用流。
version_number:表示PAT的版本號。
current_next_indicator:表示發(fā)送的PAT表是當(dāng)前有效還是下一個(gè)PAT有效。
section_number:表示分段的號碼。PAT可能分為多段傳輸,第一段為0,以后每個(gè)分段加1,最多可能有256個(gè)分段。
last_section_number:表示PAT最后一個(gè)分段的號碼。
Program number:節(jié)目號
network_PID:網(wǎng)絡(luò)信息表(NIT)的PID,節(jié)目號為0時(shí)對應(yīng)ID為network_PID。
Program map PID:節(jié)目映射表(PMT)的PID號,節(jié)目號為大于等于1時(shí),對應(yīng)的ID為program_map_PID。一個(gè)PAT中可以有多個(gè)program_map_PID。
CRC_32:32位字段,CRC32校驗(yàn)碼Cyclic RedundancyCheck。
2)PMT表
PMT在傳送流中用于指示組成某一套節(jié)目的視頻、音頻和數(shù)據(jù)在傳送流中的位置,即對應(yīng)的TS包的PID值,以及每路節(jié)目的節(jié)目時(shí)鐘參考(PCR)字段的位置。
Table id:固定為0x02,標(biāo)志該表是PMT表。
Section syntax indicator:對于PMT表,設(shè)置為1。
Section length:表示這個(gè)字節(jié)后面有用的字節(jié)數(shù),包括CRC32。
Program number:它指出該節(jié)目對應(yīng)于可應(yīng)用的Program map PID。
Version number:指出PMT的版本號。
Current next indicator:當(dāng)該位置‘1’時(shí),當(dāng)前傳送的Program map section可用;當(dāng)該位置‘0’時(shí),指示當(dāng)前傳送的Program map section不可用,下一個(gè)TS流的Program map section 有效。
Section number:總是置為0x00(因?yàn)镻MT表里表示一個(gè)service的信息,一個(gè)section的長度足夠)。
Last section number:該域的值總是0x00 。
PCR PID:節(jié)目中包含有效PCR字段的傳送流中PID。
Program info length:12bit域,前兩位為00。該域指出跟隨其后對節(jié)目信息的描述的byte 數(shù)。
Stream type:8bit域,指示特定PID的節(jié)目元素包的類型。該處PID由elementary PID 指定。下表所示為對應(yīng)原始流的類型。
原始流的類型
1.5.PS節(jié)目流
對PS流而言,每個(gè)PES包頭含有PTS和DTS,流識別碼,用于區(qū)別不同性質(zhì)ES。然后通過PS復(fù)用器將PES包復(fù)用成PS包。實(shí)際上是將PES包分解為更細(xì)小的PS包。在解碼的時(shí)候,解復(fù)用器將PS分解成一個(gè)個(gè)PES包,拆包器然后將PES包拆成視頻和音頻的ES,最后輸入至各自解碼器進(jìn)行解碼。一個(gè)問題是:各個(gè)ES在解碼時(shí),如何保證視音頻的同步呢?除了PTS和DTS的配合工作外,還有一個(gè)重要的參數(shù)是SCR(system clock reference)。在編碼的時(shí)候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解碼時(shí),STC會再生,并通過鎖相環(huán)路(PLL-phase lock loop),用本地SCR相位與輸入的瞬時(shí)SCR相位鎖相比較,以確定解碼過程是否同步,若不同步,則用這個(gè)瞬時(shí)SCR調(diào)整27MHz的本地時(shí)鐘頻率。最后,PTS,DTS和SCR一起配合,解決視音頻同步播放的問題。PS格式摘錄如下:
PS包的長度比較長且可變,主要用于無誤碼環(huán)境里,因?yàn)樵介L的話,同步越困難,且在丟包的情況下,重組也越困難。所以,PS適合于節(jié)目信息的編輯和本地內(nèi)容應(yīng)用的application。
2.MPEG-4編碼技術(shù) 2.1.MPEG-4概述
MPEG-4全稱為Moving Picture Experts Group 4,是一套用于音頻、視頻信息的壓縮編碼標(biāo)準(zhǔn),由國際標(biāo)準(zhǔn)化組織(ISO)和國際電工委員會(IEC)下屬的“動態(tài)圖像專家組”(Moving Picture Experts Group,即MPEG)制定,第一版在1998年10月通過,第二版在1999年12月通過。MPEG-4格式的主要用途在于網(wǎng)上流、光盤、語音發(fā)送(視頻電話),以及電視廣播。
MPEG-4的特點(diǎn):
(1)對于不同的對象可采用不同的編碼算法,從而進(jìn)一步提高壓縮效率;
(2)對象各自相對獨(dú)立,提高了多媒體數(shù)據(jù)的可重用性;
(3)允許用戶對單個(gè)的對象操作,提供前所未有的交互性;
(4)允許在不同的對象之間靈活分配碼率,對重要的對象可分配較多的字節(jié),對次要的對象可分配較少的字節(jié),從而能在低碼率下獲得較好的效果;
(5)可以方便的集成自然音視頻對象和合成音視頻對象。
2.2.MPEG-4各部分
MPEG-4由一系列的子標(biāo)準(zhǔn)組成,被稱為部,包括以下的部分。對于媒體編解碼,重點(diǎn)關(guān)注Part2,Part 3,Part 10。
第一部(ISO/IEC 14496-1):系統(tǒng)
描述視頻和音頻的同步以及混合方式(Multiplexing,簡寫為MUX)。定義了MP4容器格式,支持類似DVD菜單這樣的直觀和互動特性等。
第二部(ISO/IEC 14496-2):視頻
定義了一個(gè)對各種視覺信息(包括視頻、靜止紋理、計(jì)算機(jī)合成圖形等等)的編解碼器。對視頻部分來說,眾多“Profiles”中很常用的一種是Advanced Simple Profile (ASP),例如XviD編碼就屬于MPEG-4Part 2。包括3ivx,DivX4/Project Mayo,DivX 5,Envivio,ffmpeg/ffds,pegable,Nero Digital,QuickTime,Sorenson,XviD等常見的視頻格式, 需要注意的是Divx 3.11,MS MPEG-4,RV9/10,VP6,WMV9并不屬于標(biāo)準(zhǔn)的MPEG-4標(biāo)準(zhǔn)。
第三部(ISO/IEC 14496-3):音頻
定義了一個(gè)對各種音頻信號進(jìn)行編碼的編解碼器的集合。包括高級音頻編碼(Advanced Audio Coding,縮寫為AAC) 的若干變形和其他一些音頻/語音編碼工具。即AAC音頻標(biāo)準(zhǔn),包括LCAAC,HE AAC等,支持5.1聲道編碼,可以用更低的碼率實(shí)現(xiàn)更好的效果(相對于MP3,OGG等)。
第四部(ISO/IEC 14496-4):一致性
定義了對本標(biāo)準(zhǔn)其他的部分進(jìn)行一致性測試的程序。
第五部(ISO/IEC 14496-5):參考軟件
提供了用于演示功能和說明本標(biāo)準(zhǔn)其他部分功能的軟件。
第六部(ISO/IEC 14496-6):多媒體傳輸集成框架
即DMIF:Delivery Multimedia Integration Framework
第七部(ISO/IEC 14496-7):優(yōu)化的參考軟件
提供了對實(shí)現(xiàn)進(jìn)行優(yōu)化的例子(這里的實(shí)現(xiàn)指的是第五部分)。
第八部(ISO/IEC 14496-8):在IP網(wǎng)絡(luò)上傳輸
定義了在IP網(wǎng)絡(luò)上傳輸MPEG-4內(nèi)容的方式。
第九部(ISO/IEC 14496-9):參考硬件
提供了用于演示怎樣在硬件上實(shí)現(xiàn)本標(biāo)準(zhǔn)其他部分功能的硬件設(shè)計(jì)方案。
第十部(ISO/IEC 14496-10):進(jìn)階視頻編碼,也即ITU H.264,常寫為H.264/AVC
或稱高級視頻編碼(Advanced Video Coding,縮寫為AVC):定義了一個(gè)視頻編解碼器(codec),AVC和XviD都屬于MPEG-4編碼,但由于AVC屬于MPEG-4Part 10,在技術(shù)特性上比屬于MPEG-4 Part2的XviD要先進(jìn)。另外從技術(shù)上講,它和ITU-T H.264標(biāo)準(zhǔn)是一致的,故全稱為MPEG-4 AVC/H.264。
第十一部(ISO/IEC 14496-11):場景描述和應(yīng)用引擎
可用于多種profile(包括2D和3D版本)的互交互媒體。修訂了MPEG-4 Part 1:2001以及Part1的兩個(gè)修訂方案。它定義了應(yīng)用引擎(交付,生命周期,格式,可下載Java字節(jié)代碼應(yīng)用程序的行為),二進(jìn)制場景格式 (BIFS:Binary Format for Scene),可擴(kuò)展MPEG-4文本格式(一種使用XML描述MPEG-4多媒體內(nèi)容的文本格式)系統(tǒng)level表述。也就是MPEG-4 Part21中的BIFS,XMT,MPEG-J。
第十二部(ISO/IEC 14496-12):基于ISO的媒體文件格式
定義了一個(gè)存儲媒體內(nèi)容的文件格式。
第十三部(ISO/IEC 14496-13):IP
知識產(chǎn)權(quán)管理和保護(hù)(IPMP for Intellectual Property Management and Protection)拓展。
第十四部(ISO/IEC 14496-14):MPEG-4文件格式
定義了基于第十二部分的用于存儲MPEG-4內(nèi)容的視頻文件格式。
第十五部(ISO/IEC 14496-15):AVC文件格式
定義了基于第十二部分的用于存儲第十部分的視頻內(nèi)容的文件格式。
第十六部(ISO/IEC 14496-16):動畫框架擴(kuò)展(AFX : Animation Framework eXtension)。
第十七部(ISO/IEC 14496-17):同步文本字幕格式
第十八部(ISO/IEC 14496-18):字體壓縮和流式傳輸(針對公開字體格式)。
第十九部(ISO/IEC 14496-19):綜合用材質(zhì)流(Synthesized Texture Stream)。
第二十部(ISO/IEC 14496-20):簡單場景表示(LASeR: Lightweight Scene Representation)。
第二十一部(ISO/IEC 14496-21):用于描繪(Rendering)的MPEG-J拓展
第二十二部分(ISO/IEC 14496-22):開放字體格式(Open Font Format)。
第二十三部分(ISO/IEC 14496-23):符號化音樂表示(Symbolic Music Representation)。
第二十四部分(ISO/IEC 14496-24):音頻與系統(tǒng)交互作用(Audio and systems interaction)。
第二十五部分(ISO/IEC 14496-25):3D圖形壓縮模型(3D Graphics Compression Model)。
第二十六部分(ISO/IEC 14496-26):音頻一致性檢查
定義測試音頻數(shù)據(jù)與ISO/IEC 14496-3是否一致的方法(Audio conformance)。
第二十七部分(ISO/IEC 14496-27):3D圖形一致性檢查
定義測試3D圖形數(shù)據(jù)與ISO/IEC 14496-11:2005, ISO/IEC 14496-16:2006, ISO/IEC 14496-21:2006,和ISO/IEC 14496-25:2009是否一致的方法(3D Graphics conformance)。
2.3.MPEG-4層次結(jié)構(gòu)
先來分析它的層次結(jié)構(gòu),它可以分為5個(gè)層次(對應(yīng)著圖看,非常清楚):
(1)視頻對象序列VOS。
(2)VO(Video Object):視頻對象,它是場景中的某個(gè)物體,最簡單的情況下就是矩形框,它是有生命期的,由時(shí)間上連續(xù)的許多幀構(gòu)成。
(3)VOL(Video Object Layer):視頻對象層,VO的三種屬性信息在該層進(jìn)行編碼,該層主要用來擴(kuò)展VO的時(shí)域和空域分辨率,實(shí)現(xiàn)分成編碼。
(4)GOV:視頻對象平面組,由視頻平面組合,是可選成分。視頻對象層即可以由VOP直接組合,也可以由GOV組合而成。
(5)VOP(Video Object Plane):視頻對象平面,它可以看作是VO在某一時(shí)刻的采樣,即一幀VO。
MPEG4碼流開頭往往如下:
00 00 01 B0 F5 00 00 01 B5 09 00 00 01 00 00 00 01 20 08 86 84 00 3F 18 58 21 20 A3 1F 00 00 01 B2 58 76 69 44 30 30 36 32 00 00 01 B6
根據(jù)標(biāo)準(zhǔn),定義如下:
00 00 01 B0是視頻對象序列開始標(biāo)志(VISOBJSEQ_START_CODE),其后的數(shù)據(jù)只有一位F5,表示此視頻對象編碼序列編碼的Profile與Level類型是XVID_PROFILE_AS_L4, Profile類型數(shù)值定義于xvid.h。
00 00 01 B5是視頻對象開始標(biāo)志(VISOBJ_START_CODE),其后只有一位16進(jìn)制數(shù)據(jù)09,從這一位數(shù)據(jù)可以獲得視頻對象版本號、視頻類型和視頻信號類型信息。
00 00 01 00是視頻對象開始標(biāo)志(VIDOBJ_START_CODE),00 00 01 20是視頻對象層開始標(biāo)志(VIDOBJLAY_START_CODE),其后的11位16進(jìn)制數(shù)據(jù)比較重要,解碼所需要的VOP縱橫比、視頻對象形狀和圖像分辨率等數(shù)據(jù)都是從這11位數(shù)據(jù)獲得的。
00 00 01 B2是用戶數(shù)據(jù)開始標(biāo)志(USERDATA_START_CODE),十六進(jìn)制用戶數(shù)據(jù)共有8位。
00 00 01 B6是VOP開始標(biāo)志(VOP_START_CODE),每個(gè)VOP編碼數(shù)據(jù)都以VOP標(biāo)識頭開始,VOP標(biāo)識頭比較簡單,如果用16進(jìn)制數(shù)據(jù)表示其數(shù)值為00 00 01 B6。解碼的時(shí)候,以00 00 01 B6來判定是不是一個(gè)VOP的開始,并從VOP標(biāo)識頭后的數(shù)據(jù)讀取編碼類型,量化值等參數(shù)后完成一幀VOP的解碼。緊跟著VOP開始的,有一個(gè)2bit 的標(biāo)志,用來表示這個(gè)Frame到底是一個(gè) I Frame,P Frame,B Frame抑或是S Frame(GMS-VOP)。
標(biāo)志如下:
00: I Frame
01: P Frame
10: B Frame
11: S Frame
00 00 01 b6之后的下一個(gè)字節(jié)的高兩位,00表示I frame, 01表示P frame,10表示B frame??梢院唵文脗€(gè)圖說明一下,下圖中,第一個(gè)VOS的開頭,第二個(gè)是一個(gè)I Frame:
3.H.264編碼技術(shù) 3.1.H.264概述
國際上制定視頻編解碼技術(shù)的組織有兩個(gè),一個(gè)是“國際電聯(lián)(ITU-T)”,它制定的標(biāo)準(zhǔn)有H.261、H.263、H.263+等,另一個(gè)是“國際標(biāo)準(zhǔn)化組織(ISO)”它制定的標(biāo)準(zhǔn)有MPEG-1、MPEG-2、MPEG-4等。而H.264則是由兩個(gè)組織(ITU-T視頻編碼專家組(VCEG)和ISO/IEC動態(tài)圖像專家組(MPEG))聯(lián)合組建的聯(lián)合視頻組(JVT,Joint Video Team)共同制定的高度壓縮數(shù)字視頻編解碼器標(biāo)準(zhǔn),所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高級視頻編碼(Advanced Video Coding,AVC)的第10 部分。因此,不論是MPEG-4 AVC、MPEG-4 Part 10,還是ISO/IEC 14496-10,都是指H.264。
H264標(biāo)準(zhǔn)各主要部分有Access Unit delimiter(訪問單元分割符),SEI(附加增強(qiáng)信息),primary coded picture(基本圖像編碼),Redundant Coded Picture(冗余圖像編碼)。還有Instantaneous Decoding Refresh(IDR,即時(shí)解碼刷新)、Hypothetical Reference Decoder(HRD,假想?yún)⒖冀獯a)、Hypothetical Stream Scheduler(HSS,假想碼流調(diào)度器)。
優(yōu)勢:
(1)低碼率(Low Bit Rate):和MPEG2和MPEG4 ASP等壓縮技術(shù)相比,在同等圖像質(zhì)量下,采用H.264技術(shù)壓縮后的數(shù)據(jù)量只有MPEG2的1/8,MPEG4的1/3。
(2)高質(zhì)量的圖像:H.264能提供連續(xù)、流暢的高質(zhì)量圖像(DVD質(zhì)量)。
(3)容錯(cuò)能力強(qiáng):H.264提供了解決在不穩(wěn)定網(wǎng)絡(luò)環(huán)境下容易發(fā)生的丟包等錯(cuò)誤的必要工具。
(4)網(wǎng)絡(luò)適應(yīng)性強(qiáng):H.264提供了網(wǎng)絡(luò)抽象層(Network Abstraction Layer),使得H.264的文件能容易地在不同網(wǎng)絡(luò)上傳輸(例如互聯(lián)網(wǎng),CDMA,GPRS,WCDMA,CDMA2000等)。
H.264最大的優(yōu)勢是具有很高的數(shù)據(jù)壓縮比率,在同等圖像質(zhì)量的條件下,H.264的壓縮比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。舉個(gè)例子,原始文件的大小如果為88GB,采用MPEG-2壓縮標(biāo)準(zhǔn)壓縮后變成3.5GB,壓縮比為25∶1,而采用H.264壓縮標(biāo)準(zhǔn)壓縮后變?yōu)?79MB,從88GB到879MB,H.264的壓縮比達(dá)到驚人的102∶1。低碼率(Low Bit Rate)對H.264的高的壓縮比起到了重要的作用,和MPEG-2和MPEG-4 ASP等壓縮技術(shù)相比,H.264壓縮技術(shù)將大大節(jié)省用戶的下載時(shí)間和數(shù)據(jù)流量收費(fèi)。尤其值得一提的是,H.264在具有高壓縮比的同時(shí)還擁有高質(zhì)量流暢的圖像,正因?yàn)槿绱?,?jīng)過H.264壓縮的視頻數(shù)據(jù),在網(wǎng)絡(luò)傳輸過程中所需要的帶寬更少,也更加經(jīng)濟(jì)。
H.264/AVC可工作于多種速率,廣泛應(yīng)用于Internet/intranet上的多媒體流服務(wù)、視頻點(diǎn)播、可視游戲、低碼率移動多媒體通信 (視頻 手機(jī)等)、交互式多媒體應(yīng)用、實(shí)時(shí)多媒體監(jiān)控、數(shù)字電視與演播電視和虛擬視頻會議等,大有在上述領(lǐng)域一統(tǒng)天下的趨勢,有非常廣泛的開發(fā)和應(yīng)用前景。
3.2.H.264編碼格式解析 3.2.1.名詞解釋
(1)場和幀:視頻的一場或一幀可用來產(chǎn)生一個(gè)編碼圖像。在電視中,為減少大面積閃爍現(xiàn)象,把一幀分成兩個(gè)隔行的場。
(2)片:每個(gè)圖象中,若干宏塊被排列成片的形式。片分為I片、B片、P片和其他一些片。
I片只包含I宏塊,P片可包含P和I宏塊,而B片可包含B和I宏塊。
- I宏塊利用從當(dāng)前片中已解碼的像素作為參考進(jìn)行幀內(nèi)預(yù)測。
- P宏塊利用前面已編碼圖象作為參考圖象進(jìn)行幀內(nèi)預(yù)測。
- B宏塊則利用雙向的參考圖象(前一幀和后一幀)進(jìn)行幀內(nèi)預(yù)測。
片的目的是為了限制誤碼的擴(kuò)散和傳輸,使編碼片相互間是獨(dú)立的。
某片的預(yù)測不能以其它片中的宏塊為參考圖像,這樣某一片中的預(yù)測誤差才不會傳播到其它片中去。
(3)宏塊:一個(gè)編碼圖像通常劃分成若干宏塊組成,一個(gè)宏塊由一個(gè)16×16亮度像素和附加的一個(gè)8×8 Cb和一個(gè)8×8 Cr彩色像素塊組成。
(4)數(shù)據(jù)之間的關(guān)系:
H.264結(jié)構(gòu)中,一個(gè)視頻圖像編碼后的數(shù)據(jù)叫做一幀,一幀由一個(gè)片(slice)或多個(gè)片組成,一個(gè)片由一個(gè)或多個(gè)宏塊(MB)組成,一個(gè)宏塊由16x16的yuv數(shù)據(jù)組成。宏塊作為H264編碼的基本單位。
(5)H264編碼過程中的三種不同的數(shù)據(jù)形式:
① SODB數(shù)據(jù)比特串 —->最原始的編碼數(shù)據(jù),即VCL數(shù)據(jù);
② RBSP 原始字節(jié)序列載荷 —->在SODB的后面填加了結(jié)尾比特(RBSP trailing bits:一個(gè)bit“1”,若干比特“0”),以便字節(jié)對齊;
③ EBSP 擴(kuò)展字節(jié)序列載荷 —- 》 在RBSP基礎(chǔ)上填加了仿校驗(yàn)字節(jié)(0X03)它的原因是:在NALU加到Annexb上時(shí),需要添加每組NALU之前的開始碼StartCodePrefix,如果該NALU對應(yīng)的slice為一幀的開始則用4位字節(jié)表示0x00000001,否則用3位字節(jié)表示0x000001(是一幀的一部分)。另外,為了使NALU主體中不包括與開始碼相沖突的,在編碼時(shí),每遇到兩個(gè)字節(jié)連續(xù)為0,就插入一個(gè)字節(jié)的0x03。解碼時(shí)將0x03去掉。也稱為脫殼操作。
3.2.2.H.264/AVC結(jié)構(gòu)分析
H.264從層次來看分為兩層:視頻編碼層(VCL,Video Coding Layer)和網(wǎng)絡(luò)提取層(NAL,Network Abstraction Layer)。VCL輸出的是原始數(shù)據(jù)比特流(SODB,String of data bits),表示H.264的語法元素編碼完成后的實(shí)際的原始二進(jìn)制碼流。SODB通常不能保證字節(jié)對齊,故需要補(bǔ)齊為原始字節(jié)序列負(fù)荷(RBSP,Raw Byte Sequence Payload)。NAL層實(shí)際上就是最終輸出的H.264碼流,它是由一個(gè)個(gè)NALU組成的,每個(gè)NALU包括一組對應(yīng)于視頻編碼數(shù)據(jù)的NAL頭信息和一個(gè)原始字節(jié)序列負(fù)荷(RBSP,Raw Byte Sequence Payload)。以上名詞之間的關(guān)系如下:
RBSP = SODB + RBSP trailing bits NALU = NAL header(1 byte) + RBSP H.264 = Start Code Prefix(3 bytes) + NALU + Start Code Prefix(3 bytes) + NALU +…
所以H.264碼流的結(jié)構(gòu)如下:
H.264碼流層次結(jié)構(gòu)為:
編碼器將每個(gè)NALU各自獨(dú)立、完整地放入一個(gè)分組,因?yàn)榉纸M都有頭部,解碼器可以方便地檢測出NALU的分界,并依次取出NALU進(jìn)行解碼。每個(gè)NALU之間由起始碼(Start Code Prefix)分隔,起始碼分為兩種:0x000001(3 bytes)or 0x00000001(4 bytes),解碼器檢測每個(gè)起始碼,作為一個(gè)NALU的起始標(biāo)識,當(dāng)檢測到下一個(gè)起始碼時(shí),當(dāng)前NALU結(jié)束。如果NALU 對應(yīng)的Slice 為一幀的開始,則用4 字節(jié)表示,即0x00000001;否則用3 字節(jié)表示,0x000001。NALU針對起始碼設(shè)計(jì)了防止沖突機(jī)制,如果編碼器檢測到NALU數(shù)據(jù)存在0x000000,0x000001,0x000002或0x000003時(shí),編碼器會在最后一個(gè)字節(jié)前插入一個(gè)新的字節(jié)0x03,如下:
0x00 00 00 -》 0x00 00 03 00
0x00 00 01 -》 0x00 00 03 01
0x00 00 02 -》 0x00 00 03 02
0x00 00 03 -》 0x00 00 03 03
解碼器檢測到0x000003時(shí),把03拋棄,恢復(fù)原始數(shù)據(jù)(脫殼操作)。解碼器在解碼時(shí),首先逐個(gè)字節(jié)讀取NALU的數(shù)據(jù),統(tǒng)計(jì)NALU的長度,然后再開始解碼。
3.2.3.H.264/AVC解碼
一個(gè)NALU就是編碼后的一幀數(shù)據(jù)。每個(gè)NAL單元是一個(gè)一定語法元素的可變長字節(jié)字符串,包括一個(gè)字節(jié)的頭信息(用來表示數(shù)據(jù)類型),以及若干整數(shù)字節(jié)的負(fù)荷數(shù)據(jù)。一個(gè)NAL單元可以攜帶一個(gè)編碼片、A/B/C型數(shù)據(jù)分割或一個(gè)序列或圖像參數(shù)集。NALU頭用來標(biāo)識后面的RBSP是什么類型的數(shù)據(jù),它是否會被其他幀參考以及網(wǎng)絡(luò)傳輸是否有錯(cuò)誤。
NAL的解碼單元的流程如下:
(1)NAL header是一個(gè)字節(jié)(length = 1byte):
forbidden_bit(1bit) + nal_reference_bit(2bit) + nal_unit_type(5bit)
① forbidden_bit:禁止位,初始為0,當(dāng)網(wǎng)絡(luò)發(fā)現(xiàn)NAL單元有比特錯(cuò)誤時(shí)可設(shè)置該比特為1,以便接收方糾錯(cuò)或丟掉該單元。
② nal_reference_bit:nal重要性指示,標(biāo)志該NAL單元的重要性,取值范圍為0~3,值越大,越重要,解碼器在解碼處理不過來的時(shí)候,可以丟掉重要性為0的NALU。H.264規(guī)定,如果當(dāng)前NALU是序列參數(shù)集,或是圖像參數(shù)等,該值必須大于0。比如nal_unit_type等于5時(shí),nal_reference_bit大于0;nal_unit_type等于6,9,10,11或12時(shí),nal_reference_bit等于0。
不同類型的NALU的重要性指示如下表所示。
Nal_unit_type NAL類型 Nal_reference_bit
0 未使用 0
1 非IDR的片 此片屬于參考幀,則不等于0,不屬于參考幀,則等于0
2 片數(shù)據(jù)A分區(qū) 同上
3 片數(shù)據(jù)B分區(qū) 同上
4 片數(shù)據(jù)C分區(qū) 同上
5 IDR圖像的片 5
6 補(bǔ)充增強(qiáng)信息單元(SEI) 0
7 序列參數(shù)集 非0
8 圖像參數(shù)集 非0
9 分界符 0
10 序列結(jié)束 0
11 碼流結(jié)束 0
12 填充 0
13…23 保留 0
24…31 不保留 0
所謂參考幀,就是在其他幀解碼時(shí)需要參照的幀。比如一個(gè)I幀可能被一個(gè)或多個(gè)B幀參考,一個(gè)B幀可能被某個(gè)P幀參考。
從這個(gè)表我們也可以看出來,DIR的I幀是非常重要的,它一丟,那么這個(gè)序列的所有幀都沒辦法解碼了;序列參數(shù)集和圖像參數(shù)集也很重要,沒有序列參數(shù)集,這個(gè)序列的幀就沒法解;沒有圖像參數(shù)集,那用到這個(gè)圖像參數(shù)集的幀都沒法解。
③ 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í)會用到)
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)對送到解碼器的NAL單元順序是有嚴(yán)格要求的,如果NAL單元的順序是混亂的,必須將其重新依照規(guī)范組織后送入解碼器,否則解碼器不能夠正確解碼。
1)序列參數(shù)集NAL單元
必須在傳送所有以此參數(shù)集為參考的其他NAL單元之前傳送,不過允許這些NAL單元中間出現(xiàn)重復(fù)的序列參數(shù)集NAL單元。
所謂重復(fù)的詳細(xì)解釋為:序列參數(shù)集NAL單元都有其專門的標(biāo)識,如果兩個(gè)序列參數(shù)集NAL單元的標(biāo)識相同,就可以認(rèn)為后一個(gè)只不過是前一個(gè)的拷貝,而非新的序列參數(shù)集。
2)圖像參數(shù)集NAL單元
必須在所有以此參數(shù)集為參考的其他NAL單元之前傳送,不過允許這些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ù)劃分片段之后,無論是基本編碼圖像還是冗余編碼圖像都必須遵守這個(gè)規(guī)則。
5)基本編碼圖像的所有片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元必須在屬于相應(yīng)冗余編碼圖像的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元之前。
6)如果數(shù)據(jù)流中出現(xiàn)了連續(xù)的無參考基本編碼圖像,則圖像序號小的在前面。
7)如果arbitrary_slice_order_allowed_flag置為1,一個(gè)基本編碼圖像中的片段(slice)單元和數(shù)據(jù)劃分片段(data partition)單元的順序是任意的,如果arbitrary_slice_order_allowed_flag置為零,則要按照片段中第一個(gè)宏塊的位置來確定片段的順序,若使用數(shù)據(jù)劃分,則A類數(shù)據(jù)劃分片段在B類數(shù)據(jù)劃分片段之前,B類數(shù)據(jù)劃分片段在C類數(shù)據(jù)劃分片段之前,而且對應(yīng)不同片段的數(shù)據(jù)劃分片段不能相互交叉,也不能與沒有數(shù)據(jù)劃分的片段相互交叉。
8)如果存在SEI(補(bǔ)充增強(qiáng)信息)單元的話,它必須在它所對應(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é)束符后沒有圖像了,那么它的就在比特流中所有圖像數(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ù),用語錯(cuò)誤恢復(fù)解碼
序列結(jié)束符 表明一個(gè)序列的結(jié)束,下一個(gè)圖像為IDR圖像
流結(jié)束符 表明該流中已沒有圖像
填充數(shù)據(jù) 亞元數(shù)據(jù),用于填充字節(jié)
從前面的分析我們知道,VCL層出來的是編碼完的視頻幀數(shù)據(jù),這些幀可能是I、B、P幀,而且這些幀可能屬于不同的序列,再者同一個(gè)序列還有相對應(yīng)的一套序列參數(shù)集和圖片參數(shù)集等等,所以要完成視頻的解碼,不僅需要傳輸VCL層編碼出來的視頻幀數(shù)據(jù),還需要傳輸序列參數(shù)集、圖像參數(shù)集等數(shù)據(jù)。
參數(shù)集:包括序列參數(shù)集 SPS和圖像參數(shù)集 PPS。SPS包含的是針對一連續(xù)編碼視頻序列的參數(shù),如標(biāo)識符 seq_parameter_set_id、幀數(shù)及 POC 的約束、參考幀數(shù)目、解碼圖像尺寸和幀場編碼模式選擇標(biāo)識等等。PPS對應(yīng)的是一個(gè)序列中某一幅圖像或者某幾幅圖像,其參數(shù)如標(biāo)識符 pic_parameter_set_id、可選的 seq_parameter_set_id、熵編碼模式選擇標(biāo)識、片組數(shù)目、初始量化參數(shù)和去方塊濾波系數(shù)調(diào)整標(biāo)識等等。
數(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模式:沒有start code,SPS和PPS是封裝在container中,每一個(gè)frame前面是這個(gè)frame的長度;SPS的頭部是0x67,PPS的頭部是0x68,要保持對數(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)可的高清編碼格式,不過因?yàn)橛形④浀暮笈_,所以這種編碼格式不能小窺。相對于MPEG2,VC-1的壓縮比更高,但相對于H.264而言,編碼解碼的計(jì)算則要稍小一些。
總的來說,從壓縮比上來看,H.264的壓縮比率更高一些,也就是同樣的視頻,通過H.264編碼算法壓出來的視頻容量要比VC-1的更小,但是VC-1格式的視頻在解碼計(jì)算方面則更小一些,一般通過高性能的CPU就可以很流暢的觀看高清視頻。目前來看,VC-1可能是一個(gè)比較好的平衡,輔以微軟的支持,應(yīng)該是一只不可忽視的力量。一般來說,VC-1多為 “.wmv”后綴,但這都不是絕對的,具體的編碼格式還是要通過軟件來查詢。
5.WMV編碼技術(shù)
WMV(Windows Media Video)是微軟開發(fā)的一系列視頻編解碼和其相關(guān)的視頻編碼格式的統(tǒng)稱,是微軟Windows媒體框架的一部分。WMV包含三種不同的編解碼:作為RealVideo的競爭對手,最初為Internet上的流應(yīng)用而設(shè)計(jì)開發(fā)的WMV原始的視頻壓縮技術(shù);另一種是為滿足特定內(nèi)容需要的WMV屏幕和WMV圖像的壓縮技術(shù);在經(jīng)過SMPTE(Society of Motion Picture and Television Engineers)學(xué)會標(biāo)準(zhǔn)化以后,WMV版本9被采納作為物理介質(zhì)的發(fā)布格式,比如高清DVD和藍(lán)光光碟,即所謂的VC-1。
微軟也開發(fā)了一種稱之為ASF(Advanced Systems Format)的數(shù)字容器格式,用來保存WMV的視頻編碼。在同等視頻質(zhì)量下,WMV格式的文件可以邊下載邊播放,因此很適合在網(wǎng)上播放和傳輸。
6.Divx、Xvid編碼技術(shù)
我們還可以經(jīng)??吹牡紻ivx、Xvid,這兩個(gè)也很容易弄混。
其實(shí)兩者確實(shí)有很大淵源。DivX是一種將影片的音頻由MP3來壓縮、視頻由MPEG-4技術(shù)來壓縮的數(shù)字多媒體壓縮格式。DivX就是從微軟公司MPEG-4 v3編碼技術(shù)中派生出的最為知名以及被廣大DVDRipper廣泛采用的視頻編碼技術(shù)。用它編碼的視頻文件不僅最大程度上還原了DVD原本的畫面質(zhì)量,而且可以允許你選擇幾乎所有格式的音頻。它的視頻部分采用的是微軟的MPEG-4技術(shù)進(jìn)行壓縮,而音頻部分則是采用MP3或WMA進(jìn)行壓縮,然后把視頻和音頻部分進(jìn)行完美組合成讓我們耳目一新的AVI文件,就是DivX影片了。DivX最早是由國外的一名電腦游戲玩家和一名黑客制作,他們破解了微軟的MPEG-4視頻壓縮算法而后重新改寫并重新命名為DivX。
XviD是目前世界上最常用的視頻編碼解碼器(codec),而且是第一個(gè)真正開放源代碼的,通過GPL協(xié)議發(fā)布。在很多次的codec比較中,XviD的表現(xiàn)令人驚奇的好,總體來說是目前最優(yōu)秀、最全能的codec。可以說XviD是與Divx一脈相承而又有所加強(qiáng)的。
評論
查看更多