Видеотрансляция с камер на сайт: RTSP → RTMP → HLS

Задача

Нужно было вывести видеонаблюдение на сайт. Камеры отдают RTSP, на вебе нужен HLS: стабильное воспроизведение и запас по числу зрителей.

Схема

Цепочка: Docker + FFmpeg (RTSP → RTMP) → MediaMTX (RTMP → HLS) → плеер на странице по M3U8.

Docker-контейнер с FFmpeg

Обработку потока вынес в контейнер: FFmpeg забирает RTSP с камер и пушит RTMP. На хост не ставится тяжёлый стек кодеков; конфиг и рестарт через Docker. Образ: alekseykrivoshein/mediamtx-rtsp.

MediaMTX

MediaMTX принимает RTMP от FFmpeg и отдаёт HLS. Браузеры и мобильные плееры с HLS работают стабильно; отдельный Flash или WebRTC «просто посмотреть камеру» не нужен.

Плеер на сайте

На фронте: Bradmax Player с HLS и M3U8. Подключается в разметку, работает на десктопе и на телефоне.


Реализация

Запуск контейнера

Образ с Docker Hub уже содержит нужное для RTSP → RTMP:

docker pull alekseykrivoshein/mediamtx-rtsp
docker run -d --name=ffmpeg-rtsp-to-rtmp alekseykrivoshein/mediamtx-rtsp

Контейнер крутит конвертацию; дальше поток забирает MediaMTX.

Настройка MediaMTX

В конфиге MediaMTX важно:

  • RTMP-вход: приём потока от FFmpeg
  • HLS-выход: сегменты и M3U8 для браузера

После старта доступен плейлист, который уже можно отдать плееру.

HLS на странице

Минимальный вариант через video + HLS source (у Bradmax своя инициализация, смысл тот же: URL плейлиста):

<video id="videoPlayer" controls>
   <source src="https://yourserver.com/path/to/playlist.m3u8" type="application/x-mpegURL">
</video>

Пользователь открывает страницу и смотрит live без native-плеера и без установки ПО.


Результат

Схема RTSP → RTMP → HLS закрыла задачу:

  • стабильный просмотр в браузере;
  • управление потоками через контейнеры, без ручной установки FFmpeg на каждый хост;
  • можно масштабировать: больше камер, больше контейнеров или инстансов MediaMTX.

Демо на объекте:

Источники и ссылки


Комментарии загружаются…