实时音视频

  • 实时音视频 > 使用指南 > Web >设备管理

    设备管理

    最近更新时间: 2022-07-14 15:45:42

    桌面电脑中可能使用多个媒体设备,本篇文档介绍如何在 SDK 中管理媒体设备。

    摄像头

    可以通过 QNRTC.getCameras 方法来获取当前所有的摄像头信息。该方法返回值是一个数组,每个元素是一个 MediaDeviceInfo 对象,包含了一个摄像头设备的详细信息。获取该对象之后,就可以通过该对象的 label 属性获取设备的名称,通过 deviceId 属性获取设备的唯一标识。

    该方法获取是调用时所有的摄像头信息,有些外接摄像头可能存在频繁插入、拔出的情况,因此需要通过监听事件来获取最新的设备信息。代码举例如下:

    // 监听摄像头设备变化
    QNRTC.onCameraChanged = function(info) {
    
      // 获取到摄像头变化的信息
      console.log('camera changed!', info);
    
      // 获取变化后当前所有的摄像头信息
      const cameras = await QNRTC.getCameras();
    };
    

    获取到 deviceId 后,就可以在采集摄像头 Track 时,传入该参数,指定特定的摄像头采集了。代码举例如下:

    const mCameraTrack = await QNRTC.createCameraVideoTrack({
      cameraId: "xxx", // 传入前面获取到的 deviceId 值
    });
    

    麦克风

    麦克风的处理逻辑与摄像头类似。首先通过 QNRTC.getMicrophones 方法来获取到所有的麦克风设备,返回数据同样是 MediaDeviceInfo 对象数组,然后通过监听事件来获取麦克风设备的变化信息。

    代码举例如下:

    // 监听麦克风设备变化
    QNRTC.onMicrophoneChanged = function(info) {
    
      // 获取到麦克风变化的信息
      console.log('microphone changed!', info);
    
      // 获取变化后当前所有的麦克风信息
      const microphones = await QNRTC.getMicrophones();
    };
    
    // 指定 microphone 采集
    const mMicrophoneTrack = await QNRTC.createMicrophoneAudioTrack({
      microphoneId: "xxx" // 传入前面获取到的 deviceId 值
    });
    

    扬声器

    扬声器也可能有多个,获取的逻辑与摄像头、麦克风类似。主要区别是,我们不会指定扬声器采集,而是指定扬声器来播放指定的音频 Track。

    首先通过 QNRTC.getPlaybackDevices 方法来获取所有的扬声器设备,返回数据同样是 MediaDeviceInfo 对象数组,然后通过监听事件来获取扬声器设备的变化信息。代码举例如下:

    // 监听扬声器设备变化
    QNRTC.onPlaybackDeviceChanged = function(info) {
    
      // 获取到扬声器变化的信息
      console.log('playback device changed!', info);
    
      // 获取变化后当前所有的扬声器信息
      const playbackDevices = await QNRTC.getPlaybackDevices();
    };
    

    获取到扬声器的设备信息后,就可以通过 setPlaybackDevice 方法来指定特定的扬声器来播放音频。代码举例如下:

    // 传入前面获取到的扬声器的 deviceId
    await remoteAudioTrack.setPlaybackDevice("xxx");
    

    设备权限

    前面介绍了三个获取设备信息的方法,分别是:

    • getCameras
    • getMicrophones
    • getPlaybackDevices

    这里需要注意的是,浏览器对媒体设备做了权限管理,当还没有获取对应的媒体权限时,获取到的媒体设备信息可能不完整。

    因此,这三个方法都可以设置一个 skipPermissionCheck 参数。当该参数值为 false 时,SDK 在请求媒体设备信息前,先请求对应的媒体设备权限。当用户授予权限后,SDK 就可以请求到完整的媒体设备信息并返回。如果此时用户没有授权,则方法会抛出错误。

    示例代码

    设备管理场景示例代码可参考 API-Examples-Web/switchMediaDevices

    以上内容是否对您有帮助?
  • Qvm free helper
    Close