NDIが繋がらない!NDIを別セグメント間でつなぐ2つの方法
今回はNDI(network device interface)を使って、映像を伝送しようとしたときに、ネットワークセグメントをこえようとすると正しく伝送できないという問題の解決方法について書こうと思います。
そもそもNDIとは
NDIとはNewTek社によって開発されたIPを利用して映像信号を送るプロトコルです。もともとはNewTek社のIPスイッチャーなどで利用されていましたが、NDI対応の製品も多くNDI toolsやNDI SDKなども一般向けに公開されており、汎用性の高い映像伝送プロトコルとなっています。
使用するネットワーク帯域もそれほど大きくないためMBSでもその便利さからリモプロなどで利用しています。
NDIはL3(ネットワークセグメント)をこえて通信できない
通常NDIはL2のネットワーク(同一セグメント)で運用を想定されていて、L3(ネットワークセグメント)をこえて通信をおこなうことができません。
その理由としてNDIではデバイスや映像ソースの識別にmDNS(マルチキャストDNS)とよばれるプロトコルを利用しています。そのためネットワークセグメントをこえようとすると、このmDNSが伝搬できずにデバイスや映像ソースを認識することができないためNDIの伝送が行えません。
しかしセグメントを超えてNDIを伝送したいことも状況としてはあります。そのために用意されたとても簡単な2つの解決策があります。
- external sourceで直接映像ソースを指定する
- discovery serverを使って名前解決をする
といった方法です。これらふたつの方法について今回は書いていこうと思います。
【解決策1】external sourceで映像ソースを直接指定する
この方法はNDI toolsのAccess Managerから設定します。簡単3ステップで作業完了です。
作業はNDIを受信したい端末から設定を行います。
設定方法
- NDI toolsをインストールする
NDIのサイトのToolsタブからNDI toolsをダウンロードしてインストールします。
このソフトはフリーで利用可能です。 - NDI toolsを開き、Access Managerをクリックする。
- Access ManagerからExternal Sourcesタブを開いて、「+」ボタンからNDI映像を出している機器のIPを追加する。
これでNDIの映像ソースとして見えるようになります。
問題点
この方法は非常に簡単に映像ソースを追加できます。複数映像ソースがあれば足していくだけで追加できます。
しかし映像ソースも映像を受信する側も数が増えていくとすべての受信端末ですべての映像ソースを指定する必要があります。そのため数が増えていくと非常に煩雑な作業となります。
そこでこの問題を解決するのが次のdiscovery serverをたてる方法です。
【解決策2】discovery serverを使って名前解決をする
概要
discovery serverを使った方法の概要は下の図のようなイメージです。
映像ソースの名前とIPアドレスをdiscovery serverに登録して、受信するモニターやVMIX・OBSといったソフトウェアスイッチャーからそのリストを取得して、NDIの映像を受信側から取得しにいきます。
このようにすべてのリソースが一つのdiscovery serverを利用して名前解決するため、リソースが増えた場合にはこちらのほうが便利です。
実際にどのように設定するか書いていきます。
設定方法
discovery server 側の設定
-
discovery serverのインストール
サーバーとありますが、実際にはどんなPCでもdiscovery serverになれます。VMIXなどのソフトウェアスイッチャーのプロセスが動いているPCにインストールしてもいいかと思います。
NDIのサイトからNDI SDKをダンロードし、インストールします。
ダウンロードするにはフォームに氏名やメールアドレス等必要な項目を記入するとダウンロード用LINKの記載されたメールが届きます。そこからSDKのインストーラーをダウンロードします。
こちらもフリーでインストールできます。バージョンによるかもしれませんが、デフォルトでは
C:\Program Files\NDI\NDI 5 SDK\Bin\Utilities\x64\
にインストールされます。 -
discovery server 起動
上記フォルダの
C:\Program Files\NDI\NDI 5 SDK\Bin\Utilities\x64\NDI Discovery Service.exe
を実行すればserverが起動されます。
-
serverのTCPポート5959のファイヤーウォールを受信許可にする。
あとはリソースからアクセスされるのを待ちます。
クライアント側の設定
カメラや受信端末側で設定します。
- Access Managerからdiscovery serverのIPを指定する。
Access ManagerのAdvanceタブから"Discovery Servers"にチェックをいれて、"IP Addresses"にdisvovery serverのIPアドレスを指定する。
設定が終わるとdiscovery serverを通じてL3ルーターを超えて名前解決が行われるようになり、その後は端末間でNDI通信が行われます。
discovery serverはあくまでも名前解決を行っているだけなので、実際のNDIの映像信号は映像ソースから受信端末に直接伝送されます。
まとめ
今回簡単にできるNDIを別セグメント間で伝送する2つの方法、「external sourceを指定する」と「discovery serverの利用法」について紹介しました。
NDI toolsとNDI SDKで簡単に実装できるので、おすすめです。
一方でmDNSをネットワークとして伝搬させるという方法もあるかと思います。しかしこちらはネットワークにマルチキャストを伝搬するように設定する必要があるため、ある程度のネットワーク知識が必要なのと私もまだ実装したことがありません。この方法についてもどこかで実装してみたいと思っています。そのときはまたこちらのブログで紹介したいと思います。