Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: Автоматизация трансляции на YouTube через ffmpeg  (Прочитано 1800 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Storks

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Всем привет) Вопрос от орнитолога-любителя.

Есть три IP камеры видеонаблюдения в гнездах птиц (аисты, синицы, скворцы)

С каждой камеры веду отдельную круглосуточную трансляцию на YouTube.

Для этого арендую VPS на Ubunto 16.04, 1 проц, 512 mb, 10 Gb ssd.
Запускаю  через crontab -e три ffmpeg  со своими паролями  для каждой камеры и трансляции.
ffmpeg   -re -rtsp_transport tcp  -i "rtsp://***:****@***.***.***"  -c:a libmp3lame -ab 128k -ar 44100 -c:v copy -threads 2 -bufsize 4000k -f flv -crf 0 -minrate 5000k -maxrate 5000k -tune zerolatency "rtmp://a.rtmp.youtube.com/live2/************"
Проблема в том, что ffmpeg периодически через 5-6 часов  вылетает и требуется его перезапустить.

Чтобы не отслеживать эти зависания, в crontab настроил запуск ffmpeg каждый час.
Это вроде работает, но накапливаются незавершенные процессы ffmpeg. Трансляции глючат и приходится перезапускать сервер или убивать все ffmpeg killall вручную.

Опыты в Linux у меня две недели.Подскажите, пожалуйста, как мне решить эту автоматизацию.Какой должен быть правильный алгоритм в данном случае?

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6725
  • 20% Cooler
    • Просмотр профиля
Используйте systemd вместо crontab.
Примерный порядок действий:
systemctl edit --force --full ffmpeg.service
Cодержимое:
[Unit]
Description=FFMpeg Youtube stream
After=network-online.target

[Service]
Type=simple
Restart=always
RestartSec=30
ExecStart=/usr/bin/ffmpeg -re -rtsp_transport tcp  -i "rtsp://***:****@***.***.***"  -c:a libmp3lame -ab 128k -ar 44100 -c:v copy -threads 2 -bufsize 4000k -f flv -crf 0 -minrate 5000k -maxrate 5000k -tune zerolatency "rtmp://a.rtmp.youtube.com/live2/************"

[Install]
WantedBy=multi-user.target

systemctl daemon-reload
systemctl enable ffmpeg.service
systemctl start ffmpeg.service

Логи тут
journalctl -u ffmpeg.service
Подробнее


(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 18 Марта 2022, 12:15:21 от ALiEN175 »
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

Оффлайн Storks

  • Автор темы
  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
Спасибо. Начну изучать.

Пользователь добавил сообщение 18 Марта 2022, 14:10:19:
А можно ссылочки? 
Не увидел сразу. Сейчас в работе две камеры, как раз транслирую и одновременно  изучаю возможности Linux.
Поэтому иногда зависает.
Синичник в ожидании жильцов https://youtu.be/hCoTirbbUwY
Кормушка для птиц https://youtu.be/rxmJ1DkjRZI
Запись трансляции из гнезда аистов https://www.youtube.com/watch?v=epocsWdsxrI


Пользователь добавил сообщение 18 Марта 2022, 22:28:22:
Используйте systemd вместо crontab.
Спасибо за помощь. Сделал для одной камеры. Все получилось сходу. Тестирую на стабильность.
Для вторй камеры я должен второй unit файл создать? Или можно  добавить строчку ffpmeg... с данными второй камеры?
Или вообще лучше скрипт написать и его запускать.

И второй вопрос. Понял, что ffmpeg будет запускаться каждые 30 сек, я увелчил до 300 сек. А как ffmpeg будет останавливаться?
Я вижу, через top, что новых процессов не появляется. Только не пойму почему. Где его останавливают?
« Последнее редактирование: 18 Марта 2022, 22:28:22 от Storks »

Оффлайн ALiEN

  • Администратор
  • Старожил
  • *
  • Сообщений: 6725
  • 20% Cooler
    • Просмотр профиля
Для вторй камеры я должен второй unit файл создать?
Да, лучше другой. Для создания просто замените ffmpeg.service на, допустим, ffmpeg2.service
Понял, что ffmpeg будет запускаться каждые 30 сек, я увелчил до 300 сек. А как ffmpeg будет останавливаться?
Сервис будет работать пока не упадёт, либо до получения команды остановки. 30 секунд - это время перезапуска сервиса в случае ошибки.
для остановки
systemctl stop ffmpeg.service
🖥 AsRock B550M Pro4 :: AMD Ryzen 5 3600 :: 16 GB DDR4 :: AMD Radeon RX 6600 :: XFCE
💻 ACER 5750G :: Intel Core i5-2450M :: 6 GB DDR3 :: GeForce GT 630M :: XFCE

 

Страница сгенерирована за 0.047 секунд. Запросов: 25.