Перейти к основному содержимому

03 Протоколы и программные инструменты

1. Зачем это знать

03-04-03

В лабораторных работах курса вы будете использовать несколько программных инструментов для работы с аудио‑ и видеопотоками: ONVIF Device Manager, OBS Studio, FFmpeg и GStreamer.
Все они не просто «проигрывают видео», а активно используют медиапротоколы — специальные сетевые правила и форматы, по которым передаётся видео и звук между устройствами и программами.

Важно понимать:

  • каждый инструмент умеет принимать (вход) и отправлять (выход) медиа по сети;
  • для этого используются разные протоколы (RTSP, RTMP, SRT, HLS, NDI и др.);
  • типичные операции, которые вы будете выполнять:
    захват → обработка / перекодирование → отправка (рестриминг).

Далее разберём, как это выглядит в каждом инструменте и какие задачи вы будете решать.


2. OBS Studio: универсальный «микшер» для приёма и отправки потоков

2.1. OBS Studio как центр сбора и выдачи видео

OBS Studio — это приложение, которое часто используют стримеры, студии и учебные заведения. Его основная роль — быть видеомикшером и энкодером:

  • оно собирает разные источники видео и аудио (камеры, экраны, медиафайлы, сетевые потоки);
  • позволяет комбинировать их (накладывать текст, логотипы, менять сцены);
  • кодирует результат в нужный формат и отправляет «наружу» — в Интернет или локальную сеть.

С точки зрения нашего курса важно, что OBS:

  • умеет принимать видеопотоки с использованием медиапротоколов;
  • умеет отправлять сформированный поток с использованием других протоколов.

2.2. Источники для OBS: RTSP, NDI и локальные устройства

OBS Studio может принимать видео из нескольких типов источников:

  1. RTSP-камеры
    • RTSP (Real Time Streaming Protocol) — протокол, который часто используют IP‑камеры видеонаблюдения для передачи живого видео.
    • В OBS вы можете добавить сетевой источник и указать RTSP‑URL камеры (например, rtsp://ip-адрес/путь).
    • Результат: OBS получает живое видео с камеры через сеть и может использовать его как часть общей сцены.

::: warn Своими силами OBS не умеет корректно работать с RTSP, но помогает установка плагина GStreamer и добавление источников Gstreamer source с указанием строки в формате GStreamer.

Про то, как работать с этим инструментом, смотрите в теме 7 GStreamer.

:::

  1. NDI-источники
    • NDI (Network Device Interface) — протокол для передачи видео и аудио по локальной сети с низкой задержкой, часто используется внутри студий и продакшен‑среды.
    • В сети могут работать другие компьютеры или камеры, которые выдают NDI‑поток (например, другая машина с OBS или специализированный NDI‑кодер).
    • OBS (с установленным модулем NDI) может обнаружить такие источники и использовать их видеосигнал как обычную камеру.
  2. Локальные устройства
    • Это устройства, подключённые непосредственно к компьютеру: USB‑вебкамеры, HDMI‑платы захвата, микрофоны, экраны мониторов.
    • В этом случае видео не идёт по сети, но логика в OBS такая же: это один из входов, который можно смешивать с сетевыми источниками.

Таким образом, OBS выступает в роли универсального приёмника, объединяя сетевые и локальные видеопотоки.

2.3. Вывод из OBS: RTMP и SRT

После того как OBS собрал и «смонтировал» нужную картинку, его задача — отправить итоговый видеопоток дальше. Для этого чаще всего используется:

  1. RTMP (Real-Time Messaging Protocol)
    • Платформы вроде YouTube, Twitch, VK Видео предоставляют RTMP‑URL и «ключ трансляции».
    • OBS кодирует видео (например, в H.264 + AAC) и отправляет его по RTMP на сервер платформы, откуда оно распространяется зрителям.
  2. SRT (Secure Reliable Transport)
    • В контексте курса вы будете использовать SRT для передачи потока в локальную сеть или между узлами в рамках лабораторной инфраструктуры.
    • OBS может выступать как SRT‑источник, отправляя поток на другой компьютер, сервер или процессинг‑узел.

Ключевой вывод: OBS Studio сочетает разные протоколы:

  • на входе — RTSP, NDI, локальные устройства;
  • на выходе — RTMP, SRT и др.

Это позволяет строить гибкие схемы: например, принимать RTSP с IP‑камеры и отправлять обработанный поток в YouTube по RTMP.


3. FFmpeg: «швейцарский нож» для работы с медиа

::: info С FFMPEG вы знакомы с курса Компьютерная графика и, кто выполнял задачи в онлайн-курсе, вполне освоили этот инструмент. Но если вдруг позабыли, то для полноты картины оставлю это описание:

:::

3.1. Что такое FFmpeg

FFmpeg — это мощный инструмент командной строки для работы с аудио‑ и видеоданными. Его можно рассматривать как конструктор, который:

  • принимает разные типы входов (файлы, устройства, сетевые потоки);
  • может декодировать, перекодировать, фильтровать, изменять формат;
  • выдаёт результат в виде файла или сетевого потока через нужный протокол.

В отличие от OBS, у FFmpeg нет графического интерфейса: вы задаёте все действия в виде команды в терминале. Зато он:

  • очень гибок;
  • легко автоматизируется (скрипты, серверные процессы);
  • широко используется в продакшене и на серверах.

3.2. Входы FFmpeg: RTSP, HLS, локальные файлы и устройства

FFmpeg поддерживает множество типов источников. В рамках курса нам важны следующие:

  1. RTSP-поток
    • FFmpeg может подключаться к IP‑камерам или другим RTSP‑сервером, получать оттуда живое видео и звук.
    • Типичный сценарий: забрать поток с камеры и перекодировать его в другой формат или другой протокол.
  2. HLS-поток
    • HLS (HTTP Live Streaming) — протокол, где видео разбивается на маленькие файлы (сегменты), которые скачиваются по HTTP.
    • FFmpeg может читать HLS‑плейлисты (файл .m3u8), загружать сегменты и собирать из них непрерывный поток или файл.
    • Это полезно, если нужно, например, записать Интернет‑трансляцию или конвертировать её во что‑то ещё.
  3. Локальные файлы
    • Обычные файлы с видео или аудио (MP4, MKV, MOV и т.д.).
    • FFmpeg может использовать их как источник, чтобы потом отправить содержимое в виде сетевого потока (например, по RTMP или SRT).
  4. Локальные устройства
    • Захват с вебкамеры, карт захвата, микрофонов и других устройств, доступных ОС.
    • Это даёт возможность, например, прямо с камеры отправить поток в сеть, минуя графические программы.

3.3. Выходы FFmpeg: RTMP, HLS, SRT, RTP

FFmpeg одинаково гибок и на выходе. Он может выдавать поток в нескольких сетевых форматах:

  1. RTMP
    • Как и в случае с OBS, FFmpeg может выступать как RTMP‑клиент, отправляя поток на стриминговую платформу или собственный RTMP‑сервер.
    • Это часто используют на серверах, где нужно перенаправлять или перекодировать потоки без участия человека.
  2. HLS
    • FFmpeg умеет генерировать HLS‑выход: нарезать видео на сегменты и создавать плейлист .m3u8.
    • В таком виде трансляцию можно отдавать через обычный веб‑сервер (HTTP), и её сможет воспроизводить браузер или проигрыватель.
  3. SRT
    • FFmpeg поддерживает протокол SRT: поток можно отправить на другой узел, где его примет, например, другой FFmpeg или сервер вещания.
    • Это полезно для надёжной передачи между площадками или при построении распределённых систем.
  4. RTP (Real-time Transport Protocol)
    • FFmpeg может упаковывать аудио и видео в RTP и отправлять их по сети.
    • Это часто используется в специализированных системах, где приёмник ожидает RTP‑поток (например, медиасерверы, некоторые профессиональные кодеры/декодеры).

::: info Более детально и глубоко про FFMPEG мы поговорим в теме 6 FFMPEG и в лабораторной работе 1.

:::


4. GStreamer: конструктор медиапайплайнов

4.1. Концепция пайплайна в GStreamer

GStreamer — это фреймворк для построения медиапроцессинга в виде конвейера (pipeline).
Под конвейером понимается цепочка модулей (элементов), через которые последовательно проходит медиа:

  1. элемент‑источник (получает данные);
  2. элементы обработки (фильтры, кодеки, микшеры);
  3. элемент‑приёмник (отправляет или выводит данные).

Каждый элемент выполняет свою задачу, а вы, как автор пайплайна, «собираете» их в нужном порядке. Это немного похоже на электрическую схему, где блоки соединяются проводами.

4.2. Примеры модулей: rtspsrc и srtsink

В контексте медиапротоколов нас интересуют, прежде всего, элементы источников и приёмников, которые работают с сетью.

  1. rtspsrc — источник RTSP-потока
    • Этот элемент подключается к RTSP‑серверу (например, IP‑камере) и получает от него медиаданные.
    • Внутри rtspsrc решает задачи подключения, обмена служебной информацией и получения RTP‑пакетов от камеры.
    • На выходе элемента вы получаете аудио‑ и видеопотоки, которые можно далее декодировать, обрабатывать, показывать или перенаправлять.
  2. srtsink — приёмник для отправки через SRT
    • Элемент, который принимает на вход медиа из пайплайна и отправляет его по протоколу SRT в сеть.
    • Вы задаёте параметры (адрес, порт, режим SRT), и srtsink упаковывает поток в SRT и передаёт его на целевой узел.
    • Это аналог FFmpeg‑команды с SRT‑выходом, но в виде блока внутри GStreamer‑конвейера.

Соединяя rtspsrc и srtsink через соответствующие кодеки и фильтры, вы можете построить, например, конвейер:

RTSP‑камера → декодирование → обработка → кодирование → отправка по SRT

5. Ключевые операции: захват, транскодирование, рестриминг

Все перечисленные инструменты — OBS Studio, FFmpeg и GStreamer — по сути решают три базовые задачи.

5.1. Захват (capture)

Захват — это получение исходного аудио‑ и видеосигнала из какого‑то источника:

  • с IP‑камеры по RTSP;
  • с другого компьютера по NDI;
  • с локальной вебкамеры или HDMI‑карты;
  • из файлов или HLS‑потока.

Пример: OBS добавляет RTSP‑камеру как источник, FFmpeg подключается к RTSP‑URL, GStreamer использует rtspsrc.

5.2. Транскодирование (transcoding)

Транскодирование — это перекодирование медиа:

  • изменение кодека (например, из H.265 в H.264);
  • изменение битрейта (скорости передачи данных);
  • изменение разрешения (Full HD → HD);
  • изменение частоты кадров.

Зачем это нужно:

  • подогнать поток под ограничения сети или платформы;
  • уменьшить нагрузку на каналы связи;
  • обеспечить совместимость с приёмником.

FFmpeg особенно силён в транскодировании, OBS делает это «под капотом», GStreamer позволяет настроить это через элементы кодирования.

5.3. Рестриминг (restreaming)

Рестриминг — это приём потока по одному протоколу и отправка по другому (или тому же, но на другой адрес):

  • RTSP → RTMP (камера → стриминговая платформа);
  • RTSP → SRT (камера → другой узел в локальной сети);
  • HLS → RTP (Интернет‑поток → профессиональная система);
  • файл → RTMP / SRT / RTP (записанное видео → имитация живой трансляции).

Во всех случаях инструменты действуют как промежуточное звено: они принимают медиапоток, при необходимости обрабатывают его и отправляют дальше.

::: info GStreamer мы рассмотрим детально в теме 7 GStreamer и в лабораторной работе 2.

:::