Ghid de pluginuri
Plugins
Aproape toate funcționalitățile personalizate sunt adăugate prin module de pluginuri, care sunt de obicei biblioteci dinamice sau scripturi. .
Plugin -urile pot implementa surse, ieșiri, codificatoare și servicii.
Scrierea primului tău plugin? Oferim un plugin de șablon de bază pentru a vă începe.
Antemerii modulului pluginului
Acestea sunt câteva anteturi notabile utilizate în mod obișnuit de pluginuri:
- .H – antetul principal utilizat pentru crearea de module de pluginuri. Acest fișier include automat următoarele fișiere:
- libobs/obs.H – principalul antet Libobs. Acest fișier include automat următoarele fișiere:
- libobs/obs-source.
- .
- libobs/obs-encoder.H – utilizat pentru implementarea codificatoarelor în modulele de pluginuri
- .H – utilizat pentru implementarea serviciilor în modulele de pluginuri
- libobs/obs-data.
- .H – Folosit pentru generarea de proprietăți pentru obiectele Libobs
- .H – Folosit pentru redarea grafică
Structura comună de director și Cmakelists.
Fișierele sursă comună sunt organizate este să aibă un fișier pentru inițializarea pluginului, apoi fișiere specifice pentru fiecare obiect individual pe care îl implementați. De exemplu, dacă ar fi să creezi un plugin numit „My-Plugin”, ai avea ceva de genul-Plugin..c pentru definirea unei surse personalizate, My-Output.c pentru definirea unei ieșiri personalizate, etc. (Aceasta nu este o regulă, desigur)
Acesta este un exemplu de structură comună de director pentru un modul de plugin nativ:
Ale mele-conecteaza/date/local/-.INI -conecteaza/Cmakelists.TXT -conecteaza/Ale mele-.C Ale mele-Ale mele-sursă.C Ale mele-conecteaza/Ale mele-ieșire.C Ale mele-Ale mele-codificator. Ale mele-/Ale mele-serviciu.C
Acesta ar fi un exemplu de cmakelisti comuni.fișier txt asociat cu aceste fișiere:
# my-plugin/cmakelists.TXT Project (My-Plugin) set (My-Plugin_Sources My-Plugin.c-sursă.c my-output.C-ENTER.c-service.c) add_library (modulul My-Plugin $) target_link_libraries (my-plugin libobs) install_obs_plugin_with_data (datele My-Plugin)
Inițializare a pluginului nativ
Pentru a crea un modul de plugin nativ, va trebui să includeți Libobs/OBS-mod.h antet, utilizați obs_declare_module () macro, apoi creați o definiție a funcției obs_module_load () . În funcția Obs_Module_Load (), înregistrați apoi oricare dintre sursele, ieșirile, codificatoarele sau serviciile dvs. personalizate. Consultați referința API a modulului pentru mai multe informații.
Următorul este un exemplu de my-plugin.C, care ar înregistra un obiect de fiecare tip:
.C */ / * Definește funcțiile comune (necesare) */ Obs_declare_module() („My-Plugin”, „En-SUA” extern struct .C */ extern struct obs_output_info my_output .C */ struct obs_encoder_info my_encoder; /* Definit în My-Encoder. extern My_Service; /* Definit în serviciul meu. bool (My_Source obs_register_output Șimy_encoder obs_register_serviceȘi); întoarcere >
Surse
Sursele sunt folosite pentru a reda video și/sau audio în flux. . Sursele pot fi, de asemenea, utilizate pentru a implementa filtre audio și video, precum și tranziții. Libobii/obs-source.. .
De exemplu, pentru a implementa un obiect sursă, trebuie să definiți o structură obs_source_info și să o completați cu informații și apeluri legate de sursa dvs .:
. [. ] struct obs_source_info . = "my_source", . Obs_source_type_input, .output_flags = , .get_name = My_source_name, .crea , .distruge = my_source_destroy, .Actualizați = , .video_render = my_source_render, . = my_source_width, . = my_source_height >;
Apoi, în my-plugin.C, ați apela obs_register_source () în obs_module_load () pentru a înregistra sursa cu libobs.
/* My-Plugin.C */ . ] struct My_Source; /* Definit în sursa mea. bool () Și . ]
- Sursa video sincronă: sursa de imagine
- Sursa audio: sursa de testare a valurilor sinusoidale
. Streamingul și înregistrarea sunt două exemple comune de ieșiri, dar nu singurele tipuri de ieșiri. . Libobs/obs-ieșire.Fișierul H este antetul dedicat pentru implementarea ieșirilor. .
De exemplu, pentru a implementa un obiect de ieșire, trebuie să definiți o structură OBS_OUTPUT_INFO și să o completați cu informații și apeluri legate de ieșirea dvs .:
.C */ [. . = , .steaguri = , . = , .crea = my_output_create, . = my_output_destroy, .start = my_output_start, . = my_output_stop, . = my_output_data, .get_total_bytes = my_output_total_bytes, . "H264", .Encoded_audio_codecs "AAC" >;
.C, ați apela obs_register_output () în obs_module_load () pentru a înregistra ieșirea cu libobs.
. [. ] extern obs_output_info my_output; /* Definit în my-output. bool obs_module_loadgol obs_register_outputȘi); [. întoarcere Adevărat; >
Câteva exemple de rezultate:
-
- Ieșirea FLV
- Ieșirea FFMPEG MUXER
- Ieșirea FFMPEG
. X264, NVENC, QuickSync sunt exemple de implementări ale codificatorului. .Fișierul H este antetul dedicat pentru implementarea codificatoarelor. Consultați referința API -ului Encoder (Obs_encoder_T) pentru mai multe informații.
.C */ [. my_encoder_encoder . , . , .Codec "H264", . = My_encoder_name, . , . , .codifica = , . , . = my_encoder_extra_data, . my_encoder_sei, . = my_encoder_video_info >;
..
. [. struct my_encoder; /* Definit în My-Encoder.C */ ( Și); [. ] Adevărat;
- „Bitrate” – Această valoare ar trebui să fie utilizată atât pentru codificatoare video, cât și pentru audio: bitrate, în kilobits.
- „Rate_control” – Aceasta este o setare folosită pentru codificatoare video. În general, se așteaptă să aibă cel puțin un control al ratei „CBR”. .
- – Pentru codificatoare video, stabilește valoarea intervalului de cadre cheie, în câteva secunde sau cea mai apropiată aproximare posibilă. (Nota autorului: Acest lucru ar fi trebuit să fie „cheie”, în cadre.)
Exemple de codificatoare:
- Codificatoare video:
- Codificatorul X264
- Codificatorul FFMPEG AAC/Opus
Servicii
. De exemplu, puteți avea o implementare personalizată pentru streamingul pentru a se învârti și un altul pentru YouTube pentru a permite capacitatea de a se conecta și de a utiliza API -urile lor pentru a face lucruri precum obținerea serverelor RTMP sau a controla canalul. Libobs/obs-service.Fișierul H este antetul dedicat pentru implementarea serviciilor. .
De exemplu, pentru a implementa un obiect de serviciu, trebuie să definiți o structură obs_service_info și să o completați cu informații și apeluri legate de serviciul dvs .:
/* serviciul meu. . struct obs_service_info my_service_service . = "My_Service", .get_name , . = my_service_create, .distruge = , . = , . , . = , .get_key = my_service_key
.C, ați apela obs_register_service () în obs_module_load () pentru a înregistra serviciul la libobs.
/* My-Plugin. [. ] struct . bool obs_module_load(gol obs_register_service(ȘiMy_Service [. ; >
Setări (vezi Libobs/OBS-DATA.. .
obs_data_array_t obs_data_t obiecte, similare cu tablourile JSON (deși nu sunt destul de identice).
sau Obiect, ați apelat la funcțiile obs_data_create () sau obs_data_array_create (). obs_data_array_t . obs_data_t obs_data_array_t Obiectul este returnat de o funcție, referințele lor sunt incrementate, deci trebuie să eliberați aceste referințe de fiecare dată.
Pentru a seta valori pentru un obs_data_t
EXPORT gol obs_data_set_string( date, const , const Val EXPORT ( , Nume, ); obs_data_set_double *, Nume, dubla gol obs_data_set_bool(obs_data_t , char , ); gol *, const *, EXPORT gol obs_data_t *, char , obs_data_array_t matrice);
În mod similar, pentru a obține o valoare de la un obs_data_t obiect, veți utiliza una dintre următoarele funcții:
/ * Obține funcții */ EXPORT char * *, Nume EXPORT lung date, char dubla (obs_data_t date, ); EXPORT , const ); EXPORT obs_data_t *(obs_data_t *, Nume); (obs_data_t , const char
obs_data_t . . Callback care permite setarea setărilor implicite pentru obiectul pe creație.
Aceste funcții controlează valorile implicite sunt următoarele:
/* Funcții de valoare implicită. EXPORT gol obs_data_t date, const char , const char *Val); EXPORT gol obs_data_set_default_int *, Nume, Val); gol obs_data_t , , gol obs_data_t , char *, ); obs_data_t *, *, obj
Proprietăți
.. . API Proprietăți definește proprietăți specifice care sunt legate de setările obiectului, iar front-end folosește acele proprietăți pentru a genera widget-uri pentru a permite utilizatorului să modifice setările. . .
Un exemplu în acest sens:
obs_properties_t my_source_properties( date * obs_properties_create obs_properties_add_bool(ppts, "my_bool", ("Mybool" (date întoarcere ; > . struct .get_properties = , [.
. . .
Proprietățile pot fi, de asemenea, modificate în funcție de ce setări sunt afișate. .
De exemplu, dacă doriți proprietatea booleană A pentru a ascunde proprietatea textului B:
(obs_properties_t ppts, obs_property_t , obs_data_t * bool = (setări, "setare_a" p obs_properties_get(ppts, "setare_b" , activat întoarcere > . my_source_properties(gol date obs_properties_t *ppts = (); obs_property_t *p; p ppts, , obs_module_text)); obs_property_set_modified_callback(, set_a_modified obs_properties_add_text, "setare_b", , ppts >
. . Apoi funcția obs_module_text () (care este declarată automat ca externă de libobs/obs-module..
. Exportul obs_module_set_locale () este apelat de libobs pentru a seta limba actuală, apoi exportul obs_module_free_locale () este numit de libobs privind distrugerea modulului. .
© Copyright 2017-2023, Lain Bailey.
Ghid de pluginuri
. Unele plugin -uri permit, de asemenea, OBS Studio să comunice cu anumite tipuri de hardware, cum ar fi Elgato Stream Deck.
.
Compatibilitate
.
- Pluginul este disponibil doar pe o singură platformă (i..
- pluginul nu este disponibil pentru aceeași arhitectură (i.. x86_64, nu ARM64)
..
Instalați sau eliminați pluginurile
. În general, instalează pluginuri în locațiile enumerate mai jos.
. Vă rugăm să verificați mai întâi documentația pluginului.
(toți utilizatorii)
Ferestre
..Ferestre (un singur utilizator)
macOS
~/Bibliotecă/asistență de aplicație/obs-studio/plugin-uri
Linux
.Config/obs-studio/plugin-uri
date/pluginuri .
- libobs/obs.H – principalul antet Libobs. Acest fișier include automat următoarele fișiere: