こんにちは、
現在、 i.MX95 で H265 デコード → エンコード パイプラインを評価しています が、同様のワークロードと構成を使用して、 i.MX8MP と比較して 、 レイテンシと安定性が大幅に低下していること がわかりました 。
i.MX8MP では 、以下を使用します:
imxvpudec_h265
vpuenc_hevc
私は次のことを達成できます:
非常に低いエンドツーエンドのレイテンシ(≈ 10 ミリ秒)
複数のストリームで安定した動作
目に見えるフリーズやアーティファクトなし
i.MX95 では 、以下を使用します:
v4l2h265dec
v4l2h265enc
私は観察します:
1回のデコード→エンコードパイプラインのレイテンシは約90ミリ秒
4 台のカメラ ストリームを同時に 実行するとフリーズや視覚的なアーティファクトが発生する
この問題を再現するために、次のパイプラインで IP カメラ (H265 over RTSP) を使用しました。
test-launch "(
rtspsrc location=rtsp://10.42.0.85 drop-on-latency=true latency=0 buffer-mode=4 !
rtph265depay !
h265parse config-interval=1 !
v4l2h265dec !
v4l2h265enc !
rtph265pay name=pay0 pt=96
)"このパイプラインは 1 台のカメラでは正常に動作しますが、 4 台のカメラに拡張すると、フリーズやアーティファクトが発生し始めます。
i.MX95 上の H265 VPU パイプラインの遅延が i.MX8MP 上よりも大幅に大きいのはなぜですか?
i.MX95 の v4l2h265dec と v4l2h265enc 間で DMABUF ゼロコピーは完全にサポートされていますか?
そうでない場合、追加のレイテンシと帯域幅の圧力を説明できる暗黙的なメモリコピーはありますか?
現在の i.MX95 VPU ドライバーには、次のような既知の制限がありますか?
低レイテンシ操作
マルチストリームデコード+エンコード
内部バッファリング深度
i.MX95 のレイテンシを最小限に抑えるために推奨される V4L2 コントロールまたは io モード (キャプチャ/出力 io モード) はありますか?
i.MX95 VPU ドライバーは、FUTURE BSP リリースで i.MX8MP と同等のパフォーマンスを達成することが期待されていますか? それとも、レイテンシが高くなることはデザイン上のトレードオフなのでしょうか?
私の目標は 、i.MX8MP で実現可能なものと同様の 、リアルタイムで低レイテンシのビデオプロセッシング(デコード → 処理 → エンコード) です。
再開まで今しばらくお待ちください。
こんにちは、
この問題を再現するために、i.MX8MP および i.MX95 でどのバージョンの BSP を使用していますか?
8MP と 95 の両方で同じ GST パイプライン (デコーダー/エンコーダー要素以外) を使用していますか?
私の知る限り、i.MX95 で高レイテンシを引き起こす既知の制限はありません。
i.MX95 では、エンコーダーは mmap と dmabuf をサポートしており、デコーダーとエンコーダー間のコピーなしで dma-buf を転送するパイプラインを作成できます。
IP カメラは B フレームなしでエンコードしますか?次に、デコード フレームの並べ替えを無効にすると、レイテンシが短縮されます。これをチェックしてください。以下のv4l2コントロールを使用してフレームの並べ替えを無効にすることができます。
「 v4l2h264dec extra-controls="デコード、display_delay_enable=1、display_delay=0" 」
以下のコマンドを使用して、すべての v4l2 コントロールを一覧表示できます。
v4l2-ctl -l -d
よろしくお願いします。
カーネルのバージョン:
はい、同じ gstreamer パイプラインです。
IP カメラは B フレームなしでエンコードします。コマンドを試しましたが、問題は解決しませんでした。画面にはまだアーティファクトがあり、レイテンシも大きいです。しかし、質的に言えば、フリーズは解除されるようです。
「」
v4l2-ctl -l -d /dev/v4l/by-path/プラットフォーム-4c480000.vpu-video-index0
ユーザーコントロール
min_number_of_capture_buffers 0x00980927 (int) : min=1 max=32 step=1 default=1 value=1 flags=read-only
thumbnail_mode 0x00981901 (bool) : デフォルト=0 値=0 フラグ=書き込み専用
コーデックコントロール
h264_profile 0x00990a6b (メニュー): 最小=0 最大=4 デフォルト=0 値=0 (ベースライン)
hevc_profile 0x00990b67 (メニュー) : min=0 max=0 default=0 value=0 (メイン)
display_delay 0x00990b8d (int) : 最小=0 最大=0 ステップ=1 デフォルト=0 値=0
display_delay_enable 0x00990b8e (bool) : デフォルト=0 値=0
「」
「」
v4l2-ctl -l -d /dev/v4l/by-path/platform-4c480000.vpu-video-index1
ユーザーコントロール
horizontal_flip 0x00980914 (bool) : デフォルト=0 値=0
vertical_flip 0x00980915 (bool) : デフォルト=0 値=0
回転 0x00980922 (int) : 最小=0 最大=270 ステップ=90 デフォルト=0 値=0 フラグ=レイアウト変更
min_number_of_output_buffers 0x00980928 (int) : min=1 max=32 step=1 default=1 value=1 flags=read-only
コーデックコントロール
video_gop_size 0x009909cb (int) : 最小=0 最大=2047 ステップ=1 デフォルト=30 値=30
video_bitrate_mode 0x009909ce (メニュー) : min=0 max=1 default=1 value=1 (固定ビットレート) flags=update
video_bitrate 0x009909cf (int) : 最小=1 最大=1500000000 ステップ=1 デフォルト=2097152 値=2097152
frame_level_rate_control_enable 0x009909d7 (bool) : デフォルト=1 値=1
h264_mb_level_rate_control 0x009909da (bool) : デフォルト=1 値=1
スライス内のMBS数 0x009909dc (int) : 最小値=0 最大値=262143 ステップ=1 デフォルト=1 値=1
slice_partitioning_method 0x009909dd (メニュー): min=0 max=1 default=0 value=0 (シングル)
force_key_frame 0x009909e5 (ボタン) : 値=0 フラグ=書き込み専用、書き込み時に実行
intra_refresh_period 0x009909ec (int) : 最小=0 最大=2160 ステップ=1 デフォルト=0 値=0
intra_refresh_period_type 0x009909ed (メニュー) : min=0 max=1 default=1 value=1 (Cyclic)
h264_i_frame_qp_value 0x00990a5e (int) : 最小=0 最大=51 ステップ=1 デフォルト=30 値=30
h264_p_frame_qp_value 0x00990a5f (int) : 最小値=0 最大値=51 ステップ=1 デフォルト=30 値=30
h264_b_frame_qp_value 0x00990a60 (int) : 最小=0 最大=51 ステップ=1 デフォルト=30 値=30
h264_minimum_qp_value 0x00990a61 (int) : 最小値=0 最大値=51 ステップ=1 デフォルト=8 値=8
h264_maximum_qp_value 0x00990a62 (int) : 最小値=0 最大値=51 ステップ=1 デフォルト=51 値=51
h264_8x8_transform_enable 0x00990a63 (bool) : デフォルト=1 値=1
h264_cpb_buffer_size 0x00990a64 (int) : 最小=0 最大=18750000 ステップ=1 デフォルト=0 値=0
h264_entropy_mode 0x00990a65 (メニュー): 最小=0 最大=1 デフォルト=1 値=1 (CABAC)
h264_i_frame_period 0x00990a66 (int) : 最小=0 最大=2047 ステップ=1 デフォルト=0 値=0
h264_level 0x00990a67 (メニュー): 最小=0 最大=16 デフォルト=14 値=14 (5)
h264_loop_filter_alpha_offset 0x00990a68 (int) : 最小値=-6 最大値=6 ステップ=1 デフォルト=0 値=0
h264_loop_filter_beta_offset 0x00990a69 (int) : 最小値=-6 最大値=6 ステップ=1 デフォルト=0 値=0
h264_loop_filter_mode 0x00990a6a (メニュー): min=0 max=2 default=0 value=0 (有効)
h264_profile 0x00990a6b (メニュー): 最小=0 最大=4 デフォルト=4 値=4 (高)
vertical_size_of_sar 0x00990a6c (int) : 最小=0 最大=65535 ステップ=1 デフォルト=0 値=0
horizontal_size_of_sar 0x00990a6d (int) : 最小=0 最大=65535 ステップ=1 デフォルト=0 値=0
aspect_ratio_vui_enable 0x00990a6e (bool) : デフォルト=0 値=0
vui_aspect_ratio_idc 0x00990a6f (メニュー): 最小=0 最大=17 デフォルト=0 値=0 (未指定)
h264_constrained_intra_pred 0x00990a7f (int) : 最小値=0 最大値=1 ステップ=1 デフォルト=0 値=0
h264_chroma_qp_index_offset 0x00990a80 (int) : 最小=-12 最大=12 ステップ=1 デフォルト=0 値=0
hevc_minimum_qp_value 0x00990b58 (int) : 最小値=0 最大値=51 ステップ=1 デフォルト=8 値=8
hevc_maximum_qp_value 0x00990b59 (int) : 最小値=0 最大値=51 ステップ=1 デフォルト=51 値=51
hevc_i_frame_qp_value 0x00990b5a (int) : 最小=0 最大=51 ステップ=1 デフォルト=30 値=30
hevc_p_frame_qp_value 0x00990b5b (int) : 最小=0 最大=51 ステップ=1 デフォルト=30 値=30
hevc_b_frame_qp_value 0x00990b5c (int) : 最小=0 最大=51 ステップ=1 デフォルト=30 値=30
hevc_profile 0x00990b67 (メニュー) : min=0 max=0 default=0 value=0 (メイン)
hevc_level 0x00990b68 (メニュー) : 最小=0 最大=8 デフォルト=7 値=7 (5)
hevc_loop_filter 0x00990b6c (メニュー): 最小=0 最大=2 デフォルト=1 値=1 (有効)
hevc_loop_filter_beta_offset 0x00990b6d (int) : 最小値=-6 最大値=6 ステップ=1 デフォルト=0 値=0
hevc_loop_filter_tc_offset 0x00990b6e (int) : 最小=-6 最大=6 ステップ=1 デフォルト=0 値=0
hevc_refresh_type 0x00990b6f (メニュー) : 最小=0 最大=2 デフォルト=2 値=2 (IDR)
hevc_num_of_i_frame_b_w_2_idr 0x00990b70 (int) : 最小=0 最大=2047 ステップ=1 デフォルト=0 値=0
hevc_constant_intra_prediction 0x00990b72 (int) : 最小値=0 最大値=1 ステップ=1 デフォルト=0 値=0
hevc_strong_intra_smoothing 0x00990b76 (int) : 最小値=0 最大値=1 ステップ=1 デフォルト=1 値=1
hevc_tmv_prediction 0x00990b79 (int) : 最小=0 最大=1 ステップ=1 デフォルト=1 値=1
prepend_sps_and_pps_to_idr 0x00990b84 (int) : 最小値=0 最大値=1 ステップ=1 デフォルト=1 値=1
frame_skip_mode 0x00990b86 (メニュー) : min=0 max=2 default=0 value=0 (無効)
average_qp_value 0x00990b91 (int) : 最小値=0 最大値=51 ステップ=1 デフォルト=0 値=0 フラグ=読み取り専用
「」
BSP バージョンは次のとおりです:
よろしくお願い申し上げます。
わかりました。また、上で述べた B フレームの質問も確認してください。
よろしくお願いします。
はい、IP カメラは B フレームなしでエンコードします。コマンドを試しましたが、問題は解決しませんでした。画面にはまだアーティファクトがあり、レイテンシも大きいです。しかし、質的に言えば、フリーズは解除されるようです。
こんにちは、
確認ですが、IPカメラはBフレームなしでエンコードします(IPのみ)。デコーダーにdisplay_delay_enable=1、display_delay=0を適用しました。これによりフリーズは解消されたものの、レイテンシは約90ミリ秒のままとなっている。
ボトルネックを特定するために、このパイプラインでGStreamerの要素レイテンシトレーサーを使用しました。
「`」
rtspsrc location=rtsp://... drop-on-latency=true latency=0 buffer-mode=4 ! rtph265depay ! h265parse config-interval=1 ! v4l2h265dec extra-controls="decode,display_delay_enable=1,display_delay=0" capture-io-mode=4 output-io-mode=4 ! v4l2h265enc extra-controls="encode,video_bitrate_mode=1,video_bitrate=2097152,frame_level_rate_control_enable=0,video_gop_size=30" capture-io-mode=4 output-io-mode=4 ! h265parse config-interval=1 ! rtph265pay name=pay0 pt=96
「`」
要素ごとのレイテンシ結果(640x480 @ 30fps、シングルストリーム):
エンコーダーだけで約67ミリ秒(約2フレーム周期)を占める。これはどの実行においても一貫している。デコーダーは2ミリ秒程度で正常に動作します。
私は以下のことを試しました:
これらのいずれもエンコーダーのレイテンシを大幅に短縮するものではない。
私の質問はエンコーダーに焦点を当てたものでした。
ご協力ありがとうございます。