2016-10-17 3 views
3

Я пытался реализовать веб-приложение, которое будет иметь возможность обрабатывать следующий сценарий:поток WebCam использования socket.io

  • потокового видео/аудио от клиента к другим клиентам (на самом деле конкретный набора из них , нет трансляции) и сервера одновременно. Источником данных будет веб-камера клиента.
  • Эти потоковые данные должны отображаться в реальном времени в браузере других клиентов. и сохраняются на серверной стороне для целей архивации.
  • Он должен быть реализован в среде node.js + socket.io.

Чтобы выразить это в более конкретном контексте ... Сценарий заключается в том, что есть парень, который делает своего рода комнату для пользователей, которых он выбирает. После того, как выбранные пользователи присоединятся к комнате, создатель начинает потоковое видео/аудио из своих встроенных устройств (веб-камеры). Все гости получают данные в режиме реального времени, причем данные отправляются на сервер, где он хранится, поэтому его можно восстановить после того, как поток и комната закрываются.

Я думал о смешивании Socket.IO с WebRTC. Теоретически сочетание этих двух кажется просто идеальным для работы. Socket.IO отлично подходит для сбора определенного набора пользователей путем назначения некоторых сокетов в комнату и для процесса сигнализации, требуемого WebRTC. В то же время WebRTC является отличным для P2P-соединения между пользователями, собранными в одной комнате, также очень легко получить доступ к веб-камере и другим встроенным устройствам, которые я могу использовать.

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

  • Как сохранить поток, который отправляется P2P-соединением? Очевидно, сервер не имеет к этому доступа. Я думал, что я могу рассматривать сервер как «гостя», так что это будет всего лишь конечная точка соединения P2P с создателем комнаты. Тем не менее, это кажется острым.
  • Не лучше ли рассматривать сервер как посредника между создателем и клиентами? В какой-то момент может быть какая-то, возможно, незначительная задержка по сравнению с P2P, но, по-видимому, она будет одинаковой для всех клиентов. (Я пробовал это, но я не могу получить потоковое вещание с веб-камеры на сервер, но это тема для другого вопроса, поскольку у меня возникают проблемы с обработкой MediaStream)

Я искал приятный но без каких-либо успехов. Я видел, что есть это хорошее решение P2P, сделанное для socket.io: http://socket.io/blog/socket-io-p2p/. Дело в том, что я не думаю, что он будет эффективно обрабатывать поток данных. В примерах упоминается только простое приложение для чата, и мне нужно что-то немного тяжелее.

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

Заранее спасибо :)

ответ

1

потокового видео для нескольких пользователей это действительно сложная проблема, которая, к сожалению, требует обширной инфраструктуры для достижения. Вы не сможете передавать видеоданные через веб-раскладку.WebRTC также не является жизнеспособным решением для того, что вы описываете, потому что, как вы упомянули, протокол WebRTC является P2P, так как потоковой пользователь должен будет установить прямое соединение со всеми «зрителями». Это, очевидно, не будет превышать несколько «зрителей». WebRTC больше подходит для прямых видеозвонков, например, в Skype.

Here - это статья, описывающая архитектуру, используемую несколько популярной службой прямой трансляции. Как вы можете видеть, достижение живого видео в любом виде потребует значительных ресурсов.

3

Задача может быть решена с использованием одного из WebRTC-серверов с открытым исходным кодом. Например, kurento

Вы можете реализовать схемы потока:

  • Один на один
  • Один ко многим
  • Многие ко многим

WebRtc-server schema

Клиенты подключайте друг к другу сервер webRtc. Итак, на стороне сервера вы можете записывать поток или отправлять его на пересылку.

webSocket используется для comunicatind с сервером.

Вы можете найти examples согласно вашей задаче

 Смежные вопросы

  • Нет связанных вопросов^_^