Автоматический перезапуск OBS Studio при перезагрузке системы и при краше OBS Studio.

Автоматический перезапуск OBS Studio при перезагрузке системы и при краше OBS Studio.

Mike ĪLΣΣÇӇ S.

В этой статье я постараюсь рассказать о некоторых особенностях OBS и Windows, о которых многие не знают, и которые могут быть жизненно необходимы при работе над некоторыми стриминговыми проектами и не только.
В целом, приложение данных опций ограничивается только вашей фантазией.

...1000 применений, и все их придумать должен ты сам. ©

Дано:

Проект с трансляциями уличных камер на Youtube.
В качестве сервера:
AMD FX8320E
16 GB RAM
GTX550Ti
OBS Studio
В качестве камер:
2 Ip Камеры 1080/30р с битрейтом по 8000 кБит/с каждая
В качестве платформы:
Две трансляции на Youtube с разными ключами потока.
Ссылка на проект: https://www.youtube.com/c/LuchiLive

Проблемы:

  • Периодические рандомные падения и вылеты OBS,
  • Периодические перебои с энергоснабжением,
  • Временные перебои с интернет подключением

Если последнее решилось в недавних обновлениях OBS, когда появился функционал автоматического переподключения при обрыве соединения, то первые две проблемы, увы, пришлось решать самому.

Мне было необходимо создать систему, в которой трансляция не прерывается, а в случае если это происходит - восстанавливается всё самостоятельно, поскольку всё время, которое я проводил эксперименты над проектом, пришлось на карантин 2020 года - я, постоянно находясь дома, вынужденно и непрерывно мониторил состояние "DIY-сервера", не отвалился ли интернет, не упала ли OBS, не вырубилось ли питание, и так по кругу. В случае, когда происходило падение OBS или вырубался сервер - приходилось ручками запускать OBS, выбирать нужные сцены, забивать настройки трансляций и запускать их снова и снова.
В какой-то момент мне это капитально надоело и встал вопрос, либо свернуть проект, либо всё таки вспомнить, что сейчас 21-й век и всё, что приходится делать более 2-х раз - можно и нужно автоматизировать.

Решение:

Решение оказалось довольно простым, хотя при беглом Google'инге я нашел не так уж и много готовых рецептов. Попробую поэтапно рассказать как это реализовал я.

Дисклеймер: Я не профессионал ни в сфере стрим-технологий, ни в сфере IT, поэтому решения применялись максимально простые, топорные и в меру надежные. Возможно, некоторые вещи сделаны либо крайне нерационально, либо избыточно сложно, но это работает.
"Если это тупо, но работает - это не тупо."

Итак, задачи:

Запуск двух инстансов (копий) OBS Studio со своими конфигурациями. Автоматизация запуска OBS при перезагрузке сервера. Автоматизация перезапуска OBS в случае краша приложения.

ВАЖНО! Предварительно необходимо в BIOS выставить настройку электропитания компьютера таким образом, чтобы при потере питания, если компьютер был включен в этот момент, он так же оставался "включен", то есть сам включался при подаче электричества. Тогда при потере питания и последующем его возвращении - сервер автоматически загрузится заново и все инструкции, которые мы сейчас создадим - выполнятся при его включении.

1 этап: Запуск 2-х инстансов (копий) OBS, при этом каждая со своим конфигом. Профиль и сцены.

В моем случае в каждой копии OBS шла трансляция своей камеры на свой отдельный стрим на Youtube.
Настройка источников, а именно разных камер - производится через "Коллекцию сцен".

Коллекция сцен в OBS Studio.

Коллекция сцен включает в себя сцены, их "источники" и прочее, что связано именно с входящим контентом.

Всё, что касается настроек Энкодера, настроек записи, разрешения выходного видеопотока, битрейта и в том числе ключа потока, что для меня критично, записывается в "Профиль".

Профили OBS Studio
Важно! Названия профиля и коллекции сцен не должны иметь пробелов, даже через "_", по моему опыту - это не работает на следующих этапах.

Мне было необходимо загружать 2 копии OBS, где каждая запускается со своим, заранее выбранными, Профилем и Коллекцией сцен.

Запускаете OBS, создаете сцену, которая будет работать в вашей трансляции.
Переименовываете её согласно условию под фото.
Настраиваете Разрешение видео, настраиваете Encoder, битрейт и всё, что вам необходимо. Переходите в "Профили" и переименовываете ваш текущий профиль. Можете на всякий случай экспортировать эти настройки.

У меня это CAM1PROFILE и CAM1SC.
Из названия понятно, что из них что.

"Параметры Запуска"

Список параметров, которые позволяют запускать OBS с заранее определенными "настройками". Начать эфир сразу после запуска, отключить уведомление о потерянных файлах, начать запись сразу после запуска и так далее.

Полный список этих параметров находится в Wiki по OBS

Ссылка: https://obsproject.com/wiki/Launch-Parameters
Скриншот с сайта OBS WIKI.


Чтобы реализовать этот функционал есть 2 варианта:

  1. Прописать в ярлыке OBS нужные параметры.
  2. Создать ".BAT" файл с небольшим скриптом, который будет запускать OBS с нужными нам параметрами.
    Забегая вперед - этот вариант наиболее предпочтителен в нашем случае.

Создаём текстовый файл. Открываем любым редактором и пишем в нем следующий текст:

@Echo off
cd "C:\Program Files\obs-studio\bin\64bit"
start obs64(1).exe --profile "CAM1PROFILE" --collection "CAM1SC" --startstreaming --multi --minimize-to-tray
exit

Упрощенные для понимания комментарии для тех, кто совсем не понимает, что делаем на этом этапе.

@Echo off - сделает невидимым выполнение всех следующих команд.
cd "C:\Program Files\obs-studio\bin\64bit" - в кавычках ваш путь к "exe" файлу OBS
start obs64(1).exe - команда на запуск OBS.

ВАЖНО! В моем случае мне пришлось переименовать EXE файл для упрощения идентификации процесса в системе на последнем этапе. Если вы будете таким образом запускать только 1 копию OBS - можете убрать цифру в скобках и оставить просто obs64.exe.
Хотя если вы не будете запускать другую копию OBS - всё это не имеет смысла, т.к. OBS запускается с последними настройками, которые были до краша/вылета/падения. В Вашем случае достаточно просто перейти на Этап 2 и сразу забросить в упомянутую папку exe'шник OBS.

--profile "CAM1PROFILE" - параметр загрузки профиля.
--collection "CAM1SC" - параметр загрузки коллекции сцен.
--startstreaming -параметр автоматически запускает трансляцию.
--multi -скрывает предупреждения о запуске второй копии OBS.
--minimize-to-tray -параметр сворачивает OBS в трэй (лоток).
exit -параметр совершает выход из командной строки после выполнения скрипта.

Теперь, сохраняем текстовый файл, называем его "OBS_Stream_Camera_1" и меняем ему расширение на ".bat".
Если вы кликните дважды на этот файл, то OBS запустится с именно с этими параметрами.

Проделываете всю процедуру второй раз для второго комплекта настроек.
Во втором BAT файле указываете второй комплект сцена+профиль.
Для того, чтобы реализовать последний этап, заранее сделайте две копии exe файла OBS64(1).exe и OBS64(2).exe. В каждом БАТ'нике ссылайтесь на свой exe'шник.
Теперь у вас есть два .bat файла, которые обращаются каждый к своему exe файлу OBS. Каждый для своего инстанса OBS. У каждого свой профиль с ключом потока и набор источников.


2 Этап: Автоматизация запуска OBS при перезагрузке сервера.

Этот этап крайне простой и крайне короткий.

Нажимаем Win+R.
Откроется окно "Выполнить".
Пишем там команду:

shell:common startup

Откроется папка внутри Windows с адресом:

С:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

В эту папку необходимо поместить оба BAT файла.
Теперь при запуске системы будет происходить выполнение этих BAT'ников, и следовательно - запуск двух инстансов OBS с заранее прописанной конфигурацией. Согласно содержимому BAT файлов - трансляция так же будет начинаться незамедлительно.

3 Этап: Автоматизация перезапуска OBS при вылете приложения.

Последняя задача, которая будет реализована в рамках этой статьи.
Для этого нам понадобится сделать, в сущности, всего лишь 2 действия:

  1. Создать 2 Watchdog'а в виде BAT файлов, которые будут проверять выполняется ли условие: Есть ли в системе процесс с участием obs64(1).exe и obs64(2).exe, для этого мы как раз раскопировали и переименовали exe'шники ранее. Так, в системе будет отображаться два приложения с соответствующими названиями. OBS64(1).exe - для первого инстанса OBS, который кодирует 1-ю трансляцию, и OBS64(2).exe - для второго инстанса OBS, который кодирует 2-ю трансляцию. Простейший способ идентификации нужного инстанса в системе.
  2. Автоматизировать запуск BAT файлов Watchdog'и по расписанию через планировщик задач Windows.

Начнем с 1 пункта.

Создаем текстовый файл со следующим текстом:

Set ProcessName=obs64(1).exe
TaskList /FI "ImageName EQ %ProcessName%" 2>nul|Find /I "%ProcessName%">nul||(
Start "" "C:\Users\iLeech\OBS StartUpConfigs\OBS_Stream_Camera_1.bat"
)

Сохранитесь и измените расширение файла на ".bat".

Краткий комментарий

Set ProcessName=obs64(1).exe - здесь указано имя процесса, который мы отслеживаем.
Start "" "C:\Users\iLeech\OBS StartUpConfigs\OBS_Stream_Camera_1.bat" - здесь мы указываем какой BAT файл запускать в случае, если искомый процесс не обнаружен.

Создайте второй BAT файл, который будет мониторить второй exe'шник OBS и ссылаться на запуск второго BAT'ника под второй инстанс трансляции.
Назовите BAT'ники Watchdog_1 и Watchdog_2, например. Я обозвал их так для удобства.

Продолжим со 2 пунктом

Жмём Win+R

В поле ввода вбиваем:

taskschd.msc

Откроется окно планировщика Windows.

Жмем "Создать задачу..."

Скриншот окна создания задачи

Вводим имя, например Watchdog.
Описание - по вкусу. Можете оставить комментарий, чтобы не забыть.
Переключатель в положение "Выполнять только для пользователей вошедших в систему" и "Выполнить с наивысшими правами".
Переходим во вкладку "Триггеры". Жмем "Создать".

Окно создания Триггера.

Выставляем параметры запуска этой задачи. С этими настройками она будет выполняться ежедневно, каждый час с момента создания. Этого более чем достаточно для нашей задачи.


Переходим во вкладку "Действия". Жмем "Создать".

Создание "Действия"

Здесь мы выбираем сначала Watchdog_1.bat, потом жмем "ОК", и добавляем второе действие, запуск Watchdog_2.bat.

Два добавленных действия в задачу.

Теперь переходим во вкладку "Параметры".

Выставляем такие параметры. Жмем "ОК".

Теперь раз в час будут запускаться два скрипта, которые проверяют, запущена ли OBS или нет. Если одна или обе копии OBS не запущены - то скрипты это увидят и запустят соответствующие BAT'ники для запуска OBS с нужным набором Профиль+Сцены.


Могу вас поздравить, если вы всё сделали правильно - всё будет успешно работать. В моём случае всё сработало довольно просто и легко.
Проверки и тесты показали, что сервер работает успешно, в случае обрывов электричества или вылетов OBS восстанавливается самостоятельно.


Успехов в ваших экспериментах!

Report Page