低レイテンシおよびザイリンクス低レイテンシ

マルチメディア ユーザー ガイド (UG1449)

Document ID
UG1449
Release Date
2022-04-21
Revision
1.4 日本語

ビデオ会議や放送などでリアルタイム性が求められる場合は、低レイテンシおよびザイリンクス低レイテンシ ユース ケースを使用してください。

低レイテンシ

フレームを複数のスライスに分割し、VCU エンコーダー出力とデコーダー入力はスライス モードで動作します。VCU エンコーダー入力とデコーダー出力は、フレーム モードのままです。VCU エンコーダーはスライス終了ごとにスライス完了割り込みを生成し、スライスのストリーム バッファーを出力します。これにより、次のエレメントは直ちに処理を開始できます。このように複数のスライスを使用することで、VCU の処理レイテンシが 1 フレームから (1/スライス数) フレームまで短縮されます。低レイテンシ モードでは、エンコーダーで最大 4 ストリーム、デコーダーで最大 2 ストリームを実行できます。

次に、低レイテンシ 4kp60 HEVC ストリーミング パイプラインについて説明します。
  • ストリーム出力:

    低レイテンシ 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) を参照してください。