1.基本概念
1.1.視頻編碼關鍵點:壓縮比、算法復雜度、還原度;
理想狀態:更高的壓縮比,更低的算法復雜度,更好的還原度;
1.2.H.264 的兩大組成部分: VCL和NAL;
VCL:主要負責壓縮算法;
NAL:主要負責壓縮之后的視頻流如何被網絡傳輸,傳輸完成之后如何解碼播放;
其實在H.264的算法中已經考慮到了 “視頻編碼”“網絡傳輸”“視頻解碼”等三個方面;
不同的開發人員關注的點不同;“應用層開發人員”主要研究的還是NAL的部分;
1.3.H.264 編碼的相關概念:
(1)宏塊(MB-macroblock):視頻在編碼壓縮的時候都是以“宏塊”為單元進行壓縮;
不是以“像素”為單元為單位進行壓縮的。
一個“宏塊”中有多個像素組成;
(2)片(slice):slice是構成幀的一部分;一個“片”中有多個“宏塊”組成;
(3)幀 (frame):是一整副圖片;一幀中有多個“片”組成;
由多個幀組成了序列,由序列組成了很長的碼流;
1.4. 幀
I幀:非參考幀,編碼只跟自己有關,是起始幀,只能做“空間壓縮”,不能做“時間壓縮”;
B幀:參考幀,與時間冗余有關,是參考這個幀的前一幀計算得來的。“空間壓縮”和“時間壓縮”都可以。
既參考前面的幀也參考后面的幀;
P幀:參考幀,與時間冗余有關,是參考這個幀的前一幀計算得來的。“空間壓縮”和“時間壓縮”都可以。
只參考前面的幀;
2.NAL
2.1 NAL
a.NAL 主要負責兩方面,一方面是VCL輸入的純視頻流,另一方面是對視頻流的封包和包頭等信息;
b.封包的作用:有利於視頻的傳輸、有利於解包(解碼);
c.概念1:SODB,String Of Data Bits 數據位的純視頻流;
d.概念2:RBSP:Raw Byte Sequence Payload
e.概念3:NALU:Network Abstraction Layer Units
f.關系:
SODB + RBSP trailing bits = RBSP
NAL header(1 byte) + RBSP = NALU
g.總結:做編碼器的人關心的是VCL部分;做視頻傳輸和解碼播放的人關心的是NAL部分
2.2 H.264視頻流分析工具
(1)雷神作品:SpecialVH264.exe
(2)國外工具:Elecard StreamEye Tools
(3)二進制工具:winhex
(4)網絡抓包工具:wireshark
(5)播放器:vlc
2.3 h264視頻流總體分析
(1)h264標准有多個版本,可能會有差異,具體差異不詳
(4)海思平台編碼出來的H.264碼流都是一個序列包含:1sps+1pps+1sei+1I幀+若干p幀
在海上平台編碼之后的視頻沒有B幀;
但是在H.264的標准里是有I幀P幀B幀的概念的。
2.4 分析
【說明】使用分析工具分析之后的數據可以看出,除了前面的SPS/PPS/SEI之外的其他信息才算是數據幀;
數據幀包含有:I幀和P幀。暫時海思的編碼中沒有B幀;
如果30fps,則I幀和P幀的總計數就是30;
3.NALU詳解
參考文章:
https://blog.csdn.net/jefry_xdz/article/details/8461343
sps和pps詳解
https://www.cnblogs.com/wainiwann/p/7477794.html
H264的profile和level
https://blog.csdn.net/xiaojun111111/article/details/52090185
4.I幀、P幀、B幀、GOP、IDR 和PTS, DTS之間的關系
【轉載文章】https://blog.csdn.net/sphone89/article/details/8086071
該篇文章講解的比較全面
直接轉載到博客中了。