FFMpeg-12、自带filter实现混音(系统音和麦克风音混合)

本文介绍了如何在Windows下通过SetupScreenCapturerRecorder安装软件,使用ffmpeg列出音频设备并初始化音频输入。详细讲解了如何初始化混音filter,实现音频帧的解码和混音,以及如何在混音过程中控制静音。

1、获取系统音设备名称

windows下获取系统需要安装软件:Setup Screen Capturer Recorder
安装之后使用ffmpeg命令查看设备可以发现

ffmpeg -list_devices true -f dshow -i dummy

在这里插入图片描述
注意我们在写代码获取音频设备的时候,我暂时的方法找不到该设备名,因此暂时是写死的。

2、获取音频

2.1、初始化音频设备

bool CCameraRecord::InitAudioSysInput()
{
   
   
	dzlog_info("%s(%d) Start", __FUNCTION__, __LINE__);
	string strAudioDeviceName = "virtual-audio-capturer";
	if (strAudioDeviceName == "")
	{
   
   
		dzlog_info("%s(%d) m_strAudioDeviceName Fail", __FUNCTION__, __LINE__);
		return false;
	}
	//m_bAudioInit = false;
	AVDictionary *device_param = 0;
	char szDeviceName[1024] = {
   
    0 };
	sprintf_s(szDeviceName, 5096, "audio=%s", strAudioDeviceName.c_str());

	string device_name_utf8 = AnsiToUTF8(szDeviceName, strlen(szDeviceName));
	dzlog_info("%s(%d) m_strAudioDeviceName=%s", __FUNCTION__, __LINE__, strAudioDeviceName.c_str());
	dzlog_info("%s(%d) szDeviceName=%s", __FUNCTION__, __LINE__, szDeviceName);
	dzlog_info("%s(%d) device_name_utf8=%s", __FUNCTION__, __LINE__, device_name_utf8.c_str());
	if (avformat_open_input(&m_pAudSysFmtCtx, device_name_utf8.c_str(), m_pInputFormat, &device_param) != 0)
	{
   
   
		dzlog_info("%s(%d) avformat_open_input Fail", __FUNCTION__, __LINE__);
		return false;
	}

	if (avformat_find_stream_info(m_pAudSysFmtCtx, NULL) < 0)
	{
   
   
		dzlog_info("%s(%d) avformat_find_stream_info Fail", __FUNCTION__, __LINE__);
		return false;
	}


	int m_audioindex = -1;
	for (int i = 0; i < m_pAudSysFmtCtx->nb_streams; i++)
	{
   
   
		if (m_pAudSysFmtCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO)
		{
   
   
			m_audioindex = i;
			break;
		}
	}

	if (m_audioindex == -1)
	{
   
   
		dzlog_info("%s(%d) m_audioindex == -1", __FUNCTION__, __LINE__);
		return false;
	}

	if (avcodec_open2(m_pAudSysFmtCtx->streams[m_audioindex]->codec, avcodec_find_decoder(m_pAudSysFmtCtx->streams[m_audioindex]->codec->codec_id), NULL) < 0)
	{
   
   
		dzlog_info("%s(%d) avcodec_open2 Fail", __FUNCTION__, __LINE__);
		return false;
	}

	m_nSample_rateSys = m_pAudSysFmtCtx->
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值