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

RTSP

RTSP (Real Time Streaming Protocol) – это прикладной уровень протокола, используемый для управления потоками мультимедиа в реальном времени. Он был стандартизирован IETF в RFC 2326 и является частью семейства протоколов TCP/IP. Протокол позволяет клиенту инициировать и контролировать передачу данных от сервера к клиенту через команды, такие как PLAY, PAUSE, RECORD, SETUP. Сервер может быть IP-камерой, кодером видеосигнала, видеорегистратором, медиа-сервером или другим устройством, поддерживающим RTSP.

Основные особенности:

  • Транспортный уровень: RTSP использует TCP для передачи команд и контроля состояния сессии. Для передачи самого медиапотока может использоваться как RTP/UDP, так и RTP/TCP. При этом, несмотря на кажущуюся логичность использования UDP для передачи медиаданных, стабильные результаты получаются при работе через TCP.
  • Форматы данных: Поддерживает различные форматы видео и аудио потоков, включая H.264, MPEG-4, AAC, MP3 и другие.
  • Коды ответов: Как HTTP, RTSP возвращает коды статуса, такие как 200 OK, 404 Not Found и др., что упрощает обработку ошибок.
  • В отличие от RTMP, где сервером обычно является принимающая сторона, RTSP сервером является источник потока, клиент может выбирать поток на сервере и управлять его воспроизведением. Поэтому RTMP удобен для отправки потоков на видеоплатформы или CDN (отправитель может не иметь "белого" IP адреса), а RTSP -- для работы с камерами в системах видеонаблюдения и видеопроизводстве.

Области применения

С IP камерами и другими устройствами видеонаблюдения:

RTSP широко используется для получения видеопотоков с камер наблюдения. Например, многие современные IP-камеры поддерживают RTSP для передачи видеоданных. Для работы с камерой можно использовать библиотеку OpenCV в Python:

import cv2

# Подключение к камере по RTSP
cap = cv2.VideoCapture("rtsp://username:password@ip_address:554/cam/realmonitor")

while True:
ret, frame = cap.read()

if not ret:
break

# Отображение кадра
cv2.imshow('Video', frame)

if cv2.waitKey(1) & 0xFF == ord('q'):
break

cap.release()
cv2.destroyAllWindows()

Видеорегистраторы и кодеры:

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

ffmpeg -re -i input.mp4 -c copy -f rtsp rtsp://localhost/live/mystream

Здесь input.mp4 – исходный файл, который передается на локальный RTSP-сервер.

Программные микшеры (OBS, VMix):

Программы для создания стриминговых трансляций, такие как OBS Studio и VMix, также могут принимать входные данные через RTSP. Например, в OBS можно добавить источник «Media Source» и указать URL RTSP-потока:

rtsp://example.com/live/mycamera

Но такое подключение вряд ли даст стабильный поток в реальном времени. Чтобы работать с RTSP в реальном времени и стабильно, используйте плагин gstreamer. Вам понадобится умение писать пайплайны gstreamer для корректной работы с потоками.

Работа с GStreamer и FFmpeg:

GStreamer – мощный фреймворк для работы с мультимедийными данными, поддерживает прием и отправку RTSP-потоков. Пример воспроизведения RTSP-потока в GStreamer:

gst-launch-1.0 rtspsrc location="rtsp://example.com/live/mycamera" ! decodebin ! autovideosink

Пример захвата и перекодирования RTSP-потока с использованием FFmpeg:

ffmpeg -i "rtsp://example.com/live/mycamera" -vcodec libx264 -acodec aac output.mp4

Границы применимости:

  • Задержка: Хотя RTSP предназначен для реального времени, задержка между передачей и приемом данных может варьироваться в зависимости от сетевых условий и качества оборудования, но в большой степени она зависит от программ, используемых для кодирования и декодирования.
  • Безопасность: По умолчанию RTSP передает данные без шифрования, поэтому для обеспечения безопасности рекомендуется использовать RTSP поверх TLS (RTSPS).
  • Масштабируемость: При большом количестве клиентов нагрузка на сервер может возрастать, что требует оптимизации и балансировки нагрузки.

Применение RTSP

RTSP -- один из самых используемых протоколов в цифровом видео. Хотя бы потому, что его используют камеры видеонаблюдения, а их -- великое множество в мире. И в этом применении он используется самым корректным образом -- это работа в локальной (или корпоративной) сети, закрытой от лишних глаз. Системы видеонаблюдения в английской терминологии называются CCTV (Closed Circuit TeleVision), они не подразумевают вещания в интернет.
Но у RTSP есть и другое применение, тоже в локальной или распределенной, но связанной через туннели VPN сети: телевизионное видеопроизводство. "Большое" телевидение использует для этого другие технологии (NDI, SMPTE ST 2100), но при работе со сжатыми потоками давно используемый и поддерживаемый множеством устройств и программ протокол RTSP показывает себя хорошо, но нужно уметь работать с ним. Бытующее мнение о том, что потоки RTSP имеют большую задержку или нестабильны, обычно основаны на работе с программами, которые плохо справляются с задачами работы с этими потоками в реальном времени. Например, если вы попытаетесь работать с RTSP в популярном коммерческом видеомикшере VMix, то поток действительно может быть нестабильным. В популярном среди стримеров OBS по умолчанию тоже стабильный результат не получится. Но при грамотном применении gstreamer вместе с OBS мы уже получим вполне стабильный видеокомплекс, работающий на протоколе RTSP, где источниками могут выступать IP камеры и кодеры HDMI/VGA/SDI.

Практика показывает, что при правильном использовании по стабильности работы в локальной сети в реальном времени RTSP показывает лучшие результаты, чем SRT и весьма близок к NDI.

Обращение к серверу

Сервером в RTSP выступает источник потока. Клиент (например, плеер) запрашивает доступные потоки и управляет воспроизведением выбранного потока (см. далее "Команды"). Строка подключения к серверу выглядит по-разному в зависимости от реализации сервера в различном оборудовании или ПО. Вот пример для IP камеры видеонаблюдения Hikvision:

rtsp://admin:12345@192.168.0.64:554/Streaming/Channels/101
  • rtsp - тип используемого протокола
  • admin - имя учетной записи по умолчанию
  • 12345 - пароль используемой учетной записи
  • 192.0.0.64 - IP-адрес камеры
  • 554 RTSP порт камеры по умолчанию (может быть изменен в настройках)

Команды

  • DESCRIBE - запрос описания контента

  • OPTIONS - запрос поддерживаемых методов

  • PLAY - запрос начала вещания контента

  • PAUSE - запрос временной остановки вещания

  • RECORD - запрос на записывание контента сервером

  • REDIRECT - перенаправление на другой контент

  • SETUP - запрос установки транспортного механизма для медиа-контента

  • ANNOUNCE - обновление данных описания контента

  • GET_PARAMETER - запрос указанных параметров у сервера

  • SET_PARAMETER - установка параметров сервера

  • TEARDOWN - остановка потока и освобождение ресурсов

Рисунок 1. Работа протокола RTSP.

Сетевая доступность серверов RTSP

Источник должен быть доступен по IP — нужно иметь публичный/глобальный/внешний адрес в сети. То есть, RTSP-камеры бесполезны, если мы не можем "достучаться" до них по сети.

Например, если такая камера находится в локальной сети, снаружи она доступна только если:

  • На NAT проброшен порт. Network Address Translation — это механизм в сетях TCP/IP, позволяющий изменять IP адрес в заголовке пакета, проходящего через устройство маршрутизации трафика. Принимая пакет от локального компьютера, маршрутизатор смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет.

    Если таких камер несколько, то пробросить придется несколько разных портов.

  • Вы подключаетесь в VPN и образуете тоннель в эту локальную сеть.

Вложения