h264格式分析

一.简介

  • h264是一种视频编码标准,又叫Advanced Video Codec,即AVC

二.h264编码原理

1.帧间压缩

通过I、B、P帧实现帧间压缩

  • I帧(帧内编码帧),通常是每个 GOP(MPEG 所使⽤的⼀种视频压缩技术)的第⼀个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。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或0x000001
  • 3字节的0x000001只有⼀种场合下使⽤,就是⼀个完整的帧被编为多个slice(⽚)的时候,包含这些slice的NALU使⽤3字节起始码,其余场合都是4字节0x00000001

1.nalu头信息

nalu header {
	F 1bit
	R 2bit
	T 5bit
}
  • F为禁⽌位,forbidden_zero_bit:H.264规范中规定了这⼀位必须为0
  • R为重要性指示位,nal_ref_idc:取00~11,取值越⼤,表示当前NAL越重要,需要优先受到保护。如果当前NAL是属于参考帧的⽚,或是序列参数集,或是图像参数集这些重要的单位时,必需⼤于0
  • T为负荷数据类型,nal_unit_type:1~12由h264使⽤,24~31由h264以外的应⽤使⽤
    • 5表示IDR的slice
    • 6表示SEI(辅助增强信息)
    • 7表示sps(序列参数集)
    • 8表示pps(图像参数集)

2.annexb模式

H264有两种封装格式,很多解码器只⽀持annexb这种模式,因此需要将mp4做转换,在ffmpeg中⽤h264_mp4toannexb_filter可以做转换

  • annexb模式,传统模式,有startcode,SPS和PPS是在ES中
  • mp4模式,⼀般mp4和mkv都是mp4模式,没有startcode,SPS和PPS以及其它信息,被封装在container中,每⼀个帧前⾯4个字节是这个frame的⻓度
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值