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 - остановка потока и освобождение ресурсов

Сетевая доступность серверов RTSP
Источник должен быть доступен по IP — нужно иметь публичный/глобальный/внешний адрес в сети. То есть, RTSP-камеры бесполезны, если мы не можем "достучаться" до них по сети.
Например, если такая камера находится в локальной сети, снаружи она доступна только если:
-
На NAT проброшен порт. Network Address Translation — это механизм в сетях TCP/IP, позволяющий изменять IP адрес в заголовке пакета, проходящего через устройство маршрутизации трафика. Принимая пакет от локального компьютера, маршрутизатор смотрит на IP-адрес назначения. Если это локальный адрес, то пакет пересылается другому локальному компьютеру. Если нет, то пакет надо переслать наружу в интернет.
Если таких камер несколько, то пробросить придется несколько разных портов.
-
Вы подключаетесь в VPN и образуете тоннель в эту локальную сеть.
Вложения
- image-10-2.png
- image-10.png
- image-11-2.png
- image-11.png
- image-12-2.png
- image-12.png
- image-13.png
- image-14.png
- image-15.png
- image-2-2.png
- image-2-3.png
- image-2-4.png
- image-2-5.png
- image-2.png
- image-3-2.png
- image-3-3.png
- image-3-4.png
- image-3.png
- image-4-2.png
- image-4-3.png
- image-4.png
- image-5-2.png
- image-5.png
- image-6-2.png
- image-6.png
- image-7-2.png
- image-7.png
- image-8-2.png
- image-8.png
- image-9-2.png
- image-9.png
- image.png