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つの動画をマルチキャストで配信、受信側でその動画を受信し表示しています。
イメージは以下のようになります。
デモの動画を公開しておりますのでご参照ください。