Содержание статьи +
- Коротко
- Зачем это знать
- Что такое SFU – прежде чем выбирать
- mediasoup – низкоуровневый движок
- Janus – модульный шлюз
- LiveKit – платформа с батарейками внутри
- Jitsi Videobridge – движок Jitsi Meet
- Pion – это библиотека на Go, а не SFU
- Сравнительная матрица
- Разобранный пример: выбор под три реальные формы продукта
- Операционные реалии, о которых не пишут на маркетинговых страницах
- Где здесь Фора Софт
- Главное
- Что читать дальше
- CTA
Коротко
Пять 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 редко сводится к вопросу «какой лучше». Пять проектов ниже – все профессионально написаны, проверены в продакшене и активно развиваются. Вопрос в том, какой из них подходит вашей команде, дорожной карте и эксплуатационным возможностям. На этом и строится остальная часть статьи.
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.
Сравнительная матрица
Таблица ниже объединяет пять проектов по измерениям, реально определяющим выбор в продакшене. «Правильный ответ» зависит от того, какая строка важнее именно вам – доминирующей колонки здесь нет.
| Критерий | 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-хостинг в определённом регионе, а 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; выбирайте её, если у вас есть инженерные ресурсы для сборки собственного медиа-сервера.
Что читать дальше
- SFU, MCU и Mesh: три топологии WebRTC – выбор топологии, предшествующий выбору SFU.
- Симулькаст и SVC: как SFU обслуживает разнородную аудиторию – что именно делает выбранный SFU с многослойными потоками.
- WebRTC при масштабе: каскадные SFU, региональные бриджи, ИИ-агенты – мультирегиональная архитектура, превращающая один SFU в глобальный сервис.
CTA
- Поговорите со стриминг-инженером – 30-минутная консультация с нашей командой WebRTC.
- Посмотрите наши кейсы – телемедицина, e-learning, конференции, видеонаблюдение, OTT.
- Скачайте шпаргалку по выбору SFU – одностраничный PDF с матрицей и деревом решений из этой статьи. Скачать (PDF).