Введение в разработку плагинов для 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) {
// Очистите здесь
}
Диаграмма: поток инициализации плагина
Заключение
Разработка плагинов для OBS Studio на C++ — это мощный способ расширить функциональность этого универсального программного обеспечения для потоковой передачи. Имея под рукой нужные инструменты, немного терпения и некоторые навыки кодирования, вы можете создавать плагины, улучшающие качество потоковой передачи. Будь то добавление простого таймера обратного отсчёта или сложного переключателя сцен, возможности безграничны.
Помните, сообщество OBS активно и оказывает поддержку, предоставляя обширную документацию и форумы, которые помогут вам справиться с любыми трудностями. Итак, приступайте к работе, проявляйте творческий подход и сделайте OBS Studio ещё более удивительной!