.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 .
- libobs/obs.H – główny nagłówek Libobs.