Plugins – Obs Studio 29.1.3 Dokumentation, plugins guide | Obs

Plugins guide

Linux
(Flatpak)

Plugins

. Möjligheten att fånga och/eller utmatningsljud/video, göra en inspelning, utgång till en RTMP -ström, kodning i x264 är alla exempel på saker som åstadkommes via plugin -moduler.

Plugins kan implementera källor, utgångar, kodare och tjänster.

Skriva ditt första plugin? Vi tillhandahåller ett grundläggande mallplugin för att komma igång.

  • libobs/obs-modul.H – den primära rubriken som används för att skapa plugin -moduler. Den här filen innehåller automatiskt följande filer:
    • libobs/obs.H – Huvudhuvudet för libobs. Den här filen innehåller automatiskt följande filer:
      • libobs/obs-källa.H – Används för att implementera källor i plugin -moduler
      • .
      • libobs/obscoder.H – Används för att implementera kodare i plugin -moduler
      • libobs/obs-tjänst.
      • libobs/obs-data.H – Används för att hantera inställningar för libobs -objekt
      • libobs/obs-properties.H – Används för att generera egenskaper för libobs -objekt
      • libobs/grafik/grafik.H – används för grafikåtergivning

      .

      De vanliga sättkällfilerna är organiserade är att ha en fil för initialisering av plugin och sedan specifika filer för varje enskilt objekt du implementerar. ..c För definitionen av en anpassad källa, min-utgång.C för definitionen av en anpassad utgång, etc.

      Detta är ett exempel på en vanlig katalogstruktur för en inbyggd plugin -modul:

      min-plugin/data/plats/sv-Oss.ini min-plugin/CMakelists.Text min-plugin/min-plugin.c min-plugin/min-källa.c min-plugin/-produktion.c min-plugin/min-kodare.c min-plugin/min-service.c 

      Detta skulle vara ett exempel på en gemensam cmakelists.TXT -fil associerad med dessa filer:

      .TXT Project (my-plugin) set (my-plugin_sources my-plugin..C My-Output.c min kodare.C My Service.c) add_library (my-plugin modul $) mål_link_libraries (my-plugin libobs) install_obs_plugin_with_data (my-plugin data)

      Native Plugin Initialization

      För att skapa en inbyggd plugin-modul måste du inkludera libobs/obs-modulen.h rubrik, använd obs_decleare_module () makro, skapa sedan en definition av funktionen obs_module_load () . I din obs_module_load () -funktion registrerar du sedan någon av dina anpassade källor, utgångar, kodare eller tjänster. .

      Följande är ett exempel på my-plugin.C, som skulle registrera ett objekt av varje typ:

      /* My-plugin.c */ #omfatta / * Definierar vanliga funktioner (krävs) */ Obs_decleare_module / * Implementerar vanligt ini-baserat landskap (valfritt) */ Obs_module_use_default_locale("My-plugin", "en-us") extern struktur obs_source_info my_source; .c */ extern struktur  my_output; /* Definieras i min-utgången.c */  struktur  my_encoder; /* Definieras i min kodare. extern struktur obs_service_info my_service; /* Definieras i min tjänst. kavla (tomhet)  obs_register_source(my_source obs_register_output(&my_output); (&my_encoder); obs_register_service(&my_service); lämna tillbaka  > 

      Källor

      . Saker som att fånga skärmar/spel/ljud, spela en video, visa en bild eller spela ljud. Källor kan också användas för att implementera ljud- och videofilter samt övergångar. .H -fil är den dedikerade rubriken för implementering av källor. .

      För att implementera ett källobjekt måste du till exempel definiera en obs_source_info -struktur och fylla i den med information och återuppringningar relaterade till din källa:

      /* min källa.c */ [. ] struktur obs_source_info   . = "my_source", .typ = Obs_source_type_input, .output_flags = , .hämta namn = my_source_name, .skapa = my_source_create, .förstöra = my_source_destroy, .uppdatering = my_source_update, .Video_Render = my_source_render, .get_width = my_source_width, .get_height = my_source_height >; 

      Sedan i min plugin.c, du skulle ringa obs_register_source () i obs_module_load () för att registrera källan med libobs.

      /* My-plugin.c */ [. ]  struktur  my_source; /* Definieras i min källa.c */ kavla ()  (&); [. ]  Sann; > 

      Några enkla exempel på källor:

      • Synkron videokälla: Bildkällan
      • Asynkron videokälla: Den slumpmässiga texturtestkällan
      • Ljudkälla: Sinusvågtestkällan
      • Videofilter: Testvidefiltret
      • Ljudfilter: Förstärkningsljudfiltret

      Utgångar tillåter möjligheten att mata ut det för närvarande rendering av ljud/video. Streaming och inspelning är två vanliga exempel på utgångar, men inte de enda typerna av utgångar. Utgångar kan ta emot rådata eller ta emot kodade data. Libobs/obs-output.H -fil är den dedikerade rubriken för implementering av utgångar. Se utgångs API -referensen (obs_output_t) för mer information.

      För att implementera ett utgångsobjekt måste du till exempel definiera en obs_output_info -struktur och fylla i det med information och återuppringningar relaterade till din utgång:

      /* My-output.c */ [. ] struktur obs_output_info my_output  .id = "my_output", .flaggor  Obs_output_av | Obs_output_encoded, .hämta namn = , .skapa = my_output_create, .förstöra = my_output_destroy, .Start = my_output_start, . = my_output_stop, .kodad_packet  my_output_data, .get_total_bytes = my_output_total_bytes, .kodad_video_codecs = "H264", .kodad_audio_codecs = "AAC" >; 

      Sedan i min plugin.c, du skulle ringa obs_register_output () i obs_module_load () för att registrera utgången med libobs.

      /* My-plugin.c */ [. ] extern struktur  my_output; /* Definieras i min-utgången.c */ kavla obs_module_load(tomhet)  obs_register_output(&my_output); [. ] lämna tillbaka Sann; > 

      Några exempel på utgångar:

      • Kodade video-/ljudutgångar:
        • FFMPEG Muxer -utgången
        • RTMP -strömproduktionen
        • FFMPEG -utgången

        Kodare är obs-specifika implementeringar av video/ljudkodare, som används med utgångar som använder kodare. x264, nvenc, quicksync är exempel på kodareimplementeringar. Libobs/obscoder.H -fil är den dedikerade rubriken för implementering av kodare. Se Encoder API -referensen (obs_encoder_t) för mer information.

        För att implementera ett kodarobjekt måste du till exempel definiera en obs_encoder_info -struktur och fylla i den med information och återuppringningar relaterade till din kodare:

        /* My-kodare.c */ [. ] struktur obs_encoder_info my_encoder_encoder =  .id = "My_encoder", . = Obs_encoder_video, .kodek  "H264", .hämta namn  my_encoder_name, .skapa = my_encoder_create, . = my_encoder_destroy, .koda = , . = my_encoder_update, .get_extra_data = my_encoder_extra_data, .get_sei_data = my_encoder_sei, .get_video_info = my_encoder_video_info >; 

        Sedan i min plugin.c, du skulle ringa obs_register_encoder () i obs_module_load () för att registrera kodaren hos libobs.

        /* My-plugin.c */ [. ] extern struktur obs_encoder_info my_encoder; /* Definieras i min kodare.c */ kavla obs_module_load(tomhet)  (&my_encoder); [. ]  Sann; > 

        VIKTIG NOTERING: Kodarinställningar har för närvarande några förväntade vanliga inställningsvärden som bör ha en specifik namnkonvention:

        • “Bitrate” – Detta värde bör användas för både video- och ljudkodare: Bitrate, i Kilobits.
        • “Rate_control” – Detta är en inställning som används för videokodare. Det förväntas i allmänhet ha minst en “CBR” -hastighetskontroll. Andra vanliga hastighetskontroller är “VBR”, “CQP”.
        • “KeyInt_Sec” – För videokodare ställer in KeyFrame -intervallvärdet, i några sekunder eller närmaste möjliga tillnärmning. (Författarens anmärkning: Detta borde ha varit “Keyint”, i ramar.)

        Exempel på kodare:

        • Videokodare:
          • X264 -kodaren
          • QuickSync -kodaren

          Tjänster 

          Tjänster är anpassade implementeringar av streamingtjänster, som används med utgångar som strömmar. Till exempel kan du ha en anpassad implementering för streaming till ryck, och en annan för YouTube för att tillåta möjligheten att logga in och använda sina API: er för att göra saker som att få RTMP -servrarna eller styra kanalen. Libobs/obs-service.. Se Service API -referensen (OBS_SERVICE_T) för mer information.

          (Författarens anmärkning: Service API är ofullständigt från och med detta skrivande)

          För att implementera ett serviceobjekt måste du till exempel definiera en obs_service_info -struktur och fylla i det med information och återuppringningar relaterade till din tjänst:

          /* min tjänst.c */ [. ] struktur obs_service_info my_service_service =  .id  "My_service", .hämta namn = my_service_name, .skapa = , .förstöra = my_service_destroy, .  my_service_encode, .uppdatering = my_service_update, . = my_service_url, . =  >; 

          Sedan i min plugin.c, du skulle ringa obs_register_service () i obs_module_load () för att registrera tjänsten med libobs.

          /* My-plugin.c */ [. ] extern struktur obs_service_info my_service; /* Definieras i min tjänst. kavla obs_module_load(tomhet)  obs_register_service&my_service [. ] lämna tillbaka Sann; > 

          De enda två befintliga tjänstobjekten är “Common RTMP Services” och “Custom RTMP Service” -objekt i plugins/RTMP-tjänster

          Inställningar (se libobs/obs-data.h) används för att få eller ställa in inställningsdata som vanligtvis är associerade med libobs -objekt och kan sedan sparas och laddas via JSON -text. Se datainställningarna API -referens (obs_data_t) för mer information.

          De motsvarar ett JSON-objekt, där det är en strängtabell med underobjekt och obs_data_array_t används på liknande sätt för att lagra en rad obs_data_t Objekt, liknande JSON -matriser (men inte riktigt identiska).

          Att skapa en obs_data_t eller obs_data_array_t objekt, du skulle ringa obs_data_create () eller obs_data_array_create () -funktioner. obs_data_t och obs_data_array_t Objekt räknas referens, så när du är klar med objektet, ring obs_data_release () eller obs_data_array_release () för att släppa dessa referenser. Varje gång en obs_data_t eller obs_data_array_t objektet returneras av en funktion, deras referenser ökas, så du måste släppa dessa referenser varje gång.

          Att ställa in värden för en obs_data_t Objekt, du skulle använda en av följande funktioner:

          / * Ställ in funktioner */ EXPORTERA tomhet obs_data_set_string(obs_data_t *data, const röding *, const  *val); EXPORTERA tomhet obs_data_set_int(obs_data_t data, const röding *namn, lång lång val); EXPORTERA tomhet obs_data_set_doubleobs_data_t *data, const röding *,  val); EXPORTERA tomhet obs_data_set_bool(obs_data_t *data, const röding namn, kavla val); EXPORTERA tomhet obs_data_set_obj(obs_data_t *data, const röding *namn, obs_data_t *); EXPORTERA tomhet obs_data_set_array(obs_data_t *data, const  *namn, obs_data_array_t *uppsättning); 

          obs_data_t Objekt, du skulle använda en av följande funktioner:

          / * Få funktioner */ EXPORTERA const röding *obs_data_get_string(obs_data_t *data,  röding *namn); EXPORTERA lång lång obs_data_get_int(obs_data_t data,  röding namn); EXPORTERA dubbel obs_data_get_doubleobs_data_t data, const röding *namn);  kavla (obs_data_t *, const röding *namn);   obs_data_get_obj(obs_data_t *,  röding ); EXPORTERA obs_data_array_t ( *data, const röding *); 

          Objekt kan också ställa in standardvärden. Detta möjliggör förmågan att kontrollera vad som returneras om det inte finns något värde som tilldelas en specifik sträng i en Objekt när den informationen laddas från en JSON -sträng eller JSON -fil. get_defaults Återuppringning som tillåter att ställa in standardinställningarna för objektet vid skapandet.

          /* Standardvärdefunktioner. */ EXPORTERA tomhet obs_data_set_default_string(obs_data_t *data,   *namn, const röding *val);  tomhet obs_data_t *data, const  *namn, lång lång );   obs_data_set_default_double( *, const röding *namn, dubbel val   obs_data_t *data, const röding *,  ); EXPORTERA  obs_data_set_default_obj( *data, const röding *namn, obs_data_t * 

          Egenskaper

          Egenskaper (se libobs/obs-properties.. Varje libobs -objekt har en . Egenskaper API definierar specifika egenskaper som är länkade till objektets inställningar, och front-end använder dessa egenskaper för att generera widgetar för att låta användaren ändra inställningarna. Om du till exempel hade en booleska inställning skulle du använda obs_properties_add_bool () för att låta användaren kunna ändra den inställningen. Se Egenskaper API -referens (obs_properties_t) för mer information.

          Ett exempel på detta:

          statisk obs_properties_t my_source_properties data)    = (); obs_properties_add_bool(ppte, , ("MyBool" data lämna tillbaka ;  [. ] struktur obs_source_info   .get_properties = my_source_properties, [. ] >; 

          De . Vanligtvis är detta oanvänt och bör förmodligen inte användas om möjligt. .

          Egenskaper kan också modifieras beroende på vilka inställningar som visas. Till exempel kan du markera vissa egenskaper som funktionshindrade eller osynliga beroende på vad en viss inställning är inställd på att använda obs_property_set_modified_callback () -funktionen.

            (obs_properties_t ppte, obs_property_t ,  inställningar)     (inställningar, "inställning_a" p  , "inställning_b" (,  /* returnera sant för att uppdatera fastighetswidgets, falska Annars */  ;  [. ]  obs_properties_t *(tomhet data   * = obs_properties_create  ; p = obs_properties_add_bool(ppte, "inställning_a", ( obs_property_set_modified_callback(, inställning_a_modifierad); obs_properties_add_text, "inställning_b", obs_module_text"Inställning av"), Obs_text_default);  ppte;  

          Lokalisering

          . . Sedan Funktionen obs_module_text () (som automatiskt deklareras som en extern av libobs/obs-modul.h) används när textuppslag behövs.

          Det finns två export Modulen som används för att ladda/förstöra Locale: OBS_MODULE_SET_LOCALE () export och obs_module_free_locale () export. . .

          .

          . Vissa plugins tillåter också OBS -studio att kommunicera med vissa typer av hårdvara, till exempel Elgato Stream Deck.

          Vissa plugins görs också tillgängliga för Linux -användare via Flathub.

          .

          • .e. Windows, inte macOS)
          • Plugin är inte tillgängligt för samma arkitektur (i..
          • Plugin har inte uppdaterats för den version av OBS -studio som du använder

          För att se vilka plugins som finns tillgängliga för vilka plattformar på Obs Studio 28..

          Många av Obs Studios mest populära plugins har installatörer. .

          . .

          (alla användare)

          Fönster
          (Legacy 32-bitars plugins; Obs Studio 27.2.Endast 4 och endast tidigare)

          Fönster (ensamstående användare)

          %AppData%\ obs-Studio \ obs-plugins

          ~/Bibliotek/applikationsstöd/obs-studio/plugins

          Linux

          ~/.config/obs-studio/plugins


          (Flatpak)

          Installera plugins med flatpak

          Om du installerar OBS -studio till en anpassad plats eller använder bärbart läge måste du ändra installatörens målmapp till din anpassade plats Data/plugins .