文档反馈
文档反馈

音频设备管理

在音频场景中,您可能需要根据实际的场地情况选择采用音频的采集和播放设备,例如在室内场景中选用听筒进行音频播放。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

注意事项

实现方法

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

  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 音频输出设备改变回调

Web

实现方法

  1. 通过 getDevices 获取设备列表。

  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 获取所有设备列表
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。