天天看點

Annex-B和AVCC

格式

  • 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

Annex-B和AVCC
Annex-B和AVCC

flv

Annex-B和AVCC

繼續閱讀