Функционал предназначен для организации RTSP-трансляции с камеры кассы самообслуживания (КСО) с целью передачи видеопотока во внешние системы мониторинга и антифрода.

Видеопоток передается в формате H.264.

Архитектура RTSP-трансляции

  1. Источник (Публикующий):

  2. Медиасервер (RTSP-сервер):

  3. Клиент (Потребитель):

Установка

На кассе (КСО)

Необходимо использовать пакеты из репозитория Artix.

Для работы необходимо:

  1. Установить пакеты:
    1. artix-usb2rtsp – сервис захвата видео. При первом запуске сервис необходимо включить вручную.

      sudo apt install artix-usb2rtsp


      Вместе с сервисом будут установлены:

      1. artix-mediamtx – сервис RTSP-сервера. При первом запуске сервис необходимо включить вручную.
      2. программная библиотека x264 – для кодирования в H.264 без использования аппаратного ускорения VAAPI.


    2. intel-media-va-driver-non-free – пакет драйверов для работы с использованием аппаратного ускорения VAAPI.

      sudo apt install intel-media-va-driver-non-free


      После установки пакета аппаратное ускорение активируется автоматически.


  2. Выполнить команду перечитывания конфигурации systemd.

    systemctl daemon-reload


  3. Включить и добавить в автозапуск сервис RTSP-сервера.

    systemctl enable --now artix-mediamtx.service


  4. Включить и добавить в автозапуск сервис захвата видео.

    systemctl enable --now artix-usb2rtsp.service


  5. Перезагрузить кассу.

Для проверки статуса работы запущенных сервисов используется команда:

systemctl status artix-mediamtx.service artix-usb2rtsp.service --no-pager -l

Прием потока на клиентской машине / удаленном хосте

Для приема и просмотра RTSP-потока необходимо:

  1. На клиентской машине установить программное обеспечение, поддерживающее работу с протоколом RTSP и декодирование видео в формате H.264:

  2. В интерфейсе установленного программного обеспечения задать адрес подключения к медиасерверу кассы:

Для подключения к трансляции, запущенной с камеры 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
  • udp
  • tcp
Транспортный протокол нижнего уровня для исходящего соединения

По умолчанию udp

  • udp – меньше задержек, но возможна потеря пакетов при перегрузках,
  • tcp – наиболее надежный для плохих сетей, исключает потерю кадров.
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:

  1. задать параметры трансляции в секции [video0].
  2. вручную добавить секцию [video1].
  3. задать параметры трансляции в секции [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, то для работы без аппаратного ускорения необходимо отключить его вручную.

Для отключения аппаратного ускорения необходимо:

  1. Создать файл /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/ не существует, то ее необходимо создать вручную.


  2. Добавить в файл настройку:

    [Service]
    Environment=USE_VAAPI=0


  3. Проверить, что изменения в файле /etc/systemd/system/artix-usb2rtsp.service.d/override.conf сохранены.

  4. Выполнить команду перечитывания конфигурации systemd.

    systemctl daemon-reload


  5. Перезапустить сервисы artix-mediamtx и artix-usb2rtsp.

    systemctl restart artix-mediamtx.service artix-usb2rtsp.service