技術コラム

製品技術
NVIDIA

Rivermax! とりあえず動かし見ました Part-2 簡易デモ動作編

Rivermax! とりあえず動かし見ました Part-2 簡易デモ動作編

2 Rivermax デモの構築

簡易的な動画4本の送受信のデモになりますが、まずはRivermaxの最初の一歩ということで、その手順をご紹介します。

【デモの概要】

Rivermaxソフトウェアのmedia_sender(送信ソフトウェア)から、Nvidia/Mellanoxが提供しているサンプルファイル(付属、追加ダウンロード)の動画をNvidia/MellanoxのNIC(ConnectX-5 25Gbps Ethernet)で2台のサーバ間を接続して、SMPTY-ST2110-20で4つの動画を送信して、受信側のmedia_receiver(受信ソフトウェア)で受信して、その4つを別々の画面で動画を表示するデモ環境を構築してみました。(デモイメージ参照)

 

 

【構成】

Rivermax:                    1.9.23

サーバOS:                     Ubuntu20.04.03

OSのKernelVersion:      5.11.0-46-generic

搭載NIC:                      Nvidia/Mellanox  MCX512A-ACAT

OFEDドライバ:                 MLNX_OFED_LINUX-5.5-1.0.3.2-ubuntu20.04-x86_64.tgz

 

サーバ 送信側:SuperMicro SYS-220U-TNR / 2Uラックマウント型1

CPU Intel Xeon Silver 4310 12C/24T 2.1GHz 2

Memory 型番:MTA36ASF8G72PZ-3G2E1

DDR4-3200 RDIMM ECC 64GB x4

 

サーバ 受信側: SuperMicro SYS-120C-TN10R / 1Uラックマウント型

CPU Intel Xeon Silver 4310 12C/24T 2.1GHz 2

Memory 型番:MTA18ASF2G72PDZ-3G2E1

DDR4-3200 RDIMM ECC 16GB x4

 

ネットワークスイッチ Nvidia/Mellanox SN2010  Onyx:3.9.3210

 

【接続、デモイメージ】

デモ構成

送信側: /home/Mellanox/Rivermax/1.9.23/apps 配下にあるmedia_senderにて動画を配信

受信側:/home/Mellanox/Rivermax/1.9.23/apps 配下にあるmedia_reciverにて動画受信

 

デモ実行手順

  • 受信側で、media_reciverを、VIEWERモードで起動(受信数分)
  • 送信側で、media_senderを送信分をそれぞれ送信する
  • 受信側でマルチキャストを受診してViewerに動画を表示

 

2.1               配信準備

本書でのデモ構成では、Media_senderから、3.2でNvidia/Mellanoxサイトからダウンロードしたサンプル動画を

SMPTY-ST2110-20で非圧縮画像を解像度1920×1080 フレームレート50fpsで動画を流します。

 

media_senderアプリケーションを動作させるには、コマンドに続いて以下を指定する必要があります。

-s  で動作させる設定の記載されたsdp.txtファイルを指定

-f   指定したsdp.txtの設定に沿った動画ファイルを指定

各種オプションの詳細は、NVIDIA Rivermax Media Library User Manualのmedia_sender章を参照

してください。

2.1.1     sdp.txt(動画配信設定ファイル)の編集

sdpのサンプルファイルは、/1.9.23/apps/sdps_samplesに複数用意されております。

今回は、Nvidia/Mellanoxサイトからダウンロードした

SMPTY-ST2110-20で非圧縮画像を解像度1920×1080 フレームレート50fpsの以下の2つの動画

mellanoxTV_1080p50.ycbcr

SeaWaves_1080p_50fps_10bits.ycbcr

を送信します。したがいまして

sdp_2110-20_narrow_gap_1080p50fps.txt

をデモ環境に合わせて編集します。

2.1.2      sdp_2110-20_narrow_gap_1080p50fps.txt のコピー

使用するサンプルファイルを別名でコピーします。

root@G4-58 #cd /1.9.23/apps/sdps_samples

root@G4-58 # ls

sdp_2110-20_narrow_gap_1080i25fps.txt

sdp_2110-20_narrow_gap_1080p50fps.txt

sdp_2110-20_narrow_gap_2160p50fps.txt

sdp_2110-22_tpnl_1080i25fps.txt

sdp_2110-30_1000us_48khz_2ch.txt

sdp_2110-30_125ms_96khz_2ch.txt

sdp_2110-31_1000us_48khz_2ch.txt

sdp_2110-40.txt

sdp_multi_2110_20-30-40.txt

sdp_2022-6_50fps.txt  sdp_multi_2110_20-30-40_narrow_gap_1080p59_125ms_anc.txt

sdp_2022-7_25fps.txt  sdp_multi_2110_20-30.txt

sdp_2022-8_50fps.txt

root@G4-58 # cp sdp_2110-20_narrow_gap_1080p50fps.txt fumi.txt

2.1.3     コピーしたsdp.txtの編集

コピーしたsdp.txt(fumi.txt)をデモ環境に合わせて編集します。

 

送信元IPアドレスに変更(全ファイル同じ)例:192.168.240.58に変更

root@G4-58 # vi fumi.txt

v=0

o=- 1443716955 1443716955 IN IP4 192.168.1.2→192.168.240.58へ変更

s=SMPTE ST2110-20 narrow gap 1080p50

t=0 0

m=video 2000 RTP/AVP 96

c=IN IP4 224.1.1.1/64

a=source-filter: incl IN IP4 224.1.1.1 192.168.1.2→192.168.240.58へ変更

a=rtpmap:96 raw/90000

a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=50; depth=10;

TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN;

a=mediaclk:direct=0

a=ts-refclk:localmac=40-a3-6b-a0-2b-d2

 

2.1.4     確認

root@G4-58 # cat fumi.txt

v=0

o=- 1443716955 1443716955 IN IP4 192.168.240.58

s=SMPTE ST2110-20 narrow gap 1080p50

t=0 0

m=video 2000 RTP/AVP 96

c=IN IP4 224.1.1.1/64

a=source-filter: incl IN IP4 224.1.1.1 192.168.240.58

a=rtpmap:96 raw/90000

a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=50; depth=10;

TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN;

a=mediaclk:direct=0

a=ts-refclk:localmac=40-a3-6b-a0-2b-d2

 

 

2.1.5      編集したサンプルsdp.txtのコピー

今回のデモは2つの動画を交互に4つ配信します、同時に複数を送受信するこもできますが、簡単にセッションごとに

別のsdpファイルで実行して、4つの動画を流す方法にしてます。このため動画の数の分sdpファイルをコピーします。

※別々に送信する場合、同じsdp.txtを使うと、media_sreciver側でオプションなしの場合、受信側で同じポート

で受信しますので、4つの映像が重なって表示されます。

root@G4-58 # cp fumi.txt fumi-2.txt

root@G4-58 # cp fumi.txt fumi-3.txt

root@G4-58 # cp fumi.txt fumi-4.txt

 

2.1.6      作成したファイルの確認

root@G4-58 # ls

fumi-2.txt

sdp_2110-20_narrow_gap_1080i25fps.txt

sdp_2110-20_narrow_gap_1080p50fps.txt

fumi-3.txt

sdp_2110-20_narrow_gap_2160p50fps.txt

fumi-4.txt

sdp_2110-22_tpnl_1080i25fps.txt

sdp_2110-30_1000us_48khz_2ch.txt

sdp_2110-30_125ms_96khz_2ch.txt

sdp_2110-31_1000us_48khz_2ch.txt

sdp_2110-40.txt

fumi.txt

sdp_multi_2110_20-30-40.txt

sdp_2022-6_50fps.txt  sdp_multi_2110_20-30-40_narrow_gap_1080p59_125ms_anc.txt

sdp_2022-7_25fps.txt  sdp_multi_2110_20-30.txt

sdp_2022-8_50fps.txt

 

2.1.7     編集したsdpファイルのポート番号の修正

3.1.1.5でコピーしたsdp.txt(fumi.txt)のポート番号を編集します。

それぞれのファイルの送信元ポート番号(m=video xxxx) を違う数値に変更する

例:fumi.txt=2000 fumi-2.txt=2001 fumi-3.txt=2002 fumi-4.txt=2003

わかりやすいように1つづつ、増加させて違う番号を設定してます。

root@G4-58 # vi fumi.txt

v=0

o=- 1443716955 1443716955 IN IP4 192.168.240.58

s=SMPTE ST2110-20 narrow gap 1080p50

t=0 0

m=video 2000 RTP/AVP 96  4つの動画を流すので、それぞれ2000,2001,2002,2003 と設定

c=IN IP4 224.1.1.1/64

a=source-filter: incl IN IP4 224.1.1.1 192.168.240.58

a=rtpmap:96 raw/90000

a=fmtp:96 sampling=YCbCr-4:2:2; width=1920; height=1080; exactframerate=50; depth=10;

TCS=SDR; colorimetry=BT709; PM=2110GPM; SSN=ST2110-20:2017; TP=2110TPN;

a=mediaclk:direct=0

a=ts-refclk:localmac=40-a3-6b-a0-2b-d2

 

2.1.8     確認

root@G4-58 # cat fumi.txt

v=0

o=- 1443716955 1443716955 IN IP4 192.168.240.58

s=SMPTE ST2110-20 narrow gap 1080p50

t=0 0

m=video 2000 RTP/AVP 96   ← 4つのファイルがそれぞれ2000~2003になっていることを確認する

c=IN IP4 224.1.1.1/64

a=source-filter: incl IN IP4 224.1.1.1

 

 

2.2確認

本書の構成ではダウンロードしたサンプル動画は、以下になります。

SeaWaves_1080p_50fps_10bits.7z

mellanoxTV_1080p50.7z

 

ダウンロードしたサンプル動画は、home/fumi/fumi/video 配下に格納しました。

サンプル動画は圧縮されてますので、tarzxvfコマンドにて展開しました。

root@G4-58 # cd /home/fumi/fumi/video/

root@G4-58 # ls

SeaWaves_1080p_50fps_10bits.7z          colorbar-gray2.ycrcb

SeaWaves_1080p_50fps_10bits.ycbcr       colorbar-tile.ycrcb

bbb_sunflower_1080p_50fps_10bit422.mp4  colorbar-tile2.ycrcb

bbb_sunflower_1080p_60fps_10bit422.mp4  mellanoxTV_1080p50.7z

bbb_sunflower_720p_30fps_10bit422.mp4   mellanoxTV_1080p50.ycbcr

colorbar-2.ycrcb                        mellanoxTV_2160p25.7z

colorbar-gradation.ycrcb                mellanoxTV_2160p50.7z

colorbar-gray1.ycrcb                    mellanoxTV_2160p50.ycbcr

 

2.3 受信サーバでの受信準備

受信サーバでは、media_reciverアプリケーションを受信する動画数分、先に起動します。

受信するポート番号を送信側のポート番号に合わせて変更します。

media_reciver

-m 受信するマルチキャストアドレス

-i  受信するインターフェース(ライセンスと連携されていることが必須)

-p  受信するポート番号 ※3.1.1.6で設定したポート番号

-s  マルチキャストの送信元のIPアドレス

— display  Viewerモードで起動 (media_reciverをmake時に VIEWER=yが必須)

 

./media_receiver -m 224.1.1.1 -i 192.168.240.57 -p 2000 -s 192.168.240.58 –display

./media_receiver -m 224.1.1.1 -i 192.168.240.57 -p 2001 -s 192.168.240.58 –display

./media_receiver -m 224.1.1.1 -i 192.168.240.57 -p 2002 -s 192.168.240.58 –display

./media_receiver -m 224.1.1.1 -i 192.168.240.57 -p 2003 -s 192.168.240.58 –display

 

コマンドを実行すると、GUI画面にViewerが真っ黒の画面で実行されますので、これを見易いように画面に

4等分に並べます。

 

これで、受信側(G4-57)192.168.240.57は、送信側サーバ(G4-58)192.168.249.58からの

マルチキャスト(224.1.1.1.)をポート2000から2003の動画を別々の画面で受信する準備が整いました

 

2.4 送信サーバから動画の配信

受信サーバ側で受信の準備ができたら。送信側にてコマンドを実行して動画を配信します。

media_senderアプリケーションのコマンド例は以下になります。

 

./media_sender -s ./sdps_samples/fumi-4.txt

-m -f /home/fumi/fumi/video/mellanoxTV_1080p50.ycbcr

 

-sで動作させる設定の記載されたsdp.txtファイルを指定

-m アプリケーションにメモリを割り当てる

-f 指定したsdp.txtの設定に沿った動画ファイルを指定

以下では交互に違う動画を配信します。

 

./media_sender -c 5 -a 4 -s ./sdps_samples/fumi.txt

-m -f /home/fumi/fumi/video/ SeaWaves_1080p_50fps_10bits.ycbcr

./media_sender -c 5 -a 4 -s ./sdps_samples/fumi-2.txt

-m -f /home/fumi/fumi/video/mellanoxTV_1080p50.ycbcr

./media_sender -c 5 -a 4 -s ./sdps_samples/fumi-3.txt

– m -f /home/fumi/fumi/video/ SeaWaves_1080p_50fps_10bits.ycbcr

./media_sender -c 5 -a 4 -s ./sdps_samples/fumi-4.txt

-m -f /home/fumi/fumi/video/mellanoxTV_1080p50.ycbcr

2.5 動画の確認

動画を送信サーバから配信すると、受信サーバで開いていたViewerに動画が表示されます。

 

これでデモが完成しました。

送信側より4つの動画をマルチキャストで配信、受信側でその動画を受信し表示しています。

イメージは以下のようになります。

 

デモの動画を公開しておりますのでご参照ください。