一、前言
AAC全称为Advanced Audio Coding,目前比较主流的AAC开源编码器主要有Nero和Faac。接下来我们将使用Faac实现音频PCM至AAC的音频格式转换,并使用Emscripten编译成WebAssembly模块。
二、实现步骤
使用Faac实现音频编码,主要有以下步骤:
2.1 主要函数
faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,
unsigned int numChannels,
unsigned long *inputSamples,
unsigned long *maxOutputBytes
);
变量名 | 变量含义 |
---|---|
sampleRate | 输入PCM的采样率。 |
numChannels | 输入PCM的通道数。 |
inputSamples | 编码一帧AAC所需要的字节数,打开编码器后获取,故声明时不需赋值。 |
maxOutputBytes | 编码后的数据输出的最大长度。 |
int FAACAPI faacEncEncode(faacEncHandle hEncoder,
int32_t * inputBuffer,
unsigned int samplesInput,
unsigned char *outputBuffer,
unsigned int bufferSize
);
变量名 | 变量含义 |
---|---|
hEncoder | faacEncOpen返回的编码器句柄 |
inputBuffer | PCM缓冲区 |
samplesInput | faacEncOpen编码后的数据长度inputSamples,即PCM缓冲区长度 |
outputBuffer | 编码后输出数据 |
bufferSize | 输出数据的长度,对应faacEncOpen的maxOutputBytes |
2.2 编码器参数
与Faac编码器相关的配置在faaccfg.h中声明。主要参数的含义如下:
// 生成的mpeg版本,如果需要录制MP4则设置为MPEG4,如果希望得到未封装的AAC裸流,则设置为MPEG2
// 0-MPEG4 1-MPEG2
unsigned int mpegVersion;
// AAC编码类型
// 1-MAIN 2-LOW 3-SSR 4-LTP</