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

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

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

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

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


person kongaraju    schedule 15.04.2013    source источник


Ответы (3)


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

pc1.addstream(stream)

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

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

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

stream.stop();
pc1.removeStream(stream);
person kongaraju    schedule 09.05.2013
comment
Если с первым createOffer () я создаю DataChannel, могу ли я использовать его для отправки данных второго createOffer () после addstream (), или я потеряю это соединение со вторым createOffer ()? - person Piranna; 28.03.2014
comment
Вы можете использовать канал данных, созданный с использованием первого предложения. - person kongaraju; 02.04.2014
comment
Значит, соединения и потоки DataChannel сохраняются после второго вызова createOffer ()? Это крутая функция! :-) - person Piranna; 02.04.2014
comment
Я нашел это полезным: webrtc-experiment.com/docs/how -to-switch-streams.html - person Keyne Viana; 29.11.2017

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

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

  1. настроить способ обмена сообщениями между узлами. (К сожалению, различия в том, как люди это делают, делают разные образцы кода WebRTC такими несоизмеримыми.)
  2. On each side, set up handlers for the important signalling events. (Some folks have reported that you need to create these handlers at special times, but I haven't found that to be the case. ) There are 3 basic events:
    • an ice candidate sent from the other side ==> call addIceCandidate with it
    • сообщение с предложением ==> SetRemoteDescription и ответьте и отправьте его
    • ответное сообщение ===> SetRemoteDescription
  3. On each side, create the peerconnection object with the event handlers we care about: onicecandidate, onremovestream, onaddstream, etc.
    • ice candidate pops out of the peerconnection object ===> send it to other side
  4. Когда присутствуют оба одноранговых узла и все обработчики на своих местах, одноранговый узел 1 получает какое-либо триггерное сообщение, чтобы начать захват видео (вызов getUserMedia).
  5. Как только getUserMedia успешно, у нас есть поток. Вызов addStream на объекте однорангового соединения.
  6. Затем партнер 1 делает предложение
  7. Из-за обработчиков, которые мы настроили ранее, узел 2 отправляет ответ
  8. Одновременно с этим (и довольно непрозрачно) объект однорангового соединения начинает создавать ледяных кандидатов. Они пересылаются между двумя одноранговыми узлами и обрабатываются (шаги 2 и 3 выше).
  9. Streaming starts by itself, opaquely, as a result of 2 conditions:
    • offer/answer exchange
    • ледовые кандидаты получили, обменяли и обработали

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

person sandover    schedule 06.02.2014
comment
вы можете сделать это по-другому, например, на шаге №4 getUserMedia - вы можете начать локальный захват видео (предварительный просмотр) еще до запуска сигнализации (шаг 1). Я здесь читаю, так как у меня возникли проблемы с попыткой сделать DataChannel, затем AddStream ... он меняет вещи, чтобы сделать AddStream ПОСЛЕ того, как DataChannel приходит как готовый. - person RoundSparrow hilltx; 14.02.2014
comment
О боже, не нужно снова создавать одноранговое соединение, можно продолжить с # шага 4. - person kongaraju; 18.04.2014
comment
Кажется, это возможно: webrtc-experiment.com/docs/ how-to-switch-streams.html - person Keyne Viana; 29.11.2017

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

person Vinay    schedule 13.08.2015
comment
Вы неправильно поняли вопрос. OP хочет добавить поток после того, как соединение было установлено. - person Nisarg; 28.07.2017