Как проверить с помощью 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);});

Вставляя код в консоль, когда страница транслирует видео, я не получил ответа.

Есть идеи? Спасибо!

1 ответ

Решение

Попробуйте вместо этого использовать enabled а также readyState свойства MediaStreamTrack объект. Затем вы можете использовать функцию массива 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);
    });
}

Надеюсь, это поможет!

Другие вопросы по тегам