AAC音频ADTS的分析
  gDC4MRgHQV7d 2023年11月19日 50 0

一种有损的音频压缩格式。,AAC音频格式有两种类型:

  • ADIF 音频数据交换格式
  • ADTS 音频数据传输流

ADTS

可以在任意帧解码,每一帧都拥有头信息。ADTS Header + AAC ES共同组成了一个完整的ADTS帧。ADTS Header可以是7个字节或9个字节,包含了采样率、通道数、帧长度等信息。

csd-0参数

AAC编解码中csd-0表示ADTS头文件,是通过AAC的Profile、采样率、通道数算出来的。比如常见的44100采样率、双声道、LC计算出来的byte字节为18,16。在通过MedaiCodec解码AAC裸流时,需要设置csd-0,否则会解析失败。如果有需要还需要设置KEY_IS_ADTS为1,用来表明每帧的头部都带有ADTS头文件,注意改参数只用在解码的时候,也就是编码是不需要的。

//解码的是AAC音频且带有 ADTS header,则必须将KEY_IS_ADTS重置为1,否则后面获取解码后的ByteBuffer会一直为-1
        mMediaFormat.setInteger(MediaFormat.KEY_IS_ADTS, 1)

csd-0计算方式:

int audioProfile = 2;   //表示LC
int sampleIndex = 4;    //44100
int channelConfig = 2;  //2
byte[] adtsAudioHeader = new byte[2];
adtsAudioHeader[0] = (byte) ((audioProfile << 3) | (sampleIndex >> 1));
adtsAudioHeader[1] = (byte) ((byte) ((sampleIndex << 7) & 0x80) | (channelConfig << 3));

当解码aac文件时,通过MediaFormat可以获取adts头文件,然后设置到创建MediaCodec的MediaFormat中。

当通过AAC编码时,在MediaCodec.INFO_OUTPUT_FORMAT_CHANGED中可以获取到MediaFormat,然后获取adts头文件。

val adtsBuffer = format.getByteBuffer("csd-0")
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

gDC4MRgHQV7d
作者其他文章 更多