上一篇我们已经安装并简单介绍了FFmpeg学习所需要的一些工具和基础内容以及音视频相关的一些基础知识,本节开始记录学习H.264的过程细节,以作备忘。同样采用自我总结 + 优秀摘录的方式记录。
H.264作为新一代视频压缩编码标准具有如下特点:
1,同等视觉条件下压缩比更高
2,对网络传输有更好的支持,支持:交互式应用所需的低延迟模式、随机帧索取、可变码率、多种分辨率
3,对信道时延的适应性较强,低延时的实时业务(会议电视) + 无时延限制的(视频存储)
4,较强抗误码能力
5,在编码器和解码器中的复杂度可分级设计
H.264中帧以宏块为单元进行处理,宏块包含一个16x16亮度块和两个8x8色度快。
运动向/矢量(MV):编码图像中的当前快相对于参考图像块所移动的距离和方向就是运行向量。
运动估计(ME):寻找最佳匹配快的过程。
运动补偿(MC):描述相邻帧(相邻在这里表示在编码关系上相邻,在播放顺序上两帧未必相邻)差别的方法,具体来说是描述前面一帧的每个快怎样移动到当前帧中的某个位置。
预测快P:Inter-Prediction:参考帧(已经编码、解码、重建且经过了滤波)中的块经运动补偿得到
Intra-Prediction:根据当前片(slice)中已编码的块(未经滤波)对当前块预测
残差(剩余)块:当前块减去预测快,表示预测的误差。
H.264的组成:
1,网络提取层(Network Abstraction Layer, NAL)
2,实训编码城(Video Coding Layer,VCL)
用到的技术:
经过压缩后的帧为:I、P、B:
I帧:关键帧,采用帧内压缩技术。
P帧:向前参考帧,在压缩时,只参考前面已经处理的帧。采用帧音压缩技术。
B帧:双向参考帧,在压缩时,它即参考前而的帧,又参考它后面的帧。采用帧间压缩技术。
除了I/P/B帧外,还有图像序列GOP:两个I帧之间是一个图像序列,在一个图像序列中只有一个I帧。
具体细节可以参考:https://blog.csdn.net/garrylea/article/details/78536775 讲的很不错,这里不做赘述。
视频码率是视频数据(视频色彩量、亮度量、像素量)每秒输出的位数。一般用的单位是kbps。
由于不同的系统会有不同的模式,为了统一,规定在网络传输中使用大端模式,这就是网络字节序。
RTP协议:实时传送协议(Real-time Transport Protocol或简写RTP,也可以写成RTTP)是一个网络传输协议。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。
RTCP协议:实时传输控制协议(Real-time Transport Control Protocol或RTP Control Protocol或简写RTCP)是实时传输协议(RTP)的一个姐妹协议。
RTSP协议:RTSP(Real Time Streaming Protocol)是用来控制声音或影像的多媒体串流协议。
RTSP发起/终结流媒体、RTP传输流媒体数据 、RTCP对RTP进行控制,同步。
RTMP协议:RTMP(the Real-time Messaging Protocol)协议作为客户端和服务器端的传输协议,这是一个专门为高效传输视频、音频和数据而设计的 TCP/IP 协议。
HLS协议: HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议。
NAL单元(NALU):NAL的基本语法结构,它包含一个字节的头信息和一系列来自VCL的称为原始字节序列载荷(RBSP)的字节流。 数据流是储存在介质上时: 每个NALU 前添加起始码:0x00000001(或者0x000001),用来指示一个 NALU的起始和终止位置。我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。
SPS语法元素及其含义:
SPS(Sequence Paramater Set),序列参数集,保存了一组编码视频序列(Coded video sequence)的全局参数。
所谓编码视频序列即原始视频的一帧一帧的像素数据经过编码后的结构组成的徐序列。而每一帧编码后的数据所依赖的参数保存于图像参数集中。一般情况SPS和PPS的NAL Unit通常位于整个码流的起始位置。
PPS语法元素及其含义:
PPS(Picture Paramater Set),图像参数集。