首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > 多媒体 >

aac转码的有关问题

2012-12-31 
aac转码的问题我可以用faad把aac的文件转换为wav的文件。现在我要把从cmmb的流里实时获得音频帧实时转换为w

aac转码的问题
我可以用faad把aac的文件转换为wav的文件。现在我要把从cmmb的流里实时获得音频帧实时转换为wav,然后保存为文件。
代码如下:
unsigned char DecodeTime=0;
NeAACDecHandle hAac;

int decodeAACFrame(unsigned char *BufferIn, unsigned int BufferSize)
{
    NeAACDecFrameInfo frameInfo;

if(0==DecodeTime)
{
unsigned long cap = NeAACDecGetCapabilities();
hAac = NeAACDecOpen();

NeAACDecConfigurationPtr conf =NeAACDecGetCurrentConfiguration(hAac);
conf->defObjectType = LC;
conf->defSampleRate = 24000; //real samplerate/2
conf->outputFormat = 1; //pcm
NeAACDecSetConfiguration(hAac, conf);

unsigned long samplerate=0;
unsigned char channels=0;

char err = NeAACDecInit(hAac, BufferIn, BufferSize, &samplerate,&channels);
if (err != 0)
{
//
// Handle error
//
}
 NeAACDecDecode(hAac, &frameInfo, BufferIn,BufferSize);
 DecodeTime=1;
return 0;
}
else
{
 NeAACDecDecode(hAac, &frameInfo, BufferIn,BufferSize);
 return 0;
}

}
但是,frameInfo的error总不为0.困扰了好一段时间了。
请诸位高手指点一二
[解决办法]
先看你的aac是什么的,带不带adts的头啊。NeAACDecInit只能初始化一次,如果不带aac头的,开始一定要传2个或几个字节的初始化数据的,调用NeAACDecInit2解析出采样率,声道等才能解码器初始化成功。如果是带adts头的,开始第一帧调用一次NeAACDecInit解析出采样率,声道等,里面可以判断是adts的,然后再调用解码。一般也可以去掉adts头,自己写初始化数据,根据第一种方法解码。
[解决办法]
aac的文件是有adts头的,不然每一帧没办法区分。你的那个就不知道了,要自己看一下。出来的还不知道是不是一帧一帧的数据。
[解决办法]
确定AAC是不是LATM格式的
这种格式一帧以0x2b7(11 bits length)为同步头
一般以 56 E1开头的,

热点排行