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
该篇文章讲解的比较全面
直接转载到博客中了。