在 Chrome 81 浏览器上调用 getDevices
,获得的 deviceId
为空。
出于保护用户隐私的考虑,从 Chrome 81 版本起,如果浏览器没有获得使用媒体设备的权限,将无法获取设备 ID 信息。
对于声网 Web SDK 来说,如果在 Stream.init
成功之前调用获取设备信息的方法,获得的 deviceId
都可能为空。
你可以通过额外创建临时的流采集音视频,触发媒体设备权限申请,以获得完整的设备信息。
根据需要创建临时的音频流和视频流分别用于采集音频和视频,触发麦克风和摄像头的权限申请。
const tempAudioStream = AgoraRTC.createStream({ audio: true, video: false });
const tempVideoStream = AgoraRTC.createStream({ audio: false, video: true });
采集完成后,调用 getDevices
即可获得完整的设备信息。
deviceId
和 label
为空的设备。const audioPermissionOK = new Promise(resolve => {
tempAudioStream.init(() => resolve(null), (e) => resolve(e));
});
const videoPermissionOK = new Promise(resolve => {
tempVideoStream.init(() => resolve(null), (e) => resolve(e));
});
Promise.all([audioPermissionOK, videoPermissionOK]).then(res => {
if (res[0] !== null) {
console.warn("create audio temp stream failed!", res[0]);
}
if (res[1] !== null) {
console.warn("create video temp stream failed!", res[0]);
}
// 音视频采集完成后,调用 getDevices 获取 label 和 deviceId
const devices = AgoraRTC.getDevices(info => {
tempAudioStream.close();
tempVideoStream.close();
console.log("get device info!", info);
});
});
声网提供一个获取设备信息的在线 demo 供你参考。