Pluginy
Téměř všechny vlastní funkce jsou přidány prostřednictvím modulů pluginů, což jsou obvykle dynamické knihovny nebo skripty. .
Pluginy mohou implementovat zdroje, výstupy, kodéry a služby.
Psaní prvního pluginu? .
Záhlaví modulů pluginu
Toto jsou některé pozoruhodné záhlaví, které se běžně používají pluginy:
- libobs/obsc-module.H – Primární záhlaví používanou pro vytváření modulů pluginu.
- libobs/obs.H – Hlavní záhlaví libobů. Tento soubor automaticky obsahuje následující soubory:
- .H – Používá se pro implementaci zdrojů v modulech pluginu
- libobs/obscret.H – Používá se pro implementaci výstupů v modulech pluginu
- .H – Používá se pro implementaci kodérů v modulech pluginu
- .
- .
- libobs/obs-properties.H – Používá se pro generování vlastností pro objekty Libobs
- .
Společná struktura adresářů a cmakelisté.txt
. Například, pokud byste měli vytvořit plugin s názvem „My-Plugin“, měli byste něco jako My-Plugin…C pro definici vlastního výstupu atd. (To samozřejmě není pravidlo)
Toto je příklad společné struktury adresáře pro modul nativního pluginu:
můj-datanárodní prostředíen-NÁS.ini můj-zapojit/Cmakelisté.txt můj-zapojit/můj-zapojit.C můj-zapojit/můj-zdroj.C můj-zapojitmůj-. můj-zapojitmůj-. --servis.C
To by byl příklad běžných cmakelistů.
# my-plugin/cmakelisté..c můj zdroj..c My-Encoder..c) Add_library (Module My-Plugin $) Target_Link_Library (MY-Plugin libobs) install_obs_plugin_with_data (data my-plugin)
.H HEADER, použijte obs_declare_module () makro a poté vytvořte definici funkce obs_module_load () . . Další informace naleznete v referenci API Module API.
Následuje příklad mého pluginu.C, který by zaregistroval jeden objekt každého typu:
/* My-Plugin.c */ / * Definuje běžné funkce (vyžadováno) */ () / * Implementuje běžné národní prostředí (volitelné) */ ("My-Plugin", "en-US" struktur obs_source_info my_source;; .c */ externí struktur obs_output_info my_output /* Definované v mém výstupu.c */ externí struktur obs_encoder_info my_encoder .c */ struktur my_service;; /* Definované v mé službě.c */ Bool obs_module_loadneplatné) obs_register_source obs_register_output(A my_encoder); obs_register_service(); skutečný;; >
Zdroje se používají k vykreslení videa a/nebo zvuku na streamu. Věci, jako je zachycení displejů/her/zvuku, přehrávání videa, zobrazení obrázku nebo přehrávání zvuku. . Libobs/obsworce.H soubor je vyhrazená záhlaví pro implementaci zdrojů. Další informace naleznete v části Reference API API (SEC_SOURCE_T).
Například pro implementaci zdrojového objektu musíte definovat strukturu SEC_SOURCE_INFO a vyplnit ji informacemi a zpětnými voláními souvisejícími s vaším zdrojem:
/* můj zdroj.c */ [. obs_source_info .id "My_source", . = , .output_flags = Obs_source_video, .get_name = my_source_name, .vytvořit my_source_create, .zničit = my_source_destroy, .Aktualizace = , . = , . = , .get_height my_source_height
Poté v My-Plugin.C, zavolali byste Obs_register_Source () v obs_module_load () a zaregistrovali zdroj u libobs.
. . ] struktur obs_source_info /* Definované v mém zdroji.c */ Bool (neplatné) (Amy_source [. ] skutečný;; >
- Synchronní zdroj videa: Zdroj obrázku
- Asynchronní zdroj videa: Zdroj testu náhodného textury
- Zvukový filtr: Zisk zvukový filtr
Výstupy umožňují schopnost vydávat aktuálně vykreslování zvuku/videa. Streamování a nahrávání jsou dva běžné příklady výstupů, ale ne jediné typy výstupů. Výstupy mohou přijímat nezpracovaná data nebo přijímat kódovaná data. Libobs/obscret.. Další informace naleznete v části Reference API API (SEC_OUTPUT_T).
/* můj výstup. [. ] struktur obs_output_info . "My_output", . Obs_output_av , . = , . my_output_create, .zničit , . = , . = , .concoded_packet = my_output_data, .get_total_bytes = my_output_total_bytes, .concoded_video_codecs "H264", .concoded_audio_codecs = >;
Poté v My-Plugin.C, zavolali byste Obs_Rregister_output () v Obs_Module_load (), abyste zaregistrovali výstup u libobů.
/* My-Plugin.c */ [. externí my_output /* Definované v mém výstupu. Bool obs_module_load) (Amy_output); [. vrátit se >
Některé příklady výstupů:
- Kódované výstupy videa/zvuku:
- Výstup FLV
- Výstup proudu RTMP
Encoders
. X264, NVENC, QuickSync jsou příklady implementací kodéru. .. .
Například pro implementaci objektu kodéru musíte definovat strukturu obs_encoder_info a vyplnit ji informacemi a zpětnými voláními souvisejícími s vaším kodérem:
.c */ . obs_encoder_info my_encoder_encoder .id , . = Obs_encoder_video, .kodek "H264", . = my_encoder_name, .vytvořit my_encoder_create, .zničit , .zakódovat = , . = , .get_extra_data = my_encoder_extra_data, .get_sei_data , .get_video_info = my_encoder_video_info
..
.c */ . ] externí struktur obs_encoder_info my_encoder;; /* Definované v mém encodéru.c */ Bool obs_module_load() obs_register_encoder(my_encoder . skutečný
- „Bitrate“ – .
- „Rate_control“ – . . Dalšími běžnými kontrolami sazeb jsou „VBR“, „CQP“.
- – . (Poznámka autora: Měl to být „Keyint“, ve snímcích.)
-
- Kodér FFMPEG NVENC
Služby jsou vlastní implementace streamovacích služeb, které se používají s výstupy, které streamují. Například byste mohli mít vlastní implementaci pro streamování do Twitch a další pro YouTube, aby se umožnila možnost přihlásit se a použít jejich API k tomu, aby dělali věci, jako je získání serverů RTMP nebo ovládání kanálu. .. Další informace naleznete v části Reference API Service API (SEC_SERVICE_T).
(Poznámka autora: API Service API je od tohoto psaní neúplné)
Například pro implementaci objektu služby musíte definovat strukturu SEC_SERVICE_INFO a vyplnit ji informacemi a zpětnými voláními souvisejícími s vaší službou:
.c */ [. ] obs_service_info = . , .get_name = my_service_name, . = , . , . my_service_encode, . = my_service_update, . my_service_url, .get_key = >;
.C, zavolali byste Obs_REGISTER_SERVICE () v Obs_Module_load (), abyste zaregistrovali službu u libobs.
.c */ . ] obs_service_info my_service;; . Bool neplatné) obs_register_servicemy_service); . ]
Jediné dva existující objekty služeb jsou objekty „běžné služby RTMP“ a „vlastní služby RTMP“ v pluginech/RTMP-Services
Nastavení
Nastavení (viz libobs/obs-data.h) se používají k získání nebo nastavení dat nastavení obvykle spojených s objekty Libobs a pak je lze uložit a načíst pomocí textu JSON. .
The je ekvivalent objektu JSON, kde se jedná o tabulku s řetězci dílčích objektů a obs_data_t objekty, podobné poli JSON (i když ne zcela identické).
Vytvořit nebo obs_data_array_t objekt, zavolal byste obs_data_create () nebo obs_data_array_create () funkce. . Kdykoli .
Nastavit hodnoty pro objekt, použili byste jednu z následujících funkcí:
/ * Nastavit funkce */ neplatné obs_data_set_string( *data, const char , char * (obs_data_t *, název, dlouho Val VÝVOZNÍ obs_data_t , const *název, dvojnásobek Val neplatné obs_data_set_bool( , const char , Val neplatné obs_data_t *, *, obs_data_t *); neplatné obs_data_set_array(obs_data_t *data, char *, obs_data_array_t *pole);
obs_data_t objekt, použili byste jednu z následujících funkcí:
/ * Získejte funkce */ VÝVOZNÍ const obs_data_get_string( *, const char ); VÝVOZNÍ dlouho dlouho ( *, *název dvojnásobek (obs_data_t , const char VÝVOZNÍ obs_data_t *data, char *název); obs_data_t *obs_data_get_obj( *, char *); obs_data_array_t *obs_data_get_array( *data, char *název);
Na rozdíl od typických datových objektů JSON Objekt může také nastavit výchozí hodnoty. obs_data_t . Každý objekt libobs má také a get_defaults zpětné volání, které umožňuje nastavení výchozí nastavení objektu při tvorbě.
/* Výchozí funkce hodnoty. VÝVOZNÍ neplatné obs_data_set_default_string(obs_data_t *, const char *, char * obs_data_t , const *, dlouho Val); obs_data_set_default_double *data, char *, Val VÝVOZNÍ neplatné (obs_data_t , const char název, Val neplatné (obs_data_t data, const char *, obj);
.h) se používají k automatickému generování uživatelského rozhraní pro úpravu nastavení pro objekt libobs (pokud je to žádoucí). Každý objekt libobs má a get_properties zpětné volání, které se používá ke generování vlastností. . Například, pokud byste měli booleovské nastavení, použili byste Obs_Properties_Add_Bool (), aby uživateli mohl toto nastavení změnit. Další informace naleznete v části Reference API API (SEC_PROPERTIES_T).
Příklad tohoto:
statický obs_properties_t = (); (PPT, , obs_module_text"Mybool" ;; . obs_source_info . = , .
The . . Může to být nulové, pokud jsou vlastnosti získány bez objektu.
Vlastnosti lze také upravit v závislosti na tom, jaké nastavení je zobrazeno. .
Například, pokud jste chtěli booleovskou vlastnost a skrýt textovou vlastnost B:
Bool Setting_a_modified(obs_properties_t , , ) Bool povoleno (Nastavení, ); = , obs_property_set_enabled, povoleno /* Vraťte True pro aktualizaci widgetů vlastností, false v opačném případě */ skutečný;; > . ] statický obs_properties_t neplatné obs_properties_create *str str = obs_properties_add_bool, , )); str, , , obs_module_text, ); PPT >
. . .h) se používá, když je potřeba vyhledávání textu.
. . Pokud si přejete implementovat implementaci vlastního národního prostředí pro váš plugin, chcete tyto export definovat spolu s externem obs_module_text () místo toho, abyste se spoléhali na obs_module_use_default_locale () makro.
.
. Některé pluginy také umožňují Obs Studio komunikovat s určitými druhy hardwaru, jako je například paluba Elgato Stream.
.
Kompatibilita
. Existují však určité případy, kdy plugin nemusí být kompatibilní s vaší kopií Obs Studio:
- ..
- plugin není k dispozici pro stejnou architekturu (i.E.
.0, viz seznam kompatibility Pluginu Obs Studio 28.
Nainstalujte nebo odstraňte pluginy
Mnoho z nejpopulárnějších pluginů Studio Obs je přichází s instalačními pracovníky. .
. .
.2.(svobodný uživatel)
Operační Systém Mac
~/Knihovna/Aplikační podpora/obs-studio/pluginy
Linux
~/.
(Flatpak).
Obsah
- libobs/obs.H – Hlavní záhlaví libobů. Tento soubor automaticky obsahuje následující soubory:
