uint64_t out_channel_layout=AV_CH_LAYOUT_STEREO; //定义目标音频参数
//nb_samples: AAC-1024 MP3-1152
int out_nb_samples=pACodecCtx->frame_size;
AVSampleFormat out_sample_fmt=AV_SAMPLE_FMT_S16;
int out_sample_rate=44100;
int out_channels=av_get_channel_layout_nb_channels(out_channel_layout);
//Out Buffer Size
int out_buffer_size=av_samples_get_buffer_size(NULL,out_channels ,out_nb_samples,out_sample_fmt, 1);//计算转换后数据大小
uint8_t * audio_out_buffer=(uint8_t *)av_malloc(out_buffer_size);//申请输出缓冲区
//FIX:Some Codec's Context Information is missing
uint64_t in_channel_layout=av_get_default_channel_layout(pACodecCtx->channels);
//Swr
SwrContext *audio_convert_ctx = swr_alloc();
audio_convert_ctx=swr_alloc_set_opts(audio_convert_ctx,out_channel_layout, out_sample_fmt, out_sample_rate,
pACodecCtx->channel_layout ,pACodecCtx->sample_fmt , pACodecCtx->sample_rate,0, NULL);//配置源音频参数和目标音频参数
swr_init(audio_convert_ctx);
int len2=swr_convert(audio_convert_ctx,&audio_out_buffer, out_buffer_size,(const uint8_t **)audio_frame->data , audio_frame->nb_samples);
int resampled_data_size = len2 * out_channels * av_get_bytes_per_sample(out_sample_fmt);//每声道采样数 x 声道数 x 每个采样字节数
fwrite(audio_out_buffer,1,resampled_data_size,pcm);//pcm记录
fflush(pcm);
</pre><pre name="code" class="html">