Видеочат с несколькими USB-камерами - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь использовать веб-видео чат с помощью webrtc.
Я проверил webrtc, и этого достаточно для этого решения.
Но, в моем случае, есть три камеры (веб-камера, USB-камера) в одной стороне компьютера.

                  camera1
 camera1    <->   camera2
                  camera3

Итак, я попытался добавить несколько потоков к одному RTCPeerConnection.
Но webrtc не поддерживает это.

Мне нужно создать 3 RTCPeerConnection для этого. Если я создаю 3 пира, то это похоже на видеочат.

Есть ли другое решение?


pc = new RTCPeerConnection(null);
pc.addStream(localStream1); 
pc.addStream(localStream2); 
pc.addStream(localStream3);` 

Возможно ли это?

1 Ответ

0 голосов
/ 13 мая 2019

Да, WebRTC поддерживает , именно так, как вы показываете.

За исключением addStream устарел, поэтому вы хотите использовать addTrack вместо.Или используйте polyfill:

pc.addStream = stream => stream.getTracks().forEach(t => pc.addTrack(t, stream));

Порядок дополнений определяет порядок событий track на другом конце:

pc.ontrack = ({streams: [stream]}) => {
  for (const video of [remoteElement1, remoteElement2, remoteElement3]) {
    if (video.srcObject && video.srcObject.id != stream.id) continue;
    video.srcObject = stream;
    break;
  }
}

Приведенный выше код назначит три входящих потокадо трех элементов видео для воспроизведения, по порядку.Событие track запускается для каждой дорожки, поэтому мы проверяем stream.id на случай, если поток имеет более одной дорожки.

В качестве альтернативы, мы могли бы отправить stream.id s по каналу данных и сопоставить, чтоКстати, поскольку stream.id s идентичны удаленно.Однако обратите внимание, что track.id s не являются стабильными в этом случае.Третий способ заключается в корреляции с использованием transceiver.mid, который всегда стабилен, за исключением того, что изначально он равен null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...