Страница 1 из 1

rtsp server

Добавлено: 31 янв 2024, 13:38
ya
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

Re: rtsp server

Добавлено: 31 янв 2024, 19:23
ya
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:

Код: Выделить всё

ffmpeg -re -stream_loop -1 -i file.ts -c copy -f rtsp rtsp://localhost:8554/mystream
или GStreamer:

Код: Выделить всё

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:

Код: Выделить всё

vLC --network-caching=50 rtsp://localhost:8554/mystream
или GStreamer:

Код: Выделить всё

gst-play-1.0 rtsp://localhost:8554/mystream
или FFmpeg:

Код: Выделить всё

ffmpeg -i rtsp://localhost:8554/mystream -c copy output.mp4

Re: rtsp server

Добавлено: 31 янв 2024, 19:51
ya
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:

Код: Выделить всё

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
Полученный поток будет доступен по пути /mystream.

Re: rtsp server

Добавлено: 31 янв 2024, 20:12
ya
Веб-браузеры
Веб-браузеры могут публиковать поток на сервере с помощью протокола WebRTC. Запустите сервер и откройте веб-страницу:

http://localhost:8889/mystream/publish.
Полученный поток будет доступен по пути /mystream.

Эту веб-страницу можно встроить в другую веб-страницу с помощью iframe:

Код: Выделить всё

<iframe src="http://mediamtx-ip:8889/mystream/publish" scrolling="no"></iframe>.
Для более сложных настроек можно создать и обслуживать пользовательскую веб-страницу, начав с исходного кода страницы публикации.

Re: rtsp server

Добавлено: 31 янв 2024, 20:21
ya
По устройству
Обычная веб-камера
Если ОС основана на 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
Если ОС - Windows:

Код: Выделить всё

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
Где USB2.0 HD UVC WebCam - это имя веб-камеры, которое можно получить с помощью:

Код: Выделить всё

ffmpeg -list_devices true -f dshow -i dummy
Полученный поток будет доступен по пути /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 на следующее содержимое:

Код: Выделить всё

paths:
  cam:
    source: rpiCamera
Полученный поток будет доступен по пути /cam.

Если вы хотите запустить сервер внутри 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
Имейте в виду, что образ Docker не совместим с камерами, для которых требуется пользовательская libcamera (например, некоторые продукты ArduCam), поскольку он поставляется со стандартной libcamera в комплекте.

Настройки камеры можно изменить с помощью параметров 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
    Аудиоустройство по умолчанию
Полученный поток будет доступен по пути /cam_with_audio.

Re: rtsp server

Добавлено: 31 янв 2024, 22:28
ya
По протоколу
Клиенты SRT
SRT - это протокол, позволяющий публиковать и читать поток данных в реальном времени, обеспечивая шифрование, целостность и механизм повторной передачи. Обычно он используется для передачи медиапотоков, закодированных в MPEG-TS. Чтобы опубликовать поток на сервере с протоколом SRT, используйте этот URL:

Код: Выделить всё

srt://localhost:8890?streamid=publish:mystream&pkt_size=1316
Замените mystream на любое имя, которое вам нужно. Полученный поток будет доступен по пути /mystream.

Если включены учетные данные, добавьте имя пользователя и пароль к 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

Добавлено: 02 фев 2024, 12:56
ya

Re: rtsp server

Добавлено: 03 фев 2024, 14:12
ya
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 -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

Добавлено: 03 фев 2024, 23:08
ya

Код: Выделить всё

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
rtmp://212.119.243.135/da

Код: Выделить всё

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

Добавлено: 04 фев 2024, 11:26
ya

Код: Выделить всё

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

Добавлено: 05 фев 2024, 02:02
ya
Трансляция потока с перекодированием (сильно нагружает процессор)

Код: Выделить всё

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

Добавлено: 09 фев 2024, 00:28
ya
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

Добавлено: 09 фев 2024, 02:06
ya
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/

API

Добавлено: 09 фев 2024, 03:14
ya