FFMPEG视频解封装解码 - 2、解封装实战 MP4中提取AAC音频流

首先介绍AAC ADTS格式分析

AAC⾳频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式。

ADIF:Audio Data Interchange Format ⾳频数据交换格式。这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中。

ADTS的全称是Audio Data Transport Stream。是AAC⾳频的传输流格式。AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。AAC后来⼜被采⽤到MPEG-4标准中。这种格式的特征是它是⼀个有同步字的⽐特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。

简单说,ADTS可以在任意帧解码,每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。有的时候当你编码AAC裸流的时候,会遇到写出来的AAC⽂件并不能在PC和⼿
机上播放,很⼤的可能就是AAC⽂件的每⼀帧⾥缺少了ADTS头信息⽂件的包装拼接。

⼀个AAC原始数据块⻓度是可变的,对原始帧加上ADTS头进⾏ADTS的封装,就形成了ADTS帧。

AAC音频文件的每一帧由ADTS Header和AAC Audio Data组成。

每一帧的ADTS头文件都包含了音频的采样率、声道、帧长度等信息,这样解码器才能够解析读取。一般ADTS头信息是7个字节,分为:

  • adts_fixed_header()
  • adts_variable_header()

其⼀为固定头信息,紧接着是可变头信息。固定头信息中的数据每⼀帧都相同,⽽可变头信息则在帧与帧之间可变。

  • syncword:同步头,总是0xFFF,代表一个ADTS帧的开始
  • ID:mpeg标识符,0标识MPEG-4,1标识MPEG-2
  • layer:总是'00'
  • protection_avsent:表示是否有误码校验。set to 1 if there is no CRC and 0 if there is CRC
  • profile:表示AAC级别。如01 Low Complexity(LC)--- AACLC。有些芯⽚只⽀持AAC LC 。profile的值等于 Audio Object Type的值减1
    profile = MPEG-4 Audio Object Type - 1

  • sampling_frequency_index:表示使用的采样率下标,通过下标在Sampling Frequencies[]数组中查找采样率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值