Все, что вы сказали, правильно! Если вы подключите 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 намного сложнее справиться с подобными вещами.