为什么音视频MediaStreamTracks enabled参数设置为false时,"on-air"指示灯一直亮着?
Why when both audio and video MediaStreamTracks enabled parameter set to false, "on-air" indicator keeps being turned on?
W3C http://www.w3.org/TR/mediacapture-streams/#life-cycle-and-media-flow 关于媒体流生命周期的文章说:
When all tracks connected to a source are muted or disabled, the "on-air" or "recording" indicator for that source can be turned off; when the track is no longer muted or disabled, it must be turned back on.
提到的行为是否在 Chrome 中实现?
更新: 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 + snippets != <3).
至于为什么,spec also says:
When permission is not stored, permission should last only until such time as all MediaStreamTracks sourced from that device have been stopped.
这可以从摄像头灯 以及浏览器内的摄像头和麦克风实时指示器 观察到。对于非持久性权限,两种浏览器都向用户保证,当摄像头灯熄灭时,网站的访问就结束了。 在站点暂时禁用流时关闭灯会破坏此保证。 浏览器内指示器可能会解决这个问题。
我不得不推测 Chrome 中的 https
,但至少对于 Firefox,默认情况下权限授予是非持久性的,这就是原因。
W3C http://www.w3.org/TR/mediacapture-streams/#life-cycle-and-media-flow 关于媒体流生命周期的文章说:
When all tracks connected to a source are muted or disabled, the "on-air" or "recording" indicator for that source can be turned off; when the track is no longer muted or disabled, it must be turned back on.
提到的行为是否在 Chrome 中实现?
更新: 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 + snippets != <3).
至于为什么,spec also says:
When permission is not stored, permission should last only until such time as all MediaStreamTracks sourced from that device have been stopped.
这可以从摄像头灯 以及浏览器内的摄像头和麦克风实时指示器 观察到。对于非持久性权限,两种浏览器都向用户保证,当摄像头灯熄灭时,网站的访问就结束了。 在站点暂时禁用流时关闭灯会破坏此保证。 浏览器内指示器可能会解决这个问题。
我不得不推测 Chrome 中的 https
,但至少对于 Firefox,默认情况下权限授予是非持久性的,这就是原因。