ビデオ会議や放送などでリアルタイム性が求められる場合は、低レイテンシおよびザイリンクス低レイテンシ ユース ケースを使用してください。
低レイテンシ
フレームを複数のスライスに分割し、VCU エンコーダー出力とデコーダー入力はスライス モードで動作します。VCU エンコーダー入力とデコーダー出力は、フレーム モードのままです。VCU エンコーダーはスライス終了ごとにスライス完了割り込みを生成し、スライスのストリーム バッファーを出力します。これにより、次のエレメントは直ちに処理を開始できます。このように複数のスライスを使用することで、VCU の処理レイテンシが 1 フレームから (1/スライス数) フレームまで短縮されます。低レイテンシ モードでは、エンコーダーで最大 4 ストリーム、デコーダーで最大 2 ストリームを実行できます。
- ストリーム出力:
低レイテンシ GStreamer パイプラインを使用して NV12 ビデオをストリーム出力 (
) するには、次のパイプラインを使用します。このパイプラインは、あるデバイス (サーバー) から同じネットワーク上の別のデバイス (クライアント) へ低レイテンシ エンコードのビデオをストリーム出力する方法を示しています。このパイプラインでは、NV12 カラー フォーマットと H265 ビデオ フォーマットでエンコードされます。ビデオ ストリームの解像度は 4kp 60fps で、ビットレートは 25Mb/s です。ビデオ ストリームは、IP アドレス 192.168.25.89 (ポート 5004) のクライアント ホスト デバイスに送信されます。gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! video/x-raw,format=NV12,width=3840,height=2160,framerate=60/1 ! omxh265enc num-slices=8 periodicity-idr=240 cpb-size=500 gdr-mode=horizontal initial-delay=250 control-rate=low-latency prefetch-buffer=true target-bitrate=25000 gop-mode=low-delay-p ! video/x-h265, alignment=nal ! rtph265pay ! udpsink buffer-size=60000000 host=192.168.25.89 port=5004 async=false max-lateness=-1 qos-dscp=60 max-bitrate=120000000 -v
重要: ホストの IP アドレスをクライアント デバイスの IP に置き換えてください。 - ストリーム入力:
低レイテンシ GStreamer パイプラインを使用して NV12 ビデオをストリーム入力 (
) するには、次のパイプラインを使用します。このパイプラインは、低レイテンシ ストリーム入力データをデコードして、クライアント デバイス上でディスプレイ表示する方法を示しています。このパイプラインでは、ビデオのエンコード フォーマットは H265 で、UDP プロトコルを使用してポート 5004 のクライアント デバイスにストリーム入力されます。gst-launch-1.0 udpsrc port=5004 buffer-size=60000000 caps="application/x-rtp, media=video, clock-rate=90000, payload=96, encoding-name=H265" ! rtpjitterbuffer latency=7 ! rtph265depay ! h265parse ! video/x-h265, alignment=nal ! omxh265dec low-latency=1 internal-entropy-buffers=5 ! video/x-raw ! queue max-size-bytes=0 ! fpsdisplaysink name=fpssink text-overlay=false 'video-sink=kmssink bus-id=a0070000.v_mix hold-extra-sample=1 show-preroll-frame=false sync=true ' sync=true -v
ザイリンクス低レイテンシ
ザイリンクス低レイテンシ: 低レイテンシ モードでは、VCU エンコーダーとデコーダーはサブフレームすなわちスライス レベル境界で動作しますが、エンコーダー入力およびデコーダー出力にあるその他のコンポーネント (すなわちキャプチャ DMA とディスプレイ DMA) はフレーム レベル境界での動作のままとなります。つまり、キャプチャがフレーム全体の書き込みを完了するまでエンコーダーは入力データを読み出すことができません。
ザイリンクス低レイテンシ モードでは、キャプチャとディスプレイもサブフレーム レベルで動作するため、パイプラインのレイテンシが大幅に短くなります。これは、プロデューサー (キャプチャ DMA) とコンシューマー (VCU エンコーダー) が同じ入力バッファーに同時にアクセスできるようにしつつ、プロデューサーがコンシューマーからの読み出し要求に必要なデータの書き込みを完了するまでコンシューマーをブロックするように両者を同期することで実現しています。
- ストリーム出力
ザイリンクス低レイテンシ GStreamer パイプラインを使用して NV12 ビデオをストリーム出力 ( ) するには、次のパイプラインを使用します。このパイプラインは、あるデバイス (サーバー) から同じネットワーク上の別のデバイス (クライアント) へザイリンクス低レイテンシ エンコードのビデオをストリーム出力する方法を示しています。このパイプラインでは、NV12 カラー フォーマットと H265 ビデオ フォーマットでエンコードされます。ビデオ ストリームの解像度は 4kp 60fps で、ビットレートは 25Mb/s です。ビデオ ストリームは、IP アドレス 192.168.25.89 (ポート 5004) のクライアント ホスト デバイスに送信されます。
gst-launch-1.0 -v v4l2src device=/dev/video0 io-mode=4 ! video/x-raw\(memory:XLNXLL\), format=NV12,width=3840,height=2160,framerate=60/1 ! omxh265enc num-slices=8 periodicity-idr=240 cpb-size=500 gdr-mode=horizontal initial-delay=250 control-rate=low-latency prefetch-buffer=true target-bitrate=25000 gop-mode=low-delay-p ! video/x-h265, alignment=nal ! rtph265pay ! udpsink buffer-size=60000000 host=192.168.25.89 port=5004 async=false max-lateness=-1 qos-dscp=60 max-bitrate=120000000 -v
重要: ホストの IP アドレスをクライアント デバイスの IP に置き換えてください。 - ストリーム入力
ザイリンクス低レイテンシ GStreamer パイプラインを使用して NV12 ビデオをストリーム入力 ( ) するには、次のパイプラインを使用します。このパイプラインは、ザイリンクス低レイテンシ ストリーム入力データをデコードして、クライアント デバイス上でディスプレイ表示する方法を示しています。このパイプラインでは、ビデオのエンコード フォーマットは H265 で、UDP プロトコルを使用してポート 5004 のクライアント デバイスにストリーム入力されます。
gst-launch-1.0 udpsrc port=5004 buffer-size=60000000 caps="application/x-rtp, media=video, clock-rate=90000, payload=96, encoding-name=H265" ! rtpjitterbuffer latency=7 ! rtph265depay ! h265parse ! video/x-h265, alignment=nal ! omxh265dec low-latency=1 internal-entropy-buffers=5 ! video/x-raw\(memory:XLNXLL\) ! queue max-size-bytes=0 ! fpsdisplaysink name=fpssink text-overlay=false 'video-sink=kmssink bus-id=a0070000.v_mix hold-extra-sample=1 show-preroll-frame=false sync=true ' sync=true -v
詳細は、 『H.264/H.265 Video Codec Unit LogiCORE IP 製品ガイド』 (PG252) を参照してください。