Программирование ARM RTSP-сервер MediaMTX Mon, October 27 2025  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


RTSP-сервер MediaMTX Печать
Добавил(а) microsin   

Репозиторий: https://github.com/bluenviron/mediamtx.

Как компилировать:

$ git clone https://github.com/bluenviron/mediamtx.git
$ cd mediamtx-1.15.1
$ make
$ make binaries

В папке binaries появятся архивы с исполняемым кодом и шаблоном конфигурации по умолчанию mediamtx.yml.

Готовые релизы: https://github.com/bluenviron/mediamtx/releases.

Как запускать (по умолчанию будет использоваться файл конфигурации mediamtx.yml в том же каталоге, что и исполняемый файл):

$ ./mediamtx

Ниже приведен файл настройки по умолчанию сервера mediamtx [1] с переведенными комментариями.

Файл mediamtx.yml:

###############################################
# Глобальные настройки

# Настройки в этой секции действуют везде.

###############################################
# Глобальные настройки -> General

# Подробность вывода; варианты "error", "warn", "info", "debug".
logLevel: info
# Куда выводить сообщения лога; варианты "stdout", "file", "syslog".
logDestinations: [stdout]
# Если "file" в logDestinations, то это имя файла лога.
logFile: mediamtx.log
# Если "syslog" в logDestinations, то это префикс для логов.
sysLogPrefix: mediamtx

# Таймаут операций чтения.
readTimeout: 10s
# Таймаут операций записи.
writeTimeout: 10s
# Размер очереди исходящих пакетов.
# Большее значение повышает пропускную способность, меньшее значение
# экономит RAM.
writeQueueSize: 512
# Максимальный размер исходящих пакетов UDP.
# Этот параметр можно уменьшить, чтобы избежать фрагментации на сетях
# с низким UDP MTU.
udpMaxPayloadSize: 1472

# Команда для запуска, когда клиенты подключаются к серверу.
# Эта команда терминируется через SIGINT, когда клиенты отключаются
# от сервера.# Доступны следующие переменные окружения:
# * MTX_CONN_TYPE: тои соединения
# * MTX_CONN_ID: идентификатор соединения (connection ID)
# * RTSP_PORT: порт сервера RTSP
runOnConnect:
# Перезапуск команды если она существует.
runOnConnectRestart: no
# Команда для запуска, когда клиент отключается от сервера.
# Переменные окружения те же, что и для runOnConnect.
runOnDisconnect:

###############################################
# Глобальные настройки -> Authentication

# Метод аутентификации. Доступны значения:
# * internal: credentials сохранены в файле конфигурации
# * http: соединение с внешним HTTP URL для выполнения аутентификации
# * jwt: внешний сервер идентификации предоставляет аутентификацию
# через JWT-ы
authMethod: internal

# Внутренняя (internal) аутентификация,
# список пользователей.
authInternalUsers:
# Пользователь по умолчанию, без привилегий.
# Имя пользователя. 'any' означает любого пользователя, включая anonymous-ы. - user: any
# Пароль. Не используется в случае пользователя 'any'.
pass:
# IP-адреса сетей, разрешенных для использования этим пользователем.
# Пустой список означает любой IP.
ips: []
# Список разрешений.
permissions:
# Разрешенные действия: publish, read, playback, api, metrics, pprof.
- action: publish
# Пути могут быть установлены для дальнейшего ограничения доступа
# определенным путем path.
# Пустой path означает любой путь.
# Могут использоваться регулярные выражения с префиксом из тильды.
path:
- action: read
path:
- action: playback
path: # Администратор по умолчанию.
# Это позволяет использовать API, метрики и PPROF без аутентификации,
# если IP localhost. - user: any
pass:
ips: ['127.0.0.1', '::1']
permissions:
- action: api
- action: metrics
- action: pprof

# HTTP-based аутентификация.
# URL, вызываемый для выполнения аутентификации. Каждый раз, когда
# хочет аутентифицироваться, сервер вызывает этот URL с методом POST,
# и тело вызова содержит:
# {
# "user": "user",
# "password": "password",
# "token": "token",
# "ip": "ip",
# "action": "publish|read|playback|api|metrics|pprof",
# "path": "path",
# "protocol": "rtsp|rtmp|hls|webrtc|srt",
# "id": "id",# "query": "query"
# }
# Если код ответа 20x, то аутентификация принята, иначе она отклоняется.
authHTTPAddress:
# Действия для исключения из HTTP-based аутентификации.
# Формат такой же, как у разрешений пользователя.
authHTTPExclude: - action: api - action: metrics - action: pprof

# JWT-based аутентификация.
# Пользователи должны логиниться через внешний сервер идентификации
# и получение JWT. Этот JWT должне содержать требование
# "mediamtx_permissions" с разрешениями, например:
# {
# "mediamtx_permissions": [
# {
# "action": "publish",
# "path": "somepath"
# }
# ]
# }
# Ожидается, что пользователи передадут JWT в заголовке авторизации
# или в качестве пароля. Это URL-адрес JWKS, который будет использоваться
# для однократного извлечения (pull once) публичного ключа, позволяющего
# проверять JWT-ы.
authJWTJWKS:
# Если у JWKS URL самоподнисанный или недостоверный сертификат, то вы
# можете предоставить отпечаток сертификата (certificate fingerprint),
# чтобы все равно его проверить. Это может быть получено запуском:
# openssl s_client -connect jwt_jwks_domain:443 /dev/null \
# | sed -n '/BEGIN/,/END/p' > server.crt
# openssl x509 -in server.crt -noout -fingerprint -sha256 | cut -d "=" \
# -f2 | tr -d ':'
authJWTJWKSFingerprint:
# Имя утверждения, которое содержит разрешения.
authJWTClaimKey: mediamtx_permissions
# Действия для исключения из JWT-based аутентификации.
# Формат такой же, как у разрешений пользователя.
authJWTExclude: []
# разрешить передачу JWT через параметры запросов HTTP (т. е. ?jwt=JWT).
# Это вносит риски безопасности будет по умолчанию запрещено в будущем.
authJWTInHTTPQuery: true

###############################################
# Глобальные настройки -> Control API

# Разрешить управление сервером через Control API.
api: no
# Адрес слушателя Control API.
apiAddress: :9997
# Разрешить TLS/HTTPS на Control API сервера.
apiEncryption: no
# Путь до ключа сервера. Это нужно только когда encryption yes.
# Ключ можно генерировать командами:# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
apiServerKey: server.key
# Путь до сертификата сервера.
apiServerCert: server.crt
# Значение Access-Control-Allow-Origin заголовка, предоставляемое
# в каждом ответе HTTP.
apiAllowOrigin: '*'
# Список IP или CIDR проксей, помещенных перед сервером HTTP.
# Если сервер принимает запрос от одного из этих элементов, то
# IP в логах будет взят из заголовка X-Forwarded-For.
apiTrustedProxies: []

###############################################
# Глобальные настройки -> метрики

# Разрешить Prometheus-совместимые метрики.
metrics: no
# Адрес HTTP-прослушивателя метрик.
metricsAddress: :9998
# Разрешить TLS/HTTPS на сервере метрик.
metricsEncryption: no
# Путь до ключа сервера. Это необходимо только когда encryption yes.
# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
metricsServerKey: server.key
# Путь до сертификата сервера.
metricsServerCert: server.crt
# Значение Access-Control-Allow-Origin заголовка, предоставляемое
# в каждом ответе HTTP.
metricsAllowOrigin: '*'
# Список IP или CIDR проксей, помещенных перед сервером HTTP.
# Если сервер принимает запрос от одного из этих элементов, то
# IP в логах будет взят из заголовка X-Forwarded-For.
metricsTrustedProxies: []

###############################################
# Глобальные настройки -> PPROF

# Разрешить pprof-совместимую endpoint для мониторинга производительности.
pprof: no
# Адрес прослушивателя pprof.
pprofAddress: :9999
# Разрешить TLS/HTTPS на сервере pprof.
pprofEncryption: no
# Путь до ключа сервера. Это необходимо только когда encryption yes.
# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
pprofServerKey: server.key
# Путь до сертификата сервера.
pprofServerCert: server.crt
# Значение Access-Control-Allow-Origin заголовка, предоставляемое
# в каждом ответе HTTP.pprofAllowOrigin: '*'
# Список IP или CIDR проксей, помещенных перед сервером HTTP.
# Если сервер принимает запрос от одного из этих элементов, то
# IP в логах будет взят из заголовка X-Forwarded-For.
pprofTrustedProxies: []

###############################################
# Глобальные настройки -> сервер воспроизведения

# Разрешает загрузку записей из сервера воспроизведения.
playback: no
# Адрес прослушивателя сервера воспроизведения.
playbackAddress: :9996
# Разрешить TLS/HTTPS не сервере воспроизведения.
playbackEncryption: no
# Путь до ключа сервера. Это необходимо только когда encryption yes.
# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
playbackServerKey: server.key
# Путь до сертификата сервера.
playbackServerCert: server.crt
# Значение Access-Control-Allow-Origin заголовка, предоставляемое
# в каждом ответе HTTP.
playbackAllowOrigin: '*'
# Список IP или CIDR проксей, помещенных перед сервером HTTP.
# Если сервер принимает запрос от одного из этих элементов, то
# IP в логах будет взят из заголовка X-Forwarded-For.
playbackTrustedProxies: []

###############################################
# Глобальные настройки -> сервер RTSP

# Разрешить публикацию и чтение потоков через протокол RTSP.
rtsp: yes
# Список разрешенных транспортных протоколов RTSP.
# UDP самый быстрый, но он не работает, когда между сервером и клиентами
# находится NAT/firewall
.
# UDP-multicast позволяет экономить полосу пропускания, когда все клиенты
# находятся в одной LAN.
# TCP является наиболее универсальным.
# Рукопожатие (handshake) всегда выполняется через TCP.
rtspTransports: [udp, multicast, tcp]
# Использовать защищенные варианты протокола (RTSPS, TLS, SRTP).
# Доступны значения "no", "strict", "optional".
rtspEncryption: "no"
# Адрес прослушивателя TCP/RTSP. Это необходимо только когда "no" или "optional".
rtspAddress: :8554
# Адрес прослушивателя TCP/TLS/RTSPS. Это необходимо только когда encryption
# "strict" или "optional".
rtspsAddress: :8322
# Адрес прослушивателя UDP/RTP. Это необходимо только когда "udp" в rtspTransports.
rtpAddress: :8000
# Адрес прослушивателя UDP/RTCP. Это необходимо только когда "udp" в rtspTransports.
rtcpAddress: :8001
# Диапазон всех прослушивателей UDP. Это необходимо только когда "multicast"
# в rtspTransports.
multicastIPRange: 224.1.0.0/16
# Порт всех UDP-multicast/RTP прослушивателей. Это необходимо только когда
# "multicast" в rtspTransports.
multicastRTPPort: 8002
# Порт всех UDP-multicast/RTCP прослушивателей. Это необходимо только когда
# "multicast" в rtspTransports.
multicastRTCPPort: 8003
# Адрес прослушивателя UDP/SRTP. Это необходимо только когда "udp" в rtspTransports
# и разрешено шифрование.
srtpAddress: :8004
# Адрес прослушивателя UDP/SRTCP. Это необходимо только когда "udp" в rtspTransports
# и разрешено шифрование.
srtcpAddress: :8005
# Порт всех прослушивателей UDP-multicast/SRTP. Это необходимо только когда
# "multicast" в rtspTransports и разрешено шифрование.
multicastSRTPPort: 8006
# Порт всех прослушивателей UDP-multicast/SRTCP. Это необходимо только когда
# "multicast" в rtspTransports и разрешено шифрование.
multicastSRTCPPort: 8007
# Путь до ключа сервера. Это необходимо только когда encryption "strict" или
# "optional".# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
rtspServerKey: server.key
# Путь до сертификата сервера. Это необходимо только когда encryption "strict"
# или "optional".
rtspServerCert: server.crt
# Методы аутентификации. Доступны "basic" и "digest".
# "digest" не предоставляет дополнительной безопасности и доступен только для
# совместимости.
rtspAuthMethods: [basic]
# Размер буфера UDP сервера RTSP.
# Это может быть увеличено для уменьшения потерь пакетов.
# Это умолчание соответствует значению по умолчанию операционной системы.
rtspUDPReadBufferSize: 0

###############################################
# Глобальные настройки -> сервер RTMP

# Разрешить публикацию и чтение потоков через протокол RTMP.
rtmp: yes
# Адрес прослушивателя RTMP. Это необходимо только когда encryption "no"
# или "optional".
rtmpAddress: :1935
# Шифровать соединения через TLS (RTMPS).
# Доступны значения "no", "strict", "optional".
rtmpEncryption: "no"
# Адрес прослушивателя RTMPS. Это необходимо только когда encryption "strict"
# или "optional".
rtmpsAddress: :1936
# Путь до ключа сервера. Это необходимо только когда encryption "strict"
# или "optional".
# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
rtmpServerKey: server.key
# Путь до сертификата сервера. Это необходимо только когда encryption "strict"
# или "optional".
rtmpServerCert: server.crt

###############################################
# Глобальные настройки -> сервер HLS
# Разрешить чтение потоков через протокол HLS.
hls: yes
# Адрес прослушивателя HLS.
hlsAddress: :8888
# Разрешить TLS/HTTPS на сервере HLS.
# Это требуется для Low-Latency HLS.
hlsEncryption: no
# Путь до ключа сервера. Это необходимо только когда encryption yes.
# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
hlsServerKey: server.key
# Путь до сертификата сервера.
hlsServerCert: server.crt
# Значение Access-Control-Allow-Origin заголовка, предоставляемое в каждом
# ответе HTTP.
# Это позволяет проиграть поток HLS из внешнего web-сайта.
hlsAllowOrigin: '*'
# Список IP или CIDR проксей, помещенных перед сервером HLS.
# Если сервер принял запрос от одного из этих элементов, то IP в логах будет
# взят из X-Forwarded-For заголовка.
hlsTrustedProxies: []
# По умолчанию HLS генерируется только когда запрашивается пользователем.
# Эта опция позволяет генерировать его всегда, избегая задержки между запросом
# и генерацией.
hlsAlwaysRemux: no
# Вариант протокола HLS для использования. Доступны опции:
# * mpegts - используются сегменты MPEG-TS, для максимальной совместимости.
# * fmp4 - использует фрагментированные сегменты MP4, что более эффективно.
# * lowLatency - использует Low-Latency HLS.
hlsVariant: lowLatency
# Количество сегментов HLS, хранящихся на сервере.
# Сегменты позволяют позиционирование по потоку.
# Их количество не влияет на задержку.
hlsSegmentCount: 7
# Минимальная длительность каждого сегмента.
# Проигрыватель обычно помещает 3 сегмента в буфер перед воспроизведением потока.
# На конечную длительность сегмента также влияет интервал между кадрами IDR,
# поскольку сервер изменяет длительность, чтобы включить, по меньшей мере,
# один кадр IDR в каждый сегмент.
hlsSegmentDuration: 1s
# Минимальная длительность каждой части.
# Проигрыватель обычно помещает 3 части в буфер перед воспроизведением потока.
# Части используются в Low-Latency HLS вместо сегментов.
# Продолжительность части зависит от расстояния между выборками видео/аудио
# и регулируется для получения сегментов с аналогичной продолжительностью.
hlsPartDuration: 200ms
# Максимальный размер каждого сегмента. Это предотвращает исчерпание RAM.
hlsSegmentMaxSize: 50M
# Директория для сохранения сегментов вместо сохранения их в RAM.
# Это уменьшает производительность, поскольку чтение из диска не такое
# быстрое, как чтение из RAM, но это экономит RAM.
hlsDirectory: ''
# Muxer будет закрыт, когда нет запросов чтения и пройдет это количество# времени.
hlsMuxerCloseAfter: 60s

###############################################
# Глобальные настройки -> сервер WebRTC

# Разрешит публикацию и чтение потоков протокола WebRTC.
webrtc: yes
# Адрес прослушивателя WebRTC HTTP.
webrtcAddress: :8889
# Разрешить TLS/HTTPS на сервере WebRTC.
webrtcEncryption: no
# Путь до ключа сервера.
# Ключ может генерироваться командами:
# openssl genrsa -out server.key 2048
# openssl req -new -x509 -sha256 -key server.key -out server.crt -days 3650
webrtcServerKey: server.key
# Путь до сертификата сервера.
webrtcServerCert: server.crt
# Значение Access-Control-Allow-Origin заголовка, предоставляемое в каждом
# ответе HTTP. Это позволит проиграть поток WebRTC из внешнего web-сайта.
webrtcAllowOrigin: '*'
# Список IPs или CIDR проксей, помещенных перед сервером WebRTC.
# Если сервер получил запрос от одного из этих элементов, то IP в логах
# будет взят из X-Forwarded-For заголовка.
webrtcTrustedProxies: []
# Адрес локального прослушивателя UDP, который будет принимать соединения.
# Для запрета используйте пустую строку.
webrtcLocalUDPAddress: :8189
# Адрес локального прослушивателя TCP, который будет принимать соединения.
# Это запрещено по умолчанию, поскольку TCP менее эффективен, чем UDP, и вносит
# вводит прогрессивную задержку при перегрузке сети.
webrtcLocalTCPAddress: ''
# Клиенты WebRTC должны знать IP сервера.
# Захватывает IP-адреса из интерфейсов и отправляет им клиентам.
webrtcIPsFromInterfaces: yes
# Список интерфейсов, IP которых будут посылаться клиентам.
# Пустое значение означает использовать все доступные интерфейсы.
webrtcIPsFromInterfacesList: []
# Список дополнительных хостов или IP для отправки клиентам.
webrtcAdditionalHosts: []
# Серверы ICE. Нужны только когда прослушиватели не могут быть достижимы
# клиентами. Серверы STUN позволяют получить и предоставить в общий доступ
# публичный IP сервера. Серверы TURN/TURNS принудительно пропускают весь
# трафик через них.
webrtcICEServers2: []
# - url: stun:stun.l.google.com:19302
  # Если user "AUTH_SECRET", то аутентификация основана на секрете.
# Секрет должен быть вставлен в поле password.
# username: ''
# password: ''
# clientOnly: false
# Время ожидания завершения WebRTC handshake.
webrtcHandshakeTimeout: 10s
# Максимальное время на сбор видеодорожек.
webrtcTrackGatherTimeout: 2s
# Максимальное время на сбор кандидатов STUN.
webrtcSTUNGatherTimeout: 5s

###############################################
# Глобальные настройки -> сервер SRT

# Разрешить публикацию и чтение потоков с протоколом SRT.
srt: yes
# Адрес прослушивателя SRT.
srtAddress: :8890

###############################################
# Настройки пути по умолчанию

# Настройки в "pathDefaults" применяются везде, за исключением
# их переназначения в "paths".
pathDefaults:
###############################################
# Настройки пути по умолчанию -> Общие

# Источник потока. Это может быть:
# * publisher -> поток предоставлен клиентом RTSP, RTMP, WebRTC или SRT
# * rtsp://existing-url -> поток извлекается из другого сервера
# RTSP / камеры c RTSP
# * rtsps://existing-url -> поток извлекается из другого сервера
# RTSP / камеры с RTSPS
# * rtsp+http://existing-url -> поток извлекается из другого сервера
# RTSP / камеры, с туннелированием HTTP
# * rtsps+http://existing-url -> поток извлекается из другого сервера
# RTSP / камеры, с туннелированием HTTPS
# * rtsp+ws://existing-url -> поток извлекается из другого сервера
# RTSP / камеры, с туннелированием WebSocket
# * rtsps+ws://existing-url -> поток извлекается из другого сервера
# RTSP / камеры, с туннелированием secure WebSocket
# * rtmp://existing-url -> поток извлекается из другого сервера
# RTMP / камеры
# * rtmps://existing-url -> поток извлекается из другого сервера
# RTMP / камеры с RTMPS
# * http://existing-url/stream.m3u8 -> поток извлекается из другого
# сервера HLS / камеры
# * https://existing-url/stream.m3u8 -> поток извлекается из другого
# сервера HLS / камеры с HTTPS
# * udp+mpegts://ip:port -> поток извлекается из MPEG-TS через UDP,
# прослушиванием на указанном адресе
# * unix+mpegts://socket -> поток извлекается из MPEG-TS через Unix-сокет,
# использованием socket
# * udp+rtp://ip:port -> поток извлекается из RTP через UDP, прослушиванием
# на указанном адресе
# * unix+rtp://socket -> поток извлекается из RTP через Unix-сокет,
# использованием socket
# * srt://existing-url -> поток извлекается из другого сервера
# SRT / камеры
# * whep://existing-url -> поток извлекается из другого сервера
# WebRTC / камеры
# * wheps://existing-url -> поток извлекается из другого сервера
# WebRTC / камеры через HTTPS
# * redirect -> поток предоставляется другим path или server
# * rpiCamera -> поток предоставляется Raspberry Pi Camera
# Следующие переменные могут использоваться в строке источника:
# * $MTX_QUERY: параметры запроса (переданные первым читателем)
# * $G1, $G2, ...: группы регулярных выражений, если имя пути это
# регулярное выражение.
source: publisher
# Если источник это URL, и TLS-сертификат источника самоподписанный
# или недостоверный, то вы можете предоставить отпечаток (fingerprint)
# сертификата, чтобы принудительно его подтвердить как достоверный.
# Это можно осуществить запуском:
# openssl s_client -connect source_ip:source_port /dev/null \
# | sed -n '/BEGIN/,/END/p' > server.crt
# openssl x509 -in server.crt -noout -fingerprint -sha256 | cut -d "=" \
# -f2 | tr -d ':'
sourceFingerprint:
# Если источник это URL, его поток будет извлечен только когда подключится
# как минимум один считыватель, что экономит полосу пропускания.
sourceOnDemand: no
# Если sourceOnDemand "yes", то считыватели будут приостановлены до тех
# пор, пока источник не будет готов, или пока не пройдет это время.
sourceOnDemandStartTimeout: 10s
# Если sourceOnDemand "yes", то источник будет закрыт, если нет подключенных
# считывателей и прошло столько времени.
sourceOnDemandCloseAfter: 10s
# Максимальное количество считывателей. 0 означает без ограничений.
maxReaders: 0
# Фраза пароля шифрования (SRT encryption passphrase), необходимая для
# чтения из этого path.
srtReadPassphrase:
# Если поток недоступен, перенаправит считывателей на этот path.
# Это может быть относительный path (например /otherstream)
# или абсолютный RTSP URL.
fallback:
# Маршрутизация исходных абсолютных временных меток кадров RTSP и WebRTC
# вместо их замены.
useAbsoluteTimestamp: false

###############################################
# Настройки по умолчанию path -> Record (запись)

# Запись потоков на диск.
record: no
# Путь записываемых сегментов.
# Расширение добавляется автоматически.
# Доступны переменны: %path (path name), %Y %m %d (year, month, day),
# %H %M %S (hours, minutes, seconds), %f (microseconds), %z (time zone),
# %s (unix epoch).
recordPath: ./recordings/%path/%Y-%m-%d_%H-%M-%S-%f
# Формат записанных сегментов.
# Доступны форматы "fmp4" (fragmented MP4) и "mpegts" (MPEG-TS).
recordFormat: fmp4
# fMP4 сегменты представляют собой конкатенацию небольших файлов MP4 (частей),
# каждый из которых имеет продолжительность recordPartDuration.
# MPEG-TS сегменты представляют собой конкатенацию 188-байтных пакетов,
# сбрасываемых на диск с периодом recordPartDuration.
# Когда произойдет системный сбой (system failure), последние части теряются.
# Таким образом, длительность части равна целевой точке восстановления,
# RPO (recovery point objective).
recordPartDuration: 1s
# Эта опция предотвращает исчерпание RAM.
recordMaxPartSize: 50M
# Минимальная длительность каждого сегмента.
recordSegmentDuration: 1h
# Удалить сегменты после этого интервала времени.
# Если установлено 0s, то автоматическое удаление запрещено.
recordDeleteAfter: 1d

###############################################
# Настройки path по умолчанию -> источник публикатора (когда источник "publisher")
# Разрешить другому клиенту отключить текущего publisher и опубликовать вместо него.
overridePublisher: yes
# Фраза пароля шифрования (SRT encryption passphrase), необходимая для публикации
# в этот path.
srtPublishPassphrase:

###############################################
# Настройки path по умолчанию -> источник RTSP (когда источник RTSP или RTSPS URL)
# Транспортный протокол, используемый для извлечения потока. Доступны значения
# "automatic", "udp", "multicast", "tcp".
rtspTransport: automatic
# Поддержка источников, которые не предоставляют серверные порты или используют
# случайные серверные порты. Это проблема безопасности, и ее следует использовать
# только при взаимодействии с источниками, которые этого требуют.
rtspAnyPort: no
# Заголовок диапазона (range header) для отправки источнику, чтобы начать потоковую
# передачу с указанного смещения.
# Доступны значения:
# * clock: абсолютное время
# * npt: Normal Play Time (нормальное время проигрывания)
# * smpte: метки времени SMPTE относительно начала записи
rtspRangeType:
# Доступны значения:
# * clock: UTC ISO 8601 строка из комбинации даты и времени, например 20230812T120000Z
# * npt: длительность, такая как "300ms", "1.5m" или "2h45m". Допустимые единицы
# времени "ns", "us" (или "µs"), "ms", "s", "m", "h"
# * smpte: длительность, такая как "300ms", "1.5m" или "2h45m". Допустимые единицы
# времени "ns", "us" (or "µs"), "ms", "s", "m", "h"
rtspRangeStart: # Размер буфера UDP клиента RTSP.
# Это может быть увеличено для уменьшения потерь пакетов.
# Это умолчание соответствует значению по умолчанию операционной системы.
rtspUDPReadBufferSize: 0

###############################################
# Настройки path по умолчанию -> источник MPEG-TS (когда источник MPEG-TS)

# Размер буфера UDP клиента MPEG-TS.
# Это может быть увеличено для уменьшения потерь пакетов.
# Это умолчание соответствует значению по умолчанию операционной системы.
mpegtsUDPReadBufferSize: 0

###############################################
# Настройки path по умолчанию -> источник RTP (когда источник RTP)
# Протокол перенаправления сессии (session description protocol, SDP) потока RTP.
rtpSDP:
# Размер буфера UDP клиента RTP.
# Это может быть увеличено для уменьшения потерь пакетов.
# Это умолчание соответствует значению по умолчанию операционной системы.
rtpUDPReadBufferSize: 0

###############################################
# Настройки path по умолчанию -> источник Redirect (когда источник "redirect")
# path, на который будут перенаправлены клиенты.
# Это может быть относительный path (например /otherstream) или абсолютный RTSP URL.
sourceRedirect:

###############################################
# Настройки path по умолчанию -> источник Raspberry Pi Camera (когда источник
# "rpiCamera")
# ID камеры.
rpiCameraCamID: 0
# Является ли это вторичным потоком.
rpiCameraSecondary: false
# Ширина кадров.
rpiCameraWidth: 1920
# Высота кадров.
rpiCameraHeight: 1080
# Отразить по горизонтали.
rpiCameraHFlip: false
# Отразить по вертикали.
rpiCameraVFlip: false
# Яркость [-1, 1].
rpiCameraBrightness: 0
# Контрастность [0, 16].
rpiCameraContrast: 1
# Насыщенность [0, 16].
rpiCameraSaturation: 1
# Четкость [0, 16].
rpiCameraSharpness: 1
# Режим экспозиции.
# Значения: normal, short, long, custom.
rpiCameraExposure: normal
# Режим автоматического баланса белого.
# (auto, incandescent, tungsten, fluorescent, indoor, daylight, cloudy или custom).
rpiCameraAWB: auto
# Фиксированные усиления автоматического баланса белого. Могут использоваться
# вместо rpiCameraAWB.
# Формат: [red,blue].
rpiCameraAWBGains: [0, 0]
# Рабочий режим подавления шума (off, cdn_off, cdn_fast, cdn_hq).
rpiCameraDenoise: "off"
# Фиксированная выдержка, в микросекундах.
rpiCameraShutter: 0
# Режим измерения алгоритма AEC/AGC (АРУ centre, spot, matrix или custom).
rpiCameraMetering: centre
# Фиксированное усиление.
rpiCameraGain: 0
# EV компенсация картинки в диапазоне [-10, 10].
rpiCameraEV: 0
# Интересующая область (Region of interest), в формате x,y,width,height
# (все нормализовано между 0 и 1).
rpiCameraROI:
# Разрешить ли HDR на Raspberry Camera 3.
rpiCameraHDR: false
# Файл тюнинга.
rpiCameraTuningFile:
# Режим сенсора, в формате [width]:[height]:[bit-depth]:[packing]
# поля bit-depth и packing опциональны.
rpiCameraMode:
# Количество кадров в секунду.
rpiCameraFPS: 30
# Режим автофокуса (auto, manual или continuous).
rpiCameraAfMode: continuous
# Диапазон автофокуса (normal, macro или full).
rpiCameraAfRange: normal
# Скорость автофокуса (normal или fast).
rpiCameraAfSpeed: normal
# Позиция объектива (только для ручного автофокуса) будет установлена
# на определенное расстояние для фокуса.
# Вычисляется по формуле: d = 1 / значение
# Примеры: 0 настройка объектива на бесконечность.
# 0.5 перемещает объектив для фокусировки на объекты на расстоянии 2 м.
# 2 перемещает объектив для фокусировки на объекты на расстоянии 50 см.
rpiCameraLensPosition: 0.0
# Окно автофокуса, в форме x,y,width,height, где координаты даны как пропорция
# от полного изображения.
rpiCameraAfWindow:
# Период коррекции фликера вручную, в микросекундах.
rpiCameraFlickerPeriod: 0
# Разрешает печать текста на каждом кадре.
rpiCameraTextOverlayEnable: false
# Текст, который печатается на каждом кадре.
# Формат тот же, что у функции strftime().
rpiCameraTextOverlay: '%Y-%m-%d %H:%M:%S - MediaMTX'
# Кодек (auto, hardwareH264, softwareH264 или mjpeg).
# Когда "auto" и поток первичный (primary), по умолчанию hardwareH264 (если
# доступно) или softwareH264. Когда "auto" и поток вторичный (secondary),
# по умолчанию mjpeg.
rpiCameraCodec: auto
# Период между кадрами IDR (когда кодек hardwareH264 или softwareH264).
rpiCameraIDRPeriod: 60
# Битрейт (когда кодек hardwareH264 или softwareH264).
rpiCameraBitrate: 5000000
# Аппаратный профиль H264 (baseline, main или high) (когда кодек hardwareH264).
rpiCameraHardwareH264Profile: main
# Аппаратный уровень H264 (4.0, 4.1 или 4.2) (когда кодек hardwareH264).
rpiCameraHardwareH264Level: '4.1'
# Программный H264 профиль (baseline, main или high) (когда кодек softwareH264).
rpiCameraSoftwareH264Profile: baseline
# Программный уровень H264 (4.0, 4.1 или 4.2) (когда кодек softwareH264).
rpiCameraSoftwareH264Level: '4.1'
# Качество M-JPEG JPEG (когда кодек mjpeg).
rpiCameraMJPEGQuality: 60

###############################################
# Настройки path по умолчанию -> источник Hooks

# Команда, запускаемая когда инициализируется этот path.
# Это может использоваться для публикации потока, когда запускается сервер.
# Это завершится сигналом SIGINT, когда программа закроется.
# Доступны следующие переменные окружения:
# * MTX_PATH: path name
# * RTSP_PORT: RTSP server port
# * G1, G2, ...: группы регулярного расширения, если path name
# это регулярное выражение.
runOnInit:
# Перезапуск команды, если она существует.
runOnInitRestart: no
# Команда для запуска, когда path запрашивается считывателем,
# и на этот путь пока никто не публикуется.
# Это может использоваться для публикации потока по запросу.
# Это завершится сигналом SIGINT, когда больше нет считывателей.
# Доступны следующие переменные окружения:
# * MTX_PATH: path name
# * MTX_QUERY: параметры запроса (переданные первым считывателем)
# * RTSP_PORT: RTSP server port
# * G1, G2, ...: группы регулярного расширения, если path name
# это регулярное выражение.
runOnDemand:
# Перезапуск команды, если она существует.
runOnDemandRestart: no
# Считыватели будут помещены на удержание, пока runOnDemand
# не начнет публикацию, или пока не пройдет это время.
runOnDemandStartTimeout: 10s
# Эта команда будет закрыта, если больше нет подключенных считывателей,
# и истекло это время.
runOnDemandCloseAfter: 10s
# Команда для запуска, когда больше нет считывателей.
# Переменные окружения те же самые, что у runOnDemand.
runOnUnDemand:
# Команда для запуска, когда поток готов к чтению, всякий раз,
# когда он публикуется клиентом или извлекается с сервера/камеры.
# Это прерывается сигналом SIGINT, когда поток больше не готов.
# Доступны следующие переменные окружения:
# * MTX_PATH: path name
# * MTX_QUERY: параметры запроса (переданные публикатором publisher)
# * MTX_SOURCE_TYPE: тип источника
# * MTX_SOURCE_ID: идентификатор источника
# * RTSP_PORT: RTSP server port
# * G1, G2, ...: группы регулярного расширения, если path name
# это регулярное выражение.
runOnReady:
# Перезапуск команды, если она существует.
runOnReadyRestart: no
# Команда для запуска, когда поток больше недоступен.
# Переменные окружения те же самые, что у runOnReady.
runOnNotReady:
# Команда для запуска, когда клиент начинает чтение.
# Это прерывается сигналом SIGINT, когда клиент останавливает чтение.
# Доступны следующие переменные окружения:
# * MTX_PATH: path name
# * MTX_QUERY: параметры запроса (переданные считывателем reader)
# * MTX_READER_TYPE: reader type
# * MTX_READER_ID: reader ID
# * RTSP_PORT: RTSP server port
# * G1, G2, ...: группы регулярного расширения, если path name
# это регулярное выражение.
runOnRead:
# Перезапуск команды, если она существует.
runOnReadRestart: no
# Команда для запуска, когда клиент остановит чтение.
# Переменные окружения те же самые, что у runOnRead.
runOnUnread:
# Команда для запуска, когда создается сегмент записи.
# Доступны следующие переменные окружения:
# * MTX_PATH: path name
# * MTX_SEGMENT_PATH: segment file path
# * RTSP_PORT: RTSP server port
# * G1, G2, ...: группы регулярного расширения, если path name
# это регулярное выражение.
runOnRecordSegmentCreate:
# Команда для запуска, когда завершен сегмент записи.
# Доступны следующие переменные окружения:
# * MTX_PATH: path name
# * MTX_SEGMENT_PATH: segment file path
# * MTX_SEGMENT_DURATION: segment duration
# * RTSP_PORT: RTSP server port
# * G1, G2, ...: группы регулярного расширения, если path name
# это регулярное выражение.
runOnRecordSegmentComplete:

###############################################
# Настройки path

# Настройки в "paths" применяются к определенным путям,
# и ключ привязки это имя path.
# Здесь может быть отменена любая настройка в "pathDefaults".
# Можно использоваться регулярные выражения через тильду в префиксе,
# например "~^(test1|test2)$" совпадет и с "test1", и с "test2",
# например "~^prefix" совпадет со всеми путями, начинающимися на "prefix".
paths:
# example:
# my_camera:
# source: rtsp://my_camera
# Настройки под "all_others" применяются ко всем путям, которые
# не соответствуют другой записи.
all_others:

[Ссылки]

1. bluenviron / mediamtx (https://github.com/bluenviron/mediamtx).

 

Добавить комментарий


Защитный код
Обновить

Top of Page