如何使用JavaScript检查Chrome中是否使用了网络摄像头

如果Chrome中使用了网络摄像头,则该页面的标签上会出现一个红点.并且,如果其他页面尝试访问网络摄像头,视频将变黑.我的问题是,是否可以使用JavaScript检查是否正在使用网络摄像头?怎么样?

通过使用navigator.getUserMedia,我尝试了以下代码:

navigator.getUserMedia = navigator.getUserMedia ||
    navigator.webkitGetUserMedia || navigator.mozGetUserMedia ||
    navigator.msGetUserMedia;

navigator.getUserMedia({ audio: true, video: true }, function (stream) {
    var mediaStreamTrack = stream.getVideoTracks()[0];
    if (typeof mediaStreamTrack != "undefined") {
        mediaStreamTrack.onended = function () {alert('Your webcam is busy!')}
    } else errorMessage('Permission denied!');
}, function (e) {alert("Error: " + e.name);});

当页面正在流式传输视频时,将代码粘贴到控制台中时,我没有任何反应.

有任何想法吗?谢谢!

解决方法:

请尝试使用MediaStreamTrack object的enabled和readyState属性.然后,您可以使用JavaScript数组函数(例如some())遍历轨道,并检查是否已将其设置为true和&& readyState等于字符串“ live”:

navigator.getUserMedia = (navigator.getUserMedia ||
  navigator.webkitGetUserMedia ||
  navigator.mozGetUserMedia ||
  navigator.msGetUserMedia);

if (navigator.getUserMedia) {
  navigator.getUserMedia({
      audio: true,
      video: true
    },
    function(stream) {
      // returns true if any tracks have active state of true
      var result = stream.getVideoTracks().some(function(track) {
        return track.enabled && track.readyState === 'live';
      });

      if (result) {
        alert('Your webcam is busy!');
      } else {
        alert('Not busy');
      }
    },
    function(e) {
      alert("Error: " + e.name);
    });
}

希望有帮助!

上一篇:javascript-如何在WebRTC中始终保持1:1宽高比的视频


下一篇:javascript-为什么Chrome中的getUserMedia()显示权限被拒绝错误