ほぼ無料で作れる低遅延 0.3秒(300ms)カメラ映像伝送システムの作り方を紹介-NDI編 1対多の低遅延映像

ジュエ株式会社の技術部です。前回GStreamerを使って1対1の低遅延 0.1秒(100ms)な映像伝送を紹介しました。今回はNDIを使ってほぼ無料で作れる低遅延0.3秒(300ms)の映像伝送を紹介します。前回は1対1でしたが、今回はなんと1対多です!複数台で同時に視聴できます。NDIを使って遊んでみます。

持っているパソコンを使う前提になりますが、1対多で見るための産業用向け低遅延カメラシステム費用の数百分の1ぐらいの費用で作れるかもしれません。1対多の低遅延カメラシステムを検証したいけど予算が無い。。。という方はお試しください。

GStreamerを使ってほぼ無料で1対1の低遅延 0.1秒(100ms)映像伝送
https://jouer.co.jp/100ms-camera-system/

送信元は、USBカメラとWindowsノートパソコンを使います。

受信側はWindowsデスクトップパソコンを使います。記事内ではVPNを利用してNDI Bridgeを起動します。NDI Bridgeは、受信側に設定します。

今回も利用するUSBカメラはELPです。Amazonで8000円ぐらいで購入できます。中華カメラです。家にこのカメラが7個ぐらいあります。私物です。USB2.0接続ELP1080P@30fpsの170°レンズがついたタイプを使います。

赤外線もついているので夜でも見えます。レンズを回すことでフォーカスも近接に出来たりします(分解が必要なタイプもあります)。

さまざまなタイプがあり、さまざまな出品者から販売されていますので、お買い求めの際は吟味して探してください。Amazonの場合はELPCCTVがダイレクトストアっぽいので、そちらから購入がよさそうです。自己責任でお買い求めください。

利用するパソコンはCPUだけでも動きますが、NVIDIAのGPUを搭載しているゲーミングタイプがよいです。H265を利用したい場合は、Windowsストアから課金プラグインである「HEVCビデオ拡張機能」を購入する必要があります。

NVIDIA GPU
https://www.nvidia.com/ja-jp/geforce/graphics-cards/

HEVC ビデオ拡張機能 120円
https://apps.microsoft.com/store/detail/9NMZLZ57R3T7

まず環境の準備から説明してゆきます。

 

ここから広告

4K60P対応NDI HX2コンバーターとしても使えるVEGA-2002(V2)

VEGA-2002(V2)は、HDMIやSDI入力が付いた多機能なエンコーダーです。H264/H265への対応や配信プロトコルRTSP/RTP/RTMP/HLS/TS over IP/SRT対応に加えて、さらにNDI HX2対応です。

OBSやNDIコンバーターなどで、ちょっとNDIが不安定だと感じている人は、VEGA-2002(V2)を是非お試しください。4K60Pの映像が約300msで受信できました。

https://jouer.co.jp/4k60p-ndi-hx2/


ここまで広告


 

NDI Toolsをダウンロード・インストール

NDIを利用するためにNDI Toolsをダウンロードしてインストールしてください。NDI Toolsには、簡単な利用登録が必要です。適当に入力しましょう。
https://ndi.video/tools/ndi-tools/

利用するパソコンそれぞれにインストールします。NDI Toolsのインストールが終わると画面が表示されます。

いろんなアイコンがあるNDI Toolですが、今回は「Studio Monitor」「Screen Capture HX」「Bride」を使います。NDIのインストールは完了です。

 

ffmpeg をダウンロード・インストール

USBカメラの映像を取得するためにffmpegを使います。以下サイトのDownloadをクリックします。Gstreamerでもよいですが、今回はffmpegを使います。

ffmpeg
https://ffmpeg.org/

Windowsをクリックします。

Windows builds by BtbNをクリックします。

さまざまなバージョンがあります。Win64であればどれでも良いです。USBカメラを表示するだけですので、今回は「ffmpeg-n4.4-latest-win64-gpl-4.4.zip」をダウンロードします。

ダウンロードが出来たらZIPを解凍してください。「ffmpeg-n4.4-latest-win64-gpl-4.4」の中には「bin」「doc」フォルダーがあります。「bin」の中身を見てください。「ffmpeg.exe」「ffplay.exe」「ffprobe.exe」という実行ファイルがあります。こちらをコマンドプロンプトで使います。

見やすくするためデスクトップに「ffmpeg」というフォルダーを作って、そこに「ffmpeg.exe」「ffplay.exe」を移動します。ffmpegのインストールは完了です。※わかっている人は、パスを通して使ってくださいませ。

ffmpegはパスを通すことで、どこの階層からもコマンドを実行できます。パスを通さなくても、コマンドプロンプトでffmepg.exeがある同じ階層に移動すれば実行できます。以上でffmpegのインストールは完了です。

USBカメラの接続を確認

ffmpegを使って、送信側パソコン(USBカメラを接続したノートパソコン)のUSBカメラ接続を探します。Windowsの左下検索から「cmd」と入れて、コマンドプロンプトを起動します。

先ほど作ったデスクトップにつくった「ffmepg」フォルダーに移動します。

cd %USERPROFILE%\Desktop\ffmpeg

ffmpegのコマンドを実行して、USBカメラ名を取得します。環境によって、いろいろなデバイスが出てきますが、ELPの場合は、たぶん”HD USB Camera“と出てきます。

ffmpeg -list_devices true -f dshow -i dummy

そのカメラが正しいUSBカメラか映像を見て確認します。このように該当のカメラが表示されればOKです。

ffplay -f dshow -i video="HD USB Camera"

USBカメラの映像は、バッファを持っていると思いますので以下のようにコマンドを追加しました。あまり変わらないかもしれません。とりあえずffmpegのUSBカメラ側の準備はOKです。

ffplay -fs -fflags nobuffer -framedrop -probesize 32 -analyzeduration 0 -f dshow -i video="HD USB Camera"

USBカメラを接続したノートパソコンのモニター上に、USBカメラの映像がどれくらいの遅延で表示されるのかを確認します。だいたい100msの結果でした。これは単純なUSBカメラ→ノートパソコンモニター表示速度なので、もっと何か良い方法があるかもしれません。このノートパソコンのモニター表示が遅いのかもしれません。※以下右がモニターの時計表示、左がそれを映したカメラ映像です。

遅延に関しては、カメラ映像出力の遅延、送信側と受信側のシステム間の遅延、モニターの遅延、無線や有線やサーバなどインターネット間の遅延、映像のエンコードやデコードなどさまざまな要素がありますが、本記事では、詳しく分析しません。測定もざっくりです。50ms~100msのズレはあるかもしれません。

ここから広告

4K60P対応NDI HX2コンバーターとしても使えるVEGA-2002(V2)

VEGA-2002(V2)は、HDMIやSDI入力が付いた多機能なエンコーダーです。H264/H265への対応や配信プロトコルRTSP/RTP/RTMP/HLS/TS over IP/SRT対応に加えて、さらにNDI HX2対応です。 OBSやNDIコンバーターなどで、ちょっとNDIが不安定だと感じている人は、VEGA-2002(V2)を是非お試しください。4K60Pの映像が約300msで受信できました。

https://jouer.co.jp/4k60p-ndi-hx2/


ここまで広告


 

送信側ノートパソコン側のNDI動作確認

送信パソコン側(USBカメラを接続したノートパソコン)のNDI Toolsを起動します。

「Screen Capture」にカーソルを合わせると、右上にネジアイコンが出てきます。

「Screen Capture HX」を選択します。HEVC(H265)が使えます。使うためにはGPUや「HEVCビデオ拡張機能」が必要です。※「Screen Capture」でもOKです。

「Screen Capture HX」をクリックして実行します。クリックしても何も出てきません。クリックすることで、デスクトップの画面がNDIとして送信開始されています。実は、右下のメニューに駐在しています。

「Screen Capture HX」を右クリックして、設定を確認します。HVECが利用できる場合はHVECにチェックします。その他の設定もざっとみます。表示が変な時はこちらを見直しましょう。

「Studio Monitor」をクリックします。左上にあるメニューを開きます。

そこに利用しているPC名と、そのグラフィックスカード名が表示されていればOKです。
選択するとNDI化されたデスクトップ画面を「Studio Monitor」で確認できます。画面を画面に映しているので無限の続いています。

送信パソコン側(USBカメラを接続したノートパソコン)Windowsの検索から「cmd」と入れて、コマンドプロンプトを再表示して、以下を入力してUSBカメラ映像を画面に表示させます。

cd %USERPROFILE%\Desktop\ffmpeg
ffplay -fs -fflags nobuffer -framedrop -probesize 32 -analyzeduration 0 -f dshow -i video="HD USB Camera"

これでUSBカメラ映像をデスクトップに表示して、デスクトップ画面をNDI映像として送信できました。このNDIの映像は、同じネットワーク内へ送受信されます。

「Screen Capture HX」にて、Webカメラをソースに選択してNDI化できた気がしますが、今回は項目が見つかりませんでした。カメラが対応していないのか記憶違いです。Webカメラを直接選択すると何か制限があった気もします。そういったことも含めて、画面丸ごとNDI化です。

受信側パソコン側のNDI動作確認

同じネットワーク内にあるパソコンから映像を見れるか確認します。受信側パソコンでNDI Toolを開き「Studio Monitor」で映像を確認します。※テストの間は、Windowsのファイアウォールをすべてオフにしましょう。実際に利用する際には、適宜ファイアウォールの設定をしてください。

以下のように映像を確認できました。

ちょっと分かり難いですが、3.88 から 3.57なので、約0.3(300ミリ)という結果でした。もうちょっと早くできそうですが。

同一ネットワーク内にあるすべてのパソコンから、NDI化された映像を確認できます。台数が増えるごとに送信されるデータ量も増えますので、利用されるビットレートに合わせてスイッチなどのネットワークやインターネット回線を大きくすれば、それらの許容する範囲で安定動作するものと考えています。

ネットワーク越しでNDI動作確認

離れたネットワーク上で映像を見れるか確認します。NDI「Bridge」という機能を使います。今回は受信側パソコン側がデスクトップのため、NDI「Bridge」は受信側のデスクトップPCに設定します。

NDI「Bridge」
https://www.ndi.tv/tools/bridge/

NDI「Bridge」は、異なるネットワーク間をつなぐことができます。ざっくり2種類の設定方法があります。1つはネットーワークにあるルータの設定を変更する方法、もう1つはVPNを使う方法です。

外部からアクセスできるIPやURLを持ち、そこに繋がるネットワークを管理しているルーターの設定を変更できる場合は、VPNをつかわなくてもネットワーク越しに映像を送ることができます。

端的に言えば固定IPとポートフォワードできればNDI接続できます。※つまりルーターの管理者がいれば、映像接続を中継するサーバーすらなくても利用できるという恐ろしい仕組みです。ルータの設定は個別に異なるので、今回はVPNを使います。


異なるネットワーク間をつなぐ場合は、どこかのBridge地点をメインのホストにして、他の地点からそこへ接続します。それぞれ個別のブリッジは、そのブリッジがあるネットワーク内へもNDIを流せます。

話を戻します。受信側のデスクトップPCの「Bridge」を起動します。

受信側のデスクトップパソコンでは、すでにVPNを起動しています。受信側のデスクトップPCのVPNのIPは「10.0.0.61」です。Bridge Nameは「VPN-DESKTOP」にしました。Port「57000」、Encryption Keyも適宜設定します。

右下の歯車からエンコーダーの設定も確認します。送信するビットレートなども調整できるので適宜設定します。

「Start」でNDI Bridgeのホスト側をスタンバイします。

送信パソコン側(USBカメラを接続したノートパソコン)でも、すでにVPNを起動しています。「Bridge」を起動します。

「Join」を選択します。Bridge Nameは「VPN-NOTE」にします。IPやPortやKeyは、先ほど設定したものと同じものを入力します。自分のIPではなくHost側のIPを入力してください。エンコーダーの設定もざっと見て、最後に下にある「Join」をクリックします。自動的に接続されます。

VPN接続にて映像を伝送しました。ちょっと分かり難いのですが、数字を比較します。10.68から10.99ですから約300msです。もう一枚の写真を見ると350msです。

別のパソコンにVPNを設定して、もう一台ふやしました。ほぼ同様に見れています。このような具合で、複数地点から複数台のパソコンで映像を0.3秒遅れぐらいで視聴できます。音も一緒に送れますし、工夫すれば相互的に映像を送受信できるかもしれません。

送信側のノートパソコンをWifi接続にしました。この場所のWifi接続は、品質がとても悪いです。微妙ですがNDIならそれなりに繋がりました。500~600msの遅延です。さすがNDIです。

NDIでそれなりに低遅延(300ms~350ms)で、離れたネットワークで複数台のパソコンモニターで映像を見ることができました。送信側をWifiに変えても遅延は増加してフレームも怪しいですが、それなりに受信できました。無料で使えて安定しているNDIはさすが!という感じです。

NDIソースが増え過ぎて分けわからなくなりました。また300msならzoomでもよいのかなと思いつつ、NDIならUSBカメラの映像をほぼそのままの画質で見れます。USBカメラの映像をもっと低遅延に取得もしくは送信する方法を見いだせれば、200msぐらいになりそうな気もします。ルーターやLANや回線を10Gbpsにすれば、かなりの台数も見れるでしょう。

ここから広告

4K60P対応NDI HX2コンバーターとしても使えるVEGA-2002(V2)

VEGA-2002(V2)は、HDMIやSDI入力が付いた多機能なエンコーダーです。H264/H265への対応や配信プロトコルRTSP/RTP/RTMP/HLS/TS over IP/SRT対応に加えて、さらにNDI HX2対応です。 OBSやNDIコンバーターなどで、ちょっとNDIが不安定だと感じている人は、VEGA-2002(V2)を是非お試しください。4K60Pの映像が約300msで受信できました。

https://jouer.co.jp/4k60p-ndi-hx2/


ここまで広告


 

関連記事一覧

最近の記事

オススメ記事

PAGE TOP