Как полностью отключить камеру в mediastream javascript

#javascript #google-chrome #webrtc #peerjs

#javascript #google-chrome #webrtc #peerjs

Вопрос:

я пытаюсь создать веб-приложение для видеоконференций..

проблема в том, что я пытаюсь отключить свою камеру на средней конференции, она работает, но индикатор камеры моего ноутбука все еще горит (индикатор горит), но в моем Интернете видео показывает пустой экран, это нормально или я что-то пропустил?

вот что я пытаюсь

 videoAction() {
  navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true
  }).then(stream => {
     this.myStream = stream
  })

  this.myStream.getVideoTracks()[0].enabled = !(this.myStream.getVideoTracks()[0].enabled)
  this.mediaStatus.video = this.myStream.getVideoTracks()[0].enabled
}
  

Комментарии:

1. Это может быть связано с драйверами веб-камеры. Может случиться так, что, если какая-либо программа имеет возможность переключать видимость камеры, включается подсветка камеры. Вы пробовали использовать какие-либо другие камеры?

2. не пытайтесь, но индикатор погаснет, когда я закрою вкладку, поэтому я думаю, что проблем с драйверами нет..

Ответ №1:

Существует также stop() метод, который должен сработать в Chrome и Safari. Firefox уже должен пометить камеру как неиспользуемую, установив enabled свойство.

 this.myStream.getVideoTracks()[0].stop();
  

Комментарии:

1. его работа, но я не могу повторно включить ее с помощью this.myStream.getVideoTracks()[0].start();

2. Нет, это невозможно. Но в Chrome и Safari, которые требуют этого обходного пути, можно снова вызвать getUserMedia() , не вызывая другого пользовательского запроса.

Ответ №2:

Во-первых, MediaStreamTrack.enabled является логическим значением, поэтому вы можете просто присвоить значение false .
Чтобы упростить свой код, вы можете вызвать:

 var vidTrack = myStream.getVideoTracks();
vidTrack.forEach(track => track.enabled = false);
  

Когда MediaStreamTrack.enabled = false трек передает пустые кадры в поток, именно поэтому отправляется черное видео. Сама камера / источник не остановлена — я полагаю, что индикатор веб-камеры отключится на устройствах Mac, но, возможно, не на Windows и т. Д.

.stop() с другой стороны, полностью останавливает трек и сообщает источнику, что он больше не нужен. Если источник подключен только к этой дорожке, сам источник полностью остановится. Вызов .stop() определенно отключит подсветку камеры и веб-камеры, но вы не сможете снова включить ее в вашем экземпляре stream (поскольку его видеодорожка была уничтожена). Поэтому полное отключение камеры — это не то, что вы хотите сделать; просто придерживайтесь .enabled = false , чтобы временно отключить видео и .enabled = true снова включить его.

Комментарии:

1. если просто использовать .enabled=false , пользователи потеряют доверие к приложению, поскольку индикатор веб-камеры все еще горит. это не очень хороший подход

Ответ №3:

Нам нужно назначить window.localStream = stream; внутри navigator.mediaDevices.getUserMedia метод

Для остановки веб-камеры и выключения светодиода.

localStream.getVideoTracks()[0].stop();
video.src = '';