格式
- 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結構
mpeg-ts
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiclRnblN2XjlGcjAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9MGRNdHOXl1bsNzYoZlMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnLzETOzMzMyYTMwITMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)