【问题标题】:How to check with JavaScript that webcam is being used in Chrome如何使用 JavaScript 检查 Chrome 中是否正在使用网络摄像头
【发布时间】:2017-02-13 19:40:36
【问题描述】:

如果 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);});

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

有什么想法吗?谢谢!

【问题讨论】:

    标签: javascript html webcam getusermedia


    【解决方案1】:

    尝试改用MediaStreamTrackobjectenabledreadyState 属性。然后,您可以使用 JavaScript 数组函数(例如 some())遍历轨道并检查是否有任何轨道将 enabled 设置为 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);
        });
    }
    

    希望对您有所帮助!

    【讨论】:

    • 谢谢!这个答案有效。附加问题:如果我想关闭流,我在 function(track) { track.stop(); 中添加一行return...} 但它不会关闭流。为什么?
    • 看来这应该可行。但是,即使尚未使用摄像头,这仍会返回“您的网络摄像头正忙!”。
    • 您的机器上是否有任何东西正在使用网络摄像头?某种使网络摄像头保持活动状态的网络摄像头驱动程序或活动浏览器插件?
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 2020-02-29
    • 1970-01-01
    • 2021-06-22
    • 1970-01-01
    相关资源
    最近更新 更多