javascript - 在 getUserMedia 中使视频流可选

标签 javascript webrtc getusermedia

在我的应用程序中,如果用户可以生成音频流,则他可以调用电话。因此,我需要访问麦克风(音频流)。如果没有它,应用程序应该抛出错误。视频是可选的。因此,我调用 navigator.getUserMedia 并设置 约束,如下所示:

{ 音频:true,视频:false }

当麦克风不存在时,它会抛出错误,就像我需要的那样。但这样做的副作用是,如果用户还可以使用摄像头,则视频不会出现在流中。

但是,如果我将 audiovideo 设置为 true,当用户有麦克风但没有麦克风时,我会出现错误访问相机(根据我的应用程序逻辑,这是可以的)

如何使视频流可选 get getUserMedia

最佳答案

现在还有另一种方法。现在,您可以在调用 getUserMedia 之前直接检查用户是否有摄像头和/或麦克风:

navigator.mediaDevices.enumerateDevices()
  .then(devices => {
    const cams = devices.filter(device => device.kind == "videoinput");
    const mics = devices.filter(device => device.kind == "audioinput");

    const constraints = { video: cams.length > 0, audio: mics.length > 0 };
    return navigator.mediaDevices.getUserMedia(constraints);
  })
  .then(stream => video.srcObject = stream)
  .catch(failed);

另一个答案也有效,但这可能更清晰一些。

请注意,这是使用 enumerateDevices ,它返回包含信息的设备列表。出于隐私原因,在调用 getUserMedia 之前返回的信息量是有限的,但它仍然会显示用户是否拥有至少一个摄像头和/或至少一个麦克风,这就是我们在这里所需要的。

关于javascript - 在 getUserMedia 中使视频流可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308486/

相关文章:

google-chrome - 谷歌浏览器不显示麦克风权限提示

javascript - 获取媒体流的远程音频级别以便直观地显示音频级别的正确方法?

javascript - MediaDevices.getUserMedia() 对 ios 的支持

javascript - 如何使用 WebRTC 停止屏幕共享?

javascript - 是否将新插件附加到 $?

JavaScript:onkeyup() 的原始目标

javascript - NodeJS Multer 无法捕获错误

javascript - DOM 加载时背​​景轻微缩放?

ios - 在混合 Cordova iOS 应用程序中使用 iosrtc 插件的问题

javascript - 无法更改 WebRTC 调用的摄像头/流