Функционал предназначен для организации RTSP-трансляции с камеры кассы самообслуживания (КСО) с целью передачи видеопотока во внешние системы мониторинга и антифрода.
Архитектура RTSP-трансляции
Источник (Публикующий):
Представлен сервисом
artix-usb2rtsp(использует утилитуffmpeg).Выполняет захват сырого видеопотока с подключенной веб-камеры (по умолчанию
/dev/video0).Выполняет кодирование видео в формат H.264 (с помощью аппаратного ускорения VAAPI или программной библиотеки x264).
Транслирует подготовленный поток на локальный медиасервер.
Медиасервер (RTSP-сервер):
Представлен сервисом
artix-mediamtx.Принимает видеопоток от источника на локальный адрес (в конфигурации по умолчанию —
rtsp://127.0.0.1:8554/video0).Ожидает входящие сетевые подключения и управляет раздачей видеопотока.
Клиент (Потребитель):
Представлен внешней системой мониторинга, антифрода или любым медиаплеером на удаленном рабочем месте (хостовой машине).
Подключается к медиасерверу кассы по ее IP-адресу для получения трансляции.
Установка
На кассе (КСО)
Необходимо использовать пакеты из репозитория Artix.
Для работы необходимо:
- Установить пакеты:
artix-usb2rtsp– сервис захвата видео. При первом запуске сервис необходимо включить вручную.sudo apt install artix-usb2rtsp
Вместе с сервисом будут установлены:
artix-mediamtx– сервис RTSP-сервера. При первом запуске сервис необходимо включить вручную.- программная библиотека x264 – для кодирования в H.264 без использования аппаратного ускорения VAAPI.
intel-media-va-driver-non-free– пакет драйверов для работы с использованием аппаратного ускорения VAAPI.sudo apt install intel-media-va-driver-non-free
После установки пакета аппаратное ускорение активируется автоматически.
Выполнить команду перечитывания конфигурации systemd.
systemctl daemon-reload
Включить и добавить в автозапуск сервис RTSP-сервера.
systemctl enable --now artix-mediamtx.service
Включить и добавить в автозапуск сервис захвата видео.
systemctl enable --now artix-usb2rtsp.service
- Перезагрузить кассу.
Для проверки статуса работы запущенных сервисов используется команда:
systemctl status artix-mediamtx.service artix-usb2rtsp.service --no-pager -l
Прием потока на клиентской машине / удаленном хосте
Для приема и просмотра RTSP-потока необходимо:
На клиентской машине установить программное обеспечение, поддерживающее работу с протоколом RTSP и декодирование видео в формате H.264:
Пакет
ffmpeg(содержит утилитуffplay).Универсальный медиаплеер (например,
VLC media player).Специализированная система видеонаблюдения (VMS) или система мониторинга/антифрода.
В интерфейсе установленного программного обеспечения задать адрес подключения к медиасерверу кассы:
IP-адрес кассы,
порт (по умолчанию
8554),путь к потоку (например,
video0).
Для подключения к трансляции, запущенной с камеры video0, на клиентской машине необходимо выполнить команду:
ffplay -rtsp_transport tcp rtsp://<IP_КСО>:8554/video0
Настройка
Используемые технологии
Захват, кодирование и трансляция видеопотока осуществляется с использованием следующих компонентов:
| Наименование | Описание | Примечания |
|---|---|---|
v4l2 | Подсистема в операционной системе Linux, которая отвечает за работу с видеоустройствами | |
| rtsp | Протокол потокового вещания в реальном времени | |
| h264_vaapi | Аппаратный кодировщик видео H.264 | Использует видеокарты (в основном Intel и AMD) в Linux для быстрой обработки видео без нагрузки на процессор |
| x264 | Программная библиотека для кодирования H.264 | Сжимает видео силами центрального процессора (CPU) для максимального качества |
Конфигурирование
Параметры трансляции задаются в конфигурационном файле /opt/artix-usb2rtsp/config.ini:
| Наименование | Возможные значения | Описание | Примечания |
|---|---|---|---|
| logLevel | -8 - quiet 0 - panic 8 - fatal 16 - error 24 - warning 32 - info 40 - verbose 48 - debug 56 - trace | Уровень логирования | По умолчанию 32 |
| input | Адрес камеры | По умолчанию /dev/video0 | |
output | Ссылка на поток камеры | По умолчанию rtsp://127.0.0.1:8554/video0 | |
| input.video_size | Разрешение видео | ||
| input.input_format | Формат кодирования входных данных | ||
| input.framerate | Количество кадров в секунду, передаваемых камерой | ||
| output.rtsp_transport |
| Транспортный протокол нижнего уровня для исходящего соединения |
|
| output.framerate | Количество кадров в секунду, передаваемых во внешние системы мониторинга и антифрода | По умолчанию используется значение из параметра input.framerate | |
| output.rc_mode | Режим управления параметрами кодирования выходного видеопотока | Параметр добавляется вручную. Для некоторых моделей оборудования утилита ffmpeg может использовать неподдерживаемый режим по умолчанию и кодирование завершится с ошибкой. В этом случае необходимо указать параметр output.rc_mode = CQP | |
| uvc.auto_exposure | Автоматическая экспозиция | Набор доступных параметров и диапазоны их значений зависят от модели камеры. Камера использует ранее установленные значения до изменения или отключения питания. Комментирование параметра не приводит к сбросу его значения. Если параметр закомментирован, то после включения питания камеры применяются значения по умолчанию в зависимости от модели камеры | |
| uvc.focus_automatic_continuous | Непрерывная автоматическую фокусировка камеры | ||
| uvc.white_balance_automatic | Баланс белого | ||
| uvc.exposure_time_absolute | Время экспозиции камеры | ||
| uvc.focus_absolute | Значение фокусировки камеры | ||
| uvc.white_balance_temperature | Температура изображения | ||
| uvc.gain | Усиление сигнала камеры | ||
| uvc.brightness | Яркость изображения | ||
| uvc.contrast | Контрастность изображения | ||
| uvc.saturation | Насыщенность цветов изображения | ||
| uvc.hue | Оттенок изображения | ||
| uvc.gamma | Гамма-коррекции изображения | ||
| uvc.power_line_frequency | Частота электросети для компенсации мерцания | ||
| uvc.sharpness | Резкость изображения | ||
| uvc.backlight_compensation | Уровень компенсации задней засветки |
; Уровень логирования ; Возможные значения: ; -8 - quiet ; 0 - panic ; 8 - fatal ; 16 - error ; 24 - warning ; 32 - info ; 40 - verbose ; 48 - debug ; 56 - trace ; Значение по умолчанию 32 ;logLevel = 32 [video0] ; Путь до камеры input = /dev/video0 ; Путь до rtsp сервера output = rtsp://127.0.0.1:8554/video0 ; Параметры камеры + параметры декодера ; v4l2: https://ffmpeg.org/ffmpeg-devices.html#Options-17 input.video_size = 1280x720 input.input_format = mjpeg input.framerate = 30 ; Параметры rtsp соединения + параметры кодера ; rtsp: https://ffmpeg.org/ffmpeg-protocols.html#Muxer ; h264_vaapi: https://ffmpeg.org/ffmpeg-codecs.html#VAAPI-encoders ; x264: https://ffmpeg.org/ffmpeg-codecs.html#Options-41 output.rtsp_transport = tcp output.framerate = 15 ; UVC-параметры камеры ; Набор доступных параметров и диапазоны их значений зависят от модели камеры ;uvc.auto_exposure = 1 ;uvc.focus_automatic_continuous = 0 ;uvc.white_balance_automatic = 0 ;uvc.exposure_time_absolute = 500 ;uvc.focus_absolute = 30 ;uvc.white_balance_temperature = 4600 ;uvc.gain = 0 ;uvc.brightness = 135 ;uvc.contrast = 35 ;uvc.saturation = 40 ;uvc.hue = 0 ;uvc.gamma = 140 ;uvc.power_line_frequency = 1 ;uvc.sharpness = 5 ;uvc.backlight_compensation = 64
Работа с одной камерой
Для работы с одной камерой и одним потоком необходимо задать параметры в конфигурационном файле /opt/artix-usb2rtsp/config.ini в секции [video0]:
[video0] input = /dev/video0 output = rtsp://127.0.0.1:8554/video0 input.video_size = 1280x720 input.input_format = mjpeg input.framerate = 30 output.rtsp_transport = tcp output.framerate = 15
Работа с двумя камерами
Рекомендуется подключение по USB 3.0 для стабильной работы. В некоторых случаях это позволяет избежать ошибок запуска трансляции и проблем, вызванных недостаточной пропускной способностью контроллера USB при использовании нескольких камер.
Для работы с двумя камерами и двумя потоками необходимо в конфигурационном файле /opt/artix-usb2rtsp/config.ini:
- задать параметры трансляции в секции
[video0]. - вручную добавить секцию
[video1]. - задать параметры трансляции в секции
[video1].
[video0] input = /dev/video0 output = rtsp://127.0.0.1:8554/video0 input.video_size = 1280x720 input.input_format = mjpeg input.framerate = 30 output.rtsp_transport = tcp output.framerate = 15 [video1] input = /dev/video1 output = rtsp://127.0.0.1:8554/video1 input.video_size = 1280x720 input.input_format = mjpeg input.framerate = 30 output.rtsp_transport = tcp output.framerate = 15
При работе с двумя камерами сервис artix-mediamtx выполняет ретрансляцию двух потоков, публикуя каждый поток по соответствующему RTSP-пути.
Работа без аппаратного ускорения
intel-media-va-driver-non-free, то для работы без аппаратного ускорения необходимо отключить его вручную.Для отключения аппаратного ускорения необходимо:
Создать файл
/etc/systemd/system/artix-usb2rtsp.service.d/override.conf.sudo touch /etc/systemd/system/artix-usb2rtsp.service.d/override.conf
Если директория
/etc/systemd/system/artix-usb2rtsp.service.d/не существует, то ее необходимо создать вручную.Добавить в файл настройку:
[Service] Environment=USE_VAAPI=0
Проверить, что изменения в файле
/etc/systemd/system/artix-usb2rtsp.service.d/override.confсохранены.Выполнить команду перечитывания конфигурации systemd.
systemctl daemon-reload
Перезапустить сервисы
artix-mediamtxиartix-usb2rtsp.systemctl restart artix-mediamtx.service artix-usb2rtsp.service
