Прекращение обмена видео потоком webrtc
Я создал видеочат на основе webrtc, предъявив иск peerjs.
Локальный и удаленный элемент видео создается с помощью элемента управления:
local: 'video id = [local_peer_id] autoplay = "true" controls = "true">'
remote: and 'video id = [remote_peer_id] autoplay = "true" controls = "true">'
Теперь во время видеочата, если локальный пользователь отключен, удаленный пользователь auido не может ничего слышать, и его работа безупречна.
Проблема с видео. Если локальный пользователь приостанавливает собственное видео, он может видеть, что видео приостановлено, но удаленный пользователь все еще может видеть его видео в прямом эфире.
с другой стороны, если удаленный пользователь приостанавливает свое видео, локальный пользователь все еще может видеть его видео в прямом эфире.
Кто-нибудь скажет, что нужно сделать, чтобы развернуть функцию
"Пауза" и "возобновление" видео, которое работает в режиме реального времени для обоих пиров?
3 ответа
Вам нужно знать разницу между тегами HTML и потоками WebRTC...
Вы можете запускать потоки без привязки их к какому-либо тегу HTML, а мультимедиа может отправляться и приниматься каждым узлом. Таким образом, каждый узел может прикрепить поток к тегу аудио / видео, и тег будет действовать только как проигрыватель, который вы используете для воспроизведения потока, который уже запущен.
Таким образом, если вы отключите тэг HTML, вы будете заглушать только проигрыватель, а не поток. Если вы хотите, чтобы что-то влияло на другого пира, вам нужно что-то делать в потоке или в соединении пира.
В частности, чтобы отключить звук и возобновить воспроизведение аудио или видео, необходимо переключить дорожки мультимедиа в потоке мультимедиа.
// create a button to toggle video
var button = document.createElement("button");
button.appendChild(document.createTextNode("Toggle Hold"));
button.onclick = function(){
mediaStream.getVideoTracks()[0].enabled =
!(mediaStream.getVideoTracks()[0].enabled);
}
Чтобы приостановить / возобновить звук, используйте вместо этого getAudioTracks().
Призвание mediaStream.stop()
остановит камеру
где mediaStream
это поток, который вы получили при звонке getUserMedia
Вот рабочий пример
mediaStream.getAudioTracks () [0].stop ();
mediaStream.getVideoTracks () [0].stop ();
Надеюсь, что это будет работать с новыми стандартами. Это нормально работает в моем приложении.