扬州外贸网站建设公司,滕州 网站 建设,大型网页游戏大全,h5入口h264格式分析一.简介二.h264编码原理1.帧间压缩2.帧内压缩三.编码结构1.IDR帧2.解码顺序四.NALU1.nalu头信息2.annexb模式一.简介
h264是一种视频编码标准#xff0c;又叫Advanced Video Codec#xff0c;即AVC
二.h264编码原理
1.帧间压缩
通过I、B、P帧实现帧间压缩
I…
h264格式分析一.简介二.h264编码原理1.帧间压缩2.帧内压缩三.编码结构1.IDR帧2.解码顺序四.NALU1.nalu头信息2.annexb模式一.简介
h264是一种视频编码标准又叫Advanced Video Codec即AVC
二.h264编码原理
1.帧间压缩
通过I、B、P帧实现帧间压缩
I帧帧内编码帧通常是每个 GOPMPEG 所使⽤的⼀种视频压缩技术的第⼀个帧经过适度地压缩做为随机访问的参考点可以当成图象。I帧可以看成是⼀个图像经过压缩后的产物⾃身可以通过视频解压算法解压成⼀张单独的完整的图⽚P帧前向预测编码帧通过充分将低于图像序列中前⾯已编码帧的时间冗余信息来压缩传输数据量的编码图像。需要参考其前⾯的⼀个I frame 或者P frame来⽣成⼀张完整的图⽚B帧双向预测帧既考虑与源图像序列前⾯已编码帧也顾及源图像序列后⾯已编码帧之间的时间冗余信息来压缩传输数据量的编码图像
2.帧内压缩
视频是由单张图片帧组成而图片帧之间的像素块存在相似性质所以可以进行相似比较和压缩编码
三.编码结构
h264编码的层级结构从大到小为序列(gop)、图⽚(pictrue)、⽚(slice)、宏块(macroblock)、⼦块(subblock)
GOP图像组主要⽤作形容⼀个IDR帧到下⼀个IDR帧之间的间隔了多少个帧picture图片等同于帧H264将视频分为连续的帧进⾏传输在连续的帧之间使⽤I帧、P帧和B帧单张图片继续分为片、宏块、子块
1.IDR帧
⼀个序列的第⼀个图像叫做 IDR 图像⽴即刷新图像IDR图像都是I帧图像但I帧不一定是IDR帧I帧不⽤参考任何帧但是之后的P帧和B帧是有可能参考这个I帧之前的帧IDR帧不允许这样核⼼作⽤为了解码的重同步当解码器解码到 IDR 图像时⽴即将参考帧队列清空将已解码的数据全部输出或抛弃重新查找参数集开始⼀个新的序列。这样如果前⼀个序列出现重⼤错误在这⾥可以获得重新同步的机会
2.解码顺序
帧的解码顺序和帧在原始视频中的顺序并不相同
解码顺序DR1 P4 B2 B3 P7 B5 B6 I10 B8 B9原始视频DR1 B2 B3 P4 B5 B6 P7 B8 B9 I10
四.NALU
h264原始码流(裸流)是由⼀个接⼀个的NALU组成一个帧可能有多个NALU表示⼀个原始的H.264 NALU单元通常由 StartCode NALU Header NALU Payload 三部分组成其中 Start Code ⽤于标示这是⼀个NALU 单元的开始必须是0x00000001或0x0000013字节的0x000001只有⼀种场合下使⽤就是⼀个完整的帧被编为多个slice⽚的时候包含这些slice的NALU使⽤3字节起始码其余场合都是4字节0x00000001
1.nalu头信息
nalu header {F 1bitR 2bitT 5bit
}F为禁⽌位forbidden_zero_bitH.264规范中规定了这⼀位必须为0R为重要性指示位nal_ref_idc取00~11取值越⼤表示当前NAL越重要需要优先受到保护。如果当前NAL是属于参考帧的⽚或是序列参数集或是图像参数集这些重要的单位时必需⼤于0T为负荷数据类型nal_unit_type112由h264使⽤2431由h264以外的应⽤使⽤ 5表示IDR的slice6表示SEI(辅助增强信息)7表示sps(序列参数集)8表示pps(图像参数集)
2.annexb模式
H264有两种封装格式很多解码器只⽀持annexb这种模式因此需要将mp4做转换在ffmpeg中⽤h264_mp4toannexb_filter可以做转换
annexb模式传统模式有startcodeSPS和PPS是在ES中mp4模式⼀般mp4和mkv都是mp4模式没有startcodeSPS和PPS以及其它信息被封装在container中每⼀个帧前⾯4个字节是这个frame的⻓度