ffmpeg音频编码,PCM编码为ACM

该博客详细介绍了使用ffmpeg将PCM音频编码为AAC的过程,包括获取编码器、设置编码结构、转码准备、编码处理和资源释放等步骤。特别强调了在编码时要根据PCM格式正确计算数据量,避免音频播放速度异常的问题。此外,还提及在语音聊天程序中如何通过UDP发送和接收编码后的音频数据。
摘要由CSDN通过智能技术生成

基本流程

1、获取编码器
2、设置编码前的结构
3、转码准备
4、编码处理
5、清理

获取编码器

    //初始化
	av_register_all();

	//根据输出文件后缀,获取流的基本信息
	avformat_alloc_output_context2(&pFormatCtx, NULL, NULL, out_filename);


	//打开输出文件
	if (avio_open(&pFormatCtx->pb, out_filename, AVIO_FLAG_READ_WRITE) < 0)
	{
   
		printf("打开输出文件失败\n");
		return;
	}

	//创建新的输出流到文件
	audio_st = avformat_new_stream(pFormatCtx, 0);
	if (audio_st == NULL)
	{
   
		printf("创建输出流失败\n");
		return;
	}

	//找到AAC编码器
	pCodec = avcodec_find_encoder(pFormatCtx->oformat->audio_codec);
	if (!pCodec)
	{
   
		printf("没有找到编码器\n");
		return;
	}

	//创建编码器上下文
	pCodeCtx = avcodec_alloc_context3(pCodec);
	pCodeCtx->codec_id = pFormatCtx->oformat->audio_codec;
	pCodeCtx->codec_type = AVMEDIA_TYPE_AUDIO;
	pCodeCtx->sample_fmt = AV_SAMPLE_FMT_FLTP;			
	pCodeCtx->sample_rate = nSampleRate;            //采样率
	pCodeCtx->channel_layout = channel_layout;	    //音频通道布局 
	pCodeCtx->channels = audio_channels;            //声道数
	//pCodeCtx->bit_rate = 64000;

	//根据编码器上下文打开编码器
	if (avcodec_open2(pCodeCtx, pCodec, NULL) < 0)
	{
   
		printf("无法打开编码器\n");
		return;
	}

	//将AVCodecContext的成员复制到AVCodecParameters结构体,防止警告
	avcodec_parameters_from_context(audio_st-
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值