ゲーム配信や録画ツールとして有名なOBS Studio(Open Broadcaster Software)ですが、OBSにはプラグインの機能があります。文字通り、本来含まれていない機能をあとから追加することによって機能の拡張が出来ます。
今回は前から何となく入れていたNDIを利用したInput/Output機能を追加するプラグイン「obs-ndi」を実際に使ってみたのでメモがてらまとめておきます。
(2020/05/15:obs-ndiのバージョン更新やツール群更新に合わせて内容を一部修正。NDI入力をWebカメラ化する「NDI Virtual Input」についても、Mac版の配布が始まったようなので追記しました)
そもそもNDIって何よ?
NDI(Network Device Interface)とは何ぞやって話ですが、調べてみると「IPを利用した低遅延かつ高品質な映像伝送技術」という感じらしい。NewTek社によって開発された技術・規格ですが、2年ほど前に無償化されたそうです。生中継とかそういうのに使う技術みたいですね。Adobe CCのアプリケーションにもプラグインが用意されているみたい(こちら)。
そのNDIをOBS Studioに実装してしまおうというのが「obs-ndi」というプラグイン。このプラグインを利用すると、一方のPCのOBSのシーンをもう一方のOBSのシーンにリアルタイムで送信が出来るんだそう。
iPhone向けの純正アプリを使えば、iPhoneのカメラ映像や画面をNDI経由で転送するといったことも可能。メインカメラと手元カメラの2台構成をキャプチャーカードなしに簡単に実現出来る、といったところでしょうか。早速やってましょう。
OBSにプラグインを導入する
まずはプラグイン(obs-ndi)のダウンロードから。記事更新時点での最新版Ver.4.9.0については、OBS Studio Ver.25以降で動作するとされています。
GitHubのプロジェクト内、ReleaseページからそれぞれのOSに対応したバージョンをダウンロード。Windowsの場合はInstaller版の方が必要なツール群が一気にインストール出来るようなのでこちらがお勧めです。
ダウンロードが終わったらインストーラーを実行。インストーラー版(Ver.4.9.0)では、ランタイムもまとめてインストールしてくれるようですが、上手く行かなかった場合は別途インストールが必要です。Releaseの中にダウンロード用URL(ndi-runtime-4.5.1みたいなやつ)があるので、そこから入手しましょう。終わると再起動を要求されます。
この作業を映像の受信側PCに実行します。別のPCからOBSを通じて映像を送る場合は送信側にも同様の操作を、別のNDI対応ソフト/機器(iPhoneとか)から送る場合はそれぞれの機器で送信機能の有効化などを行います。これで下準備は終わり。次はOBS Studio上での作業です。
実際にNDIを有効にする
OBS Studioを起動します。まずは送信側のPCから設定していきます。
別のPCからOBS Studioからメイン/プレビュー画面を送出する場合
まずはNDIの送信を有効にします。ツール→NDI Output settingsをクリック。
クリックすると設定画面が出てきます。「Main Output」と「Preview Output」の2種類の出力が用意されています。それぞれOBSのスタジオモードにおける「番組(右側)」と「プレビュー(左側)」に対応していて、チェックを入れると送出が始まります。当然ですが、シーン内のソースレイアウトや音声ミキサーなどがすべて反映されるため、オーバーレイやLUTなどで調整済みのものを送出できます。なお、両方チェックした場合は、2系統で別々に送出します。
チェックを入れると送出するときの名前を設定出来ます。受信側でソースを選択するときに表示されるもので、そのままでも問題ないです。必要に応じて分かりやすい文字列に変更しましょう。
設定が終わったらOKをクリックして閉じます。
別のPCのOBS Studioからシーン/ソースを単体で送出する場合
obs-ndiプラグインにはシーンやソースを単体で送出する機能も含まれています。映像系ソースだけでなく、ミキサー内の音声ソースでも利用できます。配信レイアウトの中で一部の素材だけを送るといったことが可能になりますね。
単体で送出する場合は、送りたいシーン/ソースを右クリック→フィルタから「Dedicated NDI Output」を追加します。NDI nameには上の場合と同様にソースの名前を入力します。重複しないよう気を付けましょう。
iPhoneの純正アプリから送出する場合
この場合、iOS向けに「NDI HX Camera」というアプリの導入が必要です。本来は有償のアプリですが、5月時点では期間限定で無償配布されています。
アプリを起動すると、カメラの映像と簡単なUIが表示されます。NDIで送出されるのはカメラの映像と内蔵マイクの音声で、UIは含みません。
中央のNDIボタンをタップすると送出のオン/オフが切り替えられて、青いとオン、グレーだとオフになります。そのほかは右から、設定表示のオン/オフ、パフォーマンス設定(下/中/上)、イン/アウトカメラ切り替え、マイク、グリッド表示、フラッシュライト、露出、ズームが並びます。
無線LANで映像伝送出来るため、ケーブルにとらわれない簡単な手元カメラとして使えます。ただしバッテリはそれなりに消費するようなので、長時間の使う場合はバッテリ残量と相談しましょう。充電しながらの使用ももちろん可能です。
また、画面をキャプチャして送信できる「NDI HX Capture」というアプリも提供されており、これは以下からダウンロード出来ます。
起動すると「ブロードキャストを開始」ボタンが表示されるので、タップすると画面のキャプチャがスタートし、NDI経由で送出されます。どちらのアプリもシンプルですね。
そのほかのNDI対応ソフトやデバイスから送出する場合については、それぞれ確認してください。
これで送信側の設定は完了です。次は受信側の設定をしていきます。
OBS Studioを起動し、シーン内に「NDI Source」というソースを追加しましょう。
追加するとNDI Sourceのプロパティが表示されます。「Source name」で送信側のデバイスを選択します。別のOBSから送信している場合は上記で設定したMain/Preview Outputの名前、NDI HX Camera/Caputreの場合はデバイス名が表示されるはずです。
そのほか、使用帯域幅(音声のみも選択可)や同期方法、色関連、遅延モード設定(ノーマルまたは低遅延)などの設定項目が用意されています。
基本的には同一のLAN内に送受信それぞれのデバイスが存在する必要があるので、表示されない場合はそこも確認してください。これで受信側も準備完了です。
受信したNDI Sourceは当然ほかの映像系ソースと同様に扱われるため、変形やフィルタの適用などが自由に行え、音声ミキサー上にオーディオチャンネルも追加されます。音声のみのNDI Sourceの場合は、音声入力キャプチャと同様の扱いになるようです。
NDIで実際に伝送してみる
それぞれのPCで準備が出来たら両方のOBSを起動しましょう。上手く出来ていれば起動するだけで自動的に送信側PCのOBSのプレビュー画面(アクティブになっているシーンの画面)が受信側PCのOBSのNDI Source上に表示されているはずです。
ちなみに遅延についても簡単にテスト。1秒ごとに色が切り替わる動画を使用してどのぐらい遅延するか試してみました。上の写真と同様に手前側のノートPCが送信側、奥のディスプレイが受信側のOBSです。なおテスト中はノートPCは有線ケーブルが届かなかったのでWi-Fiで動作しています。
受信側の画面でゲームをしたりするわけではないので録画用や配信用としては十分な速さにも感じます。もっとパフォーマンスの良いマシン同士かつ有線LANでの接続であればもっと遅延が縮まる可能性もありますね。
実際にこの構成で配信もしてみましたが、ちゃんと映像・音声共に配信に載せることが出来ていたようです。ただし音声が映像と少しずれていたようで、そこだけは受信側のOBSでNDI Sourceに映像の遅延(非同期)のフィルターを掛けて(今回の環境では+1msの設定)対応しました。これも受信側のパフォーマンス不足の可能性があるので、他の環境で試すと結果が変わるかもしれません。
複数PCでの配信における1つの選択肢
まだあくまでもプラグインとして動くNDIの機能ですが、いずれはOBS Studio本体に統合される日が来るんでしょうか。最近ではmixerのFTL対応やStingerトランジションの統合などもあり、開発も意欲的なので少し楽しみだったりします。この辺はオープンソースの強みなんでしょうか。
簡単に試してみただけですが、一部の人には強い需要のある機能だと思われます。PCゲームを配信している人でゲームをするPC以外にそこそこパワーのあるPCを余らせている人とかは、配信や録画をする際にゲームをするPCへの負担を大きく減らす事が出来る1つの選択肢にもなり得ます。どうしてもCPUエンコードが使いたいけどゲームが・・・なんていう人にもいいかもしれません。
複数のPCの映像を1つのPCで受け取ってスイッチングするといったことも可能なようで、色んな事が出来そう。NDIの最大の強みは、接続するデバイス分のHDMIキャプチャや大量のケーブルが必要ない点です。
一方で気になる点としては、ネットワーク越しに映像を伝送するため、それなりに帯域を消費します。LAN内ではありますが、大量の系統を用いるとパンクする恐れがあるでしょう。あと遅延については小さいとは言え存在しているので、運用ケースにあわせて他のソースをディレイさせるといった工夫が必要な場合があると思います。
ゲームをする側はOBSを立ち上げておくだけ。ウィンドウも隠しおいてOK。あとは配信側のPCに頑張ってもらいましょう。2PC配信環境が気軽に作れるobs-ndiプラグイン。導入も比較的簡単なので、興味がある人は試してみてはいかがでしょうか。
おまけ:NDIが公式で配布している便利ツール「NDI Tools」
NDIが公式で配布している「NDI Tools」という無料のツール群があります。
Adobe CCやVLCと連携するプラグインなど、色々なツールが含まれているんですが、ここではおまけとして「NDI Virtual Input」について紹介します。
NDIの入力をWebカメラ化できる「NDI Virtual Input」
NDI Virtual Inputは仮想の映像入力デバイス(いわゆるWebカメラ)として振る舞い、NDIの入力映像を流し込んでくれるツールです。最近までWindows版しか提供されていなかったんですが、macOSでも使えるようになりました。
これとiOS用のNDI HX Cameraを組み合わせて、iPhoneをWebカメラ化する例を考えてみます。Androidについては純正アプリが存在しませんが、NDIでの送出に対応した類似のアプリを利用すれば、実現可能かと思われます。
まずは上記のNDI Tools配布ページからインストーラをダウンロードし、必要なアプリケーションを導入します(5月時点ではVer.4.5が最新)。私はToolsの中身を全てインストールしていますが、基本的には「NDI Virtual Input」が必要なので、それ以外は必要ないかも(これ単体だけインストールすれば動くかってとこまでは検証してない)。macOS版はNDI HX Driverのダウンロードリンクが分かれている(同じ画面に表示はされます)ので、こちらも入れておきましょう。
それぞれインストールを進めましょう。再起動を求められる場合があります。
iPhone側は上記のobs-ndiで説明したとおり、起動すれば送出が始まります。これで準備OKです。
受信PC側では、Virtual Inputを起動します。起動するとWindowsの場合はタスクバーに、Macの場合はDockとメニューバーにそれぞれ常駐します。常駐している「NDI Virtual Input」を右クリック(Windows)/クリック(Mac)すると、自分のiPhoneの名前が一覧で表示されます。デバイスを選択し、「NDI HX Camera」を選びます。これで接続が完了です。
PC上のソフト側では、映像入力デバイスに「NewTek NDI Video」を選択。ソフトのプレビュー機能などでiPhoneからの映像が映っていれば成功です。ソフトによって受け付けるかどうかが変わりますが、iPhoneの内蔵マイクからの音声も一緒に送信されています。
同じNDIを使っているので当然ですが、上記のobs-ndiを使った送出映像を受けることも出来ます。macOS向けにはOBS Virtual-Camが提供されていませんが(Mac向け改造版が存在しないわけではないが、現時点では自らビルドする必要あり)、Virtual Inputを仮想Webカメラとして中継すれば同様の事を実現できるかも。macOS向けのVirtual-Camがリリースされました。以下のリンクからどうぞ。
これを使って、OBSからNDIでVirtual Inputに送って通話ソフトに流し込む、といった無理矢理な合わせ技も可能かも(手元のMacがパワー不足であんまりちゃんと試せませんでした)。UVC(USB Video Class)非対応なHDMIキャプチャを使って、一眼レフカメラからの映像に3D LUTを当てて通話アプリに入れてえ、みたいなやつですね。NDIはマシン内での送受信も行えるようです。
一時期Webカメラが手に入らないといった話も聞かれましたが、obs-ndiのついでにNDI Toolsも導入しておくと、代用が効くかもしれません。
コメント
こちらのサイトでNDIに興味を持ち、
OS X El Capitan(10.11.6)、OBSのバージョンは24.0.6という環境で
obs-ndi-4.8.0-macOS
ndi-runtime-4.5.1-macOS
をインストールしたところ、OBSが起動しなくなってしまいました。
NDIのpkgファイルにはアンインストーラーが付属していませんが、
なんとか削除する方法などはないものでしょうか?
読んで頂きありがとうございます。
今回は恐らくobs-ndiのプラグインが原因かと思われるので、プラグイン本体を削除した上でOBS Studioの起動を試してみてください。MacOS版の場合、以下にプラグインが格納されるようです。
/Library/Application Support/obs-studio/plugins
ここにある「obs-ndi」フォルダが本体ですので、「obs-ndi」フォルダごと一度どこかにバックアップしてから削除し、OBS Studioを再度起動してみてください。
あわせてOBS Studioのクラッシュログを確認したい場合は、以下に格納されています。
~/Library/Application Support/obs-studio/logs