Plugins – OBS Studio 29.1.3 Dokumentasjon, Plugins Guide | Obs
Plugins Guide
(Flatpak)
. .
Plugins kan implementere kilder, utganger, kodere og tjenester.
? Vi tilbyr en grunnleggende mal -plugin for å komme i gang.
Dette er noen bemerkelsesverdige overskrifter som ofte brukes av plugins:
- libobs/obdul.H – Den primære overskriften som brukes til å lage plugin -moduler.
- libobs/obs.H – den viktigste libobs -overskriften.
- libobs/obs-source.H – Brukes til å implementere kilder i plugin -moduler
- .
- libobs/obs-encoder.H – Brukes til å implementere kodere i plugin -moduler
- libobs/obs-service.H – Brukes til å implementere tjenester i plugin -moduler
- libobs/obs-data.
- libobs/obs-Properties.H – Brukes til å generere egenskaper for Libobs -objekter
- .
Vanlig katalogstruktur og cmakelister.
Den vanlige måten kildefiler er organisert på er å ha en fil for initialisering av plugin, og deretter spesifikke filer for hvert enkelt objekt du implementerer. .c Hvor plugin-initialisering er gjort, min kilde.c for definisjon av en tilpasset kilde, my-output.c for definisjon av en tilpasset utgang osv. (Dette er selvfølgelig ikke en regel)
Dette er et eksempel på en vanlig katalogstruktur for en naturlig plugin -modul:
min-plugg inn/data//-OSS.Inn jeg min-plugg inn/.tekst min-/-plugg inn. -plugg inn/min-kilde.c -/min-produksjon.c min-/min-Encoder.c --.c
Dette ville være et eksempel på vanlige cmakelister.
..C my-source.c my-output..C min service.c) add_library (my-plugin module $) target_link_libraries (my-plugin libobs) install_obs_plugin_with_data (my-plugin data)
Innfødt plugin -initialisering
For å opprette en naturlig plugin-modul, må du inkludere Libobs/Obs-Module.h header, bruk obs_declare_module () makro, og lag deretter en definisjon av funksjonen obs_module_load () . . Se modulen API -referanse for mer informasjon.
Følgende er et eksempel på My-Plugin.C, som ville registrere ett objekt av hver type:
. #inkludere / * Definerer vanlige funksjoner (påkrevd) */ Obs_declare_module() / * Implementerer vanlige INI-baserte lokale (valgfritt) */ ("My-plugin", "En-oss") ekstern struktur obs_source_info my_source; /* Definert i min kilde.C */ struktur my_output; /* Definert i my-output.C */ ekstern struktur obs_encoder_info my_encoder; /* Definert i min koder.C */ struktur obs_service_info my_service /* Definert i min service.C */ tomrom (Og obs_register_output(Ogmy_output); obs_register_encoder(my_encoder); obs_register_service(my_service); komme tilbake ekte; >
Kilder
Kilder brukes til å gjengi video og/eller lyd på strømmen. Ting som å fange skjermer/spill/lyd, spille en video, vise et bilde eller spille lyd. Kilder kan også brukes til å implementere lyd- og videofiltre samt overganger. Libobs/Obs-kilden.H -filen er den dedikerte overskriften for å implementere kilder. Se Source API Reference (obs_source_t) for mer informasjon.
For å implementere et kildeobjekt, må du for eksempel definere en OBS_SOURCE_INFO -struktur og fylle den ut med informasjon og tilbakeringinger relatert til kilden din:
.C */ [. struktur my_source . , .type Obs_source_type_input, .output_flags Obs_source_video, . = my_source_name, .skape = my_source_create, .ødelegge my_source_destroy, .Oppdater , .video_render my_source_render, .Get_Width = my_source_width, . = my_source_height >;
Da, i min plugin.C, du vil ringe obds_register_source () i obs_module_load () for å registrere kilden hos libobs.
. [. ekstern my_source /* Definert i min kilde.C */ bool obs_module_loadtomrom Ogmy_source [. ] komme tilbake ekte
- Asynkron videokilde: Den tilfeldige teksturtestkilden
- Lydkilde: Sine Wave -testkilden
- Videofilter: Testvideofilteret
- Lydfilter: Gain Audio -filteret
Utganger
Utgangene tillater muligheten til å sende ut den for øyeblikket gjengivende lyd/video. Streaming og opptak er to vanlige eksempler på utganger, men ikke de eneste typer utganger. Utgangene kan motta rå data eller motta kodede data. .H -filen er den dedikerte overskriften for å implementere utganger. .
For å implementere et utgangsobjekt, må du for eksempel definere en OBS_OUTPUT_INFO -struktur og fylle den ut med informasjon og tilbakeringinger relatert til utdataene dine:
/* my-output.C */ . ] struktur obs_output_info my_output .id = "my_output", .flagg = Obs_output_av | Obs_output_encoded, . , .skape , . , .start my_output_start, .Stoppe = , . my_output_data, .get_total_bytes = my_output_total_bytes, . = "H264", . = "AAC" >;
Da, i min plugin.C, du vil ringe obds_register_output () i obs_module_load () for å registrere utdataene med libobs.
.C */ [. ] ekstern struktur obs_output_info ; /* Definert i my-output. bool obs_module_load(tomrom (Ogmy_output); . ] komme tilbake ekte >
Noen eksempler på utganger:
-
- FLV -utgangen
- FFMPEG -utgangen
Kodere er OBS-spesifikke implementeringer av video/lydkodere, som brukes med utganger som bruker kodere. X264, Nvenc, QuickSync er eksempler på koderimplementeringer. Libobs/Obs-Ext-koderen.H -filen er den dedikerte overskriften for implementering av kodere. Se Encoder API Reference (obs_encoder_t) for mer informasjon.
For å implementere et koderobjekt, må du for eksempel definere en obs_encoder_info -struktur og fylle den ut med informasjon og tilbakeringinger relatert til koderen din:
/* My-encoder. . ] struktur my_encoder_encoder = . = "My_encoder", .type = , .kodek = , .få_navn = my_encoder_name, .skape = my_encoder_create, . = my_encoder_destroy, .kode = my_encoder_encode, .Oppdater , . my_encoder_extra_data, .get_sei_data = my_encoder_sei, .get_video_info = my_encoder_video_info
.C, du vil ringe obs_register_encoder () i obs_module_load () for å registrere koderen med libobs.
. [. ekstern obs_encoder_info ; /* Definert i min koder. obs_module_load(tomrom) obs_register_encoderOg . ; >
VIKTIG NOTAT: Koderinnstillinger har for øyeblikket noen få forventede vanlige innstillingsverdier som bør ha en spesifikk navnekonvensjon:
- “bithastighet” – .
- “Rate_control” – Dette er en innstilling som brukes til videokodere. . .
- – . (Forfatterens merknad: Dette burde ha vært “Keyint”, i rammer.
Eksempler på kodere:
- Videokodere:
Tjenester er tilpassede implementeringer av streamingtjenester, som brukes med utganger som strømmer. . .H -filen er den dedikerte overskriften for implementering av tjenester. .
For å implementere et tjenesteobjekt, må du for eksempel definere en OBS_SERVICE_INFO -struktur og fylle den ut med informasjon og tilbakeringinger relatert til tjenesten din:
/* Min service. [. struktur obs_service_info my_service_service = . = , . = my_service_name, . , .ødelegge my_service_destroy, . my_service_encode, . my_service_update, .get_url my_service_url, . my_service_key >;
.C, du vil ringe obds_register_service () i obs_module_load () for å registrere tjenesten med libobs.
. [. ekstern struktur obs_service_info ; . bool (tomrom) obs_register_service(); . ; >
Innstillinger
.h) brukes til å få eller angi innstillingsdata som vanligvis er assosiert med Libobs -objekter, og kan deretter lagres og lastes via JSON -tekst. Se datainnstillingene API Reference (obs_data_t) for mer informasjon.
De obs_data_t tilsvarer et JSON-objekt, der det er en strengbord med underobjekter, og obs_data_t objekter, lik JSON Arrays (men ikke helt identisk).
obs_data_t eller obs_data_array_t Objekt, vil du ringe OBS_DATA_CREATE () eller OBS_DATA_ARRAY_CREATE () Funksjoner. obs_data_t obs_data_array_t Objekter blir referert til referanse, så når du er ferdig med objektet, kan du ringe obs_data_release () eller obs_data_array_release () for å frigjøre disse referansene. obs_data_t obs_data_array_t .
Å angi verdier for en obs_data_t Objekt, du vil bruke en av følgende funksjoner:
EKSPORT tomrom obs_data_set_stringobs_data_t *data, const røye *Navn, const røye *Val tomrom obs_data_set_int data, const røye Navn, ); EKSPORT tomrom obs_data_set_doubleobs_data_t *data, const røye *Navn, dobbelt EKSPORT obs_data_set_bool(obs_data_t *data, const *Navn, Val); EKSPORT tomrom (obs_data_t data, const røye *, *obj EKSPORT tomrom (obs_data_t data, røye *Navn, obs_data_array_t *);
obs_data_t Objekt, du vil bruke en av følgende funksjoner:
/ * Få funksjoner */ EKSPORT const røye (obs_data_t , const røye *Navn); EKSPORT lang (obs_data_t *data, const *Navn); EKSPORT dobbelt ( *data, const røye *Navn); obs_data_get_bool(obs_data_t *, const røye *Navn EKSPORT *(obs_data_t data, *Navn obs_data_array_t obs_data_get_array( , const røye );
Objekt kan også angi standardverdier. Dette tillater muligheten til å kontrollere hva som returneres hvis det ikke er noen verdi tilordnet en spesifikk streng i en . tilbakeringing som gjør det mulig å sette standardinnstillingene for objektet ved opprettelsen.
Disse funksjonene kontrollerer standardverdiene er som følger:
/* Standardverdifunksjoner. */ EKSPORT obs_data_set_default_string(obs_data_t , Navn, const røye *Val); tomrom (obs_data_t *data, røye , lang lang Val); EKSPORT (obs_data_t *data, røye *Navn, dobbelt Val); EKSPORT tomrom obs_data_set_default_boolobs_data_t *data, const *, ); obs_data_t *, *Navn, obj
Egenskaper
Egenskaper (se Libobs/OBS-Properties.. . . For eksempel, hvis du hadde en boolsk setting, ville du brukt obs_properties_add_bool () for å la brukeren kunne endre den innstillingen. .
Et eksempel på dette:
statisk *my_source_properties(tomrom ) *ppts = obs_properties_create , "My_bool", obs_module_text("Mybool")); (data); komme tilbake > . my_source .get_properties = my_source_properties, .
. . Det kan være null hvis egenskapene blir hentet uten et objekt tilknyttet det.
. For eksempel kan du merke visse egenskaper som funksjonshemmede eller usynlige, avhengig av hva en bestemt innstilling er satt til å bruke OBS_Property_set_Modified_callback () -funksjonen.
statisk Setting_a_modifiedobs_properties_t , obs_property_t *p, obs_data_t *Innstillinger bool aktivert obs_data_get_bool(Innstillinger, "Setting_a"); obs_properties_get(, "Setting_b"); OBS_PROPERTY_SET_ENABLEDp, /* Returner sann for å oppdatere eiendomswidgeter, falske ellers */ komme tilbake > [. ] statisk *my_source_properties(tomrom *data = obs_properties_create(); *p = obs_properties_add_bool(, , obs_module_text)); , (ppts, "Setting_b", "SettingB", ); ; >
Lokalisering
Vanligvis vil de fleste plugins som er samlet med OBS-studio bruke en enkel lokaliseringsmetode i filen, der hver fil er et annet språk. Når du bruker denne metoden, brukes obs_module_use_default_locale () makroen som automatisk vil laste/ødelegge lokaldataene uten ekstra krefter på en del av plugin -en. Deretter er Obs_Module_Text () -funksjonen (som automatisk erklæres som en ekstern av libobs/obdul.h) brukes når tekstoppslag er nødvendig.
Det er to eksport Modulen som brukes til å laste/ødelegge Locale: OBS_MODULE_SET_LOCALE () Eksport, og Obs_Module_Free_Locale () Eksport. . .
.
. .
Noen plugins er også gjort tilgjengelig for Linux -brukere via Flathub.
De fleste plugins er utviklet for å være brukbare på alle plattformer der OBS -studio er tilgjengelig.
- Plugin er bare tilgjengelig på en plattform (i.. Windows, ikke macOS)
- ..
- Pluginen er ikke oppdatert for versjonen av OBS -studio som du bruker
.0, se OBS Studio 28 Plugin Compatibility List.
Installer eller fjern plugins
. Generelt installerer de plugins på stedene som er oppført nedenfor.
. Vennligst sjekk plugins dokumentasjon først.
Vinduer
(Legacy 32-bit plugins; OBS Studio 27.2.Bare 4 og tidligere)Vinduer (enkeltbruker)
%Appdata%\ obs-studio \ obs-plugins
.konfigurasjon/obs-studio/plugins
Linux
(Flatpak)Hvis du installerer OBS -studio til et tilpasset sted eller bruker bærbar modus, må du endre installasjons målmappe til den tilpassede plasseringen mappe.
- libobs/obs.H – den viktigste libobs -overskriften.