音频设备管理

功能描述

在音频场景中,用户需要根据实际的场地情况选择采用音频的采集和播放设备。NERTC SDK在不同平台上提供了音频设备切换选择。

Android

实现方法

参考如下步骤,在你的项目中进行音频路由的切换:

  1. 在加入频道成功后调用 isSpeakerphoneOn 来判断当前是听筒还是扬声器模式。
  2. 调用 setSpeakerphoneOn(boolean enable) 接口进行切换,true: 扬声器 false: 听筒。
  3. 通过监听 onAudioDeviceChanged 回调来感知音频路由的切换。

示例代码

// 判断当前音频路由器。
boolean isSpeakerphoneOn = NERtcEx.getInstance().isSpeakerphoneOn();

// 设置音频路由。
NERtcEx.getInstance().setSpeakerphoneOn(isSpeakerphoneOn);

// 音频路由切换回调。
public void onAudioDeviceChanged(int selected) {
    String audioDevice;
    switch (selected) {
        case NERtcConstants.AudioDevice.EARPIECE:
            audioDevice = "听筒";
            break;
        case NERtcConstants.AudioDevice.BLUETOOTH_HEADSET:
            audioDevice = "蓝牙耳机";
            break;
        case NERtcConstants.AudioDevice.SPEAKER_PHONE:
            audioDevice = "扬声器";
            break;
        case NERtcConstants.AudioDevice.WIRED_HEADSET:
            audioDevice = "有线耳机";
            break;
        default:
            audioDevice = "EARPIECE";
            break;
    }
}

API参考

事件 功能描述
setPlayoutDeviceMute 设置是否音频播放静音
setRecordDeviceMute 设置是否音频采集静音
isSpeakerphoneOn 获取扬声器是否开启
setSpeakerphoneOn 设置扬声器是否开启

音频设备回调:

事件 功能描述
onAudioDeviceChanged 语音播放设备发生改变

开发注意事项

iOS

在音频场景中,用户需要根据实际的场地情况选择采用听筒或者扬声器进行会议通话。 NERTC SDK 在移动平台提供了听筒和者扬声器之间的切换选择。

实现方法

参考如下步骤,在你的项目中进行音频路由的切换:

  1. 在加入频道成功后调用 getLoudspeakerMode:(bool *)enabled 来判断当前是听筒还是扬声器模式。
  2. 调用 setLoudspeakerMode:(bool)enable 接口进行切换,true: 扬声器 false: 听筒。
  3. 通过监听 onNERtcEngineAudioDeviceRoutingDidChange delegate回调来感知音频路由的切换。

示例代码

    // 判断当前音频路由器。
    bool enabled = false;
    [self.engine getLoudspeakerMode:(&enabled)];

    // 设置音频路由。
    bool enableSpeakerMode = true;
    int result = [self.engine setLoudspeakerMode: enableSpeakerMode];

    - (void)onNERtcEngineAudioDeviceRoutingDidChange:(NERtcAudioOutputRouting)routing {
    NSString *currentAudioDevice;
        switch (routing) {
            case kNERtcAudioOutputRoutingHeadset:
                currentAudioDevice = @"耳机";
                break;
            case kNERtcAudioOutputRoutingEarpiece:
                currentAudioDevice = @"耳返";
                break;
            case kNERtcAudioOutputRoutingLoudspeaker:
                currentAudioDevice = @"扬声器";
                break;
            case kNERtcAudioOutputRoutingBluetooth:
                currentAudioDevice = @"蓝牙耳机";
            default:
                currentAudioDevice = @"Default";
                break;
        }
    }

API参考

事件 功能描述
setPlayoutDeviceMute 设置音频播放设备的状态
getPlayoutDeviceMute 获取音频播放设备的状态
setRecordDeviceMute 设置录音设备的状态
getRecordDeviceMute 获取录音设备的状态
getLoudspeakerMode 获取目前是否使用扬声器模式
setLoudspeakerMode 设置音频播放扬声器模式

音频设备回调:

事件 功能描述
onNERtcEngineAudioDeviceRoutingDidChange 音频输出设备改变回调

开发注意事项

  1. 语音通话音频播放模式默认为扬声器模式;
  2. 在iPad设备上,设置音频播放为扬声器模式会失败,音频播放模式只能使用扬声器模式;

Web

在会议等场景,用户在开始通话前,通常会选择进行音视频设备的选择和检测,以保证进入通话后的音视频体验。 以下说明如何获取音频设备列表,为保证通话或直播质量,我们推荐在进入频道前进行音频设备测试,以检测麦克风等音频设备是否能够正常工作。

实现方法

1、获取具体的设备列表

2、选择开启制定的设备

3、启动选中的设备

示例代码

// 此处以同时启动麦克风与摄像头设备示例
WebRTC2.getDevices().then((devices)=>{

  var audioDevices = devices.audioIn;  //数组,麦克风设备列表
  var videoDevices = devices.video;  //数组,摄像头设备列表

  var uid = Math.floor(Math.random()*10000);
  var selectedMicrophoneId = audioDevices[0];
  var selectedCameraId = videoDevices[0];
  var localStream = WebRTC2.createStream({
      uid: uid,
      audio: true,
      microphoneId: selectedMicrophoneId, //指定要开启的mic
      video: true,
      cameraId: selectedCameraId, //指定要开启的camera
      screen: false
  });

  localStream.init().then(()=>{
    //用于播放视频的div元素
    let div = document.getElementById('local-container')
    localStream.play(div)
    //设置播放的视频容器大小    
    localStream.setLocalRenderMode({
      width: 180,
      height: 150,
      cut: true
    })

    setInterval(function(){
        console.log(`获取mic采集的音量: ${localStream.getAudioLevel()}`);
    }, 1000);
  })
})

API参考

事件 功能描述
getMicrophones 获取麦克风列表
getSpeakers 获取扬声器列表
getDevices 获取所有设备列表