Когда-нибудь возникало ощущение, что стриминговому программному обеспечению не хватает какой-то одной функции, но подходящего плагина найти не удалось? Добро пожаловать в Дикий Запад разработки плагинов для OBS — где C++ разработчики создают собственные решения, уворачиваясь от ошибок компилятора, как от перекати-поле. Давайте возьмём всё в свои руки и создадим нечто такое, что заставит даже ковбоя-стримера приподнять шляпу!

Зачем создавать плагины для OBS?

OBS Studio работает как цифровой швейцарский нож для стримеров, но иногда требуется «attachment для бензопилы». Нативные плагины на C++ (в отличие от скриптовых) обеспечивают высокую производительность для обработки видео в реальном времени, создания пользовательских источников захвата или интеграции с оборудованием. Думайте о них как о «хирургических инструментах» в противовес решениям на Lua/Python, которые больше похожи на изоленту.

Предварительные условия: Подготовимся перед работой

  1. Владение C++: потребуются знания среднего уровня (классы, указатели, CMake).
  2. Исходный код OBS: клонируйте с GitHub OBS.
  3. Шаблон плагина: возьмите официальный obs-plugintemplate.
  4. Инструменты для сборки:
  • Windows: Visual Studio 2022 (MSVC).
  • macOS: Xcode + Homebrew.
  • Linux: GCC/Clang + CMake.
git clone --recursive https://github.com/obsproject/obs-plugintemplate.git
cd obs-plugintemplate && mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
cmake --build . --config Release

Анатомия плагина OBS: Разбираем зверя

Плагины состоят из четырёх ключевых компонентов:

  1. src/your-plugin-name.cpp: основная логика (например, обработка видео).
  2. UI/config-dialog.cpp: интерфейс настроек (виджеты Qt).
  3. CMakeLists.txt: конфигурация сборки.
  4. data/your-plugin-name.json: метаданные (название, версия и т. д.).

Вот как они взаимодействуют:

graph TD A[OBS Core] -->|calls| B(Plugin Interface) B --> C[src/plugin.cpp] C --> D[UI/config-dialog.cpp] D -->|uses| E[Qt Framework] C -->|loads/saves| F[data/config.json]

Создание первого плагина: «Hello World» с характером

Создадим фильтр выцветания цвета, который будет переводить сцены, как в телепередачах 90-х годов. Шаг 1: Инициализация свойств плагина Добавьте это в src/your-plugin.cpp:

struct fade_filter {
obs_source_t *source;
float fade_level = 0.0f;
};
static const char *fade_get_name(void *) {
return "Disco Fade Filter";
}

Почему obs_source_t? Это аналог ручки швейцарского ножа в OBS — подходит к любому источнику видео.

Шаг 2: Визуализация эффекта выцветания Переопределите функцию video_render:

void fade_video_render(void *data, gs_effect_t *) {
auto filter = static_cast<fade_filter*>(data);
uint32_t color = 0xFFFFFF | (uint8_t(filter->fade_level * 255) << 24);
obs_source_draw(filter->source, color, false);
}

Шаг 3: Подключение к Qt GUI В UI/config-dialog.cpp добавьте ползунок:

QSlider *fadeSlider = new QSlider(Qt::Horizontal);
QObject::connect(fadeSlider, &QSlider::valueChanged, [](int value) {
obs_data_set_double(settings, "fade_level", value / 100.0);
});

Отладка: Когда ваш плагин перестаёт работать

  • Распространённые ошибки:
  • Ад библиотек DLL: убедитесь, что плагин и OBS используют один и тот же CRT (статическая ссылка /MT).
  • Несоответствие версий Qt: совместите версии Qt между OBS и вашим плагином.
  • Утечки памяти: используйте макросы OBS_DATA для автоматической очистки. Совет профессионала: загружайте свой плагин через консоль скриптов OBS (Вид > Скриптинг), чтобы получать мгновенные логи ошибок. Если он крашится, представьте, что это «инсталляция перформанс-арта».

Продвинутое колдовство: Куда двигаться дальше

  1. Подключение к событиям OBS:
signal_handler_connect(obs_get_signal_handler(), "source_activate",
[](calldata_t *data) { /* Реакция на активацию источника */ });
  1. Аппаратное ускорение: используйте libobs/graphics/libd3d11.h для эффектов на GPU.
  2. Распространение как профессионал:
  • Упаковка в виде комплекта .obsplugin (DLL плагина + папка с данными).
  • Размещение на GitHub с лицензией GPLv2.

Финальная разборка: Почему это стоит усилий

Создание плагинов для OBS похоже на обучение робота жонглировать бензопилами — пугающе, но впечатляюще, когда всё работает. Ваша награда? Стримеры по всему миру используют ваше творение, а вы в это время шепчете: «Я создал этот глючный эффект во время кофейного запоя». Готовы к поездке? Форум OBS — это ваша салун для устранения неполадок. Теперь идите и создайте что-нибудь такое, что заставит даже Shroud удивиться: «Как они это сделали?» 🤠