プラグイン – OBSスタジオ29.1.3ドキュメント、プラグインガイド| obs

0

プラグインガイド

Linux
(フラットパック)

プラグイン

ほとんどすべてのカスタム機能はプラグインモジュールを介して追加されます。これは通常、動的なライブラリまたはスクリプトです。. オーディオ/ビデオをキャプチャおよび/または出力する機能、録音、rtmpストリームへの出力、x264でエンコードする機能はすべて、プラグインモジュールを介して実現されるものの例です。.

プラグインはソース、出力、エンコーダー、およびサービスを実装できます.

最初のプラグインを書きます? 開始するための基本的なテンプレートプラグインを提供します.

プラグインモジュールヘッダー

これらは、プラグインで一般的に使用されるいくつかの注目すべきヘッダーです。

  • libobs/obs module.H – プラグインモジュールの作成に使用されるプライマリヘッダー. このファイルには、次のファイルが自動的に含まれています。
    • libobs/obs.H – メインのLibobsヘッダー. このファイルには、次のファイルが自動的に含まれています。
      • .H – プラグインモジュールにソースを実装するために使用されます
      • libobs/obs-output.H – プラグインモジュールに出力を実装するために使用されます
      • Libobs/Obs-Encoder.H – プラグインモジュールにエンコーダを実装するために使用されます
      • Libobs/Obs-Service.H – プラグインモジュールにサービスの実装に使用されます
      • libobs/obs-data.H – Libobsオブジェクトの設定の管理に使用
      • Libobs/Obs-Properties.H – Libobsオブジェクトのプロパティの生成に使用されます
      • Libobs/Graphics/Graphics.H – グラフィックレンダリングに使用

      一般的なディレクトリ構造とcmakelist.txt

      ソースファイルが編成される一般的な方法は、プラグインの初期化用の1つのファイルを使用し、実装している個々のオブジェクトごとに特定のファイルを使用することです。. たとえば、「My-Plugin」というプラグインを作成する場合、My-Pluginのようなものがあります.cプラグインの初期化が行われる場所、私のソース.cカスタムソースの定義、私の出力について.Cカスタム出力などの定義のためのc. (これはもちろんルールではありません)

      これは、ネイティブプラグインモジュールの一般的なディレクトリ構造の例です。

      私の-プラグイン/データ/ロケール/en-私たち.ini 私の-プラグイン/cmakelists.TXT 私の-プラグイン/私の-プラグイン.c 私の-プラグイン/私の-ソース.c 私の-プラグイン/私の-出力. -/私の-エンコーダー.c 私の-プラグイン/私の-サービス.c 

      これは、一般的なcmakelistの例です.これらのファイルに関連付けられているtxtファイル:

      #my-plugin/cmakelists.TXTプロジェクト(My-Plugin)セット(My-Plugin_Sources My-Plugin.c私のソース.c私の出力.C My-Encoder.c私のサービス.c)add_library(my-plugin module $)target_link_libraries(my-plugin libobs)install_obs_plugin_with_data(my-plugin data)

      ネイティブプラグインの初期化

      ネイティブプラグインモジュールを作成するには、Libobs/Obs-Moduleを含める必要があります.Hヘッダー、obs_declare_module()macroを使用してから、関数の定義を作成しますobs_module_load() . obs_module_load()関数で、カスタムソース、出力、エンコーダ、またはサービスを登録します. 詳細については、モジュールAPIリファレンスを参照してください.

      以下は私のプラギンの例です.C、各タイプの1つのオブジェクトを登録します。

      /* my-plugin.c */ #含む / *一般的な関数(必須)を定義 */ obs_declare_module() / *一般的なINIベースのロケール(オプション)を実装してください */ 「マイプルギン」, 「en-us」)) 外部 struct obs_source_info my_source; /*私のソースで定義されています.c */ 外部 struct obs_output_info my_output; /*私の出力で定義されています.c */ 外部 struct obs_encoder_info my_encoder; /* My-Encoderで定義されています.c */ 外部 struct obs_service_info my_service; /*私のサービスで定義されています.c */ ブール obs_module_load空所))  obs_register_sourcemy_source); obs_register_outputmy_output); obs_register_encodermy_encoder); obs_register_servicemy_service); 戻る 真実; > 

      SOURCES

      ソースは、ストリーム上のビデオやオーディオをレンダリングするために使用されます. ディスプレイ/ゲーム/オーディオのキャプチャ、ビデオの再生、画像の表示、オーディオの再生など. ソースを使用して、オーディオやビデオフィルター、および遷移を実装することもできます. Libobs/Obs-Source.Hファイルは、ソースを実装するための専用のヘッダーです. 詳細については、ソースAPIリファレンス(obs_source_t)を参照してください.

      たとえば、ソースオブジェクトを実装するには、obs_source_info構造を定義し、ソースに関連する情報とコールバックを入力する必要があります。

      /*私のソース.c */ [. ] struct    .id = , .タイプ = obs_source_type_input, .output_flags = obs_source_video, .get_name = my_source_name, .作成する = my_source_create, . = my_source_destroy, .アップデート = my_source_update, .video_render  my_source_render, .get_width = my_source_width, .get_height = my_source_height >; 

      その後、私のプラギンで..

      /* my-plugin.c */ [. ] 外部 struct obs_source_info my_source; /*私のソースで定義されています.c */ ブール obs_module_load空所))  obs_register_sourcemy_source); [. ]  真実;  

      ソースのいくつかの簡単な例:

      • 同期ビデオソース:画像ソース
      • 非同期ビデオソース:ランダムテクスチャテストソース
      • オーディオソース:正弦波テストソース
      • ビデオフィルター:テストビデオフィルター
      • オーディオフィルター:ゲインオーディオフィルター

      出力

      出力により、現在レンダリングしているオーディオ/ビデオを出力する機能を可能にします. ストリーミングと録音は、出力の2つの一般的な例ですが、出力の唯一の例ではありません. 出力は生データを受信したり、エンコードされたデータを受信したりできます. Libobs/Obs-output.Hファイルは、出力を実装するための専用ヘッダーです. 詳細については、出力APIリファレンス(obs_output_t)を参照してください.

      たとえば、出力オブジェクトを実装するには、OBS_OUTPUT_INFO構造を定義し、出力に関連する情報とコールバックを入力する必要があります。

      /*私の出力.c */ [. ] struct obs_output_info my_output  .id = 「my_output」, .フラグ  obs_output_av | obs_output_encoded, .get_name = my_output_name, .作成する = my_output_create, .破壊する = my_output_destroy, .始める  my_output_start, .停止 = my_output_stop, .encoded_pa​​cket = my_output_data, .get_total_bytes = my_output_total_bytes, .encoded_video_codecs = 「H264」, .encoded_audio_codecs = 「AAC」 >; 

      .c、obs_module_load()でobs_register_output()を呼び出してlibobsに出力を登録します.

      /* my-plugin.c */ [. ] 外部 struct obs_output_info my_output; /*私の出力で定義されています.c */ ブール obs_module_load空所  obs_register_outputmy_output); [. ] 戻る 真実; > 

      出力のいくつかの例:

      • エンコードされたビデオ/オーディオ出力:
        • FLV出力
        • FFMPEGマクサー出力
        • RTMPストリーム出力
        • FFMPEG出力

        エンコーダーズ

        エンコーダーは、ビデオ/オーディオエンコーダーのobs固有の実装であり、エンコーダーを使用する出力で使用されます. . Libobs/Obs-Encoder.Hファイルは、エンコーダーを実装するための専用ヘッダーです. 詳細については、エンコーダーAPIリファレンス(obs_encoder_t)を参照してください.

        たとえば、エンコーダオブジェクトを実装するには、OBS_ENCODER_INFO構造を定義し、エンコーダーに関連する情報とコールバックを入力する必要があります。

        /* my-encoder.c */ [. ] struct obs_encoder_info my_encoder_encoder =  .id = 「my_encoder」, .タイプ = obs_encoder_video, .コーデック = 「H264」, .get_name = my_encoder_name, .作成する = , .破壊する = my_encoder_destroy, .エンコード = my_encoder_encode, .アップデート = my_encoder_update, .get_extra_data = my_encoder_extra_data, .get_sei_data = my_encoder_sei, .get_video_info = my_encoder_video_info  

        その後、私のプラギンで..

        /* my-plugin.c */ [. ] 外部  obs_encoder_info my_encoder; /* My-Encoderで定義されています. ブール obs_module_load空所))  obs_register_encodermy_encoder); .  戻る 真実;  

        重要な注意点: エンコーダー設定には現在、特定の命名規則が必要な、いくつかの予想される共通の設定値があります。

        • 「ビットレート」 – この値は、ビデオエンコーダーとオーディオエンコーダーの両方に使用する必要があります:Bitrate、Kilobits.
        • 「Rate_Control」 – これは、ビデオエンコーダーに使用される設定です. 一般に、少なくとも「CBR」レート制御があると予想されています. 他の一般的なレート制御は「VBR」、「CQP」です.
        • 「keyint_sec」 – . (著者のメモ:これはフレーム内の「keyint」であったはずです.))

        エンコーダーの例:

        • ビデオエンコーダー:
          • X264エンコーダー
          • ffmpeg nvencエンコーダー
          • QuickSyncエンコーダー
          • FFMPEG AAC/OPUSエンコーダー

          サービスは、ストリーミングの出力で使用されるストリーミングサービスのカスタム実装です. たとえば、Twitchにストリーミング用のカスタム実装とYouTube用の別のカスタム実装を使用して、APIをログインして使用してRTMPサーバーを取得したり、チャネルを制御したりすることができるようにすることができます。. Libobs/Obs-Service.. 詳細については、サービスAPIリファレンス(obs_service_t)を参照してください.

          (著者のメモ:この執筆時点では、サービスAPIが不完全です)

          たとえば、サービスオブジェクトを実装するには、obs_service_info構造を定義し、サービスに関連する情報とコールバックを入力する必要があります。

          /*私のサービス.c */ [. ] struct obs_service_info my_service_service =  .id = 「my_service」, .get_name = , .作成する = , .破壊する = my_service_destroy, .エンコード = my_service_encode, .アップデート = , .get_url = my_service_url, .get_key  my_service_key >; 

          その後、私のプラギンで..

          /* my-plugin.c */ .  外部 struct obs_service_info my_service; /*私のサービスで定義されています.c */ ブール 空所))  obs_register_servicemy_service); [. ] 戻る 真実; > 

          2つの既存のサービスオブジェクトは、プラグイン/RTMPサービスの「一般的なRTMPサービス」と「カスタムRTMPサービス」オブジェクトです

          設定

          設定(Libobs/Obs-Dataを参照してください.h)は、通常Libobsオブジェクトに関連付けられている設定データを取得または設定するために使用され、JSONテキストを介して保存およびロードできます. .

          obs_data_t OBS_DATA_ARRAY_T 同様に、の配列を保存するために使用されます obs_data_t JSONアレイと同様のオブジェクト(まったく同一ではありませんが).

          を作成する obs_data_t または オブジェクト、obs_data_create()またはobs_data_array_create()関数を呼び出します. そして OBS_DATA_ARRAY_T オブジェクトは参照カウントされるため、オブジェクトを使用して終了したら、obs_data_release()またはobs_data_array_release()を呼び出してそれらの参照をリリースします. いつでも obs_data_t または OBS_DATA_ARRAY_T .

          の値を設定するには obs_data_t オブジェクト、次の機能のいずれかを使用します。

          / *関数を設定 */ 輸出 空所 OBS_DATA_SET_STRINGobs_data_t データ, const char *名前,  char *ヴァル); 輸出 空所 obs_data_t *データ, const char *名前, 長さ 長さ ヴァル);  空所 obs_data_set_doubleobs_data_t *データ, const char , ダブル ヴァル); 輸出 空所 obs_data_t *データ, const char *名前, ブール ヴァル); 輸出  obs_data_set_objobs_data_t データ, const char *名前, obs_data_t OBJ); 輸出 空所 OBS_DATA_SET_ARRAYobs_data_t *データ, const char *名前, OBS_DATA_ARRAY_T *配列); 

          同様に、anから値を取得します obs_data_t オブジェクト、次の機能のいずれかを使用します。

          / *関数を取得 */ 輸出 const char *OBS_DATA_GET_STRINGobs_data_t *データ, const char *名前 輸出 長さ 長さ obs_data_get_intobs_data_t *データ, const char *名前); 輸出 ダブル obs_data_get_doubleobs_data_t *データ, const  *名前 輸出  obs_data_get_bool *データ, const char *名前);  obs_data_t *obs_data_get_objobs_data_t *データ, const char * 輸出  *obs_data_t データ, const  名前); 

          典型的なJSONデータオブジェクトとは異なり、 obs_data_t . これにより、特定の文字列に割り当てられた値がない場合に返されるものを制御する機能が可能になります そのデータがJSON文字列またはJSONファイルからロードされたときのオブジェクト. 各libobsオブジェクトにもあります get_defaults 作成時にオブジェクトのデフォルト設定を設定できるコールバック.

          これらの関数は、デフォルト値を制御します。

          /*デフォルト値関数. */ 輸出 空所 obs_data_set_default_stringobs_data_t *データ, const char *名前,  char *ヴァル); 輸出 空所 obs_data_set_default_intobs_data_t *データ, const char *, 長さ 長さ ); 輸出 空所 obs_data_t *データ,  char 名前, ダブル ヴァル); 輸出 空所 obs_data_t *,  char *名前, ブール ヴァル); 輸出 空所 obs_data_set_default_obj *データ, const  *, obs_data_t OBJ); 

          プロパティ

          プロパティ(Libobs/Obs-Propertiesを参照してください.. プロパティを生成するために使用されるコールバック. . たとえば、ブール設定がある場合、obs_properties_add_bool()を使用して、ユーザーがその設定を変更できるようにします. .

          この例:

          静的  *空所 *データ  obs_properties_t *PPTS = obs_properties_create(); obs_properties_add_bool, 「my_bool」, obs_module_text「mybool」)); UNUSED_PARAMETERデータ); 戻る PPTS;  [. ] struct  my_source  .get_properties = , [. ] >; 

          データ オブジェクトが存在する場合、パラメーターはオブジェクトのデータです. . プロパティがそれに関連付けられているオブジェクトなしで取得された場合、それはヌルになる可能性があります.

          プロパティは、表示される設定に応じて変更することもできます. たとえば、特定の設定がobs_property_set_modified_callback()関数を使用することに設定されていることに応じて、特定のプロパティを無効または見えないものとしてマークすることができます.

          たとえば、BooleanプロパティAがテキストプロパティBを非表示にしたい場合:

          静的 ブール setting_a_modifiedobs_properties_t PPTS, obs_property_t *, obs_data_t 設定))  ブール 有効になっています  obs_data_get_bool, "Setting_a");   obs_properties_getPPTS, 「sitess_b」); obs_property_set_enabledp, 有効になっています); /* trueを返してプロパティウィジェットを更新する、false さもないと */ 戻る 真実 > [.  静的 obs_properties_t *空所 *))  obs_properties_t  =   ; p  PPTS, "Setting_a", obs_module_text「sinda」)); obs_property_set_modified_callbackp, setting_a_modified obs_properties_add_text, 「sitess_b」, 「settinb」)), obs_text_default); 戻る PPTS; > 

          ローカリゼーション

          通常、OBS Studioにバンドルされたほとんどのプラグインは、各ファイルが別の言語である簡単なINIファイルローカリゼーション方法を使用します. この方法を使用する場合、obs_module_use_default_locale()マクロが使用されます。これは、プラグインの一部に余分な労力をかけずにロケールデータを自動的にロード/破壊する. 次に、obs_module_text()関数(これはlibobs/obs-moduleによって外部として自動的に宣言されます.h)テキスト検索が必要な場合に使用されます.

          モジュールがロードをロード/破壊するために使用される2つのエクスポートがあります:obs_module_set_locale()exportとobs_module_free_locale()export. obs_module_set_locale()エクスポートはlibobsによって呼び出されて現在の言語を設定し、その後、obs_module_free_locale()エクスポートは、モジュールの破壊に関するlibobsによって呼び出されます. プラグインのカスタムロケール実装を実装する場合は、obs_module_use_default_locale()macroに依存するのではなく、obs_module_text()extern Yourselfとともにこれらのエクスポートを定義する必要があります。.

          ©Copyright 2017-2023、Lain Bailey.

          OBS Studioは、新しい種類のソース、フィルター、機能を提供するさまざまなプラグインをサポートしています. 一部のプラグインは、OBS StudioがElgato Stream Deckなどの特定の種類のハードウェアと通信することもできます.

          Flathubを介してLinuxユーザーが利用できるプラグインもいくつかあります.

          互換性

          ほとんどのプラグインは、OBS Studioが利用可能なすべてのプラットフォームで使用できるように開発されています. ただし、プラグインがOBS Studioのコピーと互換性がない場合があります。

          • プラグインは1つのプラットフォームでのみ使用できます(i.e. windows、macosではなく)
          • プラグインは同じアーキテクチャでは利用できません(i.e. x86_64、arm64ではなく)
          • プラグインは、あなたが使用しているOBSスタジオのバージョンのために更新されていません

          OBS Studio 28のプラットフォームで利用可能なプラグインを確認するには.0、OBS Studio 28プラグインの互換性リストを参照してください.

          プラグインをインストールまたは削除します

          OBS Studioの最も人気のあるプラグインの多くには、インストーラーが付属しています. .

          プラグインを手動でインストールする必要がある場合、関連するファイルはこれらのフォルダーに移動する必要がある可能性があります. 最初にプラグインのドキュメントを確認してください.

          ウィンドウズ (すべてのユーザー)

          c:\プログラムファイル\ obs-studio \ obs-plugins \ 64bit

          ウィンドウズ
          .2.4および事前のみ)

          c:\プログラムファイル\ obs-studio \ obs-plugins \ 32bit

          ウィンドウズ (シングルユーザー)

          %appData%\ obs-studio \ obs-plugins

          〜/ライブラリ/アプリケーションサポート/obs-studio/プラグイン

          Linux

          〜/.config/obs-studio/プラグイン

          Linux
          (フラットパック)

          フラットパックを使用してプラグインをインストールします

          OBS Studioをカスタムロケーションにインストールするか、ポータブルモードを使用する場合、インストーラーのターゲットフォルダーをカスタムロケーションの場所に変更する必要があります データ/プラグイン フォルダ.

          目次