ADTS头部格式分析

ADTS头分为固定头信息(adts_fixed_header)和可变头信息(adts_variable_header)两个部分,
固定头信息在每个帧中的是一样的,可变头信息在各个帧中并不是固定值。
ADTS头一般是7Byte(28bit+28bit)长度
如果需要对数据进行CRC校验,则会有2个Byte的校验码,
所以ADTS头的实际长度是7个字节或9个字节。

固定头信息大小(bit)说明
synword12固定0xFFF,用作同步,表示帧的开始
id1MPEG标识符 :
0 : MPEG-4
1 : MPEG-2
layer2固定 0x00
protection_absent10:有crc校验
1:没crc校验
profile21 : AAC Main
2 : AAC LC (Low Complexity)
3 : AAC SSR (Scalable Sample Rate)
4 : AAC LTP (Long Term Prediction)
sampling_frequency_index40: 96000 Hz
1: 88200 Hz
2 : 64000 Hz
3 : 48000 Hz
4 : 44100 Hz
5 : 32000 Hz
6 : 24000 Hz
7 : 22050 Hz
8 : 16000 Hz
9 : 12000 Hz
10 : 11025 Hz
11 : 8000 Hz
12 : 7350 Hz
13 : Reserved
14 : Reserved
15 : frequency is written explictly
private_bit1私有位,编码时为0,解码时忽略
channel_configuration3声道数
1:单声道
2:双声道
其余参考更多
orininal_copy1固定 0
home1固定 0
可变头信息共有 28 bit
copyrigth_identification_bit1固定 0
copyrigth_identification_stat1固定 0
aac_frame_length13ADTS头(7Byte) + AAC裸流长度
adts_bufferfullness11缓冲区充满度
0x7FF说明是码率可变的码流
number_of_raw_data_blocks_in_frame20 : 表示说ADTS帧中只有一个AAC数据
校验位共有 2 Byte
crc16校验位 一般不需要

代码实现

static void adts_header(unsigned char *szAdtsHeader, int dataLen){
	int adtsLen = dataLen + 7;
	int sampling_frequency_index = 11; // 3;
	int channel_config = 1;

	szAdtsHeader[0] = 0xff;
	szAdtsHeader[1] = 0xf1;
	szAdtsHeader[1] |= (0 << 3);
	szAdtsHeader[1] |= (0 << 1);
	szAdtsHeader[1] |= 1;

	szAdtsHeader[2] = 1<<6; // profile
	szAdtsHeader[2] |= (sampling_frequency_index & 0x0f)<<2;
	szAdtsHeader[2] |= (0 << 1);
	szAdtsHeader[2] |= (channel_config & 0x04)>>2;

	szAdtsHeader[3] = (channel_config & 0x03)<<6;
	szAdtsHeader[3] |= (0 << 5);
	szAdtsHeader[3] |= (0 << 4);
	szAdtsHeader[3] |= (0 << 3);
	szAdtsHeader[3] |= (0 << 2);
	szAdtsHeader[3] |= ((adtsLen & 0x1800) >> 11);

	szAdtsHeader[4] = (unsigned int)((adtsLen & 0x7f8) >> 3);
	szAdtsHeader[5] = (unsigned int)((adtsLen & 0x7) << 5);
	szAdtsHeader[5] |= 0x1f;
	szAdtsHeader[6] = 0xfc;
}

flv格式中裸流的AAC数据是没办法播放的,需要添加ADTS头才能够播放
在其他的流传输中也可能不带有adts头,所以在送往播放器前需进行adts头的补充。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值