Создание собственного пайплайна для потоковой передачи живого видео: практическое руководство по FFmpeg и MediaMTX

Проблема: Камера говорит по RTSP, но браузер не может услышать

Предположим, вы хотите отображать живое видео с камер безопасности и IoT-устройств в веб-приложении. Большинство камер передают данные по протоколу RTSP (Real Time Streaming Protocol). Однако браузеры прекратили поддержку RTSP с 2010-х годов. Проще говоря, основная проблема заключается в том, что «язык, на котором говорит камера», и «язык, который понимает браузер», различаются.

Этим переводом занимаются FFmpeg (универсальный инструмент для обработки видео) и MediaMTX (сервер для преобразования протоколов). Сочетание этих двух позволяет создать профессиональный потоковый пайплайн с низкой задержкой.

Объяснение инструмента

FFmpeg: волшебная палочка для преобразования любых форматов видео

Процесс обработки FFmpeg:

  • Демультиплексор: разделение видео и аудио из контейнера
  • Декодировать: преобразовать сжатые данные в необработанные кадры
  • Фильтрация: применение масштаба, цветокоррекции и т.д.
  • Кодирование: сжатие с использованием H.264 или VP9
  • Мультиплекс: упаковка в выходной контейнер

В стриминговых целях FFmpeg работает в качестве входного движка. Он захватывает видео с веб-камеры или файлов, эффективно кодируя его и отправляя на сервер по RTSP или RTMP.

MediaMTX: протокольный хаб с поддержкой нескольких клиентов

FFmpeg имеет одно выходное направление, но MediaMTX может одновременно транслировать нескольким клиентам. Более того:

  • Прием через RTSP/RTMP/WebRTC/HLS
  • Переупаковка для различных клиентов
  • Преобразование RTSP в WebRTC (для воспроизведения в браузере)
  • Аутентификация, балансировка нагрузки, управление клиентами

Всего лишь один бинарный файл и файл конфигурации YAML могут справиться со сложными сценариями, для которых раньше требовалось несколько выделенных серверов.

Этапы реализации

Шаг 1: Установите инструмент

Ubuntu/Debian:

sudo apt update sudo apt install autoconf automake build-essential pkg-config libx264-dev libvpx-dev libfdk-aac-dev git clone ffmpeg CD ffmpeg ./configure --enable-gpl --enable-libx264 --enable-nonfree make -j$(nproc) sudo make install

macOS:

brew install ffmpeg

Виндоус: Скачать с gydan.dev → Распаковать в C:\ffmpeg → Добавить в системный PATH

Установите MediaMTX v1.15.0 (просто с помощью единственного двоичного файла).

Шаг 2: Потоковое видеофайла

создайте mediamtx.yml:

пути: тест_видео: источник: издатель

Запуск MediaMTX:

МедиаMTX mediamtx.yml

Отправка видео по RTSP с помощью FFmpeg:

ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

-re:Сохранение частоты кадров (обязательно для прямой трансляции) -preset fast:баланс скорости кодирования

Проверьте в VLC Media Player: Media → Открыть сетевой поток → rtsp://localhost:8554/test_video

Шаг 3: Включите веб-камеру для прямой трансляции

Виндоус:

ffmpeg -f dshow -rtbufsize 100M -i video=“Встроенная веб-камера” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

macOS:

ffmpeg -f avfoundation -framerate 30 -video_size 1280x720 -i “0” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

Линукс:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam

-tune zerolatency является ключевым моментом. Оптимизация потоковой передачи в реальном времени.

Шаг 4: Воспроизведение в браузере (WebRTC)

обновите mediamtx.yml:

WebRTC: Да webrtcАдрес: :8889 webrtcШифрование: нет webrtcAllowOrigin: '*'

пути: вебкамера: источник: издатель

Перезапустите MediaMTX и откройте http://localhost:8889 в браузере → живое видео будет отображаться в браузере.

Поток данных

  1. Веб-камера → Генерация живых кадров
  2. FFmpeg → Кодировка в H.264 и отправка по RTSP
  3. MediaMTX → Получение RTSP и преобразование в WebRTC
  4. Браузер → Реализация воспроизведения в реальном времени с помощью WebRTC

MediaMTX не перекодирует. Он просто упаковывает H.264 стрим в контейнеры различных протоколов. Поэтому достигается низкая задержка.

Итоги данного раза

Базовый конвейер завершен:

  • FFmpeg и MediaMTX уже установлены
  • Проверка потоковой передачи видеофайлов и веб-камеры
  • Успешное воспроизведение через браузер по WebRTC

Однако есть проблемы с эксплуатацией в производстве:

  • Без аутентификации и безопасности
  • работает только на localhost
  • Поддержка реальных IP-камер не
  • Без обработки ошибок

Во 2 части будет рассмотрено добавление аутентификации, подключение IP-камер и поддержка интернета.

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
Добавить комментарий
Добавить комментарий
Нет комментариев
  • Закрепить