ffmpeg avcodec_decode_audio4解码 swr_convert 转换为AV_SAMPLE_FMT_S16格式

	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">
 

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值