首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

ffmpeg aac编码pcm 音频流,该如何解决

2012-09-14 
ffmpegaac编码pcm音频流AVCodec *m_DecodeCodecAVCodecContext *m_DecodeCint CMyAudio::InitDecode(){m

ffmpeg aac编码pcm 音频流
AVCodec *m_DecodeCodec;

AVCodecContext *m_DecodeC; 

int CMyAudio::InitDecode()
{
m_DecodeCodec = avcodec_find_decoder(CODEC_ID_ADPCM_IMA_WAV);

if(!m_DecodeCodec)
{
TRACE("查找解码器失败\n");

return 1;
}

m_DecodeC = avcodec_alloc_context();

m_DecodeC->codec_type = CODEC_TYPE_AUDIO;
m_DecodeC->sample_rate = 44100;
m_DecodeC->channels = 2;
m_DecodeC->bit_rate = 64000;
m_DecodeC->sample_fmt = SAMPLE_FMT_S16;

if(avcodec_open(m_DecodeC,m_DecodeCodec) < 0)
{
TRACE("打开解码器失败\n");

return 1;
}

return 0;
}

int CMyAudio::EncodeAudio(char *chSourceData,int nSourceLen,char *chTargetData,int &nTargetLen)
{
int frame_size, out_size, outbuf_size;

short *samples;

uint8_t *outbuf;

frame_size = m_EncodeC->frame_size;

samples = (short*)malloc(nSourceLen);

outbuf_size = 10000;

outbuf = (uint8_t*)malloc(outbuf_size);

memcpy(samples,chSourceData,nSourceLen);

while(1)
{
out_size = avcodec_encode_audio(m_EncodeC, outbuf, outbuf_size, samples);

if(out_size > 0)
break;
}

nTargetLen = out_size;

memcpy(chTargetData,outbuf,out_size);

free(outbuf);

free(samples);

return 0;
}

aac的音频流 这样 解码成 pcm音频流 行吗

[解决办法]
解码比较简单啊,按照流程下来就好了 av_register_all(), av_open_codec()...之后就是把AAC一政的数据塞给解码器就OK了,注意ADTS的头,
你还可以用faad,一个纯粹的AAC decode

热点排行