Open alexlapa opened 6 years ago
@alexlapa I think it's quite obvious to bake in both SFU and MCU.
As far as MCU is... hmmm... "deeper" one, we can design ability to opt-in/opt-out it if necessary/desirable.
Trade-off - это будет сложно = долго. gst сам по себе вещь далеко не простая, а, учитывая необкатанность их webrtc-bin, можно утверждать, что и в сам gst надо будет спуститься, где совсем уж хардкор.
Well, building a reasonable media server is sort of hardcore anyway 😉
@alexlapa as I see the major solutions at the moment are Janus and Kurento. It would be nice if you will overview (or point out to) their inner designs. Obviously, there will be a lot for learning and inspiring.
@tyranron ,
I think it's quite obvious to bake in both SFU and MCU. As far as MCU is... hmmm... "deeper" one, we can design ability to opt-in/opt-out it if necessary/desirable.
Чтобы быть более строгим в формулировках, уточню, что, идеологически, подход MCU - сляниие нескольких медиа-потоков в один. То есть, клиент 1 должен получать видео клиентов 2 и 3. MCU в прямом смысле мержит эти потоки в один(с каким-нибудь стандартным layout'ом) и отправляет клиенту 1.
Я дал другое обьяснение разницы подходов, так как оно более подходит под real life ситуации: SFU'шки обычно просто роутят потоки от симулькастящих клиентов, MCU'шки все вопросы транскодирования/трансмуксирования берут на себя.
as I see the major solutions at the moment are Janus and Kurento. It would be nice if you will overview (or point out to) their inner designs. Obviously, there will be a lot for learning and inspiring.
:+1:
WIP
Имеются следующие сценарии:
Необходимо выбрать подходящие технологии для их реализации.
Video-call 1 <-> 1 (3<->3 тоже можно пускать).
Очевидным вариантом будет обычный WebRTC full mesh. От нас в таком случае требуется простой сигналинг и STUN+TURN сервера.
P2P для 1 <-> 1 (3<->3 тоже будет тянуть в большинстве случаев) уже устоявшийся подход, используется и Hangouts и Jitsi.
Плюсы:
Минусы:
По хорошему(и как это сделано в Hangouts, Jitsi), все варианты видео-вещания можно начинать с p2p WebRTC, а потом уже переключать на другие варианты. Правда, с seamless переключением будут проблемы (вообще сомневаюсь что это реализуемо, ожидаю, что в любом случае переключение будет занимать 2-3 секунды).
Conference (конференция) - n <-> n
Тут уже без полноценного медиа-сервера никак. И никаких принципиально новых подходов в этом вопросе не появилось, поэтому, webrtc-beyond-one-one вполне актуальна.
Основную разницу между MCU и SFU подходами можно обозначить следующим образом:
SFU взаимодейтсвуют с потоками на транспортном уровне, к медиа не спускаются, поэтому:
Из этого вытекает:
MCU спускаются на медиа-уровень, где возможностей много больше. Нас больше всего интересуют: transcoding, transmuxing, transrating, уменьшение нагрузки на клиента(как минимум отсутствие необходимости simulcast'а), лучший interop. Trade-off - серверу надо много CPU.
Предлагается использовать свежий gst с поддержкой WebRTC. Нужны биндинги. Самые актуальные и развиваемые - Rust'овые, SDP, WebRTC. Таким образом мы получаем все что умеет сам gst(совсем все). Trade-off - это будет сложно = долго. gst сам по себе вещь далеко не простая, а, учитывая необкатанность их
webrtc-bin
, можно утверждать, что и в сам gst надо будет спуститься, где совсем уж хардкор.Альтернативы: множество готовых SFU, но, при их использовании, целесообразность разработки этого проекта сомнительна.
Broadcasts - 1 -> n
Смягченные требования к задержке и возможность трансмуксирования позволяют посмотреть в сторону HTTP-streaming. Там расклады такие:
Silverlight
.Flash Player
.По оставшимся стоит расписать поподробнее. По основным критериям они одинаковы:
Проблемы с DASH:
Очевидно, надо делать HLS. Желательно, сразу с fMP4 как задел на DASH в будущем. Но тут все зависит от gst, а точной информации по этому поводу не обнаружилось. Видео от публикующих принимать по WebRTC с H264.