Содержание статьи +
- Коротко
- Зачем это знать
- Что такое SFU – прежде чем выбирать
- mediasoup – низкоуровневый движок
- Janus – модульный шлюз
- LiveKit – платформа с батарейками внутри
- Jitsi Videobridge – движок Jitsi Meet
- Pion – Go-библиотека, а не SFU
- Сравнительная матрица
- Разобранный пример: выбор под три реальные формы продукта
- Операционные реалии, о которых не пишут маркетинговые страницы
- Где здесь Фора Софт
- Главное
- Что читать дальше
- CTA
Коротко
Пять опенсорс-проектов делят между собой почти весь рынок самостоятельно разворачиваемых WebRTC-медиасерверов в 2026 году: mediasoup (низкоуровневый движок на C++ с управлением из Node.js), Janus (модульный шлюз на C с плагинами под каждый сценарий), LiveKit (SFU на Go поверх Pion, который из коробки даёт полноценную платформу реального времени), Jitsi Videobridge (движок на Kotlin/Java, лежащий в основе Jitsi Meet) и Pion (Go-библиотека WebRTC, на базе которой вы собираете собственный SFU). Они не взаимозаменяемы. Каждый оптимизирован под свою ось – гибкость, интеграция с телефонией, скорость выхода на рынок, готовый UX конференции или полный контроль над байтовым трактом. В статье разбираем архитектуру каждого, продакшен-кейсы, эксплуатационную цену и даём дерево решений, которое выдержит контакт с реальностью.
Зачем это знать
SFU – это сердце любого WebRTC-продукта крупнее звонка один на один. С этим выбором вам жить весь срок службы системы: язык, на котором пишет команда, способ масштабирования между регионами, доступные форматы записи, как встраивать телефонию, какие ИИ-агенты можно будет добавить в следующем году. Неверный выбор оборачивается месяцами переписывания и долей облачного счёта, которая копится постоянно. Большинство команд узнают ограничения своего SFU уже после развёртывания. Эта статья позволяет узнать их до выбора.
Что такое SFU – прежде чем выбирать
В Selective Forwarding Unit сервер никогда не декодирует медиа. Каждый участник загружает один закодированный поток; сервер смотрит заголовки пакетов, решает, кому из подписчиков нужен этот пакет, и пересылает его как есть. CPU-нагрузка на сервере остаётся небольшой, потому что тяжёлая работа – кодирование, декодирование, компоновка – выполняется на клиентах. Получается топология, которая масштабируется: трафик асимметричный и предсказуемый, клиенты платят только за то, что отображают, а комнаты вырастают с пяти до пятидесяти участников без существенного роста серверной работы на поток. Предыдущая статья раздела – SFU, MCU и Mesh – разбирает три топологии параллельно; здесь мы спускаемся на уровень глубже и сравниваем пять проектов, которые реализуют этот паттерн в продакшене.
Выбор SFU редко сводится к вопросу «какой лучше». Пять проектов ниже все профессионально написаны, все проверены в продакшене, все активно развиваются. Вопрос в том, какой подходит под вашу команду, дорожную карту и эксплуатационные возможности. На этом вопросе и построена остальная часть статьи.
mediasoup – низкоуровневый движок
mediasoup – это WebRTC SFU с реализацией медиа-тракта на C++ и управляющим слоем в виде библиотеки для Node.js под лицензией ISC. Проект начал Иньяки Бас Кастильо в 2017 году; сейчас его поддерживает небольшой пул коммерческих спонсоров. Архитектура необычная и порождает как сильные стороны mediasoup, так и его самые острые углы: Node.js-процесс порождает один или несколько C++-подпроцессов, называемых workers (воркеры). Каждый воркер привязан к одному CPU-ядру. Внутри каждого воркера вы создаёте один или несколько routers (роутеров). Роутер – это единица, которая держит комнату: в нём живут продьюсеры участников (входящие потоки) и консьюмеры (исходящие потоки), и он решает, кто что получает.
Из этого следуют два важных вывода. Во-первых, mediasoup масштабируется процессами, а не потоками: чтобы задействовать восемь ядер, вы запускаете восемь воркеров, а ваше приложение само решает, какой воркер хостит какую комнату. Во-вторых, mediasoup не предоставляет протокола сигнализации. Свой WebSocket-слой, свой менеджер комнат, своя аутентификация – всё это вы пишете сами. Библиотека сообщает, что она умеет кодировать и декодировать; остальное в продукте – ваш код.
Официальная документация mediasoup по масштабируемости описывает один воркер как комфортно держащий ~500 консьюмеров суммарно – правильная метрика именно консьюмеры, а не участники, потому что в комнате из N человек у каждого участника N − 1 консьюмеров. Воркер, держащий 500 консьюмеров, может обслуживать одну комнату на десять человек (90 консьюмеров) плюс ещё одну десятку и несколько помельче – либо одну комнату на 23 человека с 506 консьюмерами, после чего нагрузка распределяется на дополнительные воркеры через pipeToRouter. Внутри одного хоста pipeToRouter оставляет медиа в общей памяти; между хостами документация описывает тот же паттерн через транспорт между роутерами.
Сильные стороны mediasoup
Библиотека маленькая, быстрая и даёт практически полный контроль над медиа-плоскостью. Node.js-слой – это достаточно знакомого JavaScript, чтобы типичная веб-команда оставалась продуктивной, а C++ под капотом не отсвечивает, пока вы сами не захотите заглянуть в исходники. Компании, которые выпускают тяжёлые по видео продукты с собственным UX и собственной сигнализацией – телемедицину с требованиями HIPAA, обучающие платформы со специфической логикой брейкаут-комнат, конференц-инструменты с тонким управлением слоями симулькаста на каждом консьюмере – выбирают mediasoup именно потому, что библиотека не навязывает продукт поверх движка. mediasoup – это движок; продукт – ваш код.
Цена выбора mediasoup
Сигнализацию пишете вы. Конвейер записи пишете вы. Логику брейкаут-комнат, модераторские контролы, выгрузку аналитики – тоже вы. Документация отличная, но предполагает, что вы знаете, чего хотите; команды «запусти сервер – получи переговорку» нет. Время до первого звонка в гринфилд-проекте измеряется неделями, не часами. Операционно мультипроцессная модель означает, что ваш деплой должен держать воркеры живыми, перезапускать упавшие и маршрутизировать сигнализацию на нужный воркер для каждой комнаты – работа, которую LiveKit и Jitsi берут на себя, а mediasoup оставляет вашему платформенному слою.
Продакшен-вертикали, где mediasoup – правильный выбор
Телемедицинские продукты, где продуктовая команда должна контролировать каждый байт в HIPAA-регулируемой сессии. Кастомные конференц-инструменты, где UX, формат записи и интеграция с остальным SaaS важнее коробочных фич. Образовательные платформы с урок-ориентированной сессией, где SFU – лишь один из элементов более крупного стека. В практике Фора Софт по видео-стримингу и e-learning mediasoup – это движок, к которому мы тянемся, когда заказчик строит настоящий продукт, а не плагин-переговорку.
Janus – модульный шлюз
Janus – это WebRTC-сервер общего назначения, написанный на C компанией Meetecho. Если mediasoup – движок, то Janus – это шлюз: маленькое ядро, отвечающее за WebRTC-сантехнику (ICE, DTLS-SRTP, JSEP offer/answer), и набор плагинов, превращающих шлюз в нужное вам приложение. Каждый плагин – это отдельная shared object: janus_videoroom.so для SFU-конференций, janus_audiobridge.so для микса аудио, janus_streaming.so для ингеста RTSP/RTP, janus_sip.so для шлюза в SIP, janus_recordplay.so для записи и так далее. Лицензия – GPLv3.
Плагинная модель – это и есть архитектурный инсайт. Шлюз ставится один раз, включаете плагины, которые реально нужны, и приложение общается с каждым плагином через единообразный HTTP/WebSocket/MQTT API. Один и тот же экземпляр Janus может одновременно быть SFU для видеозвонка, SIP-мостом для интеграции с устаревшей телефонией и точкой ингеста RTSP с камеры наблюдения. Такого сочетания нигде больше нет – другие серверы делают одно из этого хорошо, а остальное плохо или никак.
Платой становится размер конфигурационной поверхности. У Janus много ручек, потому что Janus делает много вещей. В продакшене обычно тюнят пул рабочих потоков, версии libsrtp/libnice, настройки каждого плагина и обвязку systemd/coturn/nginx вокруг бинарника. Сообщество большое, документация подробная, но первый деплой без опыта с Janus длится дольше эквивалента на LiveKit или Jitsi Meet.
Сильные стороны Janus
Janus – самый сильный выбор, когда нужно перекинуть мост между мирами. Если продукту нужно интероперировать с SIP/PBX, принимать поток с RTSP-камеры, отдавать API записи и одновременно хостить многопартийную видеокомнату – всё из одного бэкенда – Janus единственный из списка отгружает всё это как первоклассные плагины. Multistream-ветка (теперь дефолтная) принесла унифицированную SDP-модель, корректно работающую с современным mid-based bundling в WebRTC. Meetecho, компания за Janus, сама эксплуатирует крупные WebRTC-инсталляции (включая WebRTC-инфраструктуру встреч IETF с 2014 года), и проект отражает этот эксплуатационный пробег.
Цена выбора Janus
Модель «плагин под сценарий» меняет гибкость на чётко выраженные API. Если модель данных плагина ложится на ваш продукт – вы выпускаете быстро; если нет – пишете собственный плагин на C, а это другой разговор, нежели писать сигнализацию для mediasoup на Node.js. Кодовая база на C – барьер для команд, у которых первый язык JavaScript или Go. И как у mediasoup, у Janus нет встроенной истории горизонтального масштабирования – масштабируетесь несколькими экземплярами Janus за балансировщиком, маршрутизируя комнаты на инстансы на уровне приложения.
Продакшен-вертикали, где Janus – правильный выбор
Системы видеонаблюдения с ингестом RTSP-камер и WebRTC-просмотром. Телемедицина с SIP/PSTN-ногой для доступности. Образовательные и broadcast-продукты с одновременной конференцией и записанным воспроизведением в одном бэкенде. Любой деплой, где SFU – одна из нескольких медиа-ролей сервера. В проектах видеонаблюдения и телемедицины Фора Софт выбирает Janus, когда один и тот же медиа-сервер должен обрабатывать RTSP, SIP и WebRTC в одном процессе.
LiveKit – платформа с батарейками внутри
LiveKit, выпущенный в 2021 году под Apache 2.0, – самый молодой проект в списке и тот, который везёт больше всего «из коробки». Ядро медиа-сервера написано на Go поверх библиотеки Pion WebRTC. Вокруг SFU организация LiveKit выпускает сервис Ingress (приём RTMP, WHIP, HLS, MP4), сервис Egress (композитная запись, индивидуальные дорожки, RTMP-выход, HLS-выход), клиентские SDK под все основные платформы, серверные SDK под полдюжины языков и фреймворк Agents для ИИ-участников. Эта комбинация сделала LiveKit дефолтным новым выбором для команд, которые хотят быть в продакшене в этом квартале, а не в следующем.
Архитектурная деталь, отличающая LiveKit от mediasoup или Janus, – это распределённая сетка узлов. Деплой LiveKit – это кластер одинаковых узлов, координируемый через Redis. Любой участник может подключиться к любому узлу; кластер маршрутизирует его медиа к тем узлам, где находятся остальные участники. Одна комната может охватывать несколько физических серверов, а каждый участник коннектится к ближайшему узлу, минимизируя свою last-mile latency. Это та же идея каскадирующих SFU, которую Jitsi выпустил как Octo несколько лет назад и которую Борис Грозев публично описал в 2018; вклад LiveKit – упаковать её как поведение по умолчанию, а не опт-ин расширение.
LiveKit Agents достиг 1.0 в апреле 2025 года и к апрелю 2026 года вышел на Python 1.5 с адаптивной обработкой прерываний и нативной поддержкой инструментов Model Context Protocol (MCP). «Агент» во фреймворке LiveKit – это такой же участник, как и любой другой; фреймворк подключает к его аудиодорожке вход speech-to-text, LLM и выход text-to-speech. LiveKit Cloud, управляемое предложение, запускает тот же open-source-код на инфраструктуре компании и добавляет операционный слой, который иначе строили бы сами команды: глобальную сетку, наблюдаемость, SIP, развёртывание агентов.
Сильные стороны LiveKit
Скорость выхода на продукт. Команда, выбравшая LiveKit, способна показать работающее видеоприложение к концу первой недели и записанную сессию к концу второй. История SDK шире и отполированнее, чем у любого другого проекта в списке; документация читается как документация к продукту, а не к движку. Для ИИ-агент-продуктов – голосовых копилотов, ботов клиентского сервиса, агентов-интервьюеров, переводчиков в реальном времени – LiveKit это путь с наименьшим объёмом интеграционного кода.
Цена выбора LiveKit
Вы наследуете мнения LiveKit. Модель данных, концепт комнаты, жизненный цикл участника, формы SDK – это не конфигурируется так, как у mediasoup. Если ваш продукт по форме конференц – это свобода; если нет – мнения превращаются в трение. Кластерная модель предполагает Redis и определённую сетевую топологию; запуск LiveKit где-то необычном (изолированный on-prem, страна с ограничениями на egress) требует больше работы, чем запуск mediasoup в том же месте. У LiveKit Cloud цена по usage; самостоятельно развёрнутый LiveKit бесплатен, но операции кластера на вас.
Продакшен-вертикали, где LiveKit – правильный выбор
Голосовые ИИ-продукты и копилоты – история про агентов в 2026 году главная причина, по которой команды выбирают LiveKit. Конференц-продукты, которые хотят выпуститься быстро и итерировать UX, а не медиа-стек. SaaS-продукты, где стриминговый движок – средство, и энергия команды должна уходить в продукт. Фора Софт использует LiveKit, когда главная ценность заказчика – продукт, а не платформа.
Jitsi Videobridge – движок Jitsi Meet
Jitsi Videobridge (JVB) – это SFU в центре конференц-платформы Jitsi Meet. Написан на Kotlin и Java, под Apache 2.0, развивается компанией 8x8 с момента приобретения Jitsi у BlueJimp в 2015 году. JVB – самый возрастной open-source SFU в этом списке; корни проекта уходят в десктоп-клиент Jitsi 2003 года, а в продакшен-WebRTC SFU превратился в 2014-м.
JVB не работает в одиночку. Полный деплой Jitsi Meet включает Jicofo (focus, управляющий конференциями и распределяющий endpoint-ы по бриджам), Prosody (XMPP-сервер, по которому идёт сигнализация Colibri2 между Jicofo и JVB), веб-клиент Jitsi Meet и опциональные компоненты для записи (Jibri), шлюзов (Jigasi для SIP) и метрик. Архитектура мнения держит и довольно крупная – JVB не запускают одиноким и не пишут к нему сигнализацию как к mediasoup. Вы запускаете Jitsi Meet, а JVB – один из сервисов.
История каскадирования бриджей (Octo, недавно перестроенный как протокол relay) зрелая. Экземпляры JVB в разных регионах связываются в одну конференцию, и Jicofo помещает каждого участника на ближайший бридж. Это та же архитектура, которая позволяет публичному Jitsi Meet обслуживать глобальную аудиторию с небольшого числа региональных бриджей; та же архитектура доступна и в self-hosted-инсталляциях. Перформанс-бенчмарки команды Jitsi показывают один JVB, обрабатывающий ~1000 потоков при ~1500 MB RSS – то есть один бридж тянет сотни маленьких конференций или десятки больших, с линейным scale-out за этой точкой.
Сильные стороны JVB
Если цель – «Jitsi Meet под нашим брендингом», JVB – единственный выбор, позволяющий выпуститься, просто развернув существующий веб-клиент Jitsi Meet и направив его на ваши бриджи. Продуктовый UX крепкий, модераторские инструменты настоящие, запись (через Jibri) работает, история федерации с Octo старше и более боевая, чем у любого другого проекта в списке. Для внутренней корпоративной видеоконференции – корпоративной замены Zoom, кампусной переговорки, инсталляции в госсекторе – JVB плюс стек Jitsi Meet – заслуживающий внимания готовый ответ.
Цена выбора JVB
Полный стек тяжёлый. Вы эксплуатируете Jicofo, Prosody, бриджи, опционально Jibri, опционально Jigasi и веб-клиент Jitsi Meet – пять-шесть сервисов в одном деплое. Тюнинг JVM-хипа, тюнинг XMPP-сервера и конфигурация каждого бриджа становятся частью вашей операционной поверхности. Кастомизация веб-клиента дальше брендинга требует форка и поддержки форка – это серьёзное обязательство на годы. JVB также менее привлекателен, если ваш продукт не «встречи»: модель данных и клиентские конвенции исходят из видеоконференц-UX.
Продакшен-вертикали, где JVB – правильный выбор
Внутренняя видеоконференция для организаций любого размера. Госсектор и публичный сектор, где правила суверенитета данных исключают облачный SaaS и команда хочет поддерживаемый референсный стек, а не собранный с нуля движок. Образовательные платформы, где переговорка – это и есть продукт. Телемедицинские деплои, желающие готовый клинический meeting-опыт. Фора Софт рассматривает Jitsi, когда заказчик хочет готовый конференц-опыт под свой брендинг и хостинг, а не медиа-движок, на котором строится продукт.
Pion – Go-библиотека, а не SFU
Pion – это стек WebRTC на Go под MIT, начатый Шоном Дюбуа в 2018 году. Pion это не SFU. Это полная реализация WebRTC-протоколов на Go – RTCPeerConnection, ICE, DTLS, SRTP, RTP-стек, data channel, медиа-движок – которую вы используете как библиотеку, чтобы построить любое WebRTC-приложение, в том числе SFU. Медиа-сервер LiveKit построен на Pion. ion-sfu построен на Pion. Длинный список менее известных продакшен-серверов WebRTC построен на Pion. Если вы пишете WebRTC-сервер на Go в 2026 году, почти наверняка вы начинаете с импорта Pion.
Почему Pion в этом списке – потому что «собрать свой SFU на Pion» это реальный и разумный выбор. Командам, у которых необычные продуктовые требования – серверная обработка аудио прямо в SFU, логика маршрутизации кодеков, которую не реализует ни один готовый SFU, глубокая интеграция с другим Go-стеком, целевая платформа, которую не поддерживают остальные SFU – Pion даёт протокольные примитивы, не навязывая форму медиа-сервера сверху. Тулчейн Go проще, чем C++ или JVM; итоговый бинарник – это один статический файл, который можно развернуть где угодно.
Сильные стороны Pion
Вы – Go-шоп. Продукту нужны SFU-семантики, которых нет в готовых проектах, и у вас есть инженерные мощности их построить. Вы хотите получить WebRTC-сантехнику от поддерживаемой библиотеки, не наследуя мнения о серверной архитектуре сверху. ion-sfu – каноничный пример «как выглядит SFU на Pion»: маленький, сфокусированный, JSON-RPC-сигнализация, прозрачный код, – но чаще Pion используется как строительный блок внутри более крупного продукта, автору которого нужно контролировать каждый слой.
Цена выбора Pion
Время до продакшена. Цифра, которую называют опытные команды, строящие на Pion, – двенадцать и более месяцев на полноценный SFU поверх библиотеки. Вы пишете свою балансировку, свою модель комнаты, свою запись, свою историю SDK. Протокольные примитивы отличные; всё над ними – это ваше. Для большинства команд выбор Pion это выбор языка, а не продукта.
Продакшен-вертикали, где Pion – правильный выбор
Особые медиа-продукты с необычными серверными требованиями. Бэкенд-команды, уже стандартизированные на Go, желающие WebRTC-примитивы без захода в Node.js или JVM. Embedded- и edge-инсталляции, где важна история single-binary-деплоя, а рантайм LiveKit / Jitsi слишком тяжёл. У Фора Софт Pion применялся в проектах, где заказчику нужна была кастомная серверная маршрутизация аудио, которую не выразить готовым SFU.
Сравнительная матрица
Таблица ниже сводит пять проектов по измерениям, реально определяющим выбор в продакшене. «Правильный ответ» зависит от того, какая строка важнее именно вам – единственной доминирующей колонки здесь нет.
| Критерий | mediasoup | Janus | LiveKit | Jitsi Videobridge | Pion |
|---|---|---|---|---|---|
| Язык | Движок C++, управление Node.js | C | Go (на Pion) | Kotlin / Java | Go (библиотека) |
| Лицензия | ISC | GPLv3 | Apache 2.0 | Apache 2.0 | MIT |
| Первый релиз | 2017 | 2014 | 2021 | 2014 (как JVB) | 2018 |
| Готовые SDK | Только серверная библиотека; клиентские SDK пишете вы | Плагин-специфичные JS-клиенты; SDK от сообщества | Полные first-party SDK: web, iOS, Android, Flutter, React Native, Unity | First-party веб-клиент (Jitsi Meet); сторонние SDK | Нет – собираете всё сами |
| Сигнализация | Пишете сами | HTTP / WebSocket / MQTT к каждому плагину | First-party gRPC + WebSocket | Colibri2 поверх XMPP (управляет Jicofo) | Пишете сами |
| Встроенное каскадирование / мультирегион | Нет (через pipeToRouter) | Уровень приложения | Да – кластер на Redis | Да – Octo / relay | Нет |
| Встроенная запись | Нет | Да (плагин recordplay) | Да (сервис Egress) | Да (сервис Jibri) | Нет |
| Встроенный SIP-шлюз | Нет | Да (плагин sip) | Да (с 2025) | Да (Jigasi) | Нет |
| Встроенный ИИ-агент-фреймворк | Нет | Нет | Да (Agents 1.5+) | Нет | Нет |
| Практический масштаб на узел | ~500 консьюмеров на воркер (много воркеров на хосте) | Сотни участников на инстанс | Масштабируется кластером – потолок задаёт число узлов | ~1000 потоков на бридж | Что соберёте – то и будет |
| Время до первого звонка | Недели | Дни – недели (зависит от плагина) | Часы | Часы (деплой Jitsi Meet) | Месяцы |
| Подходит, когда | Нужен движок, не продукт | Нужны SIP/RTSP/WebRTC в одном сервере | Нужно выпуститься быстро и иметь облако как опцию | Нужен Jitsi-Meet-образный продукт под брендинг | Нужны WebRTC-примитивы на Go |
Матрица – отправная точка; следующий раздел проводит сам выбор через три вопроса.
«Типичная ошибка. Команды выбирают LiveKit, потому что документация дружелюбная, а потом упираются в то, что модель данных LiveKit не выражает, и переписывают. Или выбирают mediasoup, потому что кто-то порекомендовал, тратят три месяца на сигнализацию и запись, прежде чем хоть что-то показать заказчику. Или берут Jitsi, потому что демо впечатляет, а потом обнаруживают, что веб-клиент, который придётся форкать, – это миллион строк React. Честный первый вопрос не «какой SFU лучший», а какой формы наш продукт, и в чём сильна наша команда. Сначала отвечаем на это; SFU следует автоматически.»
Разобранный пример: выбор под три реальные формы продукта
Дерево решений сжимается в одну из трёх форм продукта, в которые попадает подавляющее большинство WebRTC-сборок. Расчёты ниже – для деплоя на 200 участников с 50 одновременными комнатами по 4 человека, типичная нагрузка небольшого SaaS.
Форма 1 – брендированный конференц-продукт, выпуск за 8 недель. Заказчик хочет видеопродукт, который пользователи открывают в браузере. UX важен; протокол – нет. Команда: два бэкенд-инженера и один фронтенд. Правильный ответ – LiveKit. Время до первого звонка – часы. Время до первого платящего клиента – 8 недель. Серверная стоимость при 200 одновременных участниках с симулькастом – примерно 400–800 долларов в месяц на AWS либо эквивалент в плане LiveKit Cloud по usage. Команда пишет продуктовый код; SFU не отсвечивает.
Форма 2 – телемедицинская платформа с SIP-мостом для доступности и RTSP-ингестом с клинической камеры. В одном бэкенде сходится несколько медиа-протоколов, регуляторика требует self-hosting в конкретном регионе, а SFU – одна из нескольких ролей сервера. Правильный ответ – Janus с плагинами videoroom, sip и streaming, включёнными в одном инстансе. Время до первого звонка – неделя. Время до продакшена – 4–6 месяцев. Серверная стоимость: один мощный узел тянет нагрузку за 300–500 долларов в месяц; операционная стоимость – это знакомство команды с Janus, а не счёт AWS.
Форма 3 – кастомная конференц-система с проприетарной сигнализацией, нестандартным форматом записи и интеграцией с существующим Node.js-бэкендом. Продуктовая команда контролирует каждый байт; SFU – движок, а не продукт. Правильный ответ – mediasoup. Время до первого звонка – 2–3 недели (вы пишете сигнализацию). Время до продакшена – 6–9 месяцев. Серверная стоимость: 8-воркерный хост держит нагрузку за 200–400 долларов в месяц; доминирующая статья – инженерная.
Модель ломается, если выбрать «SFU для формы 1» под продукт формы 3 или наоборот. Цена ошибки – не серверный счёт, а переписывание. Сначала планируйте форму продукта.
Операционные реалии, о которых не пишут маркетинговые страницы
Несколько вещей, которые каждая команда узнаёт в продакшене, независимо от выбранного SFU.
Coturn – часть деплоя, что бы ни было. Все пять SFU предполагают, что TURN-релеи существуют для тех 10–25% клиентов, чей NAT или firewall блокирует прямой UDP. Вы будете запускать coturn (или эквивалент), будете платить за полосу (TURN дорогой по трафику, потому что релеит весь медиа-поток) и будете его тюнить. TURN-сервер не идёт ни в одном из SFU.
Симулькаст и SVC – не магия. Все пять SFU поддерживают симулькаст; часть поддерживает VP9 SVC; недавние версии LiveKit поддерживают AV1 SVC. Польза появляется только если ваш энкодер настроен производить слои, а политика подписки – выбирать правильный. Следующая статья раздела – Симулькаст и SVC: как SFU обслуживает разнородную аудиторию – разбирает логику выбора слоя.
Запись – отдельный продукт. «Запись» бывает композитной (один смикшированный файл), по дорожкам на участника (один файл на поток) или сырым RTP-захватом. Egress LiveKit и Jibri Jitsi отгружают композитный выход; плагин recordplay Janus – поток на участника; mediasoup и Pion оставляют это вам. Решайте рано – переключение позже означает повторное вычисление всего из сырого RTP.
Наблюдаемость не опциональна. Каждый SFU отдаёт какую-то форму статистики. Ни один не отдаёт её в виде, который примут ваши дашборды в первый день. Запланируйте несколько недель на проводку Prometheus, Grafana и getStats() с клиентов в когерентный QoE-конвейер. Статья Наблюдаемость плеера и метрики, которые уходят в продакшен разбирает слой метрик; со стороны SFU всё аналогично.
Слой сигнализации – частая точка провала продукта. mediasoup и Pion оставляют его вам, и многие команды недооценивают объём работы. Сигнализация несёт аутентификацию, членство в комнате, выбор слоя симулькаста, состояние брейкаут-комнат, команды модератора и весь чат-сайдбар, если он у вас есть. Закладывайте бюджет.
Где здесь Фора Софт
Фора Софт выпускает продукты на WebRTC, конференции, телемедицину, e-learning и видео-стриминг с момента, когда стандарт WebRTC ещё был драфтом. Пять проектов из этой статьи – для нас не абстракция: mediasoup – движок внутри нескольких наших телемедицинских и образовательных деплоев; к Janus мы обращаемся, когда видеонаблюдение или телемедицина требуют RTSP и SIP в одном сервере; LiveKit – быстрейший путь, если заказчик хочет голосового ИИ-агента или конференц-UX в этом квартале; Jitsi Meet – ответ, если заказчику нужна готовая конференц-платформа под брендинг и хостинг; Pion появляется в проектах с кастомной серверной маршрутизацией аудио или необычными целевыми платформами. Правильный SFU – тот, что подходит продукту заказчика, его команде и его операционному аппетиту, а не тот, у кого громче документация.
Главное
- Пять опенсорс-SFU доминируют в самостоятельно развёрнутом WebRTC в 2026 году; они меняют гибкость на time-to-market по-разному.
- mediasoup даёт движок, а не продукт – выбирайте, когда контролируете сигнализацию и UX.
- Janus – единственный проект, отгружающий SIP, RTSP и SFU в одном сервере; берите для кросс-протокольных шлюзов.
- LiveKit выпускается быстрее всех и владеет историей интеграции с ИИ-агентами; берите для продукт-ориентированных сборок и голосовых агентов.
- Jitsi Videobridge – движок внутри Jitsi Meet; берите, если нужна готовая конференц-платформа под брендинг.
- Pion – Go-библиотека, не SFU; берите, если есть инженерный ресурс собирать кастомный медиа-сервер.
Что читать дальше
- SFU, MCU и Mesh: три топологии WebRTC – выбор топологии, который предшествует выбору SFU.
- Симулькаст и SVC: как SFU обслуживает разнородную аудиторию – что выбранный SFU реально делает с многослойными потоками.
- WebRTC при масштабе: каскадные SFU, региональные бриджи, ИИ-агенты – мультирегиональная архитектура, превращающая один SFU в глобальный сервис.
CTA
- Поговорите со стриминг-инженером – 30-минутный звонок с нашей WebRTC-командой.
- Посмотрите наши кейсы – телемедицина, e-learning, конференции, видеонаблюдение, OTT.
- Скачайте шпаргалку по выбору SFU – одностраничный PDF с матрицей и деревом решений из этой статьи. Скачать (PDF).