Plugins Guide
(Flatpak)
Plugins
Næsten al tilpasset funktionalitet tilføjes gennem plugin -moduler, som typisk er dynamiske biblioteker eller scripts. Evnen til at fange og/eller udsende lyd/video, lave en optagelse, output til en RTMP -strøm, kode i x264 er alle eksempler på ting, der opnås via plugin -moduler.
Plugins kan implementere kilder, output, kodere og tjenester.
Skrivning af dit første plugin? Vi leverer et grundlæggende skabelon plugin for at komme i gang.
Plugin -moduloverskrifter
Dette er nogle bemærkelsesværdige overskrifter, der ofte bruges af plugins:
- libobs/obs-modul.H – Den primære header, der bruges til at oprette plugin -moduler. Denne fil inkluderer automatisk følgende filer:
- Libobs/Obs.. Denne fil inkluderer automatisk følgende filer:
- libobs/obs-source.H – Brugt til implementering af kilder i plugin -moduler
- libobs/obs-output.H – Brugt til implementering af output i plugin -moduler
- libobs/obs-encoder.H – Brugt til implementering af kodere i plugin -moduler
- libobs/obs-service.H – Brugt til implementering af tjenester i plugin -moduler
- Libobs/Obs-Data.H – Brugt til styring af indstillinger til Libobs -objekter
- Libobs/Obs-properties.H – Brugt til generering af egenskaber til Libobs -objekter
- Libobs/grafik/grafik.H – Brugt til grafisk gengivelse
Fælles katalogstruktur og cmakelister.txt
Den fælles måde, som kildefiler er organiseret på, er at have en fil til plugin -initialisering og derefter specifikke filer for hvert enkelt objekt, du implementerer. For eksempel, hvis du skulle oprette et plugin kaldet ‘my-plugin’, ville du have noget som my-plugin.C hvor plugin-initialisering er færdig, min kilde.C til definitionen af en brugerdefineret kilde, min-output.C til definitionen af en brugerdefineret output osv. (Dette er selvfølgelig ikke en regel)
Dette er et eksempel på en fælles katalogstruktur for et native plugin -modul:
min-Plugin/data/Locale/da-OS.ini min-Plugin/Cmakelister.txt min-Plugin/min-Plugin.c min-Plugin/min-kilde.c min-Plugin/min-produktion.c min-Plugin/min-koder.c min-Plugin/min-service.c
Dette ville være et eksempel på en fælles cmakelister.TXT -fil tilknyttet disse filer:
# my-plugin/cmakelists.TXT-projekt (my-plugin) sæt (my-plugin_sources my-plugin.C My-source.C My-output.C My-encoder.C min service.c) Add_library (my-plugin modul $) mål_link_librarier (my-plugin libobs) install_obs_plugin_with_data (my-plugin data)
Indfødt plugin -initialisering
For at oprette et native plugin-modul skal du inkludere Libobs/Obs-modulen.h header, brug obs_declare_module () makro, og opret derefter en definition af funktionen obs_module_load () . I din OBS_MODULE_LOAD () -funktion registrerer du derefter nogen af dine brugerdefinerede kilder, output, kodere eller tjenester. Se modulets API -reference for mere information.
Følgende er et eksempel på my-plugin.C, som ville registrere et objekt af hver type:
/* my-plugin.c */ #omfatte / * Definerer almindelige funktioner (påkrævet) */ OBS_DECLARE_MODULE() / * Implementerer almindelige ini-baserede landskab (valgfrit) */ OBS_MODULE_USE_DEFAULT_LOCALE("My-plugin", "en-us") ekstern struct obs_source_info my_source; /* Defineret i min kilde.c */ ekstern struct obs_output_info my_output; /* Defineret i min-output.c */ ekstern struct obs_encoder_info my_encoder; /* Defineret i min-encoder.c */ ekstern struct obs_service_info my_service; /* Defineret i min service.c */ bool OBS_MODULE_LOAD(ugyldig) obs_register_source(&my_source); obs_register_output(&my_output); obs_register_encoder(&my_encoder); obs_register_service(&my_service); Vend tilbage rigtigt; >
Kilder
Kilder bruges til at gengive video og/eller lyd i strømmen. Ting som Capture Displays/Games/Audio, afspiller en video, viser et billede eller afspiller lyd. Kilder kan også bruges til at implementere lyd- og videofiltre samt overgange. Libobs/obs-source.H -fil er den dedikerede header til implementering af kilder. Se Source API Reference (OBS_SOURCE_T) for mere information.
For at implementere et kildeobjekt skal du for eksempel definere en OBS_SOURCE_INFO -struktur og udfylde den med information og tilbagekald relateret til din kilde:
/* My-source.c */ [. ] struct obs_source_info my_source .id = "my_source", .type = Obs_source_type_input, .output_flags = Obs_source_video, .Get_name = my_source_name, . = my_source_create, .ødelægge = my_source_destroy, .opdatering = my_source_update, .video_render = , .Get_width = my_source_width, .Get_height = my_source_height >;
Derefter i my-plugin..
/* my-plugin.c */ [. ] ekstern struct obs_source_info my_source; /* Defineret i min kilde.c */ bool OBS_MODULE_LOAD(ugyldig) obs_register_source(&my_source); [. ] Vend tilbage rigtigt; >
Nogle enkle eksempler på kilder:
- Synkron videokilde: billedkilden
- Asynkron videokilde: Den tilfældige strukturtestkilde
- Lydkilde: Sine Wave -testkilden
- Videofilter: Testvideofilteret
- Lydfilter: Gain Audio Filter
Outputs
Output giver mulighed for at udsende den aktuelt gengivende lyd/video. Streaming og optagelse er to almindelige eksempler på output, men ikke de eneste typer output. Output kan modtage de rå data eller modtage kodede data. Libobs/Obs-output.H -fil er den dedikerede header til implementering af output. Se Output API Reference (OBS_OUTPUT_T) for mere information.
For at implementere et outputobjekt skal du for eksempel definere en OBS_OUTPUT_INFO -struktur og udfylde den med information og tilbagekald relateret til din output:
/* My-output.c */ [. ] struct obs_output_info my_output .id = "My_Output", .flag = Obs_output_av | Obs_output_encoded, .Get_name = my_output_name, .skab = my_output_create, .ødelægge = my_output_destroy, .Start = my_output_start, .hold op = my_output_stop, .kodet_packet = my_output_data, .get_total_bytes = my_output_total_bytes, .kodet_video_codecs = "H264", .kodet_audio_codecs = "AAC" >;
Derefter i my-plugin.C, du vil kalde obs_register_output () i obs_module_load () for at registrere output med libobs.
/* my-plugin.c */ [. ] ekstern struct obs_output_info my_output; /* Defineret i min-output.c */ bool OBS_MODULE_LOAD(ugyldig) obs_register_output(&my_output); [. ] Vend tilbage rigtigt; >
Nogle eksempler på output:
-
- FLV -output
- Ffmpeg muxer output
- RTMP -strømproduktionen
- FFMPEG -output
Kodere
Kodere er obs-specifikke implementeringer af video/lydkodere, der bruges med output, der bruger kodere. X264, Nvenc, QuickSync er eksempler på kodningsimplementeringer. Libobs/obs-encoder.. Se The Encoder API Reference (OBS_ENCODER_T) for mere information.
For at implementere et koderobjekt skal du f.eks. Definere en OBS_ENCODER_INFO -struktur og udfylde den med information og tilbagekald relateret til din koder:
/* My-encoder.c */ [. ] struct obs_encoder_info my_encoder_encoder = .id = "my_encoder", .type = Obs_encoder_video, .Codec = "H264", .Get_name = my_encoder_name, .skab = my_encoder_create, .ødelægge = my_encoder_destroy, .kode = my_encoder_encode, .opdatering = my_encoder_update, .get_extra_data = my_encoder_extra_data, .get_sei_data = my_encoder_sei, .get_video_info = my_encoder_video_info >;
Derefter i my-plugin.C, du vil kalde obs_register_encoder () i obs_module_load () for at registrere koderen med libobs.
/* my-plugin.c */ [. ] ekstern struct obs_encoder_info my_encoder; /* Defineret i min-encoder.c */ bool OBS_MODULE_LOAD(ugyldig) obs_register_encoder(&my_encoder); [. ] Vend tilbage rigtigt; >
VIGTIG NOTE: Enkoderindstillinger har i øjeblikket et par forventede fælles indstillingsværdier, der skal have en bestemt navnekonvention:
- “Bitrate” – Denne værdi skal bruges til både video- og lydkodere: bitrate, i kilobits.
- “Rate_control” – Dette er en indstilling, der bruges til videokodere. Det forventes generelt at have mindst en “CBR” -kontrol. Andre almindelige hastighedskontroller er “VBR”, “CQP”.
- “Keyint_sec” – For videokodere indstiller Keyframe -intervallværdien, i sekunder eller nærmest mulig tilnærmelse. (Forfatterens note: Dette burde have været “Keyint” i rammer.)
Eksempler på kodere:
- Videokodere:
- X264 -koderen
- FFMPEG NVENC -koderen
- QuickSync -koderen
- FFMPEG AAC/OPUS -koderen
Tjenester
Tjenester er tilpassede implementeringer af streamingtjenester, der bruges med output, der streamer. For eksempel kan du have en brugerdefineret implementering til streaming til Twitch, og en anden til YouTube for at give mulighed for at logge ind og bruge deres API’er til at gøre ting, såsom at få RTMP -serverne eller kontrollere kanalen. Libobs/obs-service.H -fil er den dedikerede header til implementering af tjenester. .
(Forfatterens note: Service API er ufuldstændig fra denne skrivning)
For at implementere et serviceobjekt skal du for eksempel definere en OBS_SERVICE_INFO -struktur og udfylde den med information og tilbagekald relateret til din service:
/* My-service. . obs_service_info = . , .Get_name = , . = MY_SERVICE_CREATE, . = , .kode = , .opdatering my_service_update, .get_url my_service_url, .Get_key my_service_key
Derefter i my-plugin.C, du vil kalde obs_register_service () i obs_module_load () for at registrere tjenesten hos Libobs.
. [. ekstern struct obs_service_info my_service /* Defineret i min service.c */ bool OBS_MODULE_LOAD( obs_register_service&my_service); [. ] Vend tilbage rigtigt; >
Indstillinger
Indstillinger (se Libobs/Obs-Data.h) bruges til at få eller indstille indstillingsdata, der typisk er forbundet med Libobs -objekter, og kan derefter gemmes og indlæses via JSON -tekst. Se dataindstillingerne API Reference (OBS_DATA_T) for mere information.
Det obs_data_t ækvivalent med et JSON-objekt, hvor det er en strengtabel med underobjekter, og bruges på lignende måde til at opbevare en række obs_data_t Objekter, der ligner JSON -arrays (dog ikke helt identiske).
At oprette en eller obs_data_array_t Objekt, du kalder OBS_DATA_CREATE () eller OBS_DATA_ARRAY_CREATE () FUNKTIONER. obs_data_t og obs_data_array_t Objekter tælles reference, så når du er færdig med objektet, skal du ringe til obs_data_release () eller obs_data_array_release () for at frigive disse referencer. eller Objektet returneres af en funktion, deres referencer øges, så du skal frigive disse referencer hver gang.
At indstille værdier for en obs_data_t
/ * Indstil funktioner */ EKSPORT OBS_DATA_SET_STRING(obs_data_t data, navn, const EKSPORT ugyldig OBS_DATA_SET_INT data, *, obs_data_set_double(obs_data_t data, *, Val OBS_DATA_SET_BOOL( *data, const char *navn, Val); EKSPORT ugyldig data, char *, *); EKSPORT ugyldig obs_data_set_arrayobs_data_t data, const char navn, obs_data_array_t
Tilsvarende for at få en værdi af en Objekt, du ville bruge en af følgende funktioner:
/ * Få funktioner */ EKSPORT const char *obs_data_get_string( , const *navn EKSPORT lang *, const char * dobbelt ( , navn obs_data_t *data, const obs_data_t data, char navn); *obs_data_get_array( , char );
I modsætning til typiske JSON -dataobjekter, obs_data_t Objekt kan også indstille standardværdier. Dette giver mulighed for at kontrollere, hvad der returneres, hvis der ikke er nogen værdi, der er tildelt en bestemt streng i en obs_data_t Objekt Når disse data indlæses fra en JSON -streng eller JSON -fil. Hvert Libobs -objekt har også en Get_defaults .
/* Standardværdifunktioner. */ obs_data_t *, *navn, const *); ugyldig obs_data_set_default_int(obs_data_t data, const , lang ugyldig obs_data_set_default_double(obs_data_t , *, ); ( data, , bool ); obs_data_set_default_obj data, navn, *);
Egenskaber
Egenskaber (se Libobs/Obs-properties.h) bruges automatisk til automatisk at generere brugergrænseflade til at ændre indstillinger for et Libobs -objekt (om ønsket). Get_properties . Egenskaberne API definerer specifikke egenskaber, der er knyttet til objektets indstillinger, og frontend bruger disse egenskaber til at generere widgets for at give brugeren mulighed for at ændre indstillingerne. . Se egenskaberne API Reference (OBS_PROPERTIES_T) for mere information.
statisk *( data OBS_PROPERTIES_T *PPTS = OBS_PROPERTIES_CREATE (PPTS, , ("Mybool")); UNUERE_PARAMETER(); Vend tilbage PPTS; > [. struct my_source .Get_properties my_source_properties, . ]
Parameter er objektets data, hvis objektet er til stede. . Det kan være nul, hvis egenskaberne hentes uden et objekt, der er knyttet til det.
Egenskaber kan også ændres afhængigt af hvilke indstillinger der vises. .
indstilling_a_modificeretOBS_PROPERTIES_T , , *) aktiveret = (, "Setting_a"); obs_properties_get, "Setting_b" obs_property_set_enabled(s, /* returner sandt for at opdatere ejendomswidgets, falsk Vend tilbage rigtigt > [. ] statisk OBS_PROPERTIES_T my_source_properties(ugyldig OBS_PROPERTIES_T *PPTS = OBS_PROPERTIES_CREATE(); *s; OBS_PROPERTIES_ADD_BOOL(PPTS, , OBS_MODULE_TEXT("Settinga")); s, ); (PPTS, , OBS_MODULE_TEXT("Settingb"), Obs_text_default Vend tilbage PPTS;
. . Derefter er OBS_MODULE_TEXT () -funktionen (som automatisk erklæres som en ekstern af Libobs/Obs-Module.h) bruges, når der er behov for tekstopslag.
. Eksporten OBS_MODULE_SET_LOCALE () kaldes af Libobs for at indstille det aktuelle sprog, og derefter kaldes OBS_MODULE_FREE_LOCALE () -eksporten af Libobs om ødelæggelse af modulet. Hvis du ønsker at implementere en brugerdefineret lokalitetsimplementering til dit plugin, vil du definere disse eksport sammen med OBS_MODULE_TEXT () Ekstern dig selv i stedet for.
© Copyright 2017-2023, Lain Bailey.
Plugins Guide
OBS Studio understøtter en række plugins, der leverer nye slags kilder, filtre og funktioner. .
Nogle plugins stilles også til rådighed for Linux -brugere via Flathub.
. Der er dog visse tilfælde, hvor et plugin muligvis ikke er kompatibelt med din kopi af OBS Studio:
- .e. Windows, ikke macOS)
- ..
For at se, hvilke plugins der er tilgængelige for hvilke platforme på OBS Studio 28.0, se OBS Studio 28 plugin -kompatibilitetsliste.
Installer eller fjern plugins
. .
. Kontroller først pluginets dokumentation.
Windows
C: \ Program Files \ Obs-Studio \ Obs-Plugins \ 64bit
Windows
(Legacy 32-bit plugins; OBS Studio 27..4 og tidligere)~/.
Data/plugins .
- Libobs/Obs.. Denne fil inkluderer automatisk følgende filer:
