设备管理
桌面电脑中可能使用多个媒体设备,本篇文档介绍如何在 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