WebRTC на сервер Node.JS и поток как RTP

Я хочу задать экспериментальный вопрос. Итак, у меня есть поток WebRTC, который должен быть проигрывателем XBMC/Kodi. Я планировал это, и я думаю, что самая большая проблема заключается в преобразовании и отправке потока (обратите внимание, что это было без какого-либо кода прототипирования). Это план:

  1. Получить поток (давайте проигнорируем это)
  2. Отправьте поток в Node.JS через WebSocket (не должно быть так сложно, если это возможно, потому что я не уверен)
  3. Получение потока через WebSockets в Node.JS
  4. Конвертировать поток
  5. Отправьте его как что-то приемлемое для XBMC/Kodi (скажем, RTP)

Последние 2 бита самые сложные, и я понятия не имею, как это сделать. Может ли кто-нибудь помочь мне?


person JSFTW    schedule 28.12.2014    source источник
comment
Номера 2 и 3 не имеют смысла, WebRTC подключается напрямую браузер к браузеру, вы не можете отправить его через веб-сокеты?   -  person adeneo    schedule 28.12.2014
comment
@adeneo Я написал, что точно не знаю, смогу ли я отправить его через веб-сокеты. Но ответ здесь говорит, что этот проект с node.js использует веб-сокеты. Возможно, есть еще способы   -  person JSFTW    schedule 28.12.2014
comment
websockets для сигнализации, вам нужен какой-то способ аутентификации пользователей и отправки сигнала клиенту, чтобы поток WebRTC мог начаться, сам поток будет отправлен напрямую.   -  person adeneo    schedule 28.12.2014
comment
@аденео я не понимаю. Компьютер (1-й клиент) отправляет поток на сервер, а затем сервер открывает еще один веб-сокет для XBMC/Kodi с URL-адресом потока. По крайней мере, я так себе это представляю. Как поток будет отправлен напрямую?   -  person JSFTW    schedule 28.12.2014
comment
WebRTC не проходит через сервер, или, по крайней мере, не должен, в том-то и дело, что это p2p и соединяет браузер одного пользователя напрямую с браузером другого пользователя, поэтому трафик вообще не должен проходить через ваш сервер, вы просто должны послать какие-то сигналы, чтобы начать работу, и здесь на помощь приходят сокеты.   -  person adeneo    schedule 28.12.2014
comment
@adeneo Но проблема в том, что XBMC/Kodi нужен URL-адрес с потоком, который он будет поддерживать, а WebRTC не имеет ни того, ни другого.   -  person JSFTW    schedule 28.12.2014
comment
Я не знаю, как работает Kodi или как вы конвертируете поток и т. Д. Вероятно, его можно каким-то образом направить через сервер, но это вроде как противоречит цели p2p?   -  person adeneo    schedule 28.12.2014
comment
@adeneo Так что мне тогда делать? Может еще как-то можно отправить на сервер?   -  person JSFTW    schedule 28.12.2014


Ответы (1)


As much as it is said about WebRTC being peer to peer, there are some lesser known facts. Peer to peer is not always possible due to the inconsistency of the internet architecture, most prominently, the symmetric NATs (Network address translators), which is normally the case with mobile networks and some 'badly behaved' networks.

For most other networks, with WebRTC, you do not need to send data through your server, as it will connect peer to peer by using STUN protocol to know public socket details and hole punching to actually transmit data. You need the server to setup the signalling part as it is not a part of WebRTC. For signalling, you may use protocols like SIP, websockets etc.

Сказав это, в качестве отказоустойчивого механизма, когда p2p невозможен, подход, который вы можете использовать, заключается в маршрутизации трафика через ваш сервер. Хорошо, что WebRTC обеспечивает поддержку этого подхода с использованием TURN-серверов. ICE используется для определения наилучшего сценария (возможность p2p с использованием STUN или маршрутизация данных через сервер TURN). Следует отметить, что последний не является одноранговым, и для маршрутизации данных через сервер TURN требуется сервер TURN с высокой пропускной способностью, что влечет за собой непомерные затраты.

Теперь позвольте мне рассмотреть некоторые неверные предположения в ваших пунктах:

1. Вы можете справиться с этим, как вы заявили.

2. Этот шаг будет выполнен сервером TURN. . Внутренне веб-сокеты не используются WebRTC. Он использует SRTP (RTP через SSL) на прикладном уровне и TCP или UDP (в зависимости от обхода брандмауэра и требований надежности). Таким образом, веб-сокеты невозможны с WebRTC. Это совершенно другой подход.

3. То же, что и в пункте 2.

4. Обычно преобразование "на лету" не выполняется и не рекомендуется (задержка в преобразовании будет уберите функцию реального времени в окно). Любое такое преобразование должно выполняться на шаге 1.

Перед началом сеанса SDP (протокол описания сеанса) передает кодеки для аудио и видео обоим клиентам на этапе передачи сигналов.

5 , Еще раз следует отметить, что после инициализации сеанса, будь то p2p или через сервер TURN, данные должны поступать непрерывно к обоим клиентам. Это суть WebRTC.

Если вам нужно что-то еще, попробуйте веб-сокеты. Ему не нужно ничего, кроме поддержки веб-сокетов на стороне клиента и сервера. Он использует всю архитектуру стека протоколов TCP-IP-HTTP, за исключением того, что он заменяет HTTP веб-сокетами на прикладном уровне с запросом на обновление на сервере. Это обеспечивает двунаправленный поток данных от сервера и клиентов, и у вас больше свободы для вычислений с данными.


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

P.S. Из-за меньшей репутации я не могу размещать более 2 ссылок. Пожалуйста, используйте википедию для ссылки на непонятные вам термины.

person GulshanZealous    schedule 18.12.2016
comment
Поскольку ответ на вопрос не требует кода, мне неясно, как лучше его отформатировать. Тем не менее, я старался изо всех сил, и теперь он кажется мне более читаемым. - person GulshanZealous; 18.12.2016