.1.

Przewodnik wtyczek

Linux

Wtyczki

Prawie wszystkie niestandardowe funkcje są dodawane za pomocą modułów wtyczek, które są zazwyczaj dynamiczne biblioteki lub skrypty. Możliwość przechwytywania i/lub wyjścia audio/wideo, wykonanie nagrywania, wyjścia do strumienia RTMP, Encode in x264 to przykłady rzeczy, które są osiągane za pomocą modułów wtyczki.

.

? Zapewniamy podstawową wtyczkę szablonu, aby zacząć.

Nagłówki modułu wtyczki

  • .H – główny nagłówek używany do tworzenia modułów wtyczek. Ten plik automatycznie zawiera następujące pliki:
    • libobs/obs.H – główny nagłówek Libobs.
      • .
      • Libobs/OBSUTPUT.H – używane do wdrażania wyjść w modułach wtyczek
      • .H – używane do wdrażania enkoderów w modułach wtyczek
      • .H – używane do wdrażania usług w modułach wtyczek
      • .H – używane do zarządzania ustawieniami dla obiektów Libobs
      • Libobs/obserwatory obsesyjne.
      • libobs/grafika/grafika.H – używane do renderowania grafiki

      Wspólna struktura katalogu i cmakeliści.txt

      Powszechnym sposobem zorganizowania plików źródłowych jest posiadanie jednego pliku do inicjalizacji wtyczki, a następnie określone pliki dla każdego wdrażanego obiektu, który wdrażasz. Na przykład, gdybyś utworzył wtyczkę o nazwie „My-Plugin”, miałbyś coś takiego.c gdzie jest inicjalizacja wtyczek, my-source.c Dla definicji niestandardowego źródła, mój wyjście.. (Oczywiście nie jest to zasada)

      Jest to przykład wspólnej struktury katalogu dla natywnego modułu wtyczki:

      Mój-/dane//-NAS. -/Cmakelists.tekst Mój-podłącz/-podłącz.C Mój-podłącz/-źródło.C Mój-podłącz-wyjście. Mój-podłączMój-enkoder. Mój--praca.C 

      .

      ..c My-Source....c) add_library (moduł my-plugin $) Target_Link_Libraries (my-Plugin Libobs) instalt_obs_plugin_with_data (dane my-plugin)

      Aby utworzyć natywny moduł wtyczki, musisz dołączyć libobs/obsesylu. . W swojej funkcji obs_module_load () rejestrujesz dowolny z niestandardowych źródeł, wyjść, enkodery lub usług. .

      .C, który zarejestrowałby jeden obiekt każdego typu:

      .C */  / * Definiuje wspólne funkcje (wymagane) */ Us_declare_module()  Us_module_use_default_locale, „en-us”    my_source /* Zdefiniowane w My-Source.C */ zewnętrzny struct  my_output; /* Zdefiniowane w moim wyjściu.C */ zewnętrzny  us_encoder_info my_encoder; .C */ zewnętrzny  us_service_info my_service; /* Zdefiniowane w My-Service.  (próżnia  (I); us_register_output(I); ( Imy_service); powrót PRAWDA  

      Źródła służą do renderowania wideo i/lub dźwięku na strumieniu. Rzeczy takie jak przechwytywanie wyświetlaczy/gier/audio, odtwarzanie wideo, pokazanie obrazu lub odtwarzanie dźwięku. Źródła można również wykorzystać do wdrażania filtrów audio i wideo, a także przejść. Libobs/obserwacja.Plik H jest dedykowanym nagłówkiem do wdrażania źródeł. Więcej informacji można znaleźć.

      /* My-Source. .   us_source_info   .ID = „my_source”, .typ  Us_source_type_input, .Output_flags = , .get_name = My_Source_name, .tworzyć = , .zniszczyć  , .  my_source_update, .video_render = my_source_render, .get_width = my_source_width, .get_height = my_source_height >; 

      Następnie w my-plugin..

      .C */ . ]  struct us_source_info my_source; .  ()  ( [[[. ] powrót PRAWDA; > 

      Kilka prostych przykładów źródeł:

      • Synchroniczne źródło wideo: źródło obrazu
      • Filtr audio: Filtr Audio Gain

      Wyjścia pozwalają na możliwość wyprowadzenia aktualnie renderującego audio/wideo. Streaming i rejestrowanie to dwa popularne przykłady wyjściowe, ale nie jedyne rodzaje wyjść. . Libobs/OBS-PUPT.Plik H jest dedykowanym nagłówkiem do wdrażania wyjść. .

      /* My-Output.C */ [[[.   us_output_info   .ID = , .flagi =   Us_output_encoded, .  nazwa my_output_name, .tworzyć  my_output_create, . = , .  my_output_start, .zatrzymywać się = my_output_stop, . = , .get_total_bytes = my_output_total_bytes, .encoded_video_codecs  „H264”, . = „AAC” >; 

      Następnie w my-plugin.C, zadzwonisz do us_register_output () w obs_module_load (), aby zarejestrować wyjście w libobs.

      . . ]    my_output /* Zdefiniowane w moim wyjściu.C */ Bool próżnia)  us_register_output(Imy_output); [[[. ] powrót PRAWDA; > 

      Niektóre przykłady wyników:

      • Zakodowane wyjścia wideo/audio:
        • Wyjście FLV
        • Wyjście strumienia RTMP

        Enkodery to specyficzne dla obserwacji implementacje enkoderów wideo/audio, które są używane z wynikami wykorzystującymi enkodery. . Libobs/obserwator.. Aby uzyskać więcej informacji.

        Na przykład, aby zaimplementować obiekt enkodera, musisz zdefiniować strukturę us_encoder_info i wypełnić ją informacjami i zwrotami związanymi z enkoderem:

        . [[[.    my_encoder_encoder =  .ID = „my_encoder”, .typ = , . = , . = , . = my_encoder_create, . = , .kodować  , .  my_encoder_update, . = my_encoder_extra_data, . = my_encoder_sei, .get_video_info   >; 

        Następnie w my-plugin.C, zadzwonisz do obs_register_encoder () w obs_module_load (), aby zarejestrować enkoder w libobs.

        . .  zewnętrzny struct us_encoder_info  .  )   [[[.   PRAWDA; > 

        WAŻNA UWAGA: Ustawienia enkodera mają obecnie kilka oczekiwanych wspólnych wartości ustawień, które powinny mieć określoną konwencję nazewnictwa:

        • – .
        • – To jest ustawienie używane do enkoderów wideo. . Inne wspólne kontrole stawek to „VBR”, „CQP”.
        • – W przypadku enkoderów wideo ustawia wartość przedziału klatki, w sekundach lub najbliższe możliwe przybliżenie. .
        • Enkodery wideo:
          • Enkoder QuickSync
          • Enkoder FFMPEG AAC/Opus

          Usługi

          Usługi to niestandardowe implementacje usług przesyłania strumieniowego, które są używane z wyjściami, które przesyłają strumieniowo. Na przykład możesz mieć niestandardową implementację do przesyłania strumieniowego do Twitch, a druga dla YouTube, aby umożliwić logowanie i użycie ich interfejsów API do robienia takich rzeczy, jak uzyskanie serwerów RTMP lub kontrolowanie kanału. Libobs/obsług.Plik H jest dedykowanym nagłówkiem do wdrażania usług. Aby uzyskać więcej informacji.

          Na przykład, aby wdrożyć obiekt serwisowy, musisz zdefiniować strukturę us_service_info i wypełnić ją informacjami i zwrotami związanymi z Twoją usługą:

          . [[[. ] struct   =  . = „my_service”, .  , .tworzyć  my_service_create, .zniszczyć  , .kodować = my_service_encode, .aktualizacja  , .get_url  my_service_url, .  my_service_key  

          Następnie w my-plugin.C, zadzwonisz do obs_register_service () w obs_module_load (), aby zarejestrować usługę w Libobs.

          . [[[. ]  struct us_service_info my_service . Bool us_module_load(próżnia)  us_register_servicemy_service); .  powrót PRAWDA  

          Ustawienia

          Ustawienia (patrz libobs/obserwat.h) są używane do uzyskania lub ustawiania danych ustawień zwykle powiązanych z obiektami Libobs, a następnie można je zapisać i załadować za pośrednictwem tekstu JSON. .

          jest odpowiednikiem obiektu JSON, w którym jest to tabela ciąg us_data_array_t jest podobnie używany do przechowywania szeregu .

          Lub . us_data_t I . us_data_t Lub us_data_array_t Obiekt jest zwracany przez funkcję, ich odniesienia są zwiększane, więc musisz wydawać te referencje za każdym razem.

          us_data_t Obiekt, użyjesz jednej z następujących funkcji:

            próżnia us_data_set_string( *,   nazwa,   val);   (us_data_t *,  zwęglać , długi długi  EKSPORT próżnia (us_data_t *dane, const zwęglać , podwójnie val); EKSPORT próżnia us_data_set_bool(us_data_t *dane,   *, Bool val); EKSPORT  us_data_t dane,  zwęglać nazwa, us_data_t *obj EKSPORT próżnia us_data_set_array( *dane, const zwęglać nazwa,  szyk 

          us_data_t Obiekt, użyjesz jednej z następujących funkcji:

          / * Pobierz funkcje */    (us_data_t dane, const zwęglać     us_data_get_int(us_data_t *, const zwęglać * EKSPORT podwójnie  ,    EKSPORT  us_data_get_boolus_data_t dane,   *nazwa   *us_data_get_obj(us_data_t *dane, const zwęglać *nazwa EKSPORT  (us_data_t dane, const  nazwa 

          W przeciwieństwie do typowych obiektów danych JSON, us_data_t Obiekt może również ustawić wartości domyślne. obiekt, gdy te dane są ładowane z plik JSON lub plik JSON. get_defaults oddzwonienie, które umożliwia ustawienie ustawień domyślnych dla obiektu w tworzeniu.

          Funkcje te kontrolują wartości domyślne, są następujące:

          . */ EKSPORT próżnia us_data_set_default_string *,  zwęglać *nazwa, const zwęglać ); EKSPORT próżnia (us_data_t *dane,  zwęglać *, długi   EKSPORT  us_data_t *,   nazwa, podwójnie val);   us_data_set_default_bool *,   *nazwa,  val);  próżnia us_data_set_default_obj(us_data_t *dane,   *, us_data_t ); 

          Właściwości

          .h) służą do automatycznego generowania interfejsu użytkownika do modyfikacji ustawień dla obiektu libobs (w razie potrzeby). Każdy obiekt libobs ma . API właściwości definiuje określone właściwości połączone z ustawieniami obiektu, a front-end wykorzystuje te właściwości do generowania widżetów, aby umożliwić użytkownikowi modyfikację ustawień. Na przykład, jeśli miałeś ustawienie logiczne, użyłbyś us_properties_add_bool (), aby umożliwić użytkownikowi zmianę tego ustawienia. .

          statyczny us_properties_t * *)   PPT   , , ( Nieużywany_parametrdane powrót PPT; > [[[.  struct us_source_info my_source  .get_properties  my_source_properties, . ]  

          dane . . .

          Właściwości można również modyfikować w zależności od wyświetlanych ustawień. Na przykład możesz oznaczać niektóre właściwości jako wyłączone lub niewidoczne w zależności od tego, co jest ustawione na określone funkcję obsługu_property_modified_callback ().

            us_properties_t PPT, us_property_t *P,  Ustawienia)  Bool włączony  (, „Ustawienie_a” P  us_properties_get(, „Ustawienie_b” us_property_set_enabledP, włączony   powrót ; > .    *my_source_properties(próżnia )  us_properties_t   us_properties_create  P  = (, , ( (, Setting_a_modified); us_properties_add_text(, „Ustawienie_b”, „Ustawienie”), Us_text_default powrót PPT > 

          . . Następnie funkcja us_module_text () (która jest automatycznie zadeklarowana jako zewnętrzna przez libobs/obsess-module.h) jest używany, gdy potrzebne jest wyszukiwanie tekstu.

          . Eksport us_module_set_locale () jest wywoływany przez libobs do ustawienia bieżącego języka, a następnie eksport obs_module_free_locale () jest nazywany przez libobs na zniszczenie modułu. Jeśli chcesz zaimplementować niestandardową implementację lokalizacyjną dla swojej wtyczki, chcesz sam zdefiniować te eksport wraz z us_module_text () EXTER, zamiast polegać na makro us_module_use_default_locale ().

          © Copyright 2017-2023, Lain Bailey.

          Przewodnik wtyczek

          Studio OS obsługuje różne wtyczki, które zapewniają nowe rodzaje źródeł, filtrów i funkcji. .

          .

          Zgodność

          .

          • Wtyczka jest dostępna tylko na jednej platformie (i.. Windows, a nie macOS)
          • Wtyczka nie jest dostępna dla tej samej architektury (i.mi.

          Aby zobaczyć, jakie wtyczki są dostępne dla Platform na Studio 2 28.0, patrz lista kompatybilności wtyczek SUT Studio 28.

          Zainstaluj lub wyjmij wtyczki

          . .

          . Najpierw sprawdź dokumentację wtyczki.

          Okna (wszyscy użytkownicy)

          Okna
          (Legacy 32-bitowe wtyczki; Studio 27..4 i tylko wcześniej)

          C: \ Program Files \ us-STUDIO \ us-Plugins \ 32bit

          Okna (pojedynczy użytkownik)

          System operacyjny Mac

          .config/us-studio/wtyczki

          Linux
          (Flatpak)

          dane/wtyczki .