mediasoup, Janus, LiveKit, Jitsi Videobridge, Pion: как выбрать SFU

Автор: Николай СапуновОбновлено: август 202631 мин чтения
Содержание статьи +

Коротко

Пять open-source-проектов делят между собой почти весь рынок самостоятельно развёртываемых 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 редко сводится к вопросу «какой лучше». Пять проектов ниже – все профессионально написаны, проверены в продакшене и активно развиваются. Вопрос в том, какой из них подходит вашей команде, дорожной карте и эксплуатационным возможностям. На этом и строится остальная часть статьи.

Рисунок 1. Пять 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.

Плагинная модель – это и есть ключевой архитектурный инсайт. Шлюз устанавливается один раз, вы подключаете только те плагины, которые действительно нужны, а приложение взаимодействует с каждым из них через единый API на основе HTTP, WebSocket или MQTT. Один и тот же экземпляр Janus может одновременно выполнять функции SFU для видеозвонков, SIP-моста для интеграции со старыми телефонными системами и точки приёма RTSP-потоков с камер наблюдения. Такое сочетание нигде больше не встречается – другие серверы хорошо справляются только с одной из этих задач, а остальные либо работают плохо, либо не поддерживаются вовсе.

Платой становится размер конфигурационной поверхности. У Janus много настроек, потому что он выполняет множество задач. В продакшене обычно настраивают пул рабочих потоков, версии libsrtp и libnice, параметры каждого плагина, а также интеграцию systemd, coturn и nginx с бинарником. Сообщество большое, документация подробная, но первый деплой без опыта работы с Janus занимает больше времени, чем аналогичный процесс в LiveKit или Jitsi Meet.

Сильные стороны Janus

Janus – лучший выбор, когда нужно соединить разные миры. Если продукту требуется взаимодействие с SIP/PBX, приём потока с RTSP-камеры, предоставление API для записи и одновременная поддержка многопользовательской видеокомнаты – всё это из одного бэкенда – то Janus остаётся единственным в своём классе, который предлагает всё это как полноценные плагины. Multistream-ветка (ныне по умолчанию) внедрила унифицированную SDP-модель, корректно работающую с современным mid-основанным bundling в WebRTC. Meetecho, компания, стоящая за Janus, сама эксплуатирует крупные WebRTC-инсталляции (включая инфраструктуру для встреч IETF с 2014 года), и проект отражает этот практический опыт.

Цена выбора Janus

Модель «плагин под сценарий» жертвует гибкостью ради чётко определённых API. Если модель данных плагина совместима с вашим продуктом – вы быстро выпускаете решение; если нет – приходится писать собственный плагин на C, что уже совсем иной уровень сложности по сравнению с разработкой сигналации для mediasoup на Node.js. Кодовая база на C становится барьером для команд, чей основной язык – JavaScript или Go. Как и в случае с mediasoup, у Janus нет встроенной поддержки горизонтального масштабирования: масштабирование достигается за счёт нескольких экземпляров Janus за балансировщиком, при этом маршрутизация комнат между инстансами осуществляется на уровне приложения.

Продакшен-вертикали, где Janus – правильный выбор

Системы видеонаблюдения с ингестом RTSP-камер и WebRTC-просмотром. Телемедицина с SIP/PSTN-шлюзом для обеспечения доступности. Образовательные и вещательные продукты с одновременной конференцией и воспроизведением записей в одном бэкенде. Любой деплой, где 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. Любой участник может подключиться к любому узлу – кластер сам маршрутизирует его медиапоток к тем узлам, где находятся остальные участники. Одна комната может охватывать несколько физических серверов, а каждый участник подключается к ближайшему узлу, минимизируя задержку на последнем километре. Это та же идея каскадных 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

Вы наследуете архитектурные решения LiveKit. Модель данных, концепция комнаты, жизненный цикл участника, структура SDK – всё это жёстко задано и не настраивается так гибко, как в mediasoup. Если ваш продукт по сути – конференц-система, то это свобода; если нет – эти решения становятся препятствием. Кластерная модель требует использования Redis и определённой сетевой топологии; запуск LiveKit в нестандартной среде (например, изолированный on-prem или страна с ограничениями на исходящий трафик) потребует больше усилий, чем развёртывание mediasoup в тех же условиях. В LiveKit Cloud оплата идёт по объёму использования; самоуправляемый 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 (фокус, управляющий конференциями и распределяющий 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 МБ RSS – то есть один бридж справляется с сотнями небольших конференций или десятками крупных, обеспечивая линейное масштабирование за этой точкой.

Сильные стороны 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, а команда предпочитает поддерживаемый референсный стек, а не движок, собранный с нуля. Образовательные платформы, где переговорная комната – это сам продукт. Телемедицинские решения, которым нужен готовый клинический опыт проведения встреч. Фора Софт рассматривает 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. Встраиваемые и edge-установки, где важна традиция развёртывания в виде одного бинарника, а рантайм LiveKit или Jitsi оказывается слишком тяжёлым. В Фора Софт Pion использовался в проектах, где заказчику требовалась кастомная серверная маршрутизация аудио, которую невозможно реализовать с помощью готового SFU.

Рисунок 2. Дерево решений по выбору SFU в 2026 году. Три честных вопроса – что за продукт, в чём сила команды, каков операционный аппетит – в большинстве случаев сужают поле до одного ответа.

Сравнительная матрица

Таблица ниже объединяет пять проектов по измерениям, реально определяющим выбор в продакшене. «Правильный ответ» зависит от того, какая строка важнее именно вам – доминирующей колонки здесь нет.

КритерийmediasoupJanusLiveKitJitsi VideobridgePion
ЯзыкДвижок C++, управление Node.jsCGo (на Pion)Kotlin / JavaGo (библиотека)
ЛицензияISCGPLv3Apache 2.0Apache 2.0MIT
Первый релиз2017201420212014 (как JVB)2018
Готовые SDKТолько серверная библиотека; клиентские SDK пишете выПлагин-специфичные JS-клиенты; SDK от сообществаПолные first-party SDK: web, iOS, Android, Flutter, React Native, UnityFirst-party веб-клиент (Jitsi Meet); сторонние SDKНет – собираете всё сами
СигнализацияПишете самиHTTP / WebSocket / MQTT к каждому плагинуFirst-party gRPC + WebSocketColibri2 поверх 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-хостинг в определённом регионе, а 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 или фаервол блокируют прямой 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 – это не тот, у кого лучше документация, а тот, что соответствует продукту клиента, его команде и операционным возможностям.

Главное

  • Пять open-source SFU доминируют в самостоятельно развёрнутом WebRTC в 2026 году – они по-разному балансируют гибкость и скорость вывода на рынок.
  • mediasoup предоставляет движок, а не готовый продукт – выбирайте его, если вы контролируете сигнализацию и пользовательский интерфейс.
  • Janus – единственный проект, объединяющий SIP, RTSP и SFU в одном сервере; используйте его для кросс-протокольных шлюзов.
  • LiveKit развивается быстрее всех и имеет богатую историю интеграции с ИИ-агентами; выбирайте его для продуктовых сборок и голосовых агентов.
  • Jitsi Videobridge – это движок внутри Jitsi Meet; выбирайте его, если нужна готовая конференц-платформа под бренд.
  • Pion – это библиотека на Go, а не SFU; выбирайте её, если у вас есть инженерные ресурсы для сборки собственного медиа-сервера.

Что читать дальше

CTA

  • Поговорите со стриминг-инженером – 30-минутная консультация с нашей командой WebRTC.
  • Посмотрите наши кейсы – телемедицина, e-learning, конференции, видеонаблюдение, OTT.
  • Скачайте шпаргалку по выбору SFU – одностраничный PDF с матрицей и деревом решений из этой статьи. Скачать (PDF).

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.