Потоковое видео в реальном времени один на один: WebRT C или Websocket? - PullRequest
1 голос
/ 01 февраля 2020

Я собираюсь создать веб-сайт, где один администратор будет транслировать свою веб-камеру в режиме реального времени нескольким зрителям. Я потратил несколько дней на поиски решений WebRT C и Websocket, но все еще чувствую растерянность. Люди говорят, что WebRT C - единственный разумный способ, но ...

Что я получил от Google, поправьте меня, если я ошибаюсь:

  1. WebRT C используется в основном для p2p-соединений, что означает, что мой «Администратор» не сможет иметь много (скажем, 50+) зрителей - просто потому, что его 50M inte rnet начнет отставать, пытаясь транслировать 50x p2p сразу;

  2. Я хочу обработать видео (на лету!) от администратора _asap_but_before_, показывающее его зрителям (т.е. сделать несколько оверлеев или вставить другое видео в основное) - это еще одна проблема с p2p, не так ли?

Итак, на данный момент я почти уверен, что лучше использовать Websockets вместо WebRT C. Может я что-то упускаю из виду? Не могли бы вы предложить мне какие-нибудь NotExtremelyComplicated решения для этого?

Спасибо

1 Ответ

1 голос
/ 01 февраля 2020

Все, что вы сказали, правильно! Если вы подключите P2P от администратора ко всем зрителям, вы, вероятно, достигнете верхнего предела, так как вам нужно загрузить для каждого зрителя. То, что вы хотите сделать, это использовать SFU вместо этого. Вы также можете выполнять обработку / наложения на сервере.

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

               |----> Viewer
               |
Admin ---> SFU |----> Viewer
               |
               |----> Viewer

Существует множество реализаций SFU, каждая из которых имеет свои взлеты и падения. Я с радостью помогу, если у вас есть вопросы по поводу Pion WebRT C. Это Go реализация WebRT C, и у нас есть пример того, как построить minimal-sfu .


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

Хорошая особенность WebRT C заключается в том, что вы получаете двунаправленные носители и данные, а у вас нет делать много кодирования. Вдобавок к этому в WebRT C есть несколько приятных вещей, таких как управление перегрузкой (WebRT C будет уменьшать / увеличивать битрейт в соответствии с доступной пропускной способностью). Хотя с Websockets намного сложнее справиться с подобными вещами.

...