【问题标题】:How can i let users allow or deny camera/microphone access anytime and how can they change device source?如何让用户随时允许或拒绝摄像头/麦克风访问,他们如何更改设备来源?
【发布时间】:2016-12-30 00:54:21
【问题描述】:

我正在使用 webRTC 并使用 https,用户可以选择是否允许或拒绝摄像头和麦克风访问一次,然后保存他们的选择以供下次访问。 我想添加一些代码,让用户可以在他们想要的任何特定时间打开或关闭他们的网络摄像头或麦克风,以及让他们在任何时候也有多个摄像头或麦克风设备时更换他们的摄像头或麦克风设备

请帮我这样做..谢谢

【问题讨论】:

  • 您可以在流中添加或不添加曲目或稍后将其删除。如果您想允许用户禁用视频,您可以添加一个按钮,将视频轨道删除/添加到流中。尝试通过允许/拒绝摄像头和麦克风硬件来做到这一点是愚蠢的。在允许访问后,用户(至少在浏览器中)已经可以通过单击相机图标来选择另一台设备。
  • 请注意,Firefox 的用户已经获得了一个内置的摄像头选择器,就像您在每次调用 getUserMedia 时所描述的那样,除非他们通过选择“始终允许”授予持久权限。跨度>

标签: javascript html google-chrome firefox webrtc


【解决方案1】:

通过停止从getUserMedia 收到的曲目来关闭摄像头和麦克风:

stream.getTracks().forEach(track => track.stop())

要重新打开它们,请再次致电getUserMedia

您可以使用enumerateDevices 构建内容内摄像头和/或麦克风选择器,它会返回一个列表,其中包括deviceIds,您可以使用deviceId 约束来选择特定设备getUserMedia(在 Chrome 中使用 https fiddle):

var log = msg => div.innerHTML += msg + "<br>";

navigator.mediaDevices.enumerateDevices()
  .then(devices => {
    var cams = devices.filter(device => device.kind == "videoinput");
    log("You have " + cams.length + " camera(s).");
    if (cams.length) {
      return navigator.mediaDevices.getUserMedia({
        video: { deviceId: { exact: cams[0].deviceId } },
      })
      .then(stream => (video.srcObject = stream));
    }
  })
  .catch(log);
<div id="div"></div><br>
<video id="video" height="120" width="160" autoplay></video>

请注意,adapter.js 需要使用 Chrome 52(已修复为 54)。

请参阅official device selector sample 以获得已经完整的演示。

【讨论】:

  • 最好调用 myStream.removeTrack(myTrack),这样如果用户想再次启用它就不必重新初始化,只需将轨道添加回流。
  • @Kevin 不,这仅对 Chrome 中的远程端有影响,而且不会持续很长时间,因为该技术是非标准的且已弃用。如果您只是暂时停止,并且不希望用户切换设备,请使用myTrack.enabled = false,或者使用pc.removeTrack 并重新协商。
猜你喜欢
  • 2018-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
相关资源
最近更新 更多