为什么当音频和视频MediaStreamTracks启用参数设置为false时,“播出”指示灯一直打开?

时间:2015-10-23 14:02:29

标签: google-chrome webrtc w3c getusermedia

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

  

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

是否在Chrome中实现了提及的行为?

1 个答案:

答案 0 :(得分:1)

我从主题中收集到你知道答案是否定的。

当网站(暂时)禁用相机流时,Chrome和Firefox都不会关闭相机指示灯。规范说" can"把它关掉,但是"必须"为了重新打开它,所以两个浏览器都符合要求。

你可以在这里试试:



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>";
&#13;
<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>
&#13;
&#13;
&#13;

注意:在Chrome中使用https://jsfiddle.net/jib1/b6tyjm4s/代替(getUserMedia + snippets!=&lt; 3)。

至于为什么,spec also says

  

如果未存储权限,则权限应仅持续到从该设备获取的所有MediaStreamTracks都已停止为止。

这可以通过相机灯观察到。对于非持久性权限,两个浏览器都保证用户在相机指示灯熄灭时终止访问。 当网站暂时禁用流时关闭灯会破坏此保证。

我必须推测Chrome中的https,但至少对于Firefox,默认情况下权限授予是非持久性的,这就是原因。