WebRTC如何设置约束以在可用时使用音频

时间:2017-11-29 18:49:39

标签: javascript webrtc

通常,您可以设置约束,如下所示

{ audio: true, video: true }

但是我希望能够更加宽容。我只想获得音频,如果它能够得到它即。如果麦克风可用,否则会引发NotFoundError错误。

任何想法,如果可能的话?

1 个答案:

答案 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);
}