adts格式

名字

Audio Data Transport Stream

作用

有的时候当你编码AAC裸流的时候,会遇到写出来的AAC文件并不能在PC和手机上播放,很大的可能就是AAC文件的每一帧里缺少了ADTS头信息文件的包装拼接。只需要加入头文件ADTS即可。一个AAC原始数据块长度是可变的,对原始帧加上ADTS头进行ADTS的封装,就形成了ADTS帧。

adts文件结构

adts header aac es adts header aac es adts heaer aac es

header 结构

一般情况下ADTS的头信息都是7个字节,分为2部分:
adts_fixed_header();
adts_variable_header();

adts fix header

syncword
(12)
ID
(1)
Layer
(2)
protection_absent
(1)
profile
(2)
sampling_frequency_index
(4)
private_bit
(1)
channel_configuration
(3)
original_copy
(1)
home
(1)
解释
  • syncword,总是0xFFF,代表一个ADTS帧的开始,用于同步。解码器可通过0xFFF确定每个ADTS的开始位置.因为它的存在,解码可以在这个流中任何位置开始, 即可以在任意帧解码。
  • ID,MPEG Version: 0 for MPEG-4,1 for MPEG-2
  • Layer,always ‘00’
  • protection_absent,Warning, set to 1 if there is no CRC and 0 if there is CRC
  • profile,表示使用哪个级别的AAC,如01 Low Complexity(LC) – AAC LC
    profile的值等于 Audio Object Type的值减1.profile = MPEG-4 Audio Object Type -1
  • sampling_frequency_index,采样率的下标
  • channel_configuration,声道数,比如2表示立体声双声道

adts variable header

copyright_identification_bit(1) copyright_identification_start(1) aac_frame_length(13) adts_buffer_fullness(11) number_of_raw_data_blocks_in_frame(2)
解释
  • aac_frame_length,一个ADTS帧的长度包括ADTS头和AAC原始流。frame length, this value must include 7 or 9 bytes of header length:
    aac_frame_length = (protection_absent == 1 ? 7 : 9) + size(AACFrame)
    protection_absent=0时, header length=9bytes
    protection_absent=1时, header length=7bytes
  • adts_buffer_fullness,0x7FF 说明是码率可变的码流。
  • number_of_raw_data_blocks_in_frame,表示ADTS帧中有number_of_raw_data_blocks_in_frame + 1个AAC原始帧。所以说number_of_raw_data_blocks_in_frame == 0 表示说ADTS帧中有一个AAC数据块。(一个AAC原始帧包含一段时间内1024个采样及相关数据)

猜你喜欢

转载自blog.csdn.net/qq_39977813/article/details/88774251