WebRTC: Как добавить поток после предложения и ответа? - программирование
Подтвердить что ты не робот

WebRTC: Как добавить поток после предложения и ответа?

Я работаю над видеозвонками webRTC. Я получил datachannel успешно реализован. Теперь я хотел бы добавить видеопоток к тому же одноранговому соединению.

Я прочитал, что поток должен быть добавлен перед ответом и предложением. Есть ли способ добавить поток после ответа или предложения?

В случае, если я добавил поток перед предложением или ответом, как я могу прекратить потоковое воспроизведение и снова запустить его при необходимости?

Могут ли возникать проблемы при поддержании большого количества потоков?

4b9b3361

Ответ 1

Чтобы добавить поток после создания полной сигнализации, одноранговое соединение должно пересмотреть с потоком.

pc1.addstream(stream)

Затем еще раз создайте предложение и отправьте его другому Peer.

Удаленный одноранговый узел добавит поток и отправит ответ SDP.

Чтобы остановить потоки:

stream.stop();
pc1.removeStream(stream);

Ответ 2

По моему опыту, то, что Конга Раджу посоветовал, не сработало. Я не мог отправить "обновленное предложение" и фактически потоковое видео.

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

  • настроить способ обмена сообщениями. (Различия в том, как люди достигают этого, - это то, что делает разные образцы кода WebRTC столь несоизмеримыми, к сожалению.)
  • С каждой стороны настройте обработчики важных событий сигнализации. (Некоторые люди сообщили, что вам нужно создавать эти обработчики в определенное время, но я не обнаружил, что это так. ) Есть 3 основных события:
    • ледяной кандидат, отправленный с другой стороны == > вызов addIceCandidate с ним
    • сообщение о предложении == > SetRemoteDescription и ответьте и отправьте его
    • ответное сообщение === > SetRemoteDescription
  • С каждой стороны создайте объект peerconnection с обработчиками событий, о которых мы заботимся: onicecandidate, onremovestream, onaddstream и т.д.
    • ледяной кандидат выходит из объекта peerconnection === > отправляет его на другую сторону
  • Когда присутствуют оба одноранговых узла, и все обработчики находятся на своем месте, одноранговая сеть 1 получает какое-то триггерное сообщение для запуска видеозахвата (вызов getUserMedia)
  • Как только getUserMedia удастся, у нас есть поток. Вызовите addStream для объекта соединения со сверстниками.
  • Затем сверстник 1 делает предложение
  • Из-за обработчиков, которые мы установили ранее, peer 2 отправляет ответ
  • Одновременно с этим (и довольно непрозрачно) объект одноранговой связи начинает создавать кандидаты на льду. Они отправляются туда и обратно между двумя сверстниками и обрабатываются (шаги 2 и 3 выше).
  • Потоковая передача начинается сама по себе, непрозрачно, в результате 2-х условий:
    • предложение/ответный обмен
    • Полученные, обменянные и обработанные льдом кандидаты

Я не нашел способ добавить видео после шага 9. Когда я хочу что-то изменить, я возвращаюсь к шагу 3.

Ответ 3

MediaStream сначала должен быть добавлен к peerconnection, а затем должен быть обменом предложением, ответом, кандидатами. Если вызывается onAddStream(), это означает, что вы получаете удаленное видео.