#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 = '';