Посібник з плагінів

Лінійка

Плагіни

Майже вся спеціальна функціональність додається через модулі плагіна, які, як правило, є динамічними бібліотеками або сценаріями. Можливість фіксації та/або виведення аудіо/відео, робити запис, вихід у потік RTMP, кодування в X264 – все приклади речей, які здійснюються за допомогою модулів плагінів.

Плагіни можуть реалізовувати джерела, результати, кодери та послуги.

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

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

  • libobs/module.. Цей файл автоматично включає такі файли:
    • libobs/obs.Н – головний заголовок Libobs. Цей файл автоматично включає такі файли:
      • libobs/obs-Source.
      • libobs/obs-output.H – Використовується для впровадження виходів у модулях плагінів
      • libobs/obs-encoder.H – Використовується для впровадження кодерів у модулях плагінів
      • libobs/service.H – Використовується для реалізації служб у модулях плагінів
      • libobs/obs-data.H – Використовується для управління налаштуваннями для об’єктів Libobs
      • libobs/obs-properties.
      • libobs/графіка/графіка.

      Загальна структура каталогів та кмакелісти.

      . ..C для визначення користувацького джерела, мій вихідний.C для визначення спеціального виходу тощо. (Це не правило, звичайно)

      Це приклад загальної структури каталогів для нативного модуля плагіну:

      -підключатидані/накопичуватися-НАС.ini мій-/Кмакелісти. мій-/-підключати.c мій-підключатимій-джерело.c мій-підключати/-випуск.c мій-підключати/мій-.c мій-/-. 

      Це було б прикладом загальних кмакелістів.файл txt, пов’язаний з цими файлами:

      # My-Plugin/Cmakelists.txt Project (My-Plugin) набір (my-plugin_sources my-plugin.c мій джерело.c мій-вихідний.c my-encoder.c My Service.c) add_library (модуль My-plugin $) target_link_libraries (My-Plugin libobs) install_obs_plugin_with_data (дані My-Plugin)

      Ініціалізація нативного плагіну

      Для створення нативного модуля плагіну вам потрібно буде включити Libobs/Obs-Module. . У вашій функції obs_module_load () ви зареєструєте будь -яке з ваших користувацьких джерел, виходів, кодерів чи послуг. Для отримання додаткової інформації див. Посилання API модуля API.

      .C, який би зареєстрував один об’єкт кожного типу:

      /* мій плугін.c *// #включати / * Визначає загальні функції (необхідні) */ Obs_declare_module()  "Мій плугін", "en-Us") зовнішній  obs_source_info my_source; /* Визначено в моєму джерелі. зовнішній структура Obs_output_info my_output /* Визначається в моїй виводі.   Obs_encoder_info my_encoder; . зовнішній структура Obs_service_info my_service; /* Визначено в моєму службі.  Obs_module_load(порожня  obs_register_source&my_source); Obs_register_output(&my_output); Obs_register_encoder(&my_encoder); Obs_register_service&my_service);  правдивий; > 

      Джерела використовуються для надання відео та/або аудіо на потоці. Такі речі, як захоплення дисплеїв/ігор/аудіо, відтворення відео, показ зображення або відтворення аудіо. Джерела також можуть бути використані для реалізації аудіо- та відеофільтрів, а також переходів. Libobs/obs-source.H Файл – це спеціальний заголовок для реалізації джерел. .

      /* мій джерело.c *// .  структура obs_source_info my_source  .ідентифікатор = "my_source", .  Obs_source_type_input, .output_flags = , .get_name = my_source_name, .створити = my_source_create, .знищувати = my_source_destroy, .оновлення = my_source_update, .Video_render = , . = my_source_width, .get_height =  >; 

      Потім, в моєму плюмі.C, ви б зателефонували ars_register_source () у ars_module_load (), щоб зареєструвати джерело за допомогою libobs.

      .c *// .  зовнішній структура obs_source_info my_source; /* Визначено в моєму джерелі. куля Obs_module_load(порожня)  obs_register_sourcemy_source); [. ]  правдивий; > 

      Деякі прості приклади джерел:

      • Асинхронне джерело відео: джерело тесту випадкового текстури
      • Джерело аудіо: джерело тестування синуса
      • Аудіофільтр: посилення аудіофільтру

      Outsums

      . Потока та запис – це два поширених прикладів виходів, але не єдині типи виходів. Виходи можуть отримувати необроблені дані або отримувати кодовані дані. Libobs/obs-output.H Файл – це спеціальний заголовок для впровадження результатів. Для отримання додаткової інформації див. Посилання на API Output API (Obs_output_t).

      .c *// . ] структура Obs_output_info my_output  .ідентифікатор  "my_output", .прапори = Obs_output_av | Obs_output_encoded, . = my_output_name, .створити  , .  my_output_destroy, .почати = , .СТІЙ = my_output_stop, .incoded_packet = my_output_data, .get_total_bytes = my_output_total_bytes, .incoded_video_codecs = "H264", .incoded_audio_codecs  "AAC" >; 

      .C, ви б зателефонували ars_register_output () у ars_module_load (), щоб зареєструвати вихід за допомогою libobs.

      /* мій плугін.c *// . ]   Obs_output_info my_output; /* Визначається в моїй виводі.c *// куля Obs_module_load(порожня  Obs_register_output(&my_output); . ]  правдивий > 

      • Кодовані відео/аудіовиходи:
        • Вихід FLV

        Кодери

        Кодери-це специфічні для OBS реалізації відео/аудіокодерів, які використовуються з виходами, які використовують кодери. . Libobs/obs-encoder.. Для отримання додаткової інформації див. Довідник API Encoder API (Obs_encoder_t).

        Наприклад, для впровадження об’єкта кодера, вам потрібно визначити структуру obs_encoder_info та заповнити її інформацією та зворотними дзвінками, пов’язаними з вашим кодером:

        .c *// [. ] структура Obs_encoder_info my_encoder_encoder   . = "my_encoder", .тип = , . = "H264", .get_name = , .створити  my_encoder_create, .знищувати = my_encoder_destroy, . = my_encoder_encode, .оновлення  my_encoder_update, . = my_encoder_extra_data, . = , .get_video_info = my_encoder_video_info >; 

        Потім, в моєму плюмі.C, ви б зателефонували ars_register_encoder () у ars_module_load (), щоб зареєструвати кодер за допомогою libobs.

        /* мій плугін. [. ] зовнішній  Obs_encoder_info my_encoder; /* Визначено в моєму encoder.c *//  Obs_module_load(порожня)  (&); [. ] повернення правдивий  

        Важлива примітка: Налаштування кодера в даний час мають кілька очікуваних загальних значень налаштувань, які повинні мати конкретну конвенцію про іменування:

        • “Бітрат” – .
        • “Chad_control” – Це налаштування, що використовується для відеокодкодів. Зазвичай очікується, що він матиме принаймні контроль швидкості “CBR”. Інші загальні контролі швидкості – “VBR”, “CQP”.
        • – Для відеокодерів встановлює значення інтервалу ключових кадрів, за лічені секунди або найближче наближення. .)
        • Відеокодери:
          • Кодер X264
          • Кодер FFMPEG NVENC
          • Кодер QuickSync
          • Кодер FFMPEG AAC/OPUS

          Послуги

          . Наприклад, ви можете мати власну реалізацію для потоки для Twitch, а інший для YouTube, щоб дозволити можливість увійти та використовувати їх API, щоб робити такі речі, як отримати сервери RTMP або керувати каналом. Libobs/obs-Service.H Файл – це спеціальний заголовок для реалізації служб. .

          (Примітка автора: API служби є неповним з цього написання)

          /* My Service.c *// [.  структура  my_service_service   .ідентифікатор = "my_service", .get_name = my_service_name, .створити  my_service_create, .знищувати  my_service_destroy, .кодувати  my_service_encode, .оновлення = my_service_update, .get_url = my_service_url, .get_key  my_service_key >; 

          .C, ви б зателефонували ars_register_service () у ars_module_load (), щоб зареєструвати службу за допомогою libobs.

          /* мій плугін. . ] зовнішній структура Obs_service_info my_service; /* Визначено в моєму службі. куля Obs_module_load(порожня)  Obs_register_servicemy_service); [. ] повернення правдивий > 

          Єдині два існуючі об’єкти служб-це об’єкти “Загальні послуги RTMP” та “Спеціальні послуги RTMP” у плагінах/RTMP-послугах

          Налаштування

          Налаштування (див. Libobs/DEBS-DATA.h) використовуються для отримання або встановлення даних налаштувань, які зазвичай пов’язані з об’єктами Libobs, а потім можуть бути збережені та завантажені за допомогою тексту JSON. Для отримання додаткової інформації див. Посилання API налаштувань даних (ars_data_t).

          Obs_data_t аналогічно використовується для зберігання масиву Obs_data_t Об’єкти, схожі на масиви JSON (хоча і не зовсім однакові).

          або Obs_data_array_t Об’єкт, ви зателефонуєте на функції obs_data_create () або obs_data_array_create (). і Obs_data_array_t . Obs_data_t або Obs_data_array_t .

          Встановити значення для Obs_data_t Об’єкт, ви використовуєте одну з наступних функцій:

             obs_data_set_stringObs_data_t *дані, констант чар *, констант чар * Експорт порожня Obs_data_set_int(Obs_data_t *дані,  чар *,  довго вал);  порожня Obs_data_set_doubleObs_data_t *дані, констант  *назва,  вал); Експорт порожня Obs_data_set_bool( дані,  чар *,  ); Експорт  (Obs_data_t дані,   *назва, Obs_data_t *); Експорт порожня Obs_data_set_array(Obs_data_t *дані, констант чар назва, Obs_data_array_t масив 

          Аналогічно, щоб отримати значення від

           Експорт  чар ( *, констант чар *);   довго Obs_data_get_int *,  чар *назва Експорт подвійний Obs_data_get_double( *дані, констант чар *назва);  куля (Obs_data_t *, констант  *); Експорт  *Obs_data_get_obj(Obs_data_t *дані,  чар *назва); Експорт  *Obs_data_get_array( *дані,  чар *назва 

          На відміну від типових об’єктів даних JSON, Obs_data_t Об’єкт також може встановити значення за замовчуванням. Це дозволяє здатність контролювати те, що повернеться, якщо немає значення, присвоєного певному рядку в Obs_data_t Об’єкт, коли ці дані завантажуються з рядка json або файлу json. Кожен об’єкт Libobs також має get_defaults зворотний дзвінок, який дозволяє налаштувати налаштування за замовчуванням для об’єкта на створенні.

          Ці функції контролюють значення за замовчуванням наступне:

          .  Експорт порожня  *дані,  чар *назва, констант чар *); Експорт порожня Obs_data_set_default_int(Obs_data_t *, констант чар *назва,   вал); Експорт порожня (Obs_data_t *дані, констант  *назва, подвійний ); Експорт порожня Obs_data_t дані, констант чар *назва, куля вал   Obs_data_set_default_obj( *дані, констант чар *назва, Obs_data_t *OBJ); 

          Властивості

          Властивості (див. Libobs/Obs-Properties.h) використовуються для автоматичного створення користувальницького інтерфейсу для зміни налаштувань для об’єкта libobs (за бажанням). Кожен об’єкт libobs має get_properties зворотний виклик, який використовується для створення властивостей. API властивостей визначає конкретні властивості, пов’язані з налаштуваннями об’єкта, а передній кінець використовує ці властивості для створення віджетів, щоб дозволити користувачеві змінювати налаштування. Наприклад, якщо у вас було булеве налаштування, ви б використовували ord_properties_add_bool (), щоб дозволити користувачеві мати можливість змінити це налаштування. .

          Приклад цього:

          статичний  * )  obs_properties_t *  Obs_properties_create(); (ППТ, "my_bool", Obs_module_text("Mybool" (дані  ППТ; > .  структура  my_source  . = my_source_properties, [.  >; 

          З дані Параметр – це дані об’єкта, якщо об’єкт присутній. Зазвичай це невикористано і, мабуть, не слід використовувати, якщо це можливо. .

          Властивості також можуть бути змінені залежно від того, які параметри показані. .

          статичний куля  ППТ, Obs_property_t *с,  налаштування   увімкнено = Obs_data_get_bool(налаштування, ); с = obs_properties_get(ППТ, "settr_b"); Obs_property_set_enabled, увімкнено); /* Повернути вірно оновити віджетів властивостей, false інакше *// повернення правдивий > [. ] статичний  *my_source_properties(порожня *   ППТ    с; с = ППТ, , "Налаштування")); Obs_property_set_modify_callback, settile_a_modified); Obs_properties_add_text(ППТ, "settr_b", Obs_module_text(), Obs_text_default); повернення ППТ; > 

          Локалізація

          Як правило, більшість плагінів, у комплекті з Obs Studio, використовуватимуть простий метод локалізації іні-файлів, де кожен файл-це інша мова. Використовуючи цей метод, використовується макрос orber_module_use_default_locale (), який автоматично завантажує/знищить дані Locale без додаткових зусиль на частині плагіна. Потім функція obs_module_text () (яка автоматично оголошується як зовнішність Libobs/obs-module.h) використовується, коли потрібний текст пошук.

          Існує два експорту. Модуль, який використовується для завантаження/знищення Locale: експорт Obs_module_set_locale () та експорт Obs_module_free_locale (). Експорт Obs_module_set_locale () закликається Libobs для встановлення поточної мови, а потім експорт Obs_module_free_locale () викликається Libobs при руйнуванні модуля. .

          .

          Посібник з плагінів

          Obs Studio підтримує різноманітні плагіни, які забезпечують нові види джерел, фільтрів та функцій. .

          Деякі плагіни також надаються користувачам Linux через Flathub.

          Більшість плагінів розроблені для використання на всіх платформах, де доступна студія Obs.

          • Плагін доступний лише на одній платформі (i..
          • .. x86_64, не ARM64)
          • Плагін не оновлювався для версії студії Obs, яку ви використовуєте

          .0, див. Список сумісності плагінів Obs Studio 28.

          Встановіть або знімайте плагіни

          Багато найпопулярніших плагінів Obs Studio оснащені інсталяторами. .

          Якщо вам потрібно встановити плагін вручну, відповідні файли, ймовірно, повинні зайти в одну ці папки. .

          Вікна (всі користувачі)

          C: \ Програмні файли \ Obs-studio \ obs-plugins \ 64bit

          Вікна
          .2.4 і попередньо)

          Вікна (єдиний користувач)

          макос

          ~/Бібліотека/підтримка програми/ind-studio/плагіни

          Лінійка

          ~//.

          Лінійка
          (Flatpak)

          Встановіть плагіни за допомогою Flatpak

          Якщо ви встановите студію OBS у власне місце розташування або використовуєте портативний режим, вам потрібно буде змінити цільову папку інсталятора на власне місце розташування .