ffmpeg version 3.4 Copyright (c) 2003-2017 the FFmpeg developers
built with Apple LLVM version 7.3.0 (clang-703.0.31)
configuration: --prefix=/usr/local/media/ffmpeg_34 --enable-gpl --enable-avresample --disable-x86asm --disable-encoder=aac --disable-decoder=aac --enable-libfdk_aac --enable-nonfree --extra-cflags=-I/usr/local/media/libfdkaac/include/ --extra-ldflags=-L/usr/local/media/libfdkaac/lib --extra-cflags=-I/usr/local/media/libx264/include/ --extra-ldflags=-L/usr/local/media/libx264/lib
由于音频数据在采样率、format有多种参数格式, ffmpeg自带的AAC支持有限,本例采样率8000就不支持,需要用fdkaac第三方库,本例编码依赖库为libfdk_aac.
AAC
AAC 封装格式
AAC音频格式有ADIF和ADTS:
ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。
ADTS:Audio Data Transport Stream 音频数据传输流。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。它的特征类似于mp3数据流格式。
简单说,ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。且这两种的header的格式也是不同的,目前一般编码后的和抽取出的都是ADTS格式的音频流。
ADTS是帧序列,本身具备流特征,在音频流的传输与处理方面更加合适。