
NDI を使用することで同じネットワーク内での映像のやり取りが非常に簡単に行えるようになります。
ここでは、GStreamer で NDI を使用するまでの手順を簡単に説明します。
GStreamer で NDI を使用するためのプラグインが下記の github に公開されています。
https://github.com/teltek/gst-plugin-ndi
cargo のインストール
gst-plugin-ndi は、Rust で作成されているためビルドには、cargo が必要になります。
$ wget https://static.rust-lang.org/rustup/archive/1.24.3/x86_64-unknown-linux-gnu/rustup-init
$ chmod +x rustup-init
$ ./rustup-init -y --no-modify-path --profile minimal --default-toolchain 1.53.0 --default-host x86_64-unknown-linux-gnu
cargoにパスを通します。
$ source $HOME/.cargo/env
インストールができているか以下のコマンドで確認をします。
$ rustup --version
$ cargo --version
$ rustc --version
avahi-daemon のインストール
Ubuntu で NDI を使用する場合には avahi-daemon をインストールしてサービスを起動しておく必要があります。
$ sudo apt-get install -y avahi-daemon
avahi-daemon の起動
avahi-daemon は dbus サービスを必要とするため、dbus サービスも起動します。
$ service dbus start
$ service avahi-daemon start
NDI SDK のインストール
下記のサイトから NDI SDK をダウンロードできます。
https://ndi.tv/sdk/
NDI SDK がダウンロードできましたら、以下の手順でインストールを行います。
$ tar xvzf Install_NDI_SDK_v5_Linux.tar.gz
$ ./Install_NDI_SDK_v5_Linux.sh
sudo mkdir -p /usr/include/ndi
sudo cp NDI\ SDK\ for\ Linux/include/* /usr/include/ndi/
sudo cp NDI\ SDK\ for\ Linux/lib/x86_64-linux-gnu/* /usr/lib/
gst-plugin-ndi のビルド
$ git clone https://github.com/teltek/gst-plugin-ndi
$ cd gst-plugin-ndi
$ cargo build --release
$ sudo install -o root -g root -m 644 target/release/libgstndi.so /usr/lib/$(gcc -dumpmachine)/gstreamer-1.0/
$ sudo ldconfig
gst-plugin-ndi のバージョンによっては、以下のようなエラーが発生します。
Caused by: feature `edition2021` is required this Cargo does not support nightly features, but if you switch to nightly channel you can add `cargo-features = ["edition2021"]` to enable this feature上記のエラーが発生した場合には、下記のコマンドを実行してから、再度ビルドを行なってください。
rustup default nightly && rustup update
テスト映像を NDI で配信
以下のパイプラインで、テスト映像が配信されます。
$ gst-launch-1.0 videotestsrc is-live=true \
! video/x-raw,format=UYVY \
! ndisinkcombiner name=combiner \
! ndisink ndi-name="MyNDI" \
audiotestsrc is-live=true \
! combiner.audio"
同じネットワーク内にある端末から NewTek NDI Video Monitor というツールを使用して、ndisink で配信している映像を確認することができます。
このツールも NDI SDK と同じサイトからダウンロードすることができます。Windows 版と Mac 版が提供されていますが、今回は Mac 版で確認を行いました。
映像が配信されている場合には、File > GSTREAMER > MyNDI が表示されます。
配信されている映像のメニューを選択することで、映像が表示されます。また、「ピー」というテスト音声が再生されます。
NDI の入力を受信
上記で説明した gstreamer で配信する以外にも OSB を使用したり、NewTek NDI Scan Converter を使用することで NDI で配信することができます。他にも配信用のツールがありますので、それらから配信を行います。
$ gst-launch-1.0 ndisrc ndi-name="GSTREAMER (MyNDI) " \
! ndisrcdemux name=demux \
demux.video \
! queue \
! videoconvert \
! autovideosink \
demux.audio \
! queue \
! audioconvert \
! autoaudiosink
ndi-name に 配信している NDI の名前を入力します。
ndi-name の調べ方としては、avahi-browse を使用する方法があります。 下記のようにコマンド打ち込むと、公開されている mDNS/DNS-SD の一覧が表示されます。 ネットワークタイプが _ndi._tcp になっているサービスの名前を ndi-name に指定します。
$ avahi-browse -a + br-6a8021a36df2 IPv4 GSTREAMER (MyNDI) _ndi._tcp local + docker0 IPv4 GSTREAMER (MyNDI) _ndi._tcp local + eth1 IPv4 GSTREAMER (MyNDI) _ndi._tcp local + eth0 IPv4 GSTREAMER (MyNDI) _ndi._tcp local + lo IPv4 GSTREAMER (MyNDI) _ndi._tcp local
