Автоматический перезапуск 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.
Настройка источников, а именно разных камер - производится через "Коллекцию сцен".

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

Важно! Названия профиля и коллекции сцен не должны иметь пробелов, даже через "_", по моему опыту - это не работает на следующих этапах.
Мне было необходимо загружать 2 копии OBS, где каждая запускается со своим, заранее выбранными, Профилем и Коллекцией сцен.
Запускаете OBS, создаете сцену, которая будет работать в вашей трансляции.
Переименовываете её согласно условию под фото.
Настраиваете Разрешение видео, настраиваете Encoder, битрейт и всё, что вам необходимо. Переходите в "Профили" и переименовываете ваш текущий профиль. Можете на всякий случай экспортировать эти настройки.
У меня это CAM1PROFILE и CAM1SC.
Из названия понятно, что из них что.
"Параметры Запуска"
Список параметров, которые позволяют запускать OBS с заранее определенными "настройками". Начать эфир сразу после запуска, отключить уведомление о потерянных файлах, начать запись сразу после запуска и так далее.
Полный список этих параметров находится в Wiki по OBS
Ссылка: https://obsproject.com/wiki/Launch-Parameters

Чтобы реализовать этот функционал есть 2 варианта:
- Прописать в ярлыке OBS нужные параметры.
- Создать ".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 действия:
- Создать 2 Watchdog'а в виде BAT файлов, которые будут проверять выполняется ли условие: Есть ли в системе процесс с участием obs64(1).exe и obs64(2).exe, для этого мы как раз раскопировали и переименовали exe'шники ранее. Так, в системе будет отображаться два приложения с соответствующими названиями. OBS64(1).exe - для первого инстанса OBS, который кодирует 1-ю трансляцию, и OBS64(2).exe - для второго инстанса OBS, который кодирует 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 восстанавливается самостоятельно.
Успехов в ваших экспериментах!