OBS向けNDIプラグインを試してみた。

左上の画面を右側のOBSでキャプチャーして左下のノートPC上のOBSに送っている図。複雑。

ゲーム配信や録画ツールとして有名なOBS(Open Broadcaster Software)ですが、OBSにはプラグインの機能があります。文字通り、本来含まれていない機能をあとから追加することによって機能の拡張が出来るという事です。

今回は前から何となく入れていたNDIを利用したInput/Output機能を追加するプラグイン「obs-ndi」を実際に使ってみたのでメモがてらまとめておきます。

スポンサーリンク

そもそもNDIって何よ?

NDI(Network Device Interface)とは何ぞやって話ですが、調べてみると「IPを利用した低遅延かつ高品質な映像伝送技術」という感じらしい。NewTek社によって開発された技術・規格ですが、2年ほど前に無償化されたそうです。生中継とかそういうのに使う技術みたいですね。Adobe CCのアプリケーションにもプラグインが用意されているみたい(こちら)。

そのNDIをOBS Studioに実装してしまおうというのが「obs-ndi」というプラグイン。このプラグインを利用すると、一方のPCのOBSのシーンをもう一方のOBSのシーンにリアルタイムで送信が出来るんだそう。早速やってみよう。

OBSにプラグインを導入する

まずはプラグイン(obs-ndi)のダウンロードから。

Downloadの中からそれぞれのOSに対応したバージョンをダウンロード。Windowsの場合はInstaller版の方が必要なツール群が一気にインストール出来るようなのでこちらがお勧め。

GithubのReleaseからのダウンロード。書いてる時の最新バージョンは4.1.0でした。

ダウンロードが終わったらインストーラーを実行。最初のSelect LanguageはEnglishでOKです。

LicenseはAgreeしてそのままInstall。OBSのフォルダを選択する場面が出てきたら今OBS Studioをインストールしているディレクトリを選択しましょう(多分そのままで大丈夫なはず)。

インストールが終わるとデスクトップに新しいexeファイル「NewTek NDI Redist」が出現します。

この子がNDI。

これを実行してRuntimeをインストールするらしい。実行しておきましょう(もしかしたら最初のインストーラーがやってくれててしなくてもいい?この辺はよく分からない)。

この作業を映像の送信側PCと映像の受信側PCそれぞれに実行します。これで下準備は終わりです。次はOBS Studio上での作業です。

実際にNDIを有効にする

OBS Studioを起動します。まずは送信側のPCから設定していきます。

まずはNDIの送信を有効にします。ツール→NDI Output settingsをクリック。

プラグインが正常にインストール出来ていればここに新しい項目が追加されているはず。

クリックすると設定画面が出てくるので「Enable NDI Output」をチェック。Output nameは何でも大丈夫なので好きな文字列を入力しましょう。今回は「OBStest」と入力しています。

設定画面はシンプル。

これで送信側の設定は完了です。次は受信側の設定をしていきます。

OBS Studioを起動し、シーン内に「NDI Source」というソースを追加しましょう。

順当にプラグインが入っていればソース一覧の中に新しく入っているはず。

そのまま新規作成。必要であれば名前を変更しましょう。

新規作成後にNDI Sourceのプロパティが表示されます。「Source name」欄で送信側のPCで設定した名前(今回はOBStest)のソースが選択されていることを確認してOKを押しましょう。基本的には同一のLAN内に送受信それぞれのPCが存在する必要があるので表示されない場合はそこも確認してください。

恐らく複数のOBSから送信している場合はいくつか選択肢が出るものと思われる。

これでソースの追加が成功していれば受信側も準備完了です。

なお、受信側のNDI Source上で表示される映像・音声は、送信側のOBSでアクティブな映像・音声(その時点で配信や録画をした際に実際にそれらに載る映像・音声)が利用されます。なので送信側のOBSでソースレイヤーを重ねている場合は、その状態の映像・音声がそのまま受信側に送信されます(まんま配信をそのまま受け取っているような感じ)。

受信側ではNDI Sourceを追加した時点で、音声ミキサー上に追加したNDI Sourceの名前と同じオーディオチャンネルが出現します。このチャンネルが送信側から受け取った音声になります。また、受信側でも受信した映像を変形したりレイヤーを追加することが可能です(受信側のNDI Sourceのソースも他のソースと同様の扱いで扱われる、ということ)。

NDIで実際に伝送してみる

それぞれのPCで準備が出来たら両方のOBSを起動しましょう。上手く出来ていれば起動するだけで自動的に送信側PCのOBSのプレビュー画面(アクティブになっているシーンの画面)が受信側PCのOBSのNDI Source上に表示されているはずです。

映った。手前のノートPCが送信側、奥側のディスプレイが受信側。

ちなみに遅延についても簡単にテスト。1秒ごとに色が切り替わる動画を使用してどのぐらい遅延するか試してみました。上の写真と同様に手前側のノートPCが送信側、奥のディスプレイが受信側のOBSです。なおテスト中はノートPCは有線ケーブルが届かなかったのでWi-Fiで動作しています。

latency test

受信側の画面でゲームをしたりするわけではないので録画用や配信用としては十分な速さにも感じます。もっとパフォーマンスの良いマシン同士かつ有線LANでの接続であればもっと遅延が縮まる可能性もありますね。

実際にこの構成で配信もしてみましたが、ちゃんと映像・音声共に配信に載せることが出来ていたようです。ただし音声が映像と少しずれていたようで、そこだけは受信側のOBSでNDI Sourceに映像の遅延(非同期)のフィルターを掛けて(今回の環境では+1msの設定)対応しました。これも受信側のパフォーマンス不足の可能性があるので、他の環境で試すと結果が変わるかもしれません。

複数PCでの配信における1つの選択肢

まだあくまでもプラグインとして動くNDIの機能ですが、いずれはOBS Studio本体に統合される日が来るんでしょうか。最近ではmixerのFTL対応やStingerトランジションの統合などもあり、開発も意欲的なので少し楽しみだったりします。この辺はオープンソースの強みなんでしょうか。

簡単に試してみただけなのでもっと細かい設定の要素などあるかもしれませんが、環境によっては有効活用出来そうないいプラグインだと思います。PCゲームを配信している人でゲームをするPC以外にそこそこパワーのあるPCを余らせている人とかは、配信や録画をする際にゲームをするPCへの負担を大きく減らす事が出来る1つの選択肢にもなり得ます。どうしてもCPUエンコードが使いたいけどゲームが・・・なんていう人にもいいかもしれません。

複数のPCの映像を1つのPCで受け取ってスイッチングするなんてことも出来るのかも。複数のサイトに配信しながら録画もしたいけど1つのPCだと無理っていう人なら2つのPCで3つのサイトに配信しながら1つローカル録画も・・・。色んな事が出来そうです。

ゲームをする側はOBSを立ち上げておくだけ。何だったら多分ウィンドウを隠しおいてOK。あとはもう1つのPCに頑張ってもらう。配信専用PCが気軽に作れるobs-ndiプラグイン。導入も比較的簡単なので、興味がある人は試してみてはいかがでしょうか。

Palakis/obs-ndi
Network A/V in OBS Studio. Contribute to Palakis/obs-ndi development by creating an account on GitHub.

コメント