格式
- 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。
结构
结构主要有两点区别:
- SPS和PPS的组织格式
- 数据分隔方式不同
Annex-B -结构
- SPS和PPS按照流的方式写在头部,一般位于IDR帧之前的位置
- 采用start code分隔NAL(start code为三字节或四字节,0x000001或0x00000001,一般是四字节);
AVCC -结构
- 在头部包含或则固定的位置包含SPS PPS等信息,如flv是在第一个视频tag的avc_decoder_configuration_record中包含
- 使用NAL的长度(固定为4字节)分隔NAL
Why?
统一的格式不香吗?为啥要搞几种?
原因在于媒体可分为本地文件和直播流
- 如果是本地文件,则我们只需要读取一次SPS,PPS的信息,然后就可以一直进行解码了,所以将SPS PPS等信息放到文件的头部,打开文件,先读取这些信息初始化解码器,然后就可以顺利的解码了;其次本地文件不存在丢包或则中途进入一说,所有按照格式读取的话肯定能读取到NAL头的长度,所以像FLV,MP4,MKV这些常用的本地存储方式都用的AVCC封装。
- 如果是直播流,那我们如果放到头部的话,中途播放的用户是无法接收到SPS PPS信息,无法初始化解码器,所以必须每隔一段时间发送一次SPS PPS等信息,一般是放在IDR帧之前进行发送,所以如mpeg-ts 这种常用的直播流就是使用Annex-B结构