NDI
普通のネットワーク上のスタジオ品質の映像。mDNS で見つけ、フレームごとに流す。
ソースを探す: mDNS
NDI のオープンな標準の部分を、バイトごとに。マルチキャスト DNS の質問です。
フレーム全体
00 00 00 00 00 01 00 00 00 00 00 00 04 5F 6E 64 69 04 5F 74 63 70 05 6C 6F 63 61 6C 00 00 0C 80 01: 受信側が NDI ソースを探す方法です。224.0.0.251 の UDP ポート 5353 へこれをマルチキャストすると、サブネット上のすべての NDI 送信元が、名前と接続先を答えます。
| フィールド | 位置 | 例の値 | 意味 |
|---|---|---|---|
| トランザクション ID | 0–1 バイト目 | 0 | mDNS(マルチキャスト DNS)は RFC 1035 の DNS メッセージ形式をそのまま使いますが、質問の ID は 0 です。特定の相手へではなく、グループ全体へ答えるためです。 |
| フラグ | 2–3 バイト目 | 0x0000 = query | すべてゼロ。標準クエリ。 |
| 質問数 | 4–5 バイト目 | 1 | 質問は 1 つ。 |
| その他の件数 | 6–11 バイト目 | 0, 0, 0 | 回答・権威・追加レコードの件数。質問にはありません。 |
| ラベル長 | 12 バイト目 | 4 | 名前は「長さ + 文字列」のラベルの並びです。NDI は DNS-SD のサービス種別 _ndi._tcp で自分を告知します。 |
| "_ndi" | 13–16 バイト目 | _ndi | サービス名。すべての NDI 送信元は _ndi サービスとして自分を告知します。先頭のアンダースコアが、ホストではなくサービスであることを示します。 |
| ラベル長 | 17 バイト目 | 4 | 次のラベル。4 文字。 |
| "_tcp" | 18–21 バイト目 | _tcp | トランスポート。ストリームの接続は TCP です。 |
| ラベル長 | 22 バイト目 | 5 | 最後のラベル。5 文字。 |
| "local" | 23–27 バイト目 | local | リンクローカル用の特別なトップレベルドメイン。.local で終わる名前は、DNS サーバではなくマルチキャストで解決されます。 |
| 名前の終端 | 28 バイト目 | 0 | 長さ 0 のラベル。名前の終わり。 |
| クエリタイプ | 29–30 バイト目 | 12 = PTR | 12 = PTR。「このサービスの全インスタンスを列挙して」。各回答が 1 つの NDI ソースの名前になります。 |
| クラス + QU ビット | 31–32 バイト目 | 0x8001 = QU + IN | クラス IN(1)に最上位ビットを立てたもの。「QU」は「グループ全体ではなく、私に直接(ユニキャストで)答えて」の意味です。LAN の他の機器は応答を見ずに済みます。 |
概要
NDI(Network Device Interface)は、低遅延の映像・音声・メタデータを、標準の Ethernet 上でコンピュータやカメラの間で送ります。ローカルネットワーク上の NDI ソースは、OBS・vMix・Resolume などの NDI 対応アプリに自動で現れます。IP アドレスを打つ必要はありません。
NDI は独自規格(Vizrt/NewTek)である点に注意してください。発見の部分はオープンな標準(mDNS / DNS-SD)で、このページではバイト単位で示します。メディア接続そのものには公開された通信仕様がないため、バイト構成を作り上げることはせず、構造を模式図で説明します。
基本情報
- 発見
- mDNS / DNS-SD, UDP 5353
- ストリーム
- TCP、ポート 5960 以上(新しい版は UDP/マルチキャストも)
- コーデック
- SpeedHQ(フル)/ H.264・H.265(HX)
- 帯域
- 1080p60 で約 100 Mbit/s 台(HX は約 10〜20)
- 遅延
- 約 1〜3 フレーム
- 仕様
- 独自(NDI SDK)
発見から映像まで
受信側が送信元に接続するまでの流れです。メディア接続は、NDI 独自の形式が公開されていないため、模式図で描いています。
やり取りの全体
発見は公開された標準(mDNS)で、メディア接続は NDI 独自です。送信元は 1 度告知されれば、ネットワーク上のいくつもの受信側が、その映像を取りに来られます。
1NDI を送っているのは誰?
受信側が、標準の DNS-SD の質問(前のシーンのバイト列)をマルチキャストします。この部分は公開された標準のインターネットプロトコルです。
2ソースが答える
送信元が、インスタンス名(たとえば 'STUDIO-PC (Camera 1)')、TCP ポート(通常 5960 以上)を示す SRV レコード、IP アドレスを示す A レコードで答えます。
3ストリームの接続を開く
受信側が、告知されたアドレスとポートへ TCP 接続を開きます。ここから先の形式は NDI 独自のものです。
4あいさつ(模式図)
両端が識別情報と対応機能を交換し、何を送るかを合意します。たとえばフル帯域か HX か、音声が要るか。NDI の通信形式は独自で、公開仕様がないため、この先のステップは、バイト構成ではなく模式図として描いています。
5映像フレーム
軽く圧縮した映像が、フレームごとに続きます。フル NDI は SpeedHQ コーデックを使い(1080p60 でおよそ 100 Mbit/s 台)、NDI|HX は代わりに H.264/H.265 を約 10 分の 1 で送ります。60 fps なら 16.7 ms ごとに 1 フレームです。
6同じストリームの音声
音声はタイムスタンプ付きで映像と一緒に流れるため、別の接続なしに口パクの同期が保たれます。
7制御とタリーは逆向きに流れる
NDI は 1 本の接続で双方向です。受信側は、タリーランプや PTZ カメラの制御といった小さな XML メッセージを、別のチャネルなしに送り返せます。
使われる場面
- ライブ制作: カメラやコンピュータを OBS・vMix・TriCaster へ
- 教会・学校・eスポーツ・イベントでの、標準の 1 ギガスイッチによる運用
- ビデオウォールやプロジェクションマッピング、マシン間の画面共有
つまずきやすい点
- mDNS はルータを越えません。別のサブネットや VLAN のソースは、NDI Discovery Server(TCP 5959)か、手入力のアドレスが必要です。
- フル NDI は 1080p60 で 1 本あたり約 100 Mbit/s 台です。1 ギガ回線はすぐに埋まります。Wi-Fi は推奨されません。
- ファイアウォールで mDNS(UDP 5353)と NDI の TCP/UDP ポートを許可しないと、ソースが現れません。
- NDI|HX は帯域が小さい代わりに、遅延が増え、ハードウェアデコーダか十分な CPU が要ります。
出典・規格
- NDI documentation (ndi.video): network requirements and port usage
- RFC 6762: Multicast DNS
- RFC 6763: DNS-Based Service Discovery