【问题标题】: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
【问题描述】:
【问题讨论】:
标签:
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,权限授予在默认情况下是非持久的,这就是原因。