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