OBS複数サイト同時配信プラグイン(ソースコード付き)

 

 

雷鳴です。最近OBSプラグインにいろいろいじってる。ここでOBS同時配信プラグインのことを紹介します。

 

1. 現状

OBSは複数サイトに同時配信機能が実装していません。Twitterで「OBS 同時配信」と検索すると、この機能に要求する方は多いようだ。主に以下の方法です。

1.1. OBS複数起動

複数起動はマジで力技の上で、カメラあるいはゲームキャプチャーは複数のOBSに使えません。


1.2. OBSの録画機能を使ってURLに出力する

私も試したことがあります。エンコーダーはメイン配信と共有できないため力技になる可能性があります。また配信制御機能はメイン配信より弱い(再接続、出力フレームレート表示、ネット混雑処理とか)。そして録画保存はできなくなった。


1.3. nginx-rtmpで自前中継サーバーを立つ

サーバー立ちは初心者にとってややむずかしい・・・?


1.4. Restream.ioのサービスを利用する

たしかに力技になれないが有料


1.5. OBSの代わりにXSplitを利用する

これも有料


1.6. RtmpRelayerを利用する

 refer: 

tokaisodachi.com

 

2. 自作プラグイン

OBSのソースコードより、複数サイトに同時配信できます。しかしGUIで操作する方法がありません。 自作プラグインしか仕方ないと思います。

ソースコードに機能があるため、簡単に同時配信プラグインの作りはできます。

2.1 機能

  • 理論的に数が無制限のサイトに同時配信できる
  • エンコーダーはメイン配信と共有も個別設定もできます
  • ビットレートも映像サイズも個別設定できます
  • 配信開始、停止は個別制御できます
  • 配信ステータス別々で表示する
  • 録画機能にノータッチ
  • OBS以外起動すべきソフトはありません

2.2 配布ページ(ダウンロード)

sorayuki.github.io

リリースページ:

github.com

release.zipはDLL形式でビルド済みのプラグインです。

2.3 使い方

2.3.1 インストール

OBSアプリのインストールフォルダに、obs-pluginsとdataがあります。ダウンロードしたアーカイブにobs-pluginsとdataもあります。解凍して上書きしたらインストール完了。

ただしくインストールしたあとOBS起動したら「同時配信」が現れます。ドラッグ&ドロップしてOBSメインウィンドウの側につけます。

f:id:sorayukinoyume:20200404171401p:plain

2.3.2 配信先の追加 と 配信設定

新規配信登録をクリックしたら配信先を追加して設定ウインドウが出ます。

f:id:sorayukinoyume:20200404172250p:plain

RTMPサーバーとキーは、配信サイトから取得できます。OBSで「設定→配信→サービス:カスタム…」とは同じものです。

「OBS本体と同じ」はメイン配信と共有するって意味です。最もCPUに軽いモードですが、映像サイズまたビットレートは個別設定できない。OBS本体からエンコーダーを取得するため一回メイン配信を起動しなければならない(だがダミー先に配信、接続した前に終わるとかしても大丈夫)。

エンコーダーは個別設定するときメイン配信は起動したことなくでも大丈夫。しかし複数エンコーダーの使いは力技でパソコンの重さに注意して下さい。

OKボタンをクリックすると設定の確認はしました。

2.3.3 配信開始、停止

操作は大体OBS本体と同じです。「開始」ボタンをクリックすると配信開始。配信中は「開始」ボタンは「停止」ボタンになります。配信中は出力フレームレートを表示する。ネットワークは混雑の時フレームレートは下がる。

f:id:sorayukinoyume:20200404173338p:plain

2.4 ソースコード

ソースコードはgithubで公開する

github.com

あとがき

昔もOBSに複数サイト同時配信のプラグインを作ってみたけど、OBS本体とプラグインに配信開始、停止繰り返していつの間にクラッシュ可能性があります。デバッグしたらrtmpライブラリにグロバル変数を使ってスレッドセーフになれないって原因は発見しました。

あの時はrtmp-streamのソースコードからもう一つのDLLを作ってダブル配信できました。三つ、あるいは四つサイトに同時配信したいならもっともっと多いDLL作る必要です。

OBS25.0にこのコミットは

obs-outputs: Fix librtmp mbedtls thread safety · obsproject/obs-studio@2b131d2 · GitHub

その問題を対応しました。これで複数DLLの作成は不要になりました。

私自身はYoutube、ニコニコで配信しないので同時配信したい方の要求はよくわかりませんので、ツイッターのhyuさん(@hyutec)の力を借りました。ありがとうございます。