
概要 📖 – NDI 送信元を発見する
NDI DATは、同一ネットワーク上の NDI 送信元を mDNS と追加検索 IP で発見し、配信元名と URL を行単位のテーブルとして出力する送信元一覧 DATです。複数台の PC を NDI In TOP で連携する大規模な現場では、本 OP の出力テーブルを Select DAT で絞り込み、参照式で送信元名を NDI In TOP の Source Name に動的バインドする運用が定番です。Extra Search IPs でネットワークセグメントを跨ぐ構成、Persistence (ms) で一時的なネットワーク揺らぎへの耐性を確保できます。
主な用途 🎯
- 同一サブネット上の NDI 送信元の自動発見 (mDNS による配信元の検出とテーブル化)
- サブネット越しの NDI 送信元の発見 (
Extra Search IPsに対象ホスト IP を空白区切りで列挙) - 一時的な断絶への耐性 (
Persistence (ms)で配信元行をテーブルに残す時間を制御) - 送信元の追加・削除イベントへの反応 (
Callbacks DATから Python コールバックを発火) - NDI In TOP / Audio NDI CHOP の送信元動的選択 (出力テーブルを Select DAT で絞り込んで参照式に渡す)
データフロー 🔄
OS の NDI ライブラリがネットワーク探索
↓
mDNS (同一サブネット) +Extra Search IPs(異サブネット)
↓
発見した NDI 送信元を行単位のテーブルとして出力 (配信元名 / URL)
↓Persistence (ms)で行が残る時間を制御
↓Callbacks DATが追加・削除イベントで Python を発火
↓
NDI In TOP / Audio NDI CHOP の送信元参照
初心者の方は、以下日本語書籍も手元にあると安心です。

実際の案件事例まで踏み込んで紹介されていて、効率よくスキルアップするなら必携の二冊です!
パラメータ解説 ⚙️
Monitors Page 📡
コールバックと持続時間 🔔
Callbacks DAT .callbacks 📜
– Callbacks DAT (コールバック用 DAT) — NDI 送信元の追加・削除・更新イベントが起きるたびに呼ばれる Python スクリプトを保持する Text DAT へのパス
– 関数シグネチャは公式の ndiDAT_Class リファレンスに準拠 (送信元追加・削除・更新時に呼ばれる関数群)
Persistence (ms) .persistence ⏱️
– Persistence (ms) (持続時間ミリ秒) — 送信元が消えてからテーブル上の行が削除されるまでの待機時間
– 一時的なネットワーク揺らぎや短時間の送信中断で配信元が一瞬消えても、設定値の間は行を保持して再接続を待つ
– 0 にすると消失と同時に行が削除され、ネットワーク不安定時に行の出入りが激しくなる
追加検索 IP .extraips 🌐
Extra Search IPs .extraips 🔍
– Extra Search IPs (追加検索 IP) — NDI の既定検出方式である mDNS が届かないサブネット越しのホスト IP を空白区切りで列挙する
– mDNS は通常ルーター越しに伝搬しないため、別セグメント上の NDI 送信元はこのパラメータに送信側ホストの IP を書かないと発見されない
– 例: 192.168.10.5 192.168.20.7 のように複数 IP を半角空白で区切って指定
Common Page 🔧
Language .language 📝
DAT が動作するスクリプト言語の決定方法
| 項目 | 内部名 | 説明 |
|---|---|---|
| Input | .input |
入力 DAT のスクリプト言語を使用 |
| Node | .node |
この DAT 自身のスクリプト言語を使用 |
Edit/View Extension .extension 📄
外部エディタに公開するファイル拡張子の選択
| 項目 | 内部名 | 説明 |
|---|---|---|
| dat | .dat |
汎用的なファイル拡張子 dat を使用 |
| From Language | .language |
DAT のスクリプト言語に応じた拡張子を自動選択 |
| Custom Extension | .custom |
Custom Extension で指定したカスタム拡張子を使用 |
Custom Extension .customext 🔤
Edit/View Extension が Custom Extension のときに適用される拡張子:
- Custom Extension 文字列:
Edit/View Extensionがcustomのときに使用される任意のファイル拡張子
Word Wrap .wordwrap 🔁
ノード表示でのワードラップ (折り返し) の有効化
| 項目 | 内部名 | 説明 |
|---|---|---|
| Input | .input |
入力 DAT の Word Wrap 設定を継承 |
| On | .on |
Word Wrap を有効化 (ノード上の長い行を折り返し表示) |
| Off | .off |
Word Wrap を無効化 (折り返さずそのまま表示) |
実践アイデア 💡
Example 1: サブネット越え発見 🌐
NDI DAT (Extra Search IPs=対象ホスト IP) → 出力テーブル → Select DAT で行抽出 → NDI In TOP の Source Name に参照式でバインド
本番現場でカメラ送出 PC と TouchDesigner プレイバック PC が別のネットワークセグメントに配置されている構成では、mDNS が届かないため NDI 送信元が自動発見されません。Extra Search IPs に送出側ホストの IP を列挙することで、ルーター越しの NDI 送信元をテーブルに乗せます。
- NDI DAT を配置し、
Extra Search IPsに対象ホストの IP を半角空白区切りで列挙 (例:192.168.10.5 192.168.20.7) - 出力テーブルに配信元行が増えるのを確認 (発見まで数秒のタイムラグあり)
- 後段の Select DAT で対象の配信元名を含む行を抽出
- 抽出した配信元名を NDI In TOP の
Source Nameパラメータに参照式でバインド
Example 2: 送信元変化を検知 🔔
NDI DAT (Callbacks=Text DAT) → onSourceAdd / onSourceRemove で Python 実行 → UI 上の送信元リストを更新
ライブ現場でカメラ送出 PC のオン・オフや配信ソフトの起動・終了に追従し、TouchDesigner 側の UI に表示する NDI 送信元リストを動的に組み直すフェイルセーフ。Callbacks DAT で送信元イベントを Python に橋渡しすることで、テーブルの中身をポーリングせずに変化を捉えられます。
- Text DAT を 1 個用意し、公式の
ndiDAT_Classリファレンスに沿ったコールバック関数を定義 - NDI DAT の
Callbacks DATパラメータに上記 Text DAT のパスを設定 - コールバック関数内で送信元テーブルの行数や配信元名を読み取り、UI 上のリスト COMP やストレージを更新する処理を書く
- テストとして送出側 PC で NDI 送信ソフトを起動・終了し、コールバックが期待どおりのタイミングで発火することを確認
Example 3: 揺らぎ吸収で安定化 ⏱️
NDI DAT (Persistence=2000) → 一時的な消失を吸収 → 送信元リストの安定化
Wi-Fi や混雑したスイッチを介して NDI を運用する現場では、送信元が短時間消えてすぐ復帰するケースが頻発します。Persistence (ms) を 0 にしていると行の出入りが激しくなり、後段の参照式や UI が頻繁に再構築されてパフォーマンスを落とします。数百〜数千 ms の Persistence で行を保持することで、揺らぎを吸収しつつ参照を安定させます。
- NDI DAT の
Persistence (ms)を2000(2 秒) など現場の揺らぎに合った値に設定 - 送出側 PC を一時的にスリープさせる、または NDI 送信ソフトを瞬間的に切るなどして挙動を確認
- テーブル上の行が即座に消えず、Persistence 時間内に復帰すれば行が維持されることを確認
- 後段で参照している NDI In TOP や Select DAT が連動して再評価されないことを確認
関連オペレータ 🔗
類似機能OP 🔍
- TODO
組み合わせ推奨OP 🔄
- NDI In TOP — NDI DAT で発見した送信元名を
Source Nameに参照式でバインドして映像を受信 - NDI Out TOP — 自機からの NDI 送出。NDI DAT を別 PC で稼働させて自分の配信が見えているかを確認
- Audio NDI CHOP — 映像は NDI In TOP、音声は Audio NDI CHOP で同一の NDI 送信元から取得する組み合わせ
- Select DAT — NDI DAT 出力テーブルから目的の送信元行 (配信元名や URL の部分一致) を抽出
- DAT Execute DAT — Callbacks DAT とは別経路で、出力テーブルの値変化をトリガーに Python を発火させる汎用フック
前処理・後処理DAT 🎯
NDI DAT の出力情報 📡
NDI DAT の出力テーブルは各行が 1 つの NDI 送信元を表し、配信元名と接続用 URL を列に持ちます。後段で Select DAT や参照式で対象を絞り込んで使います。
DAT 固有情報 📋
num_rows: DAT の行数num_cols: DAT の列数type: DAT の型 (table / text)is_table: テーブル形式の場合 1、テキスト形式の場合 0
汎用オペレータ情報 🔄
total_cooks: プロセス開始からのクック回数cook_time: 最後のクック時間 (ミリ秒)cook_frame: 最後にクックされたフレーム番号warnings: 警告数errors: エラー数
出力テーブルの列 📊
name: NDI 送信元のフル名 (MACHINE-NAME (Source Name)形式で、送出側ホスト名と配信チャンネル名の組み合わせ)url: NDI 接続用の URL (host:port形式の文字列、NDI In TOP / Audio NDI CHOP が内部で利用するエンドポイント)
検出の仕組み 🛰️
mDNS 検出範囲: 既定では mDNS (マルチキャスト DNS) で同一サブネット上の NDI 送信元のみが自動発見される。ルーター越しの送信元は基本的に届かないExtra Search IPs: サブネットを跨ぐ送信元を発見するため、送信側ホストの IP を空白区切りで列挙する。LAN 構成が複雑な現場で必須Persistence (ms): 送信元が消えた後もテーブル上の行を維持する時間。一時的なネットワーク揺らぎを吸収して、行の出入りを抑制する
トラブルシューティング ⚠️
よくある問題と解決策 🔧
❌ Problem: NDI DAT のテーブルが空、または期待した NDI 送信元が出てこない
✅ Solution:
- 送出側 PC と TouchDesigner PC が同じサブネット上にあるか確認 (mDNS は通常ルーターを越えない)
- 別サブネット上の送信元の場合は
Extra Search IPsに対象ホストの IP を半角空白区切りで列挙 - 送出側 PC でファイアウォール (Windows Defender / 企業 VPN クライアント等) が NDI ポートを遮断していないか確認
- 送出側 NDI ソフトが起動済みで、配信が実際に開始されているかを NDI Tools の Studio Monitor などで先に検証
❌ Problem: Callbacks DAT に書いた Python が呼ばれない
✅ Solution:
Callbacks DATパラメータに対象の Text DAT パスが正しく設定されているか確認 (タイプミスや相対パスのズレ)- Text DAT 内の関数名・引数が公式の
ndiDAT_Classリファレンスのシグネチャと一致しているか確認 - Text DAT 内のコードに構文エラーがあると無音で呼ばれないことがあるため、
Textportでエラー出力を確認 - 送信元の追加・削除がそもそも起きていない可能性があるので、送出側 PC の NDI ソフトを実際に起動・終了して挙動を比較
❌ Problem: NDI 送信元の行の出入りが激しくチラつく
✅ Solution:
Persistence (ms)を 0 から数百〜数千 ms に上げて、短時間の消失を吸収させる- 送出側 PC の Wi-Fi 接続を有線に切替えてネットワークの揺らぎ自体を減らす
- スイッチが NDI のマルチキャストやユニキャストを安定して通せる業務用機種か確認 (家庭用ルーターでは IGMP 設定で不安定になることがある)
- 送出側ソフトの NDI 設定でマルチキャスト送出を無効化し、ユニキャストで安定させる
❌ Problem: Extra Search IPs を入れても送信元が見えない
✅ Solution:
Extra Search IPsの区切りが半角空白になっているか確認 (カンマや改行は不可)- 指定した IP に対して ping や NDI Tools の Access Manager で疎通確認、送出側 PC の NDI Discovery Server を経由する構成か確認
- 送出側 PC のファイアウォールが NDI の検出に必要なポート (NDI が動的に使う TCP/UDP ポート) を許可しているか確認
- IPv4 アドレスのみを指定し、IPv6 や DNS ホスト名は使わない (このパラメータは IPv4 列挙が前提)
参考資料 📚
その他 🔗
- TouchDesigner Wiki — DAT 概要
- TouchDesigner Wiki — Category:DATs
- TouchDesigner Wiki ホーム
- TouchDesigner 公式 Forum
- Facebook — TouchDesigner Help Group

