RUSEON Core против MediaMTX (ранее rtsp-simple-server)
MediaMTX — популярный и качественно написанный медиасервер и роутер потоков на чистом Go (автор Alessandro Decina). Он отлично подходит в качестве универсального мультипротокольного прокси (RTSP, RTMP, HLS, WebRTC, SRT, WebTransport).
Однако, если MediaMTX создавался как универсальный маршрутизатор сетевых стримов, то RUSEON Core изначально проектировался под высоконагруженное видеонаблюдение (CCTV), гарантированную сохранность 24/7 архивов при сбоях и минимальную нагрузку на дисковый I/O в Linux.
🏗 Ключевые архитектурные различия
1. Подсистема записи: Direct I/O fMP4 против стандартного MP4
- MediaMTX: Запись в MP4 ведется через стандартные операции записи Go (
os.File.Write). При 50+ камерах ядро Linux забивает всю оперативную память "грязными страницами" (Page Cache), вызывая дисковые зависания (I/O wait) и аварийные завершения процесса по Out-Of-Memory (OOM Killer). - RUSEON Core: Запись ведется в фрагментированный MP4 (
fMP4) с вызовом системного вызоваPOSIX_FADV_DONTNEEDпосле каждого сегмента. RUSEON принудительно указывает ядру Linux выгружать записанные видеоблоки из ОЗУ. Память остается строго плоской (~180MB) даже при непрерывной записи 100 камер 24/7.
2. Защита от сбоев: Восстановление незавершенных записей
- MediaMTX: В стандартном MP4 служебный заголовок (
moovatom) записывается в конец файла при его корректном закрытии. Если выключилось питание или сервер экстренно перезагрузился, незакрытый MP4-файл оказывается битым и не открывается плеерами. - RUSEON Core: RUSEON пишет независимые фрагменты
moof+mdat. Каждый фрагмент самодостаточен. При внезапном падении питания файл воспроизводится с точностью до последней миллисекунды перед сбоем без какого-либо восстановления.
3. Нагрузка на процессор: Ленивый муксинг HLS (Lazy Muxing)
- MediaMTX: Нарезает и муксит HLS-сегменты постоянно, пока идет поток с камеры.
- RUSEON Core: Использует Lazy HLS с таймером-вотчдогом на 15 секунд. Если в данный момент никто не смотрит камеру по HLS, муксер спит. Как только приходит веб-клиент, RUSEON моментально забирает последние 4 секунды из кольцевого буфера в RAM. Это экономит до 80% CPU на простаивающих камерах.
4. База данных: Встроенная BadgerDB против текстового YAML
- MediaMTX: Использует статический файл
mediamtx.ymlи структуры данных в оперативной памяти. - RUSEON Core: Включает встроенную LSM-базу данных BadgerDB на чистом Go. Обеспечивает ACID-транзакции, хранение токенов, тегов камер и автоматические ежедневные бэкапы без необходимости ставить PostgreSQL или Redis.
⚡ Сравнение производительности
| Показатель | RUSEON Core | MediaMTX |
|---|---|---|
| Максимум камер на 1 узел | 100+ Потоков | ~40-60 Потоков |
| RPS на отдачу (WHEP/HLS) | ~7 000 RPS | ~2 500-3 500 RPS |
| Задержка p95 | 1.7 мс | ~5-12 мс |
| Потребление RAM (100 камер) | ~180 MB - 350 MB | ~1.2 GB - 3.5 GB (Page Cache) |
| Встроенный Web UI | React 19 Glassmorphism | Отсутствует |
🚀 Итог: Что выбрать?
- Выбирайте MediaMTX, если: Вам нужен гибкий универсальный конвертер протоколов (например, принять RTMP и отдать в SRT/WebTransport) и не требуется встроенное хранение архивов и веб-кабинет.
- Выбирайте RUSEON Core, если: Вы строите систему видеонаблюдения, корпоративный NVR или видеоаналитику для AI, где важна сохранность архива при сбоях, защита от вымывания памяти Linux и моментальный WebRTC.