1,下载源码:wget http://downloads.sourceforge.net/faac/faac-1.28.tar.gz
版本根据自己需要查询
2,./configure CXX=arm-linux-gnueabihf-xxxxx-g++ CC=arm-linux-gnueabihf-xxxxx-gcc --prefix=./faac-1.28/_install --host=arm-linux --with-mp4v2=no
3,make && make install
示例代码:
#include <faac.h>
#include <stdio.h>
#include <stdlib.h>
#define SAMPLE_RATE 16000 // 16kHz采样率
#define CHANNELS 1 // 单声道
#define BIT_RATE 32000 // 32kbps比特率
int main() {
// 打开PCM输入文件
FILE* pcmFile = fopen("./test_16k.pcm", "rb");
if (!pcmFile) {
fprintf(stderr, "无法打开PCM文件\n");
return 1;
}
// 创建AAC输出文件
FILE* aacFile = fopen("./output.aac", "wb");
if (!aacFile) {
fprintf(stderr, "无法创建AAC文件\n");
fclose(pcmFile);
return 1;
}
// 初始化FAAC编码器
unsigned long inputSamples = 0;
unsigned long maxOutputBytes = 0;
faacEncHandle encoder = faacEncOpen(SAMPLE_RATE, CHANNELS, &inputSamples, &maxOutputBytes);
if (!encoder) {
fprintf(stderr, "FAAC编码器初始化失败\n");
fclose(pcmFile);
fclose(aacFile);
return 1;
}
// 配置编码器参数
faacEncConfigurationPtr config = faacEncGetCurrentConfiguration(encoder);
config->inputFormat = FAAC_INPUT_16BIT;
config->mpegVersion = MPEG4;
config->aacObjectType = LOW;
config->bitRate = BIT_RATE;
if (!faacEncSetConfiguration(encoder, config)) {
fprintf(stderr, "FAAC编码器配置失败\n");
faacEncClose(encoder);
fclose(pcmFile);
fclose(aacFile);
return 1;
}
// 分配缓冲区
short* inputBuffer = (short*)malloc(inputSamples * sizeof(short));
unsigned char* outputBuffer = (unsigned char*)malloc(maxOutputBytes);
// 编码循环
size_t totalEncoded = 0;
while (1) {
size_t read = fread(inputBuffer, sizeof(short), inputSamples, pcmFile);
if (read == 0) break;
int bytesEncoded = faacEncEncode(encoder, inputBuffer, read, outputBuffer, maxOutputBytes);
if (bytesEncoded > 0) {
fwrite(outputBuffer, 1, bytesEncoded, aacFile);
totalEncoded += bytesEncoded;
}
}
// 释放资源
free(inputBuffer);
free(outputBuffer);
faacEncClose(encoder);
fclose(pcmFile);
fclose(aacFile);
printf("转换完成,共编码 %zu 字节数据\n", totalEncoded);
return 0;
}
3438

被折叠的 条评论
为什么被折叠?



