Руководство плагинов

Linux
(Flatpak)

Плагины

Почти все пользовательские функции добавляются через модули плагина, которые обычно являются динамическими библиотеками или сценариями. Возможность захвата и/или вывода аудио/видео, сделать запись, вывод в потоку RTMP, кодирование в x264 – все это примеры вещей, которые выполняются с помощью модулей плагина.

Плагины могут реализовать источники, выходы, кодеры и услуги.

Написание вашего первого плагина? Мы предоставляем базовый плагин шаблона, чтобы вы начали.

Заголовки модуля плагина

Это некоторые заметные заголовки, обычно используемые плагинами:

  • Libobs/Obs-Module.H – основной заголовок, используемый для создания модулей плагина. Этот файл автоматически включает в себя следующие файлы:
    • Libobs/Obs.H – главный заголовок Libobs. Этот файл автоматически включает в себя следующие файлы:
      • Libobs/Obs-Source.H – используется для реализации источников в модулях плагина
      • Libobs/Obspput.
      • .
      • Libobs/Obsersice.
      • Libobs/Obs-Data.H – используется для управления настройками для объектов Libobs
      • Libobs/Obs-Perperties.H – Используется для создания свойств для объектов Libobs
      • Libobs/Graphics/Graphics.H – используется для рендеринга графики

      .txt

      Организованные исходные файлы, способный иметь один файл для инициализации плагина, а затем конкретные файлы для каждого отдельного объекта, который вы реализуете. Например, если бы вы создали плагин под названием «My-Plugin», у вас будет что-то вроде моего плугина.C, где делается инициализация плагина, мой источник.C для определения пользовательского источника, My-Opput.C для определения пользовательского вывода и т. Д.

      мой-плагин//локальпоступка-НАС. -плагин/Cmakelists.текст мой-плагин/мой-плагин.в мой-плагинмой-источник.в -плагинмой-выход.в мой-/мой-энкодер.в -плагин/мой-услуга.в 

      Это было бы примером общих Cmakelists.

      # мои плугин/Cmakelists.TXT Project (My-Plugin) Set (my-plugin_sources my-plugin.C мой источник...C моя услуга.c) add_library (my-plugin module $) target_link_libraries (my-plugin libobs) install_obs_plugin_with_data (my-plugin data)

      Инициализация нативного плагина 

      . . В вашей функции obs_module_load () вы затем зарегистрируете любые из своих пользовательских источников, выходов, кодеров или сервисов. Смотрите ссылку на API модуля для получения дополнительной информации.

      Ниже приведен пример моего плугина.C, который зарегистрирует один объект каждого типа:

      /* мой плугин.c */ #включать / * Определяет общие функции (требуются) */ Obs_declare_module() / * Реализует общий локаль на основе INI (необязательно) */ Obs_module_use_default_locale("Мой плуги", "en-us") внешний структура obs_source_info my_source; /* Определено в моем источнике.c */   obs_output_info my_output; /* Определено в моем выходе.c */  структура  my_encoder; /* Определено в моем кодоре.c */  структура obs_service_info ; .c */  obs_module_load(пустота)  obs_register_source(Иmy_source); my_output); obs_register_encoder(И); obs_register_service(my_service); возвращаться ; > 

      Источники

      Источники используются для визуализации видео и/или аудио в потоке. . Источники также могут использоваться для реализации аудио и видеофильтров, а также переходов. Libobs/Obs-Source.. См. Ссылку на исходное API (OBS_SOURCE_T) для получения дополнительной информации.

      Например, чтобы реализовать исходный объект, вам необходимо определить структуру OBS_SOURCE_INFO и заполнить его информацией и обратными вызовами, связанными с вашим источником:

      /* мой источник.c */ [. ] структура obs_source_info my_source  .идентификатор "=" , . "=" Obs_source_type_input, .output_flags "=" Obs_source_video, .get_name "=" my_source_name, .создавать "=" my_source_create, .разрушать "=" my_source_destroy, . "=" my_source_update, .video_render "=" my_source_render, . "=" my_source_width, .get_height "=" my_source_height >; 

      Тогда в моем плугине.c, вы бы позвонили obs_register_source () в obs_module_load (), чтобы зарегистрировать источник с помощью Libobs.

      /* мой плугин.c */ .  внешний  obs_source_info my_source; /* Определено в моем источнике.c */ буль obs_module_load()  (my_source); [. ] возвращаться истинный; > 

      Некоторые простые примеры источников:

      • Синхронный видео источник: источник изображения
      • Асинхронный видео источник: источник тестирования случайной текстуры
      • Источник аудио: источник теста синусоидальной волны
      • Видеофильтр: тестовый видеофильтр
      • Аудио фильтр: Аудио -фильтр усиления

      Выходы

      Выходы позволяют возможность выводить в настоящее время рендеринг аудио/видео. . Выходы могут получать необработанные данные или получать кодируемые данные. Libobs/Obspput.. См. Ссылку на выходной API (OBS_OUTPUT_T) для получения дополнительной информации.

      Например, чтобы реализовать выходной объект, вам необходимо определить структуру obs_output_info и заполнить его информацией и обратными вызовами, связанными с вашим выходом:

      /* My-Opput.c */ [. ]  obs_output_info my_output  . "=" "my_Output", .флаги "=" Obs_output_av  Obs_output_encoded, .get_name  , . "=" my_output_create, . "=" , .начинать "=" my_output_start, .останавливаться  , .кодированный_Пакет "=" my_output_data, .get_total_bytes "=" my_output_total_bytes, .Encoded_video_codecs "=" "H264", .Encoded_Audio_codecs "=" "AAC" >; 

      Тогда в моем плугине.c, вы бы позвонили OBS_EREGISTER_OUTPUT () в OB_MODULE_LOAD (), чтобы зарегистрировать выход с помощью LIBOBS.

      /* мой плугин. [. ] внешний структура  ; /* Определено в моем выходе.c */ буль obs_module_load)  Иmy_output); [.  возвращаться истинный; > 

        • FLV вывод
        • Выход FFMPEG MUXER
        • Выход FFMPEG

        Энкодеры

        Энкодеры-это OBS-специфические реализации видео-кодеров видео/аудио, которые используются с выходами, которые используют кодеры. x264, nvenc, QuickSync – примеры реализаций Encoder. Libobs/Obs-Encoder.. См. Ссылку API Encoder (OBS_ENCODER_T) для получения дополнительной информации.

        .c */ [. ]  obs_encoder_info my_encoder_encoder "="  .  , .тип "=" Obs_encoder_video, .кодек "=" "H264", .get_name "=" , .создавать "=" my_encoder_create, .  my_encoder_destroy, . "=" my_encoder_encode, .обновлять "=" my_encoder_update, .get_extra_data "=" , .get_sei_data "=" , . "="  >; 

        Тогда в моем плугине.c, вы бы позвонили obs_register_encoder () в obs_module_load (), чтобы зарегистрировать энкодер с помощью Libobs.

        /* мой плугин. [.  внешний структура obs_encoder_info ; /* Определено в моем кодоре.c */  obs_module_load(пустота)  obs_register_encoder(Иmy_encoder); .  возвращаться истинный; > 

        ВАЖНАЯ ЗАМЕТКА:

        • «Битрейт» – .
        • «Rate_control» – Это настройка, используемая для видеокодеров видео. Обычно ожидается, что он будет иметь хотя бы контроль ставки «CBR». Другими общими контролями ставки являются «VBR», «CQP».
        • «KeyInt_sec» – . (Примечание автора: это должно было быть «Keyint», в кадрах.)

        Примеры кодеров:

        • Видео -кодеры:
          • Энкодер X264
          • FFMPEG NVENC ENCODER

          Услуги

          Услуги – это пользовательские реализации потоковых служб, которые используются с выходами, которые потоковые. Например, у вас может быть пользовательская реализация для потоковой передачи Twitch, а другая для YouTube, чтобы позволить входить в систему и использовать свои API, чтобы делать такие вещи, как получить серверы RTMP или управлять каналом. Libobs/Obsersice.H Файл является выделенным заголовком для реализации услуг. См. Справочник API Service (OBS_SERVICE_T) для получения дополнительной информации.

          (Примечание автора: API сервиса неполна на момент написания этой статьи)

          Например, чтобы реализовать объект службы, вам необходимо определить структуру obs_service_info и заполнить его информацией и обратными обращениями, связанными с вашей службой:

          /* Мой сервис.c */ [. ] структура obs_service_info  "="  .идентификатор "=" "my_service", .  , . "=" my_service_create, .разрушать "=" my_service_destroy, .кодировать  , .обновлять  my_service_update, . "=" , .get_key "=" my_service_key >; 

          ..

          /* мой плугин.c */ [. ] внешний структура obs_service_info my_service; /* Определено в моей службе. буль (пустота)  obs_register_service(Иmy_service); . ] возвращаться истинный; > 

          Единственные два существующих объекта сервисов-это объекты «Общие услуги RTMP» и «пользовательские услуги RTMP» в плагинах/RTMP-сервисах

          Настройки

          Настройки (см. Libobs/Obs-Data.. .

          obs_data_t является эквивалентом объекта JSON, где это струнная таблица суб-объектов, и obs_data_array_t аналогично используется для хранения массива .

          Чтобы создать obs_data_t Объект, вы бы вызвали функции obs_data_create () или obs_data_array_create (). obs_data_t и obs_data_array_t Объекты подсчитаны, поэтому, когда вы закончите с объектом, вызовите OBS_DATA_RELEASE () или OBS_DATA_ARRAY_RELEASE (), чтобы освободить эти ссылки. Каждый раз obs_data_t или obs_data_array_t Объект возвращается функцией, их ссылки увеличиваются, поэтому вы должны выпускать эти ссылки каждый раз каждый раз.

          Чтобы установить значения для obs_data_t объект, вы бы использовали одну из следующих функций:

          / * Установить функции */ Экспорт пустота obs_data_set_string(obs_data_t *данные, констант девчонка ,  девчонка *дольдо); Экспорт  obs_data_set_int(obs_data_t данные, констант  *имя, длинный   Экспорт пустота obs_data_set_doubleobs_data_t данные, констант  *имя,  дольдо);  пустота obs_data_set_bool(obs_data_t *данные, констант  *имя, буль дольдо);   obs_data_set_obj( *данные, констант девчонка *,  *); Экспорт пустота obs_data_set_array(obs_data_t *данные,  девчонка *имя, obs_data_array_t множество); 

          Точно так же, чтобы получить значение от объект, вы бы использовали одну из следующих функций:

          / * Получить функции */ Экспорт констант девчонка *obs_data_get_string(obs_data_t *данные, констант девчонка *имя); Экспорт   obs_data_get_intobs_data_t *данные,   имя Экспорт  obs_data_get_double( данные, констант  *имя  буль obs_data_get_bool( *данные, констант девчонка *имя  obs_data_t *obs_data_get_obj(obs_data_t *, констант  *); Экспорт obs_data_array_t *obs_data_get_array(obs_data_t *, констант девчонка имя); 

          В отличие от типичных объектов данных JSON, obs_data_t Объект также может установить значения по умолчанию. Это позволяет контролировать то, что возвращается, если нет значения, назначенного определенной строке в . У каждого объекта Libobs также есть .

          . */ Экспорт  obs_data_set_default_stringobs_data_t данные,  девчонка *имя, констант девчонка *дольдо); Экспорт пустота obs_data_set_default_int(obs_data_t *данные, констант  , длинный длинный дольдо); Экспорт пустота obs_data_set_default_double(obs_data_t *, констант девчонка *имя,  );  пустота obs_data_set_default_boolobs_data_t *данные, констант девчонка *имя,  дольдо); Экспорт пустота obs_data_set_default_obj(obs_data_t *данные, констант девчонка *имя, obs_data_t obj 

          Свойства

          Свойства (см. Libobs/Obs-Properties.H) используются для автоматического генерации пользовательского интерфейса для изменения настройки для объекта Libobs (при желании). У каждого объекта Libobs есть get_properties обратный вызов, который используется для создания свойств. API Свойства определяет конкретные свойства, которые связаны с настройками объекта, а фронт-конце использует эти свойства для генерации виджетов, чтобы позволить пользователю изменять настройки. . См. Ссылку API Свойства (OBS_PROPERTIES_T) для получения дополнительной информации.

          статический obs_properties_t *my_source_properties(пустота *данные  obs_properties_t *PPTS "=" (); obs_properties_add_boolPPTS, "my_bool", ("MyBool")); Unared_parameter(данные); возвращаться PPTS; > [. ] структура obs_source_info my_source  .get_properties "=" my_source_properties, [. ] >; 

          А данные . Как правило, это не используется и, вероятно, не следует использовать, если это возможно. Это может быть нулевым, если свойства извлекаются без объекта, связанного с ним.

          Свойства также могут быть изменены в зависимости от того, какие настройки показаны. Например, вы можете пометить определенные свойства как отключенные или невидимые в зависимости от того, что конкретная настройка установлен для использования функции Obs_property_set_modified_callback ().

          Например, если вы хотели логическое свойство, чтобы скрыть текстовое свойство B:

            obs_properties_t *, obs_property_t *, obs_data_t *  буль включено "=" obs_data_get_bool(настройки, "настройка_а"  "=" (, ); obs_property_set_enabled(, включено); /* вернуть истину, чтобы обновить виджеты свойств, false в противном случае */ возвращаться истинный; > . ] статический  *my_source_properties(пустота данные)  obs_properties_t *PPTS "=" obs_properties_create(); obs_property_t п;   obs_properties_add_bool(PPTS, "настройка_а", obs_module_text("Настройка")); obs_property_set_modified_callbackп, ); obs_properties_add_text(, "настройка_B", (, );  PPTS; > 

          Локализация

          Как правило, большинство плагинов в комплекте с Obstudio будут использовать простой метод локализации Ini-File, где каждый файл представляет собой другой язык. При использовании этого метода используется макрос OBS_MODULE_USE_DEFAULT_LOCALE (), который автоматически загружает/разрушает данные локали без дополнительных усилий на части плагина. Затем функция obs_module_text () (которая автоматически объявляется как внешняя либобс/obs-module.h) используется, когда необходим поиск текста.

          Существует два экспорта модуль, используемый для загрузки/уничтожения локали: экспорт obs_module_set_locale () и obs_module_free_locale () export. Экспорт obs_module_set_locale () вызывается Libobs для установки текущего языка, а затем экспорт obs_module_free_locale () называется Libobs об уничтожении модуля. Если вы хотите реализовать пользовательскую реализацию Locale для вашего плагина, вы бы хотели определить эти экспорты вместе с OBS_MODULE_TEXT () EXTERM, а не пола.

          © Copyright 2017-2023, Lain Bailey.

          Руководство плагинов

          . Некоторые плагины также позволяют Obstudio общаться с определенными видами оборудования, такими как Deck Elgato Stream.

          Некоторые плагины также доступны для пользователей Linux через Flathub.

          Совместимость

          Большинство плагинов разработаны для использования на всех платформах, где доступна Obstudio. Тем не менее, есть определенные случаи, когда плагин может быть не совместим с вашей копией Obstudio:

          • плагин доступен только на одной платформе (я.эн. Windows, а не macOS)
          • плагин недоступен для той же архитектуры (я.эн. x86_64, не ARM64)
          • Плагин не был обновлен для версии Obstudio, которую вы используете

          Чтобы увидеть, какие плагины доступны для каких платформ на Obstudio 28..

          Установить или удалить плагины

          Многие из самых популярных плагинов OBSTIO поставляются с установщиками. В целом они устанавливают плагины в места, перечисленные ниже.

          Если вам нужно установить плагин вручную, соответствующие файлы, вероятно, должны перейти в одном из этих папок. Пожалуйста, сначала проверьте документацию плагина.

          Окна


          (Legacy 32-битные плагины; Obs Studio 27.2.4 и до предыдущего)

          C: \ Program Files \ Obs-Studio \ obs-Plugins \ 32bit

          (Один пользователь)

          macOS

          ~/Library/support/obs-studio/plugins

          Linux

          ~/.Config/Obs-Studio/Plugins

          Linux
          (Flatpak)

          Если вы установите Obstudio в пользовательское местоположение или используете портативный режим, вам нужно будет изменить целевую папку установщика на пользовательское местоположение данные/плагины папка.

          Оглавление