Annex-B和AVCC

本文详细解析了H.264编码中的两种主要格式:Annex-B与AVCC(AVC1)。介绍了这两种格式在结构上的差异,包括SPS和PPS的组织方式及数据分隔的不同。并解释了它们分别适用于本地文件存储与直播流场景的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

格式

  • Annex-B
  • AVCC(H.264) 和 HVCC

Annex-B

Annex-B格式 也叫MPEG-2 transport stream format格式(ts格式), ElementaryStream格式。

AVCC(H.264)

AVCC格式 也叫AVC1格式,MPEG-4格式,字节对齐,因此也叫Byte-Stream Format。用于mp4/flv/mkv, VideoToolbox。

结构

结构主要有两点区别:

  1. SPS和PPS的组织格式
  2. 数据分隔方式不同

Annex-B -结构

  1. SPS和PPS按照流的方式写在头部,一般位于IDR帧之前的位置
  2. 采用start code分隔NAL(start code为三字节或四字节,0x000001或0x00000001,一般是四字节);

AVCC -结构

  1. 在头部包含或则固定的位置包含SPS PPS等信息,如flv是在第一个视频tag的avc_decoder_configuration_record中包含
  2. 使用NAL的长度(固定为4字节)分隔NAL

Why?

统一的格式不香吗?为啥要搞几种?
原因在于媒体可分为本地文件和直播流

  • 如果是本地文件,则我们只需要读取一次SPS,PPS的信息,然后就可以一直进行解码了,所以将SPS PPS等信息放到文件的头部,打开文件,先读取这些信息初始化解码器,然后就可以顺利的解码了;其次本地文件不存在丢包或则中途进入一说,所有按照格式读取的话肯定能读取到NAL头的长度,所以像FLV,MP4,MKV这些常用的本地存储方式都用的AVCC封装。
  • 如果是直播流,那我们如果放到头部的话,中途播放的用户是无法接收到SPS PPS信息,无法初始化解码器,所以必须每隔一段时间发送一次SPS PPS等信息,一般是放在IDR帧之前进行发送,所以如mpeg-ts 这种常用的直播流就是使用Annex-B结构

mpeg-ts

在这里插入图片描述

在这里插入图片描述

flv

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值