Введение в разработку плагинов для OBS Studio

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

Почему именно C++?

C++ — это родной язык для разработки плагинов OBS, предлагающий прямой доступ ко всем функциям и возможностям OBS Studio. Хотя языки сценариев, такие как Lua и Python, также поддерживаются, C++ обеспечивает наиболее полный и производительный способ создания плагинов.

Настройка среды разработки

Прежде чем приступить к написанию кода, необходимо настроить среду разработки. Вот шаги, которые помогут вам начать:

Загрузка шаблона плагина OBS

Первый шаг — загрузить шаблон плагина OBS из официального репозитория OBS GitHub. Этот шаблон служит надёжной основой для разработки вашего плагина.

git clone https://github.com/obsproject/obs-plugintemplate.git

Установка необходимых инструментов

Вам понадобится несколько инструментов для сборки и компиляции вашего плагина:

  • Microsoft Visual Studio: рекомендуется для пользователей Windows. Убедитесь, что у вас установлено расширение C++.
  • CMake: генератор системы сборки для разных платформ.
  • Компилятор C++: убедитесь, что ваш компилятор поддерживает C++11.
  • Фреймворк QT: OBS использует QT для своего графического интерфейса, поэтому вам необходимо установить QT 5.9.2 или совместимую версию.

Сборка зависимостей

Вот зависимости, которые должны присутствовать в вашей системе:

  • CMake.
  • Компилятор C++.
  • obs-studio (совместим с версией 20.0.1 или более поздней).
  • QT Framework (5.9.2 или совместимая версия).
  • libconfig (версия 1.5 или более поздняя).
  • libOpencastIngest (если применимо для ваших конкретных потребностей плагина).

Пошаговое руководство по созданию плагина

Шаг 1: настройте плагин

Откройте файл build.json в каталоге шаблонов плагинов. Здесь вам нужно изменить название плагина и другие детали в соответствии с вашим проектом.

{
  "name": "YourPluginName",
  "description": "Краткое описание вашего плагина",
  "version": "1.0.0",
  "author": "Ваше имя"
}

Шаг 2: первоначальное тестирование плагина

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

  • На Linux:
mkdir build
cd build/
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build .
  • В Windows (с использованием MinGW):
mkdir build
cd build/
cmake -G "Visual Studio 15 2017" -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release

Скопируйте скомпилированный файл DLL в каталог плагинов OBS и перезапустите OBS, чтобы проверить, распознаётся ли ваш плагин.

Шаг 3: добавление базового графического интерфейса в плагин

Чтобы добавить графический интерфейс в ваш плагин, вам нужно использовать фреймворк QT. Вот пример того, как вы можете создать простой док-виджет:

#include <obs-module.h>
#include <obs-frontend-api.h>
#include <QDockWidget>
#include <QMainWindow>
#include <QVBoxLayout>

OBS_DECLARE_MODULE()

OBS_MODULE_USE_DEFAULT_LOCALE(PLUGIN_NAME, "en-US")

class CustomDockWidget : public QDockWidget {
public:
    CustomDockWidget(QWidget *parent = nullptr) : QDockWidget(parent) {
        obs_log(LOG_INFO, "Creating CustomDockWidget");
        QWidget *content = new QWidget(this);
        QVBoxLayout *layout = new QVBoxLayout(content);
        // Добавьте здесь свои элементы графического интерфейса
        setWidget(content);
    }
};

Шаг 4: интеграция с API OBS

API OBS обширен и хорошо документирован. Вот как вы можете взаимодействовать с API OBS, например, для добавления источника:

#include <obs.h>

void add_source() {
    obs_source_t *source = obs_source_create("text_gdiplus", "MyTextSource", NULL, NULL);
    if (source) {
        obs_scene_t *scene = obs_frontend_get_current_scene();
        if (scene) {
            obs_sceneitem_t *item = obs_scene_add(scene, source);
            if (item) {
                obs_sceneitem_set_visible(item, true);
            }
        }
        obs_source_release(source);
    }
}

Пример плагина: простой таймер обратного отсчёта

Давайте создадим простой плагин таймера обратного отсчёта, чтобы проиллюстрировать процесс.

Шаг 1: создайте структуру плагина

Создайте новый каталог для вашего плагина и скопируйте необходимые файлы из шаблона плагина OBS.

Шаг 2: определите логику обратного отсчёта

Вот базовый пример того, как можно реализовать таймер обратного отсчёта:

#include <obs-module.h>
#include <obs-frontend-api.h>
#include <QTimer>
#include <QLabel>

class CountdownTimer : public QDockWidget {
public:
    CountdownTimer(QWidget *parent = nullptr) : QDockWidget(parent) {
        QWidget *content = new QWidget(this);
        QVBoxLayout *layout = new QVBoxLayout(content);
        QLabel *label = new QLabel("Обратный отсчёт: 10 секунд", content);
        layout->addWidget(label);
        setWidget(content);

        QTimer *timer = new QTimer(this);
        connect(timer, &QTimer::timeout, [label]() {
            static int seconds = 10;
            label->setText(QString("Обратный отсчёт: %1 секунд").arg(seconds));
            if (--seconds == 0) {
                timer->stop();
            }
        });
        timer->start(1000); // 1000 миллисекунд = 1 секунда
    }
};

Шаг 3: зарегистрируйте плагин

Зарегистрируйте свой плагин в OBS с помощью макроса OBS_DECLARE_MODULE:

OBS_DECLARE_MODULE()

OBS_MODULE_USE_DEFAULT_LOCALE(PLUGIN_NAME, "en-US")

bool obs_module_load(void) {
    // Создайте и зарегистрируйте здесь свой плагин
    return true;
}

void obs_module_unload(void) {
    // Очистите здесь
}

Диаграмма: поток инициализации плагина

sequenceDiagram participant OBS participant Plugin participant QT Note over OBS,Plugin: Инициализация плагина OBS->>Plugin: Загрузить плагин Plugin->>QT: Инициализировать QT QT->>Plugin: Создать элементы GUI Plugin->>OBS: Зарегистрировать плагин OBS->>Plugin: Вызвать obs_module_load() Plugin->>OBS: Добавить источники/настройки/и т.д. Note over OBS,Plugin: Плагин готов

Заключение

Разработка плагинов для OBS Studio на C++ — это мощный способ расширить функциональность этого универсального программного обеспечения для потоковой передачи. Имея под рукой нужные инструменты, немного терпения и некоторые навыки кодирования, вы можете создавать плагины, улучшающие качество потоковой передачи. Будь то добавление простого таймера обратного отсчёта или сложного переключателя сцен, возможности безграничны.

Помните, сообщество OBS активно и оказывает поддержку, предоставляя обширную документацию и форумы, которые помогут вам справиться с любыми трудностями. Итак, приступайте к работе, проявляйте творческий подход и сделайте OBS Studio ещё более удивительной!