通常,您可以设置约束,如下所示
{ audio: true, video: true }
但是我希望能够更加宽容。我只想获得音频,如果它能够得到它即。如果麦克风可用,否则会引发NotFoundError
错误。
任何想法,如果可能的话?
答案 0 :(得分:2)
是
您可以使用MediaDevices.enumerateDevices()
方法获取所有音频和视频设备的列表。
这将返回一个MediaDeviceInfo个数组,这些对象将具有kind
属性,让您知道可以使用哪个约束。
所以你可以做类似
的事情
navigator.mediaDevices.enumerateDevices()
.then(getDevicesTypes)
.then(getUserMedia)
.then(console.log)
.catch(console.error);
function getDevicesTypes(list){
return new Set(list
.filter(device => device.kind.indexOf('input') > -1)
.map(device => device.kind.replace('input', ''))
);
}
function getUserMedia(deviceKinds){
const constraint = {};
deviceKinds.forEach(kind => constraint[kind] = true);
console.log(constraint);
return navigator.mediaDevices.getUserMedia(constraint);
}