FAAC转换PCM为AAC
来源:互联网 发布:cad可以画网络拓扑图吗 编辑:程序博客网 时间:2024/05/16 11:35
FAAC的代码抠出来,直接加到我们的工程中去,或者抠出来编译一个静态库,需要的代码是libfaac和include两个目录下的所有文件(不包括子目录文件)。 目录文件列表如下所示:
aacquant.caacquant.hbackpred.cbackpred.hbitstream.cbitstream.hchannels.cchannels.hcoder.hfaac.hfaaccfg.hfft.cfft.hfiltbank.cfiltbank.hframe.cframe.hhuffman.chuffman.hhufftab.hltp.cltp.hmidside.cmidside.hpsych.hpsychkni.ctns.ctns.hutil.cutil.hversion.h
主要的函数介绍
faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,unsigned int numChannels,unsigned long *inputSamples,unsigned long *maxOutputBytes);//描述 : 打开并初始化编码器//sampleRate : 编码输入信息的采样率//numChannels : 编码输入信息的通道数量,1-单声道 2-立体声//inputSamples : 编码后的数据长度//maxOutputBytes : 编码后的信息最大长度
int FAACAPI faacEncClose(faacEncHandle hEncoder);//描述:关闭编码器//hEncoder : faacEncOpen返回的编码器句柄
faacEncConfigurationPtr FAACAPI faacEncGetCurrentConfiguration(faacEncHandle hEncoder);//描述 :获取当前编码器的配置信息//hEncoder : faacEncOpen返回的编码器句柄
int FAACAPI faacEncSetConfiguration(faacEncHandle hEncoder, faacEncConfigurationPtr config);//描述 : 配置解码器的参数//hEncoder : faacEncOpen返回的编码器句柄//config : 编码器的配置信息
int FAACAPI faacEncEncode(faacEncHandle hEncoder, int32_t * inputBuffer, unsigned int samplesInput,unsigned char *outputBuffer,unsigned int bufferSize);//描述 : 编码一桢信息//hEncoder : faacEncOpen返回的编码器句柄//inputBuffer : 输入信息缓冲区//samplesInput : faacEncOpen编码后的数据长度,即缓冲区长度//outputBuffer : 编码后输出信息缓冲区//bufferSize : 输出信息长度
int FAACAPI faacEncGetVersion(char **faac_id_string, char **faac_copyright_string);//描述 : 获取FAAC的版本信息,用以参考作用,非必须API//faac_id_string : faac的版本号//faac_copyright_string : 版权信息
代码示例
代码的工作流程是:
- 打开输入输出文件
- 使用faacEncOpen打开编码器引擎
- 使用faacEncGetCurrentConfiguratio获取编码器配置
- 配置编码器参数
- 使用faacEncSetConfiguration设置编码器配置
- 读取一桢输入数据
- 使用faacEncEncode编码帧数据
- 写入编码数据到输出文件
- 使用faacEncClose关闭编码引擎
#include "faac.h"#include <stdio.h>int main(){// 定义别名typedef unsigned char BYTE;unsigned longnSampleRate = 44100;unsigned intnChannels = 2;unsigned intnPCMBitSize = 16;unsigned longnInputSamples = 0;unsigned longnMaxOutputBytes = 0;faacEncHandlehEncoder = {0};// 设置输入输出文件FILE* fpIn = fopen("Beyond.pcm", "rb");FILE* fpOut = fopen("Beyond.aac", "wb");if(fpIn==NULL || fpOut==NULL){printf("打开文件失败!\n");return -1;}// 打开faac编码器引擎hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes);if(hEncoder == NULL){printf("打开faac编码器引擎失败!\n");return -1;}// 分配内存信息intnPCMBufferSize = nInputSamples*nPCMBitSize/8;BYTE*pbPCMBuffer = new BYTE[nPCMBufferSize];BYTE*pbAACBuffer = new BYTE[nMaxOutputBytes];// 获取当前编码器信息faacEncConfigurationPtr pConfiguration = {0};pConfiguration = faacEncGetCurrentConfiguration(hEncoder);// 设置编码配置信息/*PCM Sample Input Format0FAAC_INPUT_NULLinvalid, signifies a misconfigured config1FAAC_INPUT_16BITnative endian 16bit2FAAC_INPUT_24BITnative endian 24bit in 24 bits(not implemented)3FAAC_INPUT_32BITnative endian 24bit in 32 bits(DEFAULT)4FAAC_INPUT_FLOAT32bit floating point */pConfiguration->inputFormat = FAAC_INPUT_16BIT;<span style="color:#ff0000;">// 0 = Raw; 1 = ADTSpConfiguration->outputFormat = 1;</span>// AAC object types //#define MAIN 1//#define LOW 2//#define SSR 3//#define LTP 4<span style="color:#ff0000;">pConfiguration->aacObjectType = LOW;pConfiguration->allowMidside = 0;pConfiguration->useLfe = 0;pConfiguration->bitRate = 48000;pConfiguration->bandWidth = 32000;</span>// 其他的参数不知道怎么配置,毕竟对音频不熟// 不过当前的设置可以实现转换,不过声音好像有一丢丢怪异// 这一块的配置信息很重要,错了会导致转码失败,然后你以为代码其他地方错了// 重置编码器的配置信息faacEncSetConfiguration(hEncoder, pConfiguration);size_t nRet = 0;printf("数据转换中: ");int i = 0;while( (nRet = fread(pbPCMBuffer, 1, nPCMBufferSize, fpIn)) > 0){printf("\b\b\b\b\b\b\b\b%-8d", ++i);nInputSamples = nRet / (nPCMBitSize/8);// 编码nRet = faacEncEncode(hEncoder, (int*) pbPCMBuffer, nInputSamples, pbAACBuffer, nMaxOutputBytes);// 写入转码后的数据fwrite(pbAACBuffer, 1, nRet, fpOut);}// 清理faacEncClose(hEncoder);fclose(fpOut);fclose(fpIn);delete[] pbAACBuffer;delete[] pbPCMBuffer;return 0;}
0 0
- FAAC转换PCM为AAC
- 使用FAAC转换PCM为AAC
- 开源Faac实现PCM编码AAC
- PCM 编码为AAC
- Faac 编码实时pcm流到aac流
- Faac 编码实时pcm流到aac流
- Faac 编码实时pcm流到aac流
- MediaCodec编译pcm为aac
- MediaCodec编译pcm为aac
- MediaCodec编译pcm为aac
- Faac 编码实时pcm流到aac流 并用mp4v2打包成mp4文件
- 如何将裸码流pcm编码为aac文件
- ffmpeg pcm码流编码为aac
- faac AAC编码参数
- faac库编码PCM数据
- ffmpeg 指令 PCM 转换 WAV & AAC & AMR & MP3
- 使用FAAC进行AAC编码
- 使用FAAC进行AAC编码
- UVALive - 3268 Jamie's Contact Groups(二分+最大流)
- AJAX一些常用操作
- Round A APAC Test 2016 Problem D. gSnake 贪吃蛇 stl应用
- 阅读laravel源代码有感
- 《数据结构与算法分析》图论算法--邻接表与拓扑排序
- FAAC转换PCM为AAC
- Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题
- cocos2d-x实现3D模型的换装系统的研究
- 集合框架相关知识点(二)
- jquery的$.extend和$.fn.extend作用及区别
- 【分享】ボクの手の中の楽園镜像版
- rtmp 推送h264 + aac 的数据
- spring 引用其他bean
- 【R】auto.arima和Arima的联系和参数解释