ZaLinux.ru

Инструкция по openRTSP — клиент RTSP для приёма и записи потокового медиа

Программа для подключения и записи видео с IP камер (протокол RTSP)

openRTSP — это программа с интерфейсом командной строки, которую можно использовать для открытия, потоковой передачи, приёма и (необязательно) записи медиапотоков, указанных в URL-адресе RTSP, т. е. URL-адресе, который начинается с rtsp://

Как установить openRTSP. Как установить LIVE555 Streaming Media

Программа openRTSP является частью пакета LIVE555 Streaming Media, поэтому для её установки, нужно установить набор программ LIVE555.

В Debian, Linux Mint, Kali Linux, Ubuntu и их производных это можно сделать командой:

sudo apt install livemedia-utils

В Arch Linux и производных для установки выполните команду:

sudo pacman -S live-media

В других дистрибутивах попробуйте данный поискать пакет по ключевым словам «livemedia» и «live-media». Если его нет, то вы можете скомпилировать программу из исходного кода. Для этого выполните команды:

wget http://www.live555.com/liveMedia/public/live555-latest.tar.gz
tar xvzf live555-latest.tar.gz
rm live555-latest.tar.gz
cd live
./genMakefiles linux
make

Теперь исполнимый файл openRTSP находится в папке testProgs:

cd testProgs
./openRTSP

Простой запуск

Самый простой способ запустить эту программу:

openRTSP URL

где URL - это URL-адрес RTSP для открытия (т. е. начинающийся с «rtsp://»). Программа откроет указанный URL (используя команду RTSP «DESCRIBE»), получит описание SDP сеанса, а затем для каждой аудио/видео подсессии, чей формат полезной нагрузки RTP она понимает, запустит подсессии командами «SETUP» и «PLAY».

Полученные данные для каждой части записываются в отдельный выходной файл, названный в соответствии с его типом MIME. Например, если сеанс содержит аудиоподсекцию MPEG-1 или 2 (тип полезной нагрузки RTP 14), например, MP3, и видеоподсекцию MPEG-1 или 2 (полезная нагрузка RTP 32), то данные каждой подсессии будут извлечены из входящих пакетов RTP и записаны в файлы с именами «audio-MPA-1» и «video-MPV-2» (соответственно). (Затем вам, вероятно, потребуется переименовать эти файлы — присвоив им соответствующее расширение имени файла (например, «.mp3» и «.mpg») - чтобы иметь возможность воспроизводить их с помощью обычных медиаплееров.)

Вы можете использовать опцию «-F ПРЕФИКС-ИМЕНИ-ФАЙЛА», чтобы добавить префикс к имени файла, который записывается для каждой части. (Это может быть полезно, если вы запускаете «openRTSP» несколько раз в одном каталоге для чтения данных из разных сеансов RTSP.)

Извлечение одного потока

Чтобы записать только аудиопоток из сеанса, используйте параметр командной строки «-a». (Точно так же, чтобы записать только видеопоток, используйте параметр «-v».) В этом случае выходной аудиопоток (или видео) будет записан в 'stdout', а не в файл (если не указана опция «-P ИНТЕРВАЛ-В-СЕКУНДАХ» (об этом ниже).

Менее подробный диагностический вывод

По умолчанию программа распечатывает (в stderr) каждый полный запрос и ответ RTSP. Для менее подробного вывода используйте параметр «-V» (верхний регистр).

Воспроизведение без получения

Если вы хотите, чтобы программа воспроизводила сеанс RTSP, но не принимала его на самом деле, вы можете сделать это, указав программе параметр «-r» («не получать»). Это полезно, если у вас есть отдельное приложение (работающее на том же хосте), которое фактически принимает входящие медиа-сеансы. (Обратите внимание, что это отдельное принимающее приложение также должно отправлять обратно отчёты о приёме RTCP, чтобы гарантировать, что время сеанса не истечёт.)

Если вы используете опцию «-r» для воспроизведения одноадресного сеанса, вы, вероятно, также захотите использовать опцию «-p НАЧАЛЬНЫЙ-НОМЕР-ПОРТА». Эта опция сообщает программе, какие номера клиентских портов использовать в командах RTSP «SETUP», т. е. какие порты RTP/RTCP сервер должен отправлять. (Без опции «-r» программа сама принимает потоки и использует для этого свои собственные временные номера портов.) НАЧАЛЬНЫЙ-НОМЕР-ПОРТА должен быть чётным числом.

Например, если сеанс RTSP состоит из части аудио и видео (перечисленных в этом порядке в возвращённом описании SDP), то "-p 6666" приведёт к тому, что порты 6666 и 6667 будут использоваться для части аудио (6666 для RTP ; 6667 для RTCP) и порты 6668 и 6669, которые будут использоваться для подсессии видео (6668 для RTP; 6669 для RTCP).

(Если вы используете параметр «-r» для воспроизведения сеанса многоадресной рассылки, вам, вероятно, также не понадобится использовать опцию «-p НАЧАЛЬНЫЙ-НОМЕР-ПОРТА», потому что описание SDP для сеансов многоадресной рассылки обычно включает номер порта для использования.)

Опции продолжительности воспроизведения

Если описание SDP (с сервера RTSP) содержит атрибут «a=range:npt= …», определяющий продолжительность потока, то программа закроет сеанс и выйдет вскоре после этого (по умолчанию через 5 секунд после того, как это время истекает).

Вы можете изменить эту продолжительность, используя опцию «-d ДЛИТЕЛЬНОСТЬ». Если ДЛИТЕЛЬНОСТЬ положительна, это общее количество секунд потока, которое будет воспроизведено перед закрытием сеанса и выходом. Если ДЛИТЕЛЬНОСТЬ отрицательна, то -ДЛИТЕЛЬНОСТЬ даёт количество дополнительных секунд для задержки после времени, указанного в атрибуте SDP «a=range». (Как отмечалось выше, значение по умолчанию для этого дополнительного времени составляет 5 секунд.)

Например, если описание SDP содержит «a=range:npt=0-25», то «-d 10» означает «воспроизвести поток(и) в течение 10 секунд, затем выйти», а «-d -10» означает «воспроизвести поток(и) в течение 35 секунд, затем выйти».

Вы также можете использовать опцию «-D МАКСИМАЛЬНЫЙ-РАЗРЫВ-МЕЖДУ-ПАКЕТАМИ», чтобы запросить завершение работы программы, если в течение периода не менее МАКСИМАЛЬНЫЙ-РАЗРЫВ-МЕЖДУ-ПАКЕТАМИ секунд не было получено новых входящих пакетов RTP (т. е. данных). Эта опция полезна, если вы запускаете программу автоматически (например, из сценария) и хотите учесть возможность неожиданной остановки серверов. (Обратите внимание, что «-d» и «-D» это разные параметры, и оба могут использоваться одновременно.)

Однако обратите внимание, что если программа получает пакет RTCP «BYE» от источника — для каждого потока в сеансе — тогда программа закроет сеанс и выйдет немедленно, независимо от использования «-d» и/или опции «-D».

Вы также можете использовать опцию «-c» для непрерывного воспроизведения сеансов мультимедиа. То есть по истечении времени окончания программа запускается заново, выдавая ещё один набор запросов «PLAY». (Обратите внимание: если вы получаете данные (т.е. вы не используете опцию «-r»), это означает, что вы получите несколько копий данных в выходных файлах.)

Обратите внимание, что вы можете комбинировать «-c» с «-d ДЛИТЕЛЬНОСТЬ» и/или «-D МАКСИМАЛЬНЫЙ-РАЗРЫВ-МЕЖДУ-ПАКЕТАМИ». Так, например, «-c -d 10» означает «воспроизвести поток(и) в течение 10 секунд, затем вернуться и воспроизвести их снова в течение ещё 10 секунд и т. д. и т. д.»

Потоковая передача сеансов с контролем доступа

Некоторые серверы RTSP требуют аутентификации пользователя (с помощью имени и пароля) перед потоковой передачей сеанса. Для потоковой передачи такого сеанса используйте параметр «-u ПОЛЬЗОВАТЕЛЬ ПАРОЛЬ». (Чтобы указать пустой пароль, используйте "" вместо ПАРОЛЬ.) Программа аутентифицируется с использованием «дайджест-аутентификации» RTSP; пароль не будет отправлен в открытом виде по сети.

В качестве альтернативы вы можете попробовать включить имя пользователя и пароль в URL-адрес, например: «rtsp://ПОЛЬЗОВАТЕЛЬ:ПАРОЛЬ@ХОСТ:ПРОЧЕЕ». (Однако в этом случае пароль будет отправлен в открытом виде по сети. Кроме того, не все серверы будут принимать этот тип URL-адреса.)

Вывод файла в формате ".mov", ".mp4" или ".avi"

Используйте параметр «-q» для вывода полученных данных на стандартный вывод в виде файла Apple QuickTime в формате «.mov». Каждая полученная часть будет иметь свой собственный трек в выходном файле.

Аналогично, опция «-4» создаёт файл в формате .mp4 (то есть MPEG-4).

В настоящее время эти параметры полностью поддерживаются только для ограниченного числа кодеков. Для тех кодеков, которые не полностью поддерживаются, программа по-прежнему сохранит все полученные данные в дорожке фильма, но будет использовать фиктивный атом мультимедийных данных (названный «????») в описании образца. (Эта дорожка также будет отключена.) Прежде чем вы сможете воспроизвести такую дорожку, вам необходимо отредактировать файл.

Если сеанс содержит часть видео, вы также должны использовать параметры «-w ШИРИНА», «-h ВЫСОТА» и «-f ЧАСТОТА», чтобы указать ширину и высоту (в пикселях), и частоту кадров (в секунду) соответствующей видеодорожки. (Если эти параметры опущены, используются значения ширина = 240 пикселей; высота = 180 пикселей; частота кадров = 15). Эти значения важны; если они неверны, ваш файл может вообще не воспроизводиться!

В качестве альтернативы, если описание SDP сеанса содержит атрибут уровня мультимедиа «a=x-dimensions: ШИРИНА,ВЫСОТА», то вместо этого будут использоваться эти значения (в этом случае вам не нужно использовать «-w» и «-h»). Точно так же, если описание SDP сеанса содержит атрибут уровня мультимедиа «a=x-framerate: ЧАСТОТА», то вместо этого будет использоваться это значение (в этом случае вам не нужно использовать опцию «-f»).

Если полученный файл фильма QuickTime содержит несинхронизированные аудио- и видеодорожки, то вы можете использовать параметр «-y», чтобы попытаться создать синхронизированные аудио/видеодорожки. (Этот параметр работает путём прослушивания пакетов RTCP "Sender Report", содержащих информацию о синхронизации времени — для каждого потока. Некоторые исходные несинхронизированные данные могут быть отброшены.)

Параметр «-H» также создаёт QuickTime 'hint track' для каждой аудио- или видеодорожки. Это полезно, если вы позже захотите стримить получившийся файл ".mov" или ".mp4".

Примечание: поддержка openRTSP для создания файлов формата QuickTime весьма ограничена. В настоящее время поддерживается только звук PCM (u-law и a-law), MPEG-4, GSM и QCELP (также известный как PureVoice), и только MPEG-4, H.263/H.263+ и H.264 видео поддерживается. (Кроме того, для создания файлов формата QuickTime с подсказками звук QCELP в настоящее время не поддерживается.)

Параметр «-i» создаёт файл в формате .avi. (Эта функция поддерживается не полностью. Поддерживается видео MPEG-1, 2 или 4, JPEG и H.263, а также необработанный звук PCM или u-law. Однако MPEG и другие аудиокодеки ещё не поддерживаются.)

Важное примечание: если вы выводите файл формата «.mov», «.mp4» или «.avi», вы должны позволить «openRTSP» работать до конца, или же завершить его чисто, сигнализировав SIGHUP или SIGUSR1. Вы не должны завершать его, используя Ctrl+c, иначе выходной файл не будет записан должным образом.

Связанная статья: Как записать видео с IP камеры (RTSP поток)

Периодический вывод файла

Если задана опция «-P ИНТЕРВАЛ-В-СЕКУНДАХ», то «openRTSP» будет выводить новый файл каждые ИНТЕРВАЛ-В-СЕКУНДАХ секунд. (Имя каждого выходного файла будет включать временной диапазон (в секундах), который он представляет.)

Эту опцию также можно использовать с опциями «-q», «-4» и «-i» (для вывода файлов «.mov», «.mp4» и «.avi» соответственно). В этом случае выходные файлы будут записаны отдельно, а не в stdout.

Опции 'Trick play'

Серверы RTSP могут дополнительно поддерживать операции «специализированного воспроизведения» в потоке — в частности, возможность поиска определённого времени в потоке и/или возможность воспроизведения потока в ускоренном, медленном или обратном воспроизведении.

Используйте параметр «-s НАЧАЛЬНОЕ-ВРЕМЯ», чтобы запросить запуск потока на второй отметке НАЧАЛЬНОЕ-ВРЕМЯ (по умолчанию: 0,0). Используйте параметр «-z СКОРОСТЬ», чтобы запросить ускоренное воспроизведение вперёд (СКОРОСТЬ > 1.0), медленное воспроизведение (0 < СКОРОСТЬ < 1.0) или обратное воспроизведение (СКОРОСТЬ < 0.0). (Значение по умолчанию 1.0: нормальное воспроизведение.)

Важно отметить, что многие, если не большинство серверов RTSP не поддерживают операции «специализированного воспроизведения» или могут поддерживать их только для некоторых типов носителей. Фактические НАЧАЛЬНОЕ-ВРЕМЯ и СКОРОСТЬ, выбранные сервером, будут показаны в ответе сервера на команду RTSP «PLAY».

Полный список опций

Это краткое описание опций для команд openRTSP и playSIP.

-4

вывести файл в формате '.mp4' (в 'stdout', если также не задана опция "-P ИНТЕРВАЛ-В-СЕКУНДАХ")

-a

воспроизводить только аудиопоток (в 'stdout', если также не задана опция "-P ИНТЕРВАЛ-В-СЕКУНДАХ")

-A НОМЕР КОДЕКА

укажите номер статического формата полезной нагрузки RTP аудиокодека для запроса с сервера (только "playSIP")

-b РАЗМЕР БУФЕРА

изменить размер буфера выходного файла

-B РАЗМЕР БУФЕРА

изменить размер входного буфера сетевого сокета

-c

воспроизводить непрерывно

-C

явно запрашивать многоадресный поток, даже если в ответе сервера «DESCRIBE» не указан многоадресный адрес. (Обратите внимание, что не все серверы поддерживают это.) (Только "openRTSP")

-d ДЛИТЕЛЬНОСТЬ

укажите явную продолжительность

-D МАКСИМАЛЬНЫЙ-РАЗРЫВ-МЕЖДУ-ПАКЕТАМИ

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

-E ПОЛНОЕ ВРЕМЯ

запросить, чтобы сервер завершил потоковую передачу в указанное абсолютное время (формат: «ГГГГММДДТЧЧММССЗ» или «ГГГГММДДТЧЧММСС.долиZ») (используется только с -U АБСОЛЮТНОЕ-ВРЕМЯ)

-f ЧАСТОТА

укажите частоту кадров видео (используется только с "-q", "-4" или "-i")

-F ПРЕФИКС ФАЙЛА

укажите префикс для каждого имени выходного файла

-g USER-AGENT

укажите имя пользовательского агента для использования в исходящих запросах

-h ВЫСОТА

укажите высоту видеоизображения (используется только с "-q", "-4" или "-i")

-H

выводит "подсказку" QuickTime для каждой аудио/видеодорожки (используется только с "-q" или "-4")

-i

вывести файл в формате '.avi' (в 'stdout', если также не задана опция "-P ИНТЕРВАЛ-В-СЕКУНДАХ")

-I ИНТЕРФЕЙС-ИЛИ-IP

указать конкретный сетевой интерфейс для получения данных

-k ПОЛЬЗОВАТЕЛЬ ПАРОЛЬ

укажите имя пользователя и пароль, необходимые для аутентификации входящей команды «REGISTER» (используется только с «-R»)

-K

Периодически отправляйте команду RTSP «OPTIONS», чтобы поддерживать соединение. (Это полезно для серверов с ошибками, которые вместо этого не слушают наши периодические пакеты RTCP "RR".)

-l

попытаться компенсировать потерю пакетов (используется только с "-q", "-4" или "-i")

-m

выводить каждый входящий кадр в отдельный файл

-M ПОДТИП MIME

укажите подтип MIME динамического формата полезной нагрузки RTP, который аудиокодек запрашивает у сервера (только "playSIP")

-n

получать уведомление, когда начинают поступать пакеты данных RTP

-o

запросить возможные параметры команды сервера, не отправляя «DESCRIBE» (только «openRTSP»)

-O

не запрашивать возможные команды сервера; просто отправить «DESCRIBE» (только «openRTSP»)

-p НАЧАЛЬНЫЙ-ПОРТ

укажите номер(а) клиентского порта

-P ИНТЕРВАЛ-СЕКУНДЫ

записывать новые выходные файлы каждые ИНТЕРВАЛ-В-СЕКУНДАХ секунд

-q

вывести файл формата QuickTime '.mov' (в 'stdout', если также не задана опция «-P ИНТЕРВАЛ-В-СЕКУНДАХ»)

-Q

выводить статистику QOS о потоке данных (при выходе из программы)

-r

воспроизводить потоки RTP, но не получать их самостоятельно

-R (или -R ПОРТ)

ожидать входящей команды «REGISTER» с указанием URL «rtsp://» для воспроизведения. Этот параметр используется вместо URL-адреса «rtsp://» в командной строке. (только "openRTSP")

-s НАЧАЛО

запросить у сервера поиск указанного времени (в секундах) перед потоковой передачей

-S БАЙТЫ-СДВИГА

предполагать простой формат полезной нагрузки RTP (пропуск специального заголовка указанного размера)

-t

передавать данные RTP/RTCP через TCP, а не через (обычный) UDP. (только "openRTSP")

-T ПОРТ

как "-t", за исключением использования туннелирования RTSP через HTTP. (только "openRTSP")

-u ПОЛЬЗОВАТЕЛЬ ПАРОЛЬ

укажите имя пользователя и пароль для дайджест-аутентификации

-U ПОЛНОЕ-ВРЕМЯ

запросить у сервера поиск указанного абсолютного времени (формат: «ГГГГММДДТЧЧММССЗ» или «ГГГГММДДТЧЧММСС.доляZ») перед потоковой передачей

-v

воспроизводить только видеопоток (в 'stdout', если также не задана опция «-P ИНТЕРВАЛ-В-СЕКУНДАХ»)

-V

печатать менее подробный диагностический вывод

-w ШИРИНА

укажите ширину видеоизображения (используется только с "-q", "-4" или "-i")

-y

попробовать синхронизировать аудио и видео треки (используется только с "-q" или "-4")

-z СКОРОСТЬ

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

Полезные ссылки:

Рекомендуемые статьи:

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *