G711转AAC
来源:互联网 发布:气象数据网 编辑:程序博客网 时间:2024/05/19 13:27
在嵌入式系统中 ,因资源限制,一般音频采用G711压缩编码,但在上层应用中却很少直接支持G711,一般都市WMA,AAC,MP3等。
如视频系统 存储文件采用MP4格式存储 就不直接支持 G711,故需要转换成 AAC,普通播放器才能播放 。
分为2步
1.将 G711转成 PCM ------解码成原是流
int G711::ALawDecode(uint8_t alaw)
{
alaw ^= 0x55; // A-law has alternate bits inverted for transmission
unsigned sign = alaw&0x80;
int linear = alaw&0x1f;
linear <<= 4;
linear += 8; // Add a 'half' bit (0x08) to place PCM value in middle of range
alaw &= 0x7f;
if(alaw>=0x20)
{
linear |= 0x100; // Put in MSB
unsigned shift = (alaw>>4)-1;
linear <<= shift;
}
if(!sign)
return -linear;
else
return linear;
}
unsigned G711::ALawDecode(int16_t* dst, const uint8_t* src, size_t srcSize)
{
int16_t* end = dst+srcSize;
while(dst<end)
*dst++ = ALawDecode(*src++);
return srcSize<<1;
}
data --------G711 编码数据 datalen 对应G711数据长度
int sizePCM = G711::ALawDecode((short *)pbPCMBuffer,data,dataLen);
2.将PCM 转成 AAC--------编码成AAC
采用libfaac http://www.audiocoding.com/downloads.html
定义变量:
faacEncHandle m_hEncoder;
unsigned long maxBytesOutput =0;
unsigned long nInputSamples = 0;
UINT nPCMBitSize = 16;
int nPCMBufferSize;
BYTE* pbPCMBuffer = NULL;
BYTE* pbAACBuffer = NULL;
配置
m_hEncoder = faacEncOpen(8000,1,&nInputSamples,&maxBytesOutput);
pbAACBuffer = new unsigned char[maxBytesOutput];
memset(pbAACBuffer,0,maxBytesOutput);
nPCMBufferSize = nInputSamples * nPCMBitSize / 8;
pbPCMBuffer = new BYTE [nPCMBufferSize];
faacEncConfigurationPtr CurFormat=faacEncGetCurrentConfiguration(m_hEncoder);
CurFormat->inputFormat=FAAC_INPUT_16BIT;
faacEncSetConfiguration(m_hEncoder, CurFormat);
编码
nInputSamples = (sizePCM) / (nPCMBitSize / 8);
int nRet = faacEncEncode(m_hEncoder,
(int*) pbPCMBuffer, nInputSamples, pbAACBuffer, maxBytesOutput);
- G711转AAC
- G711转AAC
- G711转AAC代码总结
- G711转AAC代码总结【转】
- 开源G711(PCMA、PCMU)/G726转AAC项目EasyAACEncoder
- EasyAACEncoder 海思等ARM平台 优化G711、G726转AAC的CPU占用等问题
- EasyAACEncoder海思/ARM平台优化G711、G726转AAC的CPU占用高问题
- Android G711(PCMA/PCMU)、G726、PCM音频转码到AAC
- g711
- G711
- G711编解码(G711与PCM类型互转)【转】
- G711编解码(G711与PCM类型互转)
- EasyPlayer实现Android MediaMuxer录像MP4(支持G711/AAC/G726音频)
- AAC
- AAC
- AAC
- aac
- AAC
- linux命令详解:md5sum命令
- android中的计时器
- C# 中的委托和事件
- 表单的数据传递方式
- cpu中指令流水线处理指令的过程
- G711转AAC
- service层逻辑练习
- UI之九宫格设计思路与实现技巧要点
- 图片或者其他文件在数据库的存储方式详解
- UiWatcher
- Exception in thread “main” java.lang.IllegalArgumentException: Wrong FS: hdfs://localhost:9000/user/
- c++栈之括号匹配问题
- 观察者模式实例与UML
- OC 类的创建及初始化方法