【问题标题】:Why when both audio and video MediaStreamTracks enabled parameter set to false, "on-air" indicator keeps being turned on?为什么音频和视频 MediaStreamTracks enabled 参数设置为 false 时,“on-air”指示灯一直处于打开状态?
【发布时间】:2015-10-23 14:02:29
【问题描述】:

W3C http://www.w3.org/TR/mediacapture-streams/#life-cycle-and-media-flow 关于媒体流生命周期的文章说:

当连接到源的所有轨道都静音或禁用时,可以关闭该源的“播出”或“录音”指示灯;当轨道不再静音或禁用时,必须重新打开。

上述行为是否在 Chrome 中实现?

【问题讨论】:

    标签: google-chrome webrtc w3c getusermedia


    【解决方案1】:

    更新:Firefox 现在支持turning off the camera light on mute粗体编辑。

    我从主题中得知,您知道答案是否定的。

    当网站(暂时)禁用摄像头流时,Chrome 和 Firefox 都不会关闭摄像头灯。规范说“可以”将其关闭,但“必须”将其重新打开,因此两种浏览器都符合要求。

    你可以在这里试试:

    var start = () => navigator.mediaDevices.getUserMedia({ video: true })
      .then(stream => video.srcObject = stream)
      .catch(e => log(e.name));
    
    toggle.onclick = () => {
      var track = video.srcObject && video.srcObject.getVideoTracks()[0];
      if (!track) return;
      toggle.innerHTML = (track.enabled = !track.enabled) ? "Disable" : "Enable";
    }
    
    var log = msg => div.innerHTML += "<p>" + msg + "</p>";
    <video id="video" height="120" width="160" autoplay></video><br>
    <button onclick="start()">Start!</button>
    <button id="toggle">Disable</button><div id="div"></div>
    <script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>

    注意:在 Chrome 中使用 https://jsfiddle.net/jib1/b6tyjm4s/ 代替(getUserMedia + sn-ps !=

    至于为什么,spec also says

    如果未存储权限,则权限应仅持续到源自该设备的所有 MediaStreamTrack 都已停止。

    这可以从摄像头灯以及浏览器内摄像头和麦克风实时指示器中观察到。对于非持久性权限,两种浏览器都向用户保​​证,当摄像头灯熄灭时,站点的访问将结束。 在网站暂时禁用流时关闭灯会破坏此保证。 浏览器内的指标可能会解决这个问题。

    当谈到 Chrome 中的 https 时,我不得不推测,但至少对于 Firefox,权限授予在默认情况下是非持久的,这就是原因。

    【讨论】:

    • 谢谢!保持相机灯打开真的很有意义。
    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2013-04-29
    • 2020-07-21
    相关资源
    最近更新 更多