webrtc native开发-麦克风设置

    本文介绍在webrtc源码开发中如何添加对麦克风的选择和设置。一般通过CreatePeerConnectionFactory函数来创建PeerConnectionFactoryInterface进而创建PeerConnection变量进行后续的音视频连接,可以看到CreatePeerConnectionFactory的函数原型为

rtc::scoped_refptr CreatePeerConnectionFactory(
    rtc::Thread* network_thread,
    rtc::Thread* worker_thread,
    rtc::Thread* signaling_thread,
    AudioDeviceModule* default_adm,
    cricket::WebRtcVideoEncoderFactory* encoder_factory,
    cricket::WebRtcVideoDecoderFactory* decoder_factory)

其中第四个参数为AudioDeviceModule类型的指针变量,AudioDeviceModule类包括了webrtc中所用到的几乎所有的音频采集的接口。当该参数传NULL时,webrtc会在内部建立一个AudioDeviceModule的对象,而对麦克风的设置都为默认值。如果需要对麦克风进行设置,则可以定义一个AudioDeviceModule类型的指针变量,通过调用一系列的接口进行麦克风功能的设置,使用之前记得将头文件引用进来即可:

#include "webrtc/modules/audio_device/include/audio_device.h"

下面给出一段麦克风的枚举、选择以及音量设置的完整代码,仅供参考:

void set_mic(uint32_t vol2, bool is_mute2)
{
rtc::scoped_refptr audio2;
//创建AudioDeviceModule指针变量
audio2 = webrtc::AudioDeviceModule::Create(0, webrtc::AudioDeviceModule::kPlatformDefaultAudio);
assert(audio2);
audio2->Init();
int num=0;
int ret=0;
num = audio2->RecordingDevices();//列举麦克风设备数量
printf("Input devices: %d\n", num);
bool can_mute = false;
bool can_vol = false;
if(num<=0)
{
	printf("无可用麦克风\n");
	return;
}
//枚举麦克风设备
for (int i = 0; i	char name[webrtc::kAdmMaxDeviceNameSize];
	char guid[webrtc::kAdmMaxGuidSize];
	int ret = audio2->RecordingDeviceName(i, name, guid);
	if (ret != -1) {
		printf("麦克风:%s\n",name);
	}
}
ret = audio2->SetRecordingDevice(0);//选择麦克风
audio2->MicrophoneMuteIsAvailable(&can_mute);
audio2->MicrophoneVolumeIsAvailable(&can_vol);
if (can_vol)
	audio2->SetMicrophoneVolume(vol2);//设置音量
else
	printf("麦克风音量调节不可用\n");
if (can_mute)
	audio2->SetMicrophoneMute(is_mute2);//设置是否静音
else
	printf("麦克风静音不可用\n");
audio2->InitRecording();
}

你可能感兴趣的:(webrtc)