Проверьте, есть ли у пользователя веб-камера или нет только JavaScript?

Можно ли выяснить, имеет ли пользователь веб-камеру или не использует только JavaScript? Я не хочу использовать для этого плагин.

Ответ 1

Вы можете использовать новый API HTML5, чтобы проверить, дают ли они вам разрешение на использование веб-камеры. В конце концов, если они откажут в разрешении, они могут также не иметь веб-камеры с точки зрения кода.

См. navigator.getUserMedia().

EDIT:

navigator.getMedia = ( navigator.getUserMedia || // use the proper vendor prefix
                       navigator.webkitGetUserMedia ||
                       navigator.mozGetUserMedia ||
                       navigator.msGetUserMedia);

navigator.getMedia({video: true}, function() {
  // webcam is available
}, function() {
  // webcam is not available
});

Ответ 2

Вы можете проверить, имеет ли пользователь веб-камеру, используя этот плагин: http://www.xarg.org/project/jquery-webcam-plugin/

if(webcam.getCameraList().length == 0){  
   alert('You don\'t have a web camera');  
}

Взято отсюда: Как проверить, есть ли у пользователя веб-камера или нет?

Изменить. Я вижу, что вы обновили свой вопрос, чтобы сказать, что вы не хотите использовать плагин. В этом случае вы можете попробовать использовать API getUserMedia:

function success(stream){
  // The success function receives an argument which points to the webcam stream
  document.getElementById('myVideo').src = stream; 
}

function error(){
  alert("No webcam for you, matey!");
}

if (navigator.getUserMedia) { 
   navigator.getUserMedia({video:true, audio:false}, success, error);
} else { 
   error();
}

Источник: http://www.iandevlin.com/blog/2012/06/html5/filtering-a-webcam-using-getusermedia-and-html5-canvas

Ответ 3

НЕТ способа читать текущие настройки браузера. единственное, что мы можем сделать, это попытаться получить доступ к веб-камере/микрофону и посмотреть, можем ли мы получить доступ к этому устройству, например...

navigator.getMedia({video: true}, function() {
  // webcam is available
}, function() {
  // webcam is not available
});

НО **** Важно отметить, что если вы будете следовать этому подходу, тогда имейте в виду, что....

Также обратите внимание, что вам нужно использовать HTTPS для использования веб-камеры/микрофона, и он предложит вам всплывающее окно с разрешением браузера с кнопками разрешать и блокировать ТОЛЬКО ОДИН РАЗ, вы будете НЕ видеть это всплывающее окно разрешения снова, как HTTPS сохранить разрешение.

Единственный способ получить это всплывающее окно разрешения - это:

  • Очистите кеш и
  • Reset настройки браузера
  • Откройте новый экземпляр браузера.

FYI... Вы не можете манипулировать настройками браузера с помощью JavaScript Так что не делайте это так, если у вас не будет времени убить

Ответ 4

Находясь здесь и вдохновленный другими ответами, в рамках реализации, над которой я работаю, я использую следующую функцию, чтобы вернуть логическую проверку для активного потока.

Проект немного старый, отсюда и jQuery и ES5, хотя надеюсь, что это кому-нибудь пригодится:

function() {
  var deferred = $.Deferred();

  navigator.mediaDevices.getUserMedia(VIDEO_CONSTRAINTS)
    .then(function(stream) { deferred.resolve(stream.active); })
    .catch(function() { deferred.resolve(false) })

  return deferred.promise()
}

Это может быть использовано следующим образом:

self.checkStreamActive()
  .then(function(activeStream) {
    if(activeStream) {
      // do something
    } else {
    // do something else
  }
})