webrtc c++(二) webrtc音频操作麦克风录音与播放,声音控制

本文深入探讨了Webrtc音频模块的使用与实现细节,包括核心类的创建、音频设备的管理、音量控制、录制与播放功能,以及资源的销毁过程。通过具体代码示例,展示了如何在Qt环境中集成Webrtc音频模块,实现音频录制、播放和设备选择等功能。

由于新版本的webrtc工程太过于庞大,有一千读个工程,对于理解源码很不方便,所以以后都采用老版本的webrtc,以方便理解,这个版本有一百多个工程,相对于最新的工程要小很多

webrtc源码  下载 链接:

https://pan.baidu.com/s/14ECsWNgQ4ZxrxG0tO22E0w
提取码:ups7

这个版本中webrtc 音频核心为

webrtc::VoiceEngine* ptrVoEngine_;  //核心引擎类,下面的四个类的都是基于引擎创建的
webrtc::VoEBase* ptrVoEBase_;
webrtc::VoEVolumeControl* ptrVoEVolumeControl_;//声音控制类,设置麦克风与声卡的声音等
webrtc::VoEFile* ptrVoEFile_;//音频文件管理,播放文件,保存文件等
webrtc::VoEHardware* ptrVoEHardware_;//设备相关,可以获取设备,打开设备,播放等

 

1.核心类的创建
 

bool videoCap::InitVoiceEnginee()
{
    ptrVoEngine_ = webrtc::VoiceEngine::Create(); //通过全局方法创建引擎

    //通过引擎创建其他类
    ptrVoEBase_ = webrtc::VoEBase::GetInterface(ptrVoEngine_); 

    ptrVoEHardware_ = webrtc::VoEHardware::GetInterface(ptrVoEngine_);
    ptrVoEFile_ = webrtc::VoEFile::GetInterface(ptrVoEngine_);
    ptrVoEVolumeControl_ = webrtc::VoEVolumeControl::GetInterface(ptrVoEngine_);

    int errCode = ptrVoEBase_->Init();
    if (errCode != 0)
    {
        return false;
    }
    
    //注册错误回调
    errCode = ptrVoEBase_->RegisterVoiceEngineObserver(voeObserver_);
    if (errCode != 0)
    {
        return false;
    }
    return true;
}

2 获取音频设备列表(麦克风与音响设备)

void videoCap::setDevice()
{
	int recoder_device_num{ 0 };
	int play_device_num{ 0 };
        //获取所有录制设备信息(麦克风等)
	int errCode = ptrVoEHardware_->GetNumOfRecordingDevices(recoder_device_num);
	if (errCode != 0)
	{
		return;
	}
        
        //获取所以播放设备信息(耳麦音响等)
	errCode = ptrVoEHardware_->GetNumOfPlayoutDevices(play_device_num);
	if (errCode != 0)
	{
		return;
	}

        //获取录制设备详细信息
	for (int i = 0; i < recoder_device_num; ++i)
	{
		char devName[256]{ 0 };
		char guidName[256]{ 0 };
		ptrVoEHardware_->GetRecordingDeviceName(i, devName, guidName);
		ui.m_cbRecoderDev->addItem(devName, i);
	}

        //获取播放设备详细信息
	for (int i = 0; i < recoder_device_num; ++i)
	{
		char devName[256]{ 0 };
		char guidName[256]{ 0 };

		ptrVoEHardware_->GetPlayoutDeviceName(i, devName, guidName);

		ui.m_cbPlayerDev->addItem(devName,i);
	}
        
        //创建channel,以后所有的操作都是基于这个audio_channel_
	audio_channel_ = ptrVoEBase_->CreateChannel();
	if (audio_channel_ < 0)
	{
		qDebug() << "ERROR in VoEBase::CreateChannel";
	}
	errCode = ptrVoEBase_->StartPlayout(audio_channel_);
	if (errCode != 0)
	{
		qDebug() 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值