Инструменты пользователя

Инструменты сайта


klipper:ustreamer

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
klipper:ustreamer [2022/11/10 12:09] korxifklipper:ustreamer [2022/11/14 13:02] (текущий) korxif
Строка 1: Строка 1:
-Первым делом надо остановить и отключить mjpg-streamer, если он есть в системе. Так как ustreamer вырос из mjpg-streamer'a+====== Замена mjpg-streamer на ustreamer ====== 
-Выполняем команды: + 
-<code>+===== Зачем и почему? ===== 
 + 
 +µstreamer (читается как мю-стример) это mjpg-streamer "на стероидах". Таблица различий есть на [[https://github.com/pikvm/ustreamer#µstreamer|странице проекта]]. Из достаточно полезного - он быстрее (кодирует jpeg в несколько потоков), умеет не падать, если отключить камеру. В сообществе есть пруфы, что на mjpg-streamer'e картинка с c270 сыпалась, а с мю-стримером все заработало без проблем. 
 + 
 +Как пишет сам разработчик
 +"Если вы собираетесь вести прямую трансляцию с веб-камеры на заднем дворе и вам нужно ее контролировать, используйте mjpg-streamer. Если вам нужно качественное изображение с высоким FPS — µStreamer в помощь". Мю-стример не умеет работать с камерами с сервоприводами и управлением фокусировкой, но нам это и не нужно. 
 + 
 +Ну и ложка дегтя - в kiauh mjpg-streamer на момент написания статьи пропалплюс есть инфа что его (mjpg-streamer) разломали. У него там половину библиотек умерло, вернее они обновились новыми и нужно уже разбираться что да как. 
 + 
 +<WRAP center round todo 60%> 
 +Здесь описывается локальная сборка, в идеале надо сделать пакет, но это, возможно, в будущем. 
 + 
 +</WRAP> 
 + 
 +Все, что делается по этой инструкции делается из unix-консоли. Т.е. первым делом надо поключиться к вашему уустройству с установленным Klipper по SSH (Putty, Xshell и подобное). Данный конкретный рецепт для OrangePI с установленной системой Raspbian. Для других устройств и OS смотрите сайт проекта µstreamer. 
 + 
 + 
 +===== Отключаем mjpg-streamer ===== 
 +Итак, если у нас уже был установлен mjpg-streamer, то прежде чем что-то делать, надо его отключитьЕсли его не было, сразу смотри следующий пункт. 
 + 
 +Выполняем две команды, первая останавливает процесс, вторая убирает его из автозагрузки
 +<code bash>
 sudo systemctl stop webcamd sudo systemctl stop webcamd
 sudo systemctl disable webcamd sudo systemctl disable webcamd
Строка 7: Строка 28:
 Такими действиями мы не удалили, но отключили mjpg-streamer. Такими действиями мы не удалили, но отключили mjpg-streamer.
  
-Далее нам надо собрать ustreamer. В принципе, [[https://github.com/pikvm/ustreamer|инструкция есть на домашней странице проекта]] на гитхабе+===== Установка ustreamer с нуля ====== 
 +Если до этого в системе не было стримера, то надо выполнить некоторые подготовительные действия.
  
 +А именно установить утилиты для сборки из исходного кода (уже могут быть, мы же ставили клиппер!) и набор свободных библиотек с открытым исходным кодом, которые позволяют записывать, конвертировать и передавать цифровые аудио- и видеозаписи в различных форматах, ffmpeg.
 +
 +<code bash>
 +sudo apt install build-essential ffmpeg
 +</code>
 +
 +
 +===== Сборка ustreamer =====
 +Далее нам надо собрать сам ustreamer. В принципе, [[https://github.com/pikvm/ustreamer#building|инструкция есть на домашней странице проекта]] на гитхабе.
 +
 +Пререквизиты для сборки make, gcc, libevent c поддержкой pthreads, libjpeg-turbo и libbsd.
 +
 +<code bash>
 +sudo apt install libevent-dev libjpeg62-turbo-dev libbsd-dev libgpiod-dev libsystemd-dev
 +</code>
 +
 +Собираем его (по-умолчанию в нашем домашнем каталоге, ~/, он же /home/klipper). Сборку делаем с поддержкой GPIO (не смог придумать кейс, но пусть будет) и поддержкой SYSTEMD (для автозапуска).
 +
 +<code bash>
 +git clone --depth=1 https://github.com/pikvm/ustreamer
 +cd ustreamer
 +WITH_GPIO=1 WITH_SYSTEMD=1 make
 +./ustreamer --help
 +</code>
 +
 +===== Установка ustreamer =====
 +В итоге, если все получилось, инсталлируем стример локально.
 +
 +<code bash> 
 +sudo make install
 +</code>
 +
 +После выполнения этой команды бинарник стримера будет установлен в /usr/local/bin/
 +
 +Дальше нам надо решить вопрос с автозапуском. Что нужно сделать описано [[https://github.com/pikvm/ustreamer/issues/16|здесь]]. Но мы приведем здесь последовательность действий, адаптированную под нашу систему.
 +
 +Первым делом надо убедиться, что установка прошла успешно:
 +
 +<code bash>
 +ls -l /usr/local/bin/ustreamer
 +-rwxr-xr-x 1 root root 419392 ноя 10 12:18 /usr/local/bin/ustreamer
 +</code>
 +У вас права доступа (-rwxr-xr-x) должны быть как в примере выше.
 +
 +Запускать процесс будем от имени пользователя klipper.
 +
 +Добавляем пользователя в группу video (он там уже должен быть, но хуже от команды точно не будет):
 +<code bash>
 +sudo usermod -a -G video klipper
 +</code>
 +
 +Далее нам нужно создать руками конфигурационный файл для systemd.
 +В нашем случае мы не будем делать как предлагает автор ustreamer'a, сделаем конфиг под конкретное видеоустройство, а именно /dev/video1 (если у вас камера на другом порту, то надо указывать его, конечно), а также, чтобы ustreamer "слушал" на порту 8080, там видеопоток ожидает клиппер.
 +
 +Используем наиболее привычный вам текстовый редактор в unix-среде (vim, nano, joe..):
 +
 +<code bash>
 +sudo nano /etc/systemd/system/ustreamer.service
 +</code>
 +
 +в файле пишем следующее (обратите внимание - формат, fps и качество задаются в ключах resolution, desired-fps и quality соответственно):
 +<code>
 +[Unit]
 +Description=uStreamer service
 +After=network.target
 +[Service]
 +Environment="SCRIPT_ARGS=1"
 +User=klipper
 +ExecStart=/usr/local/bin/ustreamer --process-name-prefix ustreamer-1 --log-level 0 --device /dev/video1 --device-timeout=8 --format=MJPEG --quality 80 --resolution 1280x720 --desired-fps=30 --host=0.0.0.0 --port=8080 --static /var/www/html/ustreamer-1/
 +[Install]
 +WantedBy=multi-user.target
 +</code>
 +
 +Включаем автозапуск стримера:
 +<code bash>
 +sudo systemctl enable ustreamer.service
 +</code>
 +
 +и, наконец, запускаем сервис:
 +
 +<code bash>
 +sudo systemctl start ustreamer.service
 +</code>
 +
 +Убеждаемся, что все запустилось:
 +<code bash>
 +systemctl status ustreamer                                                                                                                                                                                                                                                                                                     <master>
 +● ustreamer.service - uStreamer service
 +     Loaded: loaded (/etc/systemd/system/ustreamer.service; enabled; vendor preset: enabled)
 +     Active: active (running) since Thu 2022-11-10 12:44:07 MSK; 4s ago
 +   Main PID: 4544 (main)
 +      Tasks: 7 (limit: 2218)
 +     Memory: 3.3M
 +        CPU: 1.287s
 +     CGroup: /system.slice/ustreamer.service
 +             └─4544 ustreamer-1: /usr/local/bin/ustreamer --process-name-prefix ustreamer-1 --log-level 0 --device /dev/video1 --device-timeout=8 --quality 100 --resolution 1280x720 --desired-fps=30 --host=0.0.0.0 --port=8080 --static /var/www/html/ustreamer-1/
 +</code>
 +
 +
 +Так как мы жестко привязали стример к порту 8080, видеопоток с камеры должен быть доступен по адресу http://pi_ip:8080/stream, где //pi_ip// - IP-адрес вашего одноплатника с установленным Klipper на котором мы все только что собирали.
 +
 +Если вы настраиваете камеру впервые - идем в web-интерфейс Klipper, раздел "Камеры" и добавляем подключенную камеру. Тип потока - MJPEG-поток, URL камеры - http://127.0.0.1:8080/stream
 +
 +Этот же самый URL должен быть в telegram.cfg, если вы ставили телеграм-бота. 
 +Должно быть что-то типа такого:
 +<code>
 +[camera]
 +host: http://127.0.0.1:8080/stream
 +</code>
  
 +Финально проверяем в интерфейсе клиппера - всё должно работать.
 +{{ :klipper:ustreamer:c270.png?400 |}}
  
klipper/ustreamer.1668071372.txt.gz · Последнее изменение: 2022/11/10 12:09 — korxif