Механизм Смены Фонов — Mikulski
Наложение сайта

Механизм Смены Фонов

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

[embedyt] https://www.youtube.com/watch?v=zfZ67tNCUYI[/embedyt]

Идея

Идея о том, чтобы добавить в свой стрим визуализации возникла еще до старта самой первой трансляции и появления зеленого экрана. Поэтому первым делом, что я начал искать это программы-визуализаторы, способные обрабатывать входящий звуковой сигнал в реальном времени. Этот поиск, на удивление, занял несколько продолжительных вечеров, но так и не удалось найти того, что мне нужно за исключением пары платных программ. Только уже когда я отчаялся, мне случайно попался на глаза обзор на Ютубе с программой Plane9 (https://www.plane9.com/). Бесплатная и функциональная. А еще  недавно Flamberg подсказал, что для этих целей также можно использовать плагины для Winamp (Milkdrop или projectM). Надо лишь немного поковыряться с настройками входного/выходного сигналов (по сути, хитрость лишь в том, что в Winamp надо нажать CTRL+L (Open Location) и напечатать linein:// , чтобы Winamp начала принимать сигнал с входящего источника,затем нажать Playи запустить плагин с визуализатором).
Зеленого экрана не было, поэтому я просто делал визуализатор полупрозрачным и включал его периодически (сперва вручную, затем через скрипт для  OBS – Visibility Timer https://obsproject.com/forum/resources/visibility-timer.638/). Понятно, что это был компромиссный вариант.
Когда появился зеленый экран стало повеселее. Я накачал с https://pixabay.com/ бесплатных видео, смонтировал их в один 30- минутный ролик, скомбинировал их с визуализатором от Plane9 и установил эту пачку на задний план.
Какое-то время все именно так и оставалось, до тех пор, пока я не стал больше времени проводить за просмотром других стримеров и не увидел, как по команде из чата запускаются звуковые файлы. Так я открыл для себя Streamlabs Chatbot. Я добавил звуки, перенес туда команды с другого бота, бегло просмотрел мануал и на этом остановился.

Смена сцен

В конце концов, я наткнулся на стрим Facelessclown и увидел там, как командами из чата, меняются сцены и запускаются гифки прямо на экране. Он-то и подсказал мне, что нужен Streamlabs Chatbot (который у меня уже был установлен) и скрипт для него OBS Remote Parameter. Попотев пару часов, разбираясь в инструкциях и в настройках, я все-таки добился результата (подробная статья по настройке этого скрипта есть в предыдущих статьях). Так я научился менять сцены и включать источники OBS, а также глубже ушел в возможности Streamlabs Chatbot.
Но на самом деле, для этих целей необязательно пользоваться именно Streamlabs Chatbot: те же самые функции могут выполнять виртуальные стримдеки навроде Lioranboard или TouchPortal (и даже больше: они еще умеют включать/выключать фильтры источников — а это целое новое пространство для экспериментов). Но т. к. я узнал о них позднее, а Streamlabs Chatbot уже вовсю использовался, я решил остаться на нем.

Первая структура

Первоначальный принцип был таков:
В OBS создавалась новая Сцена (именно сцена, а не источник) с названием фона (напр. Neon3). В эту сцену добавлялась основная Сцена (напр. Main), где были все алерты, виджеты, камеры и т. д. Затем добавлялся новый медиа-источник с видео и ставился нижним слоем под сценой Main, внутри сцены Neon3. Далее в Streamlabs Chatbot создавалась команда !neon3, которая и переключала сцены. Соответственно, под каждый фон создавалась отдельная сцена и отдельная команда.
От Plane9 пришлось отказаться, т. к. он сильно грузил мой процессор и ПК не смог без сильных лагов воспроизводить видео со сцен вместе с этим визуализатором.
Вообще, возможность OBSдобавления сцены в сцену это очень удобный и мощный инструмент, который помогает сэкономить кучу времени в отдельных случаях, а также создавать сумасшедшие визуальные эффекты (просто поэкспериментируйте — например, цветной шлейф моего силуэта построен как раз на этом приеме).
Собственно, вот и все. Максимально простой механизм. И если таких сцен немного и не хочется ставить Streamlabs Chatbot, то всегда можно воспользоваться виртуальными стрим-деками.
В моем случае, количество фонов росло с невероятной скоростью, так что в конце концов я столкнулся с тем, что оперативная память моего компьютера забилась под завязку (OBS при запуске подгружает все сцены и источники в оперативку). И я решил, что лимит достигнут (это было что-то в районе 70-80 сцен) — о чем и объявил в чате Дискорда и после небольшой дискуссии с мозговым штурмом, все затихло. Но ненадолго…

MediaRotation

SpaceMelodyLab, являясь программистом стремительно ворвался с простым и изящным решением, как можно оптимизировать механизм смены фонов и преодолеть лимит оперативной памяти. И он представил рабочий прототип буквально за пару дней!
Суть задумки в том, что все сцены теперь заменяет всего один (!) источник Браузера (html страница), находящийся на жестком диске компьютера. В эту страничку вшит javascript, который считывает каждые несколько секунд текстовый файл, содержащий путь к медиа (напр. E:/files/neon3.mp4) и если содержимое текстового файла меняется, то обновляет динамически src тега страницы (меняет отображаемый файл).
Содержимое текстового же файла переписывает Streamlabs Chatbot, способный через параметр $overwritefile в респонсе команды переписывать текст.
Таким образом скрипт OBS Remote Parameters уже не требуется, а нагрузка с оперативной памяти, переходит на жесткий диск.
В каждой команде Streamlabs Chatbot, привязанной к конкретному фону просто был переписан респонс на перепись файла с путем к нему:
напр. Команда: !neon3 -> Респонс: $overwritefile(“E:/media.txt”, “files\neon3.mp4”)
Плюс ко всему для фонов, которые предлагает зритель через награду за очки канала, скрипт предусматривал таймер с обратным отсчетом, который блокировал смену фона на заданное время.
Движок получил название Mediarotation и я думал, что лучше уже и быть не может. Но спустя несколько месяцев SpaceMelodyLab скидывает мне в личные сообщения совершенно новый скрипт..

SML Widget

Суть осталась прежней: Браузер-источник, перепись файла через Streamlabs Chatbot и таймер.
Но!
Теперь все пути к нужным файлам (с присвоением фону Id и возможностью их группировать по категориям) хранятся в одном текстовом файле, а в StreamlabsChatbot за исполнение отвечает теперь ВСЕГО ОДНА команда! Плюс ко всему, таймер начал жить своей отдельной жизнью (теперь его можно ставить на паузу и назначать любое время отсчета под разные команды).
Грубо говоря, если раньше мне приходилось создавать новую команду под каждый новый фон и прописывать путь к нужному файлу в респонсе этой команды, то теперь достаточно прописать id фона и путь к нему только в source-файле (текстовый файл, являющийся базой данных). А единственная команда в Streamlabs Chatbot:!bg “названиефона“переписывает файл, и скрипт по присвоенному id находит фон и включает его.
Это шикарная оптимизация и экономия времени.
Скрипт все еще продолжает улучшаться и дорабатываться. И  SpaceMelodyLab планирует опубликовать его на GitHub в будущем. Конечно, учитывая, что для него требуется Streamlabs Chatbot или иной инструмент, способный переписывать текстовые файлы по запросу из чата, и не всем нужно такое количество фонов (на данный момент их 102), то этот инструмент можно считать весьма узко-направленным. Но все же может пригодиться тем стримерам, кто хочет сделать что-то подобное  и имеет малые мощности ПК, чтобы создавать много сцен в OBS.

Собственно, вот так все устроено и работает. Я постарался рассказать все в деталях и дать как можно больше полезной информации.
Конечно же, огромная благодарность SpaceMelodyLab за потраченные силы и время на разработку этого чуда и всю поддержку, которую он мне оказывает.
Обязательно подпишитесь на его каналы на Твиче и Саундклауд. Он сочиняет красивую музыку в Ableton прямо на стримах:

https://www.twitch.tv/spacemelodylab

https://soundcloud.com/spacemelodylab

https://twitter.com/spacemelodylab