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

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

Любые идеи? Спасибо!


person r ne    schedule 13.02.2017    source источник


Ответы (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);
    });
}

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

person Alexander Staroselsky    schedule 13.02.2017
comment
Спасибо! Этот ответ работает. Дополнительный вопрос: если я хочу отключить поток, я добавляю одну строку в function(track) { track.stop(); return...} но поток не отключается. Почему? - person r ne; 13.02.2017
comment
Кажется, это должно сработать. Однако, даже если камера еще не используется, это все равно возвращает Ваша веб-камера занята!. - person spfursich; 23.06.2017
comment
Может ли на вашем компьютере быть что-то, что использует веб-камеру? Какие-то драйверы веб-камеры или активные плагины для браузера, которые поддерживают веб-камеру в активном состоянии? - person Alexander Staroselsky; 23.06.2017