rtsp server
rtsp server
systemctl status rtsp-server-perl
/usr/bin/perl /usr/bin/rtsp-server-perl --clientport 554 --serverport 5545 --client_listen_address 127.0.0.1 --source_listen_address 127.0.0.1 --loglevel 3
https://github.com/bluenviron/mediamtx
Репозиторий:
https://github.com/bluenviron/mediamtx/releases
Запуск сервера:
./mediamtx
Конфиг:
/mediamtx.yml
rclone - для коммерческих облачных хранилищ: Синхронизирует файлы, в том числе: S3, FTP, SMB, Google Drive
Конфигурирование облачного хранилища
rclone config
Список доступных аудиокарт:
arecord -L
Перекодировщик текста (смена кодировки)
https://www.urlencoder.org
/usr/bin/perl /usr/bin/rtsp-server-perl --clientport 554 --serverport 5545 --client_listen_address 127.0.0.1 --source_listen_address 127.0.0.1 --loglevel 3
https://github.com/bluenviron/mediamtx
Репозиторий:
https://github.com/bluenviron/mediamtx/releases
Запуск сервера:
./mediamtx
Конфиг:
/mediamtx.yml
rclone - для коммерческих облачных хранилищ: Синхронизирует файлы, в том числе: S3, FTP, SMB, Google Drive
Конфигурирование облачного хранилища
rclone config
Список доступных аудиокарт:
arecord -L
Перекодировщик текста (смена кодировки)
https://www.urlencoder.org
Re: rtsp server
MediaMTX (ранее rtsp-simple-server) - это готовый к использованию и не зависящий от пользователя медиа-сервер реального времени и медиа-прокси, который позволяет публиковать, читать, проксировать и записывать видео- и аудиопотоки. Он задуман как "медиамаршрутизатор", который направляет медиапотоки с одного конца на другой.
1. Живые потоки могут быть опубликованы на сервере с:
2. И может быть прочитан с сервера с помощью:
3. И может быть записана с помощью:
Особенности
Публикация прямых трансляций на сервер
Чтение прямых потоков с сервера
Потоки автоматически преобразуются из одного протокола в другой
Одновременная передача нескольких потоков по отдельным путям
Запись потоков на диск
Воспроизведение записей
Аутентификация пользователей; используйте внутреннюю или внешнюю аутентификацию
Перенаправлять читателей на другие RTSP-серверы (балансировка нагрузки)
Запрос и управление сервером через API
Перезагрузка конфигурации без отключения существующих клиентов (горячая перезагрузка)
Считывать метрики, совместимые с Prometheus
Выполнять хуки (внешние команды) при подключении, отключении, чтении или публикации потоков клиентами.
Совместим с Linux, Windows и macOS, не требует никаких зависимостей или интерпретаторов, это один исполняемый файл
Примечание о rtsp-simple-server
rtsp-simple-server был переименован в MediaMTX. Причина довольно очевидна: этот проект начинался как RTSP-сервер, но превратился в гораздо более универсальный продукт, который больше не привязан к протоколу RTSP. Ничего не изменится в отношении лицензии, возможностей и обратной совместимости.
Оглавление
Установка
Существует несколько способов установки: отдельный двоичный файл, образ Docker, пакет Arch Linux и двоичный файл OpenWrt.
Автономный двоичный файл
Загрузите и извлеките автономный бинарный файл со страницы релиза, соответствующий вашей операционной системе и архитектуре.
Запустите сервер:
./mediamtx
Основные способы использования
Публикация потока. Например, вы можете опубликовать видео/аудиофайл с помощью FFmpeg:
или GStreamer:
Откройте поток. Например, вы можете открыть поток с помощью VLC:
или GStreamer:
или FFmpeg:
1. Живые потоки могут быть опубликованы на сервере с:
2. И может быть прочитан с сервера с помощью:
3. И может быть записана с помощью:
Особенности
Публикация прямых трансляций на сервер
Чтение прямых потоков с сервера
Потоки автоматически преобразуются из одного протокола в другой
Одновременная передача нескольких потоков по отдельным путям
Запись потоков на диск
Воспроизведение записей
Аутентификация пользователей; используйте внутреннюю или внешнюю аутентификацию
Перенаправлять читателей на другие RTSP-серверы (балансировка нагрузки)
Запрос и управление сервером через API
Перезагрузка конфигурации без отключения существующих клиентов (горячая перезагрузка)
Считывать метрики, совместимые с Prometheus
Выполнять хуки (внешние команды) при подключении, отключении, чтении или публикации потоков клиентами.
Совместим с Linux, Windows и macOS, не требует никаких зависимостей или интерпретаторов, это один исполняемый файл
Примечание о rtsp-simple-server
rtsp-simple-server был переименован в MediaMTX. Причина довольно очевидна: этот проект начинался как RTSP-сервер, но превратился в гораздо более универсальный продукт, который больше не привязан к протоколу RTSP. Ничего не изменится в отношении лицензии, возможностей и обратной совместимости.
Оглавление
Установка
Существует несколько способов установки: отдельный двоичный файл, образ Docker, пакет Arch Linux и двоичный файл OpenWrt.
Автономный двоичный файл
Загрузите и извлеките автономный бинарный файл со страницы релиза, соответствующий вашей операционной системе и архитектуре.
Запустите сервер:
./mediamtx
Основные способы использования
Публикация потока. Например, вы можете опубликовать видео/аудиофайл с помощью FFmpeg:
Код: Выделить всё
ffmpeg -re -stream_loop -1 -i file.ts -c copy -f rtsp rtsp://localhost:8554/mystream
Код: Выделить всё
gst-launch-1.0 rtspclientsink name=s location=rtsp://localhost:8554/mystream filesrc location=file.mp4 \
! qtdemux name=d d.video_0 ! queue ! s.sink_0 d.audio_0 ! queue ! s.sink_1
Код: Выделить всё
vLC --network-caching=50 rtsp://localhost:8554/mystream
Код: Выделить всё
gst-play-1.0 rtsp://localhost:8554/mystream
Код: Выделить всё
ffmpeg -i rtsp://localhost:8554/mystream -c copy output.mp4
Re: rtsp server
apt install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-ugly gstreamer1.0-rtsp python3-dev python3-numpy
apt install python3-opencv
Проверить правильность установки OpenCV можно, выполнив команду:
python3 -c 'import cv2; print(cv2.getBuildInformation())'
Проверьте, содержит ли вывод GStreamer: ДА.
Видео можно опубликовать с помощью VideoWriter:
Полученный поток будет доступен по пути /mystream.
apt install python3-opencv
Проверить правильность установки OpenCV можно, выполнив команду:
python3 -c 'import cv2; print(cv2.getBuildInformation())'
Проверьте, содержит ли вывод GStreamer: ДА.
Видео можно опубликовать с помощью VideoWriter:
Код: Выделить всё
from datetime import datetime
from time import sleep, time
import cv2
import numpy as np
fps = 15
width = 800
height = 600
colors = [
(0, 0, 255),
(255, 0, 0),
(0, 255, 0),
]
out = cv2.VideoWriter('appsrc ! videoconvert' + \
' ! video/x-raw,format=I420' + \
' ! x264enc speed-preset=ultrafast bitrate=600 key-int-max=' + str(fps * 2) + \
' ! video/x-h264,profile=baseline' + \
' ! rtspclientsink location=rtsp://localhost:8554/mystream',
cv2.CAP_GSTREAMER, 0, fps, (width, height), True)
if not out.isOpened():
raise Exception("can't open video writer")
curcolor = 0
start = time()
while True:
frame = np.zeros((height, width, 3), np.uint8)
# create a rectangle
color = colors[curcolor]
curcolor += 1
curcolor %= len(colors)
for y in range(0, int(frame.shape[0] / 2)):
for x in range(0, int(frame.shape[1] / 2)):
frame[y][x] = color
out.write(frame)
print("%s frame written to the server" % datetime.now())
now = time()
diff = (1 / fps) - now - start
if diff > 0:
sleep(diff)
start = now
Re: rtsp server
Веб-браузеры
Веб-браузеры могут публиковать поток на сервере с помощью протокола WebRTC. Запустите сервер и откройте веб-страницу:
http://localhost:8889/mystream/publish.
Полученный поток будет доступен по пути /mystream.
Эту веб-страницу можно встроить в другую веб-страницу с помощью iframe:
Для более сложных настроек можно создать и обслуживать пользовательскую веб-страницу, начав с исходного кода страницы публикации.
Веб-браузеры могут публиковать поток на сервере с помощью протокола WebRTC. Запустите сервер и откройте веб-страницу:
http://localhost:8889/mystream/publish.
Полученный поток будет доступен по пути /mystream.
Эту веб-страницу можно встроить в другую веб-страницу с помощью iframe:
Код: Выделить всё
<iframe src="http://mediamtx-ip:8889/mystream/publish" scrolling="no"></iframe>.
Re: rtsp server
По устройству
Обычная веб-камера
Если ОС основана на Linux, отредактируйте файл mediamtx.yml и замените все внутри секции paths на следующее содержимое:
Если ОС - Windows:
Где USB2.0 HD UVC WebCam - это имя веб-камеры, которое можно получить с помощью:
Полученный поток будет доступен по пути /cam.
Камеры Raspberry Pi
MediaMTX поддерживает камеру Raspberry Pi, позволяя передавать высококачественное видео с низкой задержкой любому пользователю и для любых целей. Есть несколько требований:
Сервер должен работать на Raspberry Pi с операционной системой Raspberry Pi OS bullseye или новее. Поддерживаются как 32-битные, так и 64-битные операционные системы.
Убедитесь, что стек устаревших камер отключен. Введите sudo raspi-config, затем перейдите в раздел Interfacing options, включите/выключите поддержку устаревших камер, выберите no. Перезагрузите систему.
Если вы хотите запустить стандартную (не-Docker) версию сервера:
Убедитесь, что установлены следующие пакеты:
libcamera0 (≥ 0.0.5)
libfreetype6
загрузите исполняемый файл сервера. Если вы используете 64-битную версию операционной системы, обязательно выберите вариант arm64.
Отредактируйте файл mediamtx.yml и замените все внутри секции paths на следующее содержимое:
Полученный поток будет доступен по пути /cam.
Если вы хотите запустить сервер внутри Docker, вам нужно использовать образ latest-rpi (который уже содержит необходимые библиотеки) и запустить контейнер с некоторыми дополнительными флагами:
Имейте в виду, что образ Docker не совместим с камерами, для которых требуется пользовательская libcamera (например, некоторые продукты ArduCam), поскольку он поставляется со стандартной libcamera в комплекте.
Настройки камеры можно изменить с помощью параметров rpiCamera*:
Все доступные параметры перечислены в файле конфигурации примера.
Чтобы добавить звук с USB-микрофона, установите GStreamer и alsa-utils:
составить список доступных аудиокарт с помощью:
Образец вывода:
Полученный поток будет доступен по пути /cam_with_audio.
Обычная веб-камера
Если ОС основана на Linux, отредактируйте файл mediamtx.yml и замените все внутри секции paths на следующее содержимое:
Код: Выделить всё
paths:
cam:
runOnInit: ffmpeg -f v4l2 -i /dev/video0 -pix_fmt yuv420p -preset ultrafast -b:v 600k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH
runOnInitRestart: yes
Код: Выделить всё
paths:
cam:
runOnInit: ffmpeg -f dshow -i video="USB2.0 HD UVC WebCam" -pix_fmt yuv420p -c:v libx264 -preset ultrafast -b:v 600k -f rtsp rtsp://localhost:$RTSP_PORT/$MTX_PATH
runOnInitRestart: yes
Код: Выделить всё
ffmpeg -list_devices true -f dshow -i dummy
Камеры Raspberry Pi
MediaMTX поддерживает камеру Raspberry Pi, позволяя передавать высококачественное видео с низкой задержкой любому пользователю и для любых целей. Есть несколько требований:
Сервер должен работать на Raspberry Pi с операционной системой Raspberry Pi OS bullseye или новее. Поддерживаются как 32-битные, так и 64-битные операционные системы.
Убедитесь, что стек устаревших камер отключен. Введите sudo raspi-config, затем перейдите в раздел Interfacing options, включите/выключите поддержку устаревших камер, выберите no. Перезагрузите систему.
Если вы хотите запустить стандартную (не-Docker) версию сервера:
Убедитесь, что установлены следующие пакеты:
libcamera0 (≥ 0.0.5)
libfreetype6
загрузите исполняемый файл сервера. Если вы используете 64-битную версию операционной системы, обязательно выберите вариант arm64.
Отредактируйте файл mediamtx.yml и замените все внутри секции paths на следующее содержимое:
Код: Выделить всё
paths:
cam:
source: rpiCamera
Если вы хотите запустить сервер внутри Docker, вам нужно использовать образ latest-rpi (который уже содержит необходимые библиотеки) и запустить контейнер с некоторыми дополнительными флагами:
Код: Выделить всё
docker run --rm -it \
--network=host \
--privileged \
--tmpfs /dev/shm:exec \
-v /run/udev:/run/udev:ro \
-e MTX_PATHS_CAM_SOURCE=rpiCamera \
bluenviron/mediamtx:latest-rpi
Настройки камеры можно изменить с помощью параметров rpiCamera*:
Код: Выделить всё
paths:
cam:
источник: rpiCamera
rpiCameraWidth: 1920
rpiCameraHeight: 1080
Чтобы добавить звук с USB-микрофона, установите GStreamer и alsa-utils:
Код: Выделить всё
sudo apt install -y gstreamer1.0-tools gstreamer1.0-rtsp gstreamer1.0-alsa alsa-utils
Код: Выделить всё
arecord -L
Код: Выделить всё
surround51:CARD=ICH5,DEV=0
Intel ICH5, Intel ICH5
Выход 5.1 Surround на фронтальные, центральные, тыловые колонки и сабвуфер
default:CARD=U0x46d0x809
USB-устройство 0x46d:0x809, USB Audio
Аудиоустройство по умолчанию
Re: rtsp server
По протоколу
Клиенты SRT
SRT - это протокол, позволяющий публиковать и читать поток данных в реальном времени, обеспечивая шифрование, целостность и механизм повторной передачи. Обычно он используется для передачи медиапотоков, закодированных в MPEG-TS. Чтобы опубликовать поток на сервере с протоколом SRT, используйте этот URL:
Замените mystream на любое имя, которое вам нужно. Полученный поток будет доступен по пути /mystream.
Если включены учетные данные, добавьте имя пользователя и пароль к streamid;
Если вам нужно использовать стандартный синтаксис идентификатора потока вместо пользовательского, используемого этим сервером, смотрите раздел Стандартный синтаксис идентификатора потока.
Если вы хотите опубликовать поток с помощью клиента в режиме прослушивания (т. е. с mode=listener, добавленным к URL), читайте следующий раздел.
Известными клиентами, которые могут публиковать поток с помощью SRT, являются FFmpeg, GStreamer, OBS Studio.
Камеры и серверы SRT
Чтобы получить на сервер поток SRT с существующего сервера, камеры или клиента в режиме прослушивания (т. е. с mode=listener, добавленным к URL), добавьте соответствующий URL в параметр source пути:
Клиенты SRT
SRT - это протокол, позволяющий публиковать и читать поток данных в реальном времени, обеспечивая шифрование, целостность и механизм повторной передачи. Обычно он используется для передачи медиапотоков, закодированных в MPEG-TS. Чтобы опубликовать поток на сервере с протоколом SRT, используйте этот URL:
Код: Выделить всё
srt://localhost:8890?streamid=publish:mystream&pkt_size=1316
Если включены учетные данные, добавьте имя пользователя и пароль к streamid;
Код: Выделить всё
srt://localhost:8890?streamid=publish:mystream:user:pass&pkt_size=1316
Если вы хотите опубликовать поток с помощью клиента в режиме прослушивания (т. е. с mode=listener, добавленным к URL), читайте следующий раздел.
Известными клиентами, которые могут публиковать поток с помощью SRT, являются FFmpeg, GStreamer, OBS Studio.
Камеры и серверы SRT
Чтобы получить на сервер поток SRT с существующего сервера, камеры или клиента в режиме прослушивания (т. е. с mode=listener, добавленным к URL), добавьте соответствующий URL в параметр source пути:
Код: Выделить всё
paths:
proxied:
# url исходного потока в формате srt://host:port?streamid=streamid&other_parameters
источник: srt://original-url
Re: rtsp server
ffmpeg -re -i public/mpd-hd0_35.mp4 -codec copy -f flv rtmp://e12/live2
ffmpeg -re -fflags +genpts -i public/mpd-hd0_34.mp4 -c copy -f rtsp rtsp://e12:8554/mystream
ffmpeg -re -fflags +genpts -stream_loop -1 -i sleep.mp4 -c copy -f flv rtmp://e12/sleep
ffmpeg -re -fflags +genpts -i public/mpd-hd0_34.mp4 -c copy -f rtsp rtsp://e12:8554/mystream
Код: Выделить всё
ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i gvf.mp4 -c copy -f mpegts -mpegts_service_id 102 -metadata service_name=My_channel -metadata service_provider=My_Self -max_interleave_delta 0 -use_wallclock_as_timestamps 1 -flush_packets 1 "udp://233.0.0.1:1001?localaddr=10.60.4.237&pkt_size=188"
Код: Выделить всё
ffmpeg -i rtsp://original-source \
-pix_fmt yuv420p -c:v libx264 -preset ultrafast -b:v 600k \
-c:a aac -b:a 160k \
-f rtsp rtsp://localhost:8554/mystream
ffmpeg -re -fflags +genpts -stream_loop -1 -i sleep.mp4 -c copy -f flv rtmp://e12/sleep
Код: Выделить всё
ffmpeg -hide_banner -framerate 29.97 -re -fflags +genpts -stream_loop -1 -i sleep.mp4 -c copy -f flv rtmp://e12/sleep -indexmem 64M -rtbufsize 64M -probesize 64M -analyzeduration 64M -thread_queue_size 2048 \
-avoid_negative_ts "make_zero" -vsync 1 -r 29.97
Re: rtsp server
Код: Выделить всё
ffmpeg -hide_banner -re -fflags +genpts -stream_loop -1 -i video/davno.mp4 -c copy -f flv rtmp://e12/da -indexmem 5M -rtbufsize 5M -probesize 5M -analyzeduration 5M -thread_queue_size 2048 -avoid_negative_ts "make_zero" -vsync 1 -r 29.97
Код: Выделить всё
ffmpeg -hide_banner -re -fflags +genpts -stream_loop -1 -i адрес_видеопотока -c copy -f flv rtmp://212.119.243.135/test99 -indexmem 5M -rtbufsize 5M -probesize 5M -analyzeduration 5M -thread_queue_size 2048 -avoid_negative_ts "make_zero" -vsync 1 -r 29.97
Если входящий поток начнёт трансляцию, то исходящий будет доступен по адресу rtmp://212.119.243.135/test99
test99 - имя потока, назначается от балды
e8
Код: Выделить всё
ffmpeg -hide_banner -re -fflags +genpts -stream_loop -1 -i ftp2/video/Kirmizi\ Oda.s01.WEB-DLRip1080p/Kirmizi\ Oda.s01.e01.WEB-DLRip1080p\ \(Ay\ Oasis\ NNM-Club\).mkv -c copy -f flv rtmp://e12/s1 -indexmem 5M -rtbufsize 5M -probesize 5M -analyzeduration 5M -thread_queue_size 2048 -avoid_negative_ts "make_zero" -vsync 1 -r 29.97
Re: rtsp server
Код: Выделить всё
ffmpeg -hide_banner -re -fflags +genpts -stream_loop -1 -i video/davno.mp4 -c copy -f rtsp rtsp://localhost:5545/da -indexmem 5M -rtbufsize 5M -probesize 5M -analyzeduration 5M -thread_queue_size 2048 -avoid_negative_ts "make_zero" -vsync 1 -r 29.97
Re: rtsp server
Трансляция потока с перекодированием (сильно нагружает процессор)
Без перекодирования (сильно нагружает канал связи)
Код: Выделить всё
ffmpeg -hide_banner -re -fflags +genpts -stream_loop -1 -i ELENAYerevanDespacito.mp4 -c:v h264 -b:v 2M -c:a aac -b:a 192k -vsync 1 -r 29.97 -tune zerolatency -f flv rtmp://localhost/despa -indexmem 512 -rtbufsize 64K -probesize 512 -analyzeduration 64 -thread_queue_size 2048 -avoid_negative_ts "make_zero"
Код: Выделить всё
ffmpeg -hide_banner -re -fflags +genpts -stream_loop -1 -i ELENAYerevanDespacito.mp4 -c copy -vsync 1 -tune zerolatency -f flv rtmp://localhost/despa -indexmem 512 -rtbufsize 64K -probesize 512 -analyzeduration 0 -thread_queue_size 2048 -avoid_negative_ts "make_zero"
Re: rtsp server
https://github.com/bluenviron/mediamtx/issues/2994
Код: Выделить всё
ffmpeg -hide_banner -loglevel error -re -f concat -safe 0 -i "$playlist" -c copy -f rtsp -rtsp_transport tcp "rtsp://127.0.0.1:8554/$channel_id" >> /root/.ffmpeg_log.txt 2>&1 &
Encryption
Incoming and outgoing RTSP streams can be encrypted with TLS (obtaining the RTSPS protocol). A TLS certificate is needed and can be generated with OpenSSL:
openssl genrsa -out server.key 2048
openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
Edit mediamtx.yml, and set the protocols, encryption, serverKey and serverCert parameters:
protocols: [tcp]
encryption: optional
serverKey: server.key
serverCert: server.crt
Streams can be published and read with the rtsps scheme and the 8322 port:
ffmpeg -i rtsps://ip:8322/..
https://pkg.go.dev/github.com/aler9/mediamtx#section-readme
https://www.jakobstoeck.de/2017/how-to-encrypt-rtmp-or-anything-really-over-ssl-tls/
openssl genrsa -out server.key 2048
openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
Edit mediamtx.yml, and set the protocols, encryption, serverKey and serverCert parameters:
protocols: [tcp]
encryption: optional
serverKey: server.key
serverCert: server.crt
Streams can be published and read with the rtsps scheme and the 8322 port:
ffmpeg -i rtsps://ip:8322/..
https://pkg.go.dev/github.com/aler9/mediamtx#section-readme
https://www.jakobstoeck.de/2017/how-to-encrypt-rtmp-or-anything-really-over-ssl-tls/