网站管理的内容,百度四川营销中心,做区块链的网站,太原做网站哪里好H264简介 H.264从1999年开始#xff0c;到2003年形成草案#xff0c;最后在2007年定稿有待核实。在ITU的标准里称为H.264, 在MPEG的标准里是MPEG-4的一个组成部分-MPEG-4 Part 10#xff0c;又叫Advanced Video Codec#xff0c;因此常常称为MPEG-4AVC或直接叫AVC。 压缩算…H264简介 H.264从1999年开始到2003年形成草案最后在2007年定稿有待核实。在ITU的标准里称为H.264, 在MPEG的标准里是MPEG-4的一个组成部分-MPEG-4 Part 10又叫Advanced Video Codec因此常常称为MPEG-4AVC或直接叫AVC。 压缩算法
帧内编码 解决空间冗余 帧内有空间冗余
一帧图像每8*8/16*16个像素点划分为一个块
存储左边上边的像素点一个预测方向比如上下左右平均
预测方向就是为了解码出其他的像素点插值算法类似渐变算法
帧间编码 解决时间冗余 帧间有时间冗余连续图像必然有大量重复像素连续画面
引出I帧、P帧、B帧、GOP序列的概念 I帧 帧内编码帧 自身可以独立通过解压算法形成一张完整的图片 每个GOP序列的第一个帧 随机访问的参考点 数据量最大
P帧 前向预测编码帧 将当前帧和前I帧、P帧比较存储前帧没有的宏块相似宏块记录索引 和I帧相似率25%左右
B帧 双向预测帧 当前帧和I帧、前后P帧比较存储不相似的宏块相似宏块记录索引 和I帧相似率75%左右 数据量最少
这样通过双向索引机制就可以大大提高压缩效率
GOP序列 GOP图像序列 可以理解成一个场景场景的物体都是相似的 一般都是I帧到下一个I帧之间的所有帧序列 解码顺序 B帧解码需要等待后一个P帧出来才能结合I帧后一个P帧解码出一帧 编码帧顺序I B … B P B…B 解码顺序I P B B … B B
播放时会按照pts对帧排序
H264码流结构 H264原始码流是由一个接一个的NALU包组成 注意
传输码流之前要带上SPS、PPS至少要发一次然后发I帧不然解码器解不出来
NALU结构 NALU由分割符00 00 00 01、头信息、编码数据构成 注意 对于FFmpeg解复用后MP4文件读取出来的packet是不带startcode但TS文件读取出来的packet带了startcode 播放MP4文件其中的H264码流的每个NALU里面必须带startcode才能播放
头信息说明 T为负荷数据类型占5bit
nal_unit_type这个NALU单元的类型,112由H.264使⽤2431由H.264以外的应⽤
一般只需要关注T的5678即可 举例
0x00 00 00 01 67...说明分隔符0x00 00 00 0167 二进制0 11 00111F: 0R: 11T: 00111 7 ---表示该NALU单元是序列参数集annexb模式 H264有两种封装结构 一种是annexb模式传统模式有startcodeSPS和PPS是在ES中就是每个NALU分割符头信息data一种是mp4模式一般mp4 mkv都是mp4模式没有startcodeSPS和PPS以及其它信息被封装在container中每一个frame前面是这个frame的长度 很多解码器只支持annexb模式所以如果要解析码流需要将MP4模式做转换,就是加上分割符和spspps