- RTSP сервер своими руками
- Happytimesoft
- Products >> RTSP Server (Current version 5.4, updated March 23, 2021)
- RTSP Server
- Key features
- Function chart
- Data pusher
- RTSP over HTTP
- RTSP over Websocket
- Support for multiple platforms
- Helps you host an RTSP server on your computer without effort
- Version limitation
- Инструкция по openRTSP — клиент RTSP для приёма и записи потокового медиа
- Программа для подключения и записи видео с IP камер (протокол RTSP)
- Простой запуск
- Воспроизведение без получения
- Опции продолжительности воспроизведения
- Потоковая передача сеансов с контролем доступа
- Вывод файла в формате «.mov», «.mp4» или «.avi»
- Периодический вывод файла
- Опции ‘Trick play’
RTSP сервер своими руками
Ковырял, ковырял задачу, поставленную для организации домашнего видеонаблюдения без задержек, не выковырял! Сутки убил на запуск ffserver+ffmpeg+ffplay или mplayer — ничего не вышло, сервер тупо не отдавал ничего. Тестовые примеры live555 разобрал — аналогично. Вроде и строки в выхлоп пишет, как что можно забрать, но нет результата ни с mplayer, ни с ffplay. VLC вообще отказался работать без поддержки, т.е. в связке «VLC wrapper пишет в файл, DSS отдает в сеть» все работает, ffplay даже показывает, но главная задача не выполняется: идет задержка, тормозящая воспроизведение на пять секунд, а сколько кадров теряется. Снизил битрейт, облегчил транскодировку — нуль эмоций, но тут уже возможен челофактор, я сплю на клаве уже и сеть не проверяю и выхлоп не читаю.
Так вот, из того, что не пробовал — gstreamer с кучей примеров в сети как поднять свой RTSP сервер и не мучаться. Есть ли у вас опыт его удачного расковыривания?
И напоследок: по UDP, как понял ТС, можно тупо кидать информацию, не заботясь о том, как ее принял клиент. Допустим, я кодирую поток с камеры в любой читаемый формат, и. . в теории, как-то, слушаю порт, отдавая подключившемуся этот файл? Вот тупо нужно слать видео, не заботясь о ресивере, а как сделать — представить не могу. Подскажите, ребяты? Спасибо за поддержку!
Телепатирую. Значит идёт внешний поток с 9000 камер, обрабатывается и отдаётся 9000 клиентам через вшивую 10/100Мбит сетевушку, расположенную через 9000 сетевых экранов?
Аргументирую: стоит плата захвата вселеннс 16 композитными входами, ну и одна вебка для проверки валяется. Камер у меня две, а хочется хотя бы одну в RTSP запихать. Ничего более не обрабатывается и не шлется — до запуска Дарвина RTSP сервера не работали, присылали ошибки, забывали порты открывать или валились без особых дебаг мэсаг. VLC, так нахваливаемый многими ну вот не завелся ни по какому мануалу, только в качестве прослойки для дарвина. Сетевушка говно, но свитч еще хуже — аппаратно перезагружаю после суток издевательств. Экранов нет, все прозрачно, но ноут-приемник за вафлей, исправлю, проверю
И напоследок: по UDP, как понял ТС, можно тупо кидать информацию, не заботясь о том, как ее принял клиент. Допустим, я кодирую поток с камеры в любой читаемый формат, и. . в теории, как-то, слушаю порт, отдавая подключившемуся этот файл? Вот тупо нужно слать видео, не заботясь о ресивере,
На сервере отправляешь поток с камеры:
10 сек. Кэш в mplayer отключил — не показывает(как и с ним, смотрел в ffplay). Адрес 127.0.0.1, видео с UVC камеры ноута. Задержка, задержка везде.
mplayer не воспроизводит? Не может быть! Что пишет?
ffplay я не пользуюсь, но видел. В начале он анализирует поток: определяет параметры, и даже длительность потока пытается узнать. Это вносит задержку. Нужно уменьшить время анализа, ищи опции analyzeduration или probesize.
Для справки. У ffplay качество картинки хуже mplayer. Наслаждаться картинкой рекомендуют в mplayer.
С опцией -nocache аналогично — можно кофе попить, фильм скачать и радио послушать, все равно не дождешься окошка с видео.
Happytimesoft
Products >> RTSP Server (Current version 5.4, updated March 23, 2021)
RTSP Server
Release Version Price : $298
Source Code Price : $998
Key features
Support for a variety of audio and video files
Support streaming video from camera and live screen
Support streaming audio from audio devices
Support streaming H265, H264, MP4, MJPEG video streams
Support streaming G711, G722, G726, AAC, OPUS audio streams
Support for configuring audio and video output parameters
Support media proxy, include rtsp,rtmp and http mjpeg stream
Support audio back channel
Support RTSP over HTTP/HTTPS function
Support RTSP over websocket function
Support RTP multicast function(the same rtsp url sessions use the same multicast address and port)
Support RTSP push function
Support RTP over UDP, RTP over TCP data push
Support ONVIF audio/video playback function
With automatic transcoding
Small size for embedded development
Multi-threaded processing, less resource usage
Function chart
Data pusher
Data pusher means that RTSP server receives external data sources and then sends them out as RTSP streams.
The data pusher support TCP, UDP and RTSP mode.
Audio and video data are packaged and sent in RTP format.
If you use TCP or UDP mode data push, you need to add
tag in the rtsp server configuration file, specify the push audio and video parameters and push port, etc.
If you use RTSP mode to push data, no configuration is required. The url suffix of the pushed RTSP address can be any legal string.
If it is RTSP mode, it supports standard RTSP push stream, such as FFMPEG rtsp pusher.
FFMPEG rtsp over UDP:
ffmpeg -re -i test.mp4 -vcodec libx264 -acodec copy -preset ultrafast -f rtsp rtsp://yourip/pusher
FFMPEG rtsp over TCP:
ffmpeg -re -i test.mp4 -vcodec libx264 -acodec copy -preset ultrafast -f rtsp -rtsp_transport tcp rtsp://yourip/pusher
RTSP over HTTP
The key of RTSP over HTTP is to allow RTSP packets to communicate via HTTP port.
We know that the standard port of RTSP is 554, but due to various security policy configurations such as firewalls, there may be restrictions when the client accesses port 554, which prevents the normal transmission of RTSP packets. But the HTTP port (port 80) is generally open, so there is the idea of letting RTSP packets pass through port 80, namely RTSP over HTTP
RTSP over Websocket
First establish an HTTP connection, and then upgrade to the websocket protocol,RTSP over websocket protocol upgrade process:
C—>S:
GET /websocket HTTP/1.1
Host: 192.168.3.27
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: KSO+hOFs1q5SkEnx8bvp6w==
Origin: http://192.168.3.27
Sec-WebSocket-Protocol: rtsp.onvif.org
Sec-WebSocket-Version: 13
S—>C:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: G/cEt4HtsYEnP0MnSVkKRk459gM=
Sec-WebSocket-Protocol: rtsp.onvif.org
Sec-WebSocket-Version: 13
After the protocol upgrade is successful, perform standard rtsp protocol exchange, and send and receive data through websocket connection.
Support for multiple platforms
RTSP server source code is written in C/C++ language
Support Windows platform
Support Linux / UNIX platform
Support Android platform
Support iOS / MAC platform
Support embedded platforms
Helps you host an RTSP server on your computer without effort
Happytime RTSP Server’s sole purpose is to help you host a server on your computer that allows you to broadcast various multimedia streams. Running the executable automatically starts the server and provides you with brief instructions on how to play a stream from an external location.
This application features support for various audio and video documents, camera device, live screen and audio device. Therefore, you are provided with multiple possibilities regarding file compatibility. However, the files you want to access via streaming need to be in the same directory as the server executable.
Version limitation
The demo version supports up to 4 concurrent streams.
The release version supports up to 100 concurrent streams
Инструкция по openRTSP — клиент RTSP для приёма и записи потокового медиа
Программа для подключения и записи видео с IP камер (протокол RTSP)
openRTSP — это программа с интерфейсом командной строки, которую можно использовать для открытия, потоковой передачи, приёма и (необязательно) записи медиапотоков, указанных в URL-адресе RTSP, т. е. URL-адресе, который начинается с rtsp://
Как установить openRTSP. Как установить LIVE555 Streaming Media
Программа openRTSP является частью пакета LIVE555 Streaming Media, поэтому для её установки, нужно установить набор программ LIVE555.
В Debian, Linux Mint, Kali Linux, Ubuntu и их производных это можно сделать командой:
В Arch Linux и производных для установки выполните команду:
В других дистрибутивах попробуйте данный поискать пакет по ключевым словам «livemedia» и «live-media». Если его нет, то вы можете скомпилировать программу из исходного кода. Для этого выполните команды:
Теперь исполнимый файл openRTSP находится в папке testProgs:
Простой запуск
Самый простой способ запустить эту программу:
где 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, иначе выходной файл не будет записан должным образом.
Периодический вывод файла
Если задана опция «-P ИНТЕРВАЛ-В-СЕКУНДАХ», то «openRTSP» будет выводить новый файл каждые ИНТЕРВАЛ-В-СЕКУНДАХ секунд. (Имя каждого выходного файла будет включать временной диапазон (в секундах), который он представляет.)
Эту опцию также можно использовать с опциями «-q», «-4» и «-i» (для вывода файлов «.mov», «.mp4» и «.avi» соответственно). В этом случае выходные файлы будут записаны отдельно, а не в stdout.
Опции ‘Trick play’
Серверы RTSP могут дополнительно поддерживать операции «специализированного воспроизведения» в потоке — в частности, возможность поиска определённого времени в потоке и/или возможность воспроизведения потока в ускоренном, медленном или обратном воспроизведении.
Используйте параметр «-s НАЧАЛЬНОЕ-ВРЕМЯ», чтобы запросить запуск потока на второй отметке НАЧАЛЬНОЕ-ВРЕМЯ (по умолчанию: 0,0). Используйте параметр «-z СКОРОСТЬ», чтобы запросить ускоренное воспроизведение вперёд (СКОРОСТЬ > 1.0), медленное воспроизведение (0