H.264简单总结
(quan整理)
一、視頻信息和信號(hào)的特點(diǎn) < type="text/javascript">< type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">?
1.1直觀性
?????? 利用人的視覺系統(tǒng),直接獲取視頻信息
1.2確定性
?????? 視頻信息只管具體,不易與其他內(nèi)容混淆
1.3高效性
?????? 利用視覺系統(tǒng),人們可以并行的觀察圖像的各個(gè)象素,因此具有高效性。
1.4廣泛性
?????? 視覺系統(tǒng)占外界信息總量的70%
1.5視頻信號(hào)的高帶款性
?????? 視頻信息包含大量的變化的信息,信息量極大,傳輸網(wǎng)絡(luò)所需要的帶寬相對較大。
?
二、視頻壓縮的要求和可能性
2.1視頻壓縮編碼的目標(biāo)
???????????????? 由于視頻信息量大,傳輸帶寬高,就要求先對視頻源壓縮,然后傳輸,以便節(jié)約帶寬和存儲(chǔ)空間。
??????????????? (1)?????? 視頻必須壓縮在一定的帶寬內(nèi),要保證足夠的壓縮比。
??????????????? (2)?????? 視頻壓縮后,經(jīng)恢復(fù)要保證一定的視頻質(zhì)量
??????????????? (3)?????? 視頻編碼器的實(shí)現(xiàn)方式應(yīng)力求簡單、易實(shí)現(xiàn)、低成本、可靠性高。
2.2視頻壓縮的可能行
??????????????? (1)時(shí)間相關(guān)行
???????????????????? 在一組視頻序列中,相鄰相鄰兩幀只有極少的不同之處,這便是時(shí)間相關(guān)性。
??????????????? (2)空間相關(guān)性
???????????????????? 在同一幀中,相鄰象素之間有很大的相關(guān)性,兩象素越近,側(cè)相關(guān)性越強(qiáng)。
?
三、視頻編碼技術(shù)
3.1基本結(jié)構(gòu)
?????? 視頻編碼方式與采用的信源有關(guān)。根據(jù)采用的信源的模型,視頻編碼可以分為兩大類:基于波形的編碼和基于內(nèi)容的編碼。
3.2 基于波形的編碼
?????? 如果采用“一幅圖像由許多象素構(gòu)成”的信源模型,這種信源模型的參數(shù)就是象素的亮度和色度的幅度值,對這些參數(shù)進(jìn)行編碼的技術(shù)即為基于波形編碼。
?????? 利用象素空間的相關(guān)性和幀間的時(shí)間相關(guān)性,采用預(yù)測編碼和變化編碼技術(shù),減少視頻信號(hào)的相關(guān)性,從而顯著降低視頻序列的碼率,實(shí)現(xiàn)壓縮編碼的目標(biāo)。
3.3基于內(nèi)容的編碼
??????? 如果采用一個(gè)分量有幾個(gè)物體構(gòu)成的信源模型,這種信源模型的參數(shù)事各個(gè)物體的形狀,紋理,運(yùn)動(dòng),對這些參數(shù)進(jìn)行編碼的技術(shù)就是基于內(nèi)容的編碼。
?
四、h264的應(yīng)用
4.1 H. 264的技術(shù)特點(diǎn)可以歸納為三個(gè)方面
??????? (1)注重實(shí)用;
??????? (2)注重對移動(dòng)和IP網(wǎng)絡(luò)的適應(yīng);
??????? (3)在混合編碼器的基本框架下,對其主要關(guān)鍵部件都做了重大改進(jìn),如多模式運(yùn)動(dòng)估計(jì)、幀內(nèi)預(yù)測、多幀預(yù)測、基于內(nèi)容的變長編碼、4X4二維整數(shù)變換等。
??????? (4)在關(guān)注H. 264的優(yōu)越性能的同時(shí)必然需要衡量其實(shí)現(xiàn)難度。從總體上說,H. 264性能的改進(jìn)是以增加復(fù)雜性為代價(jià)而獲得的。據(jù)估計(jì),H. 264 編碼的計(jì)算復(fù)雜度大約相當(dāng)于H. 263的3倍,解碼復(fù)雜度大約相當(dāng)于H. 263的2倍.
4.2? h264應(yīng)用可分為3個(gè)級(jí)別:
??????? (1) 基本檔次:? (簡單版本, 應(yīng)用面廣 , 支持幀內(nèi)和幀間編碼,基于可變程度的熵編碼.)
????????????????????????????????? 應(yīng)用領(lǐng)域:? 視頻會(huì)話,會(huì)議電視, 無線通信等實(shí)時(shí)通信.
??????? (2) 主要檔次:? ( 采用了多項(xiàng)提高圖像質(zhì)量和增加壓縮比的技術(shù)措施, 支持隔行視頻, 支持基于上下文的自適應(yīng)的算術(shù)編碼.)
????????????????????????????????? 應(yīng)用領(lǐng)域:? 數(shù)字廣播與數(shù)字視頻存儲(chǔ).
?????? (4)擴(kuò)展檔次: 應(yīng)用領(lǐng)域: 可用于各種網(wǎng)絡(luò)的視頻流傳輸,視頻點(diǎn)播
?
五、視頻編碼原理
5.1基本概念
????????????? (1)視頻編碼器 能夠?qū)σ粋€(gè)圖像或者一個(gè)視頻序列進(jìn)行壓縮,產(chǎn)生碼流。
?
????????????? 在上圖中,編碼器輸入的幀或場Fn,以宏塊為單位被編碼器處理。
????????????? 如果采用幀間預(yù)測編碼:其預(yù)測值P,是由已編碼的圖像做參考,經(jīng)運(yùn)動(dòng)補(bǔ)償?shù)玫降摹nA(yù)測圖像P和當(dāng)前幀F(xiàn)n相減,得到兩圖像的殘差值Dn,Dn在經(jīng)過轉(zhuǎn)換T,量化Q,去處空間冗余,得到系數(shù)X,將X重排(使數(shù)據(jù)更加緊湊),熵編碼(加入運(yùn)動(dòng)矢量。。。一些圖像相關(guān)得信息),得到nal數(shù)據(jù)。
????????????? 再編碼器中有個(gè)重構(gòu)的過程(解碼的過程),量化系數(shù)X,反量化,反變換,得到Dn’,Dn’和預(yù)測圖像P相加,得到uFn’,再濾波得到Fn’,Fn’就是Fn編碼再解碼后得圖像。
????????????? 如果采用幀內(nèi)預(yù)測編碼:預(yù)測值P,是由當(dāng)前片中,己編碼的宏塊預(yù)測得到的(亮度4×4或者16×16預(yù)測,色度8×8預(yù)測)。當(dāng)前待處理的塊,減去預(yù)測值P,得殘差值Dn,Dn在經(jīng)過轉(zhuǎn)換T,量化Q,得到系數(shù)X,將X重排(使數(shù)據(jù)更加緊湊),熵編碼,得到nal數(shù)據(jù)。
????????????? 再重構(gòu)的過程中,量化系數(shù)X,反量化,反變換,得到Dn’,Dn’和預(yù)測圖像P相加得到當(dāng)前宏塊編碼解碼后得值,該值可以用來做幀內(nèi)預(yù)測的參考宏塊。
????????????? 編碼器要有重構(gòu)機(jī)制的原因:重構(gòu)過程,實(shí)質(zhì)上是個(gè)解碼的過程,解碼后的圖像和源圖肯定有差別,我門利用解碼后的圖像做參考,就能夠和解碼器中保值一致,就能夠提高圖像的預(yù)測精度。(再解碼器中,是利用己解碼的圖像做參考,是從解碼的圖像預(yù)測出下一副圖像)
?
????????????? (2)視頻解碼器 能夠?qū)σ粋€(gè)碼流解碼,長生和源圖或源視頻序列相近的圖像或視頻序列。如果解碼出的圖像和源圖是一樣的,這個(gè)編解碼過程是無損的,否則是有損。
?
???????????????????? 解碼器的實(shí)現(xiàn)和編碼器的重構(gòu)機(jī)制,是一樣的。
?
????????????? (3)場 、幀、圖像
???????????????????? 場:隔行掃描的圖像,偶數(shù)行成為頂場行。奇數(shù)行成為底場行。所有頂場行稱為頂場。所有底場行稱為底場。
???????????????????? 幀:逐行掃描的圖像。
???????????????????? 圖像:場和幀都可認(rèn)為是圖像。
????????????? (4)宏塊、片:
???????????????????? 宏塊:一個(gè)宏塊由一個(gè)16×16亮度塊、一個(gè)8×8Cb和一個(gè)8×8Cr組成。
???????????????????? 片:一個(gè)圖像可以劃分成一個(gè)或多個(gè)片,一個(gè)片由一個(gè)或多個(gè)宏塊組成。
5.2編碼數(shù)據(jù)格式
????????????? 5.2.1? h264支持4:2:0的連續(xù)或隔行視頻編碼解碼。
????????????? 5.2.2? h264的編碼格式
??????????????????????????? 制定h264的主要目標(biāo)有兩個(gè):
??????????????????????????? (1)得到高的視頻壓縮比
??????????????????????????? (2)具有良好的網(wǎng)絡(luò)親和性,即可適應(yīng)于各種傳輸網(wǎng)絡(luò)。
??????????????????????????? 為此,h264的功能分為兩層,視頻編碼層(VCL)和網(wǎng)絡(luò)提取層(NAL)
??????????????????????????? VCL數(shù)據(jù)即被壓縮編碼后的視頻數(shù)據(jù)序列。在VCL數(shù)據(jù)要封裝到NAL單元中之后,才可以用來傳輸或存儲(chǔ)。NAL單元格式如下圖:
??? Nal頭 Rbsp Nal頭 Rbsp Nal頭 Rbsp
???????????? 5.2.3???????? h264碼流結(jié)構(gòu)
5.3參考圖像
?????????? H264為提高精度,H264最多可從15個(gè)圖像總進(jìn)行選擇,選出最佳的匹配圖
?????????? 優(yōu)點(diǎn):? 大大提高預(yù)測精度
?????????? 缺點(diǎn):??? 復(fù)雜度大為增加
?????????? 參考圖像由參考列表(list0,list1)管理,
????????? P幀有一個(gè)參考列表 list0
????????? B幀有兩個(gè)參考列表 list0 和 list 1
?
5.4幀內(nèi)預(yù)測
????????? 預(yù)測塊P是基于已編碼重建塊和當(dāng)前塊形成的.
????????? 對于亮度的預(yù)測:4×4亮度預(yù)測,16×16亮度預(yù)測
????????? 對于色度象素預(yù)測:?? 8×8色度預(yù)測
???????? 5.4.1? 4×4亮度預(yù)測
????????????????????????? 4×4亮度預(yù)測 有9種預(yù)測模式
???????????????????????????
???????????????? (a)利用上面和左面的象素,對a~q進(jìn)行幀內(nèi)4×4預(yù)測
?
???????????????? (b)幀內(nèi)4×4預(yù)測的8個(gè)方向
??????
??????
??????
??????
模式 描述
模式 0 (垂直) 由上邊象素垂直推出相應(yīng)象素值
模式 1 (水平) 由左邊象素水平推出相應(yīng)象素值
模式 2 (DC) 由上邊及左邊平均值推出所有象素值
模式 3 (下左對角) 由45度方向象素內(nèi)插得出相應(yīng)象素值
模式 4 (下右對角線) 由45度方向象素內(nèi)插得出相應(yīng)象素值
模式 5 (右垂直) 由26.6度方向象素值內(nèi)插得出相應(yīng)象素值
模式 6 (下水平) 由26.6度方向象素值內(nèi)插得出相應(yīng)象素值
模式 7 (左垂直) 由26.6度方向象素值內(nèi)插得出相應(yīng)象素值
模式 8 (上水平) 由26.6度方向象素值內(nèi)插得出相應(yīng)象素值
??????
?
9種預(yù)測模式計(jì)算產(chǎn)生的相應(yīng)的預(yù)測塊(SAE 定義了每種預(yù)測的預(yù)測誤差),其中 SAE 最小的預(yù)測塊與當(dāng)前塊最匹配
??????
????????? 5.4.2? 16×16亮度預(yù)測模式―――共有4種預(yù)測模式
??????
??????
??????
模式 描述
模式 0 (垂直) 由上邊象素推出相應(yīng)象素值
模式 1 (水平) 由左邊象素推出相應(yīng)象素值
模式 2 (DC) 由上邊和左邊象素平均值推出相應(yīng)象素值
模式 3 (平面) 利用線性"plane"函數(shù)推出相應(yīng)象素值,適用于亮度變化平緩區(qū)域
?
????????? 5.4.3? 8×8色度塊預(yù)測模式
?????????????????? 4種預(yù)測模式,類似幀內(nèi)16*16預(yù)測,只是編號(hào)不同
?????????????????? DC 為模式 0, 水平為模式 1, 垂直為模式2, 平面為模式 3
?
5.5 幀間預(yù)測
????????? H264幀間預(yù)測是利用已編碼的幀或場和基于塊的運(yùn)動(dòng)補(bǔ)償。在h264中,塊的尺寸更加靈活(16×16到4×4)。
???????? 5.5.1? 基本概念
????????????????????? 活動(dòng)圖像臨近幀中的景物存在一定的相關(guān)性,因此將圖像分成若干塊或宏塊,并設(shè)法搜索出每個(gè)塊或宏塊在鄰近幀圖像中的位置,并得出兩者之間的空間位置的便宜量.得到的相對偏移量就是通常所指的運(yùn)動(dòng)矢量(MV).
到運(yùn)動(dòng)矢量的過程稱為運(yùn)動(dòng)估計(jì)(ME).
?
??????? 5.5.2樹狀運(yùn)動(dòng)補(bǔ)償
?????????????? 每個(gè)宏塊(16×16)的亮度,可以按4種方式分割:1個(gè)16×16,2個(gè)16×8,2個(gè)8×16,4個(gè)8×8。8×8模式的子塊可以繼續(xù)劃分:1個(gè)8×8,2個(gè)4×8,2個(gè)8×4,4個(gè)4×4。這種分割的運(yùn)動(dòng)補(bǔ)償,稱為樹狀運(yùn)動(dòng)補(bǔ)償。??????????????????????????????????????
?????? 樹狀運(yùn)動(dòng)補(bǔ)償,靈活和細(xì)致的劃分,大提高了運(yùn)動(dòng)估計(jì)的精確程度
?????? 塊的大小可變。在運(yùn)動(dòng)估計(jì)時(shí),可以靈活地選擇塊的大小。在宏塊(MB)劃分上,H.264采用了16×6,16×8,8×16,8×8四種模式;當(dāng)劃分為8×8模式時(shí),又可進(jìn)一步采用8×4,4×8,4×4三種子宏塊劃分模式進(jìn)一步劃分,這樣做既可以使運(yùn)動(dòng)物體的劃分更加精確,減小運(yùn)動(dòng)物體邊緣的銜接誤差,又可以減小變換過程中的計(jì)算量。當(dāng)對較大的平滑區(qū)域采用Intra_16×16的幀間預(yù)測方式時(shí),為減小小尺寸變換帶來的塊間灰度差異,H.264采用了對亮度數(shù)據(jù)的16個(gè)4×4塊的DC系數(shù)進(jìn)行第二次4×4變換,對色度數(shù)據(jù)的4個(gè)4×4塊的DC系數(shù)進(jìn)行2×2變換的方式。
?????? 5.5.3 運(yùn)動(dòng)矢量
?????? 幀間編碼宏塊的每個(gè)子宏塊都是從參考圖像的某一相同尺寸區(qū)域進(jìn)行預(yù)測得到 的。兩者之間的差異(MV),對亮度成分采用1/4象素精度,色度1/8象素精度。
?
附錄:
264學(xué)習(xí)指南―――分三個(gè)階段學(xué)習(xí)
1、第一個(gè)階段:
學(xué)習(xí)H.264,首先要把最基本最必要的資料拿在手里(//172.22.113.200/share/h264/H.264相關(guān)論文/其他/經(jīng)典文章)。這些資料包括:標(biāo)準(zhǔn)文檔+測試模型+經(jīng)典文章。首先看《H.264_MPEG-4 Part 10 White Paper》,看完之后再看《Video coding using the H.264 MPEG-4 AVC compression standard》和《Halsted.Press.H.264.And.MPEG-4.Video.Compression.Video.Coding.For.Next.Generation.Multimedia.eBook-LiB》,然后可以抽空看《Overview of the H.264_AVC Video Coding Standard.pdf》。這幾篇文章看完后,你應(yīng)該對H.264的整體框架有個(gè)比較深入的了解了。前三篇文章可能需要花費(fèi)你兩~三周的時(shí)間。
?
2、第二階段:
?????? 看代碼。這個(gè)時(shí)候你最常用的工具就是標(biāo)準(zhǔn)文檔和測試模型(建議使用JM86)。看代碼也要先從整體框架入手。先搞懂H.264的整體框架在代碼里是怎么分布的,一個(gè)功能模塊的前伸模塊和后繼模塊是什么。也就是搞清楚整個(gè)代碼流程。這個(gè)階段對標(biāo)準(zhǔn)文檔的使用可能很少。
3、第三階段:
然后你找到一個(gè)自己感興趣的切入點(diǎn),開始以此為中心研究這個(gè)問題。你研究問題的時(shí)候應(yīng)該是聯(lián)系測試模型來研究,這個(gè)時(shí)候你就需要仔細(xì)看代碼中對這個(gè)問題的實(shí)現(xiàn)了。這個(gè)階段我絕對支持你一行行代碼跟蹤,一個(gè)參數(shù)一個(gè)參數(shù)地跟蹤。而代碼中不懂的地方可能需要查標(biāo)準(zhǔn)。這時(shí)你再來看標(biāo)準(zhǔn)文檔就有了針對性。也因?yàn)槟軐?biāo)準(zhǔn)文檔和代碼對應(yīng)起來,從而看標(biāo)準(zhǔn)文檔也不覺得有太大困難,也能明白標(biāo)準(zhǔn)文檔說的是什么問題,在測試模型中是如何通過代碼實(shí)現(xiàn)的。在這個(gè)階段中,會(huì)牽連到很多H.264的相關(guān)知識(shí),這樣通過以點(diǎn)帶線,以線帶面。會(huì)對H.264的內(nèi)容認(rèn)識(shí)越來越多。而你也就找到了自己的方向。
==========【注意事項(xiàng)】==========
1、切忌將代碼和標(biāo)準(zhǔn)文檔獨(dú)立開看,否則,你的困難會(huì)很大。
2、對于剛開始接觸H.264的人,切忌直接看代碼和標(biāo)準(zhǔn),哪怕是將標(biāo)準(zhǔn)和代碼結(jié)合起來看,你也會(huì)不太順利。換句話說:在沒有了解H.264整體框架之前,你最好什么都不要做。
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/fengyv/archive/2006/01/04/570071.aspx
總結(jié)
- 上一篇: java之方法的重写
- 下一篇: Android中传递对象的三种方法