This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] AM62A7-Q1:3840x2160:无法以30fps 的速率运行 VISS 和 LDC 上的 VPAC

Guru**** 2470940 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1410891/am62a7-q1-3840x2160-unable-to-run-vpac-with-viss-and-ldc-at-30-fps

器件型号:AM62A7-Q1

工具与软件:

您好!

当我运行以下脚本将视频从 AR0823流式传输到以太网(使用 VISS 和 LDC 的 VPAC)时、我只能获得22fps、而 tiperfoverlay 使用48-49%的数据显示 VISS 和 LDC。

#!/bin/bash

MULTICASTADDR=224.1.1.1
PORT=5004

HEVC_PROFILE="main"
HEVC_LEVEL="1"
VIDEO_BITRATE=6000000
ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"

TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")

if [ $? -ne 0 ]; then
	echo 'Terminating...' >&2
	exit 1
fi

eval set -- "$TEMP"
unset TEMP

while true; do
	case "$1" in
		'-h'|'--help')
			echo "$0 - H.265 compress a JPEG file into a one second stream"
			echo "Parameters:"
			echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
			echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
			echo "  -b 0..700000000 (Video Bitrate)"
			echo "  --mc <multicast ip address>"
			echo "  --port <port number> (default 5000)"
			echo "  -h This help"
			exit 0
			shift
			continue
		;;
		'-p'|'--profile')
			case "$2" in
				'main'|'Main'|'0')
					HEVC_PROFILE="main"
					;;
				'main-still-picture'|'1')
					HEVC_PROFILE="main-still-picture"
					;;
				'main-10'|'2')
					HEVC_PROFILE="main-10"
					;;
				*)
					HEVC_PROFILE="main"
					;;
			esac
			echo "HEVC Profile: '$HEVC_PROFILE'"
			shift 2
			continue
		;;
		'-l'|'--level')
			case "$2" in
				'1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
					HEVC_LEVEL="$2"
					;;
				*)
					HEVC_LEVEL="1"
					;;
			esac
			echo "HEVC Level: '$HEVC_LEVEL'"
			shift 2
			continue
		;;
		'-b'|'--bitrate')
			echo "Video Bitrate: '$2'"
			VIDEO_BITRATE=$2
			shift 2
			continue
		;;
		'mc')
			MULTICASTADDR=$2
			shift 2
			continue
		;;
		'port')
			PORT=$2
			shift 2
			continue
		;;
		'--')
			shift
			break
		;;
		*)
			echo 'Internal error!' >&2
			exit 1
		;;
	esac
done

#media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
#media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
	! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
	! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
		dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
		sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
	! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin \
	! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
	! queue max-size-buffers=1 leaky=0 \
	! tiperfoverlay title="Camera 1" \
	! v4l2h265enc extra-controls=${ENC_EXTRA_CONTROLS} \
	! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
	! rtph265pay config-interval=1 pt=96 \
	! udpsink host=${MULTICASTADDR} auto-multicast=true port=${PORT} 

当我移除 LDC 时、tiperfoverlay 展示了 VISS 68%的 CPU 使用率。

#!/bin/bash

MULTICASTADDR=224.1.1.1
PORT=5004

HEVC_PROFILE="main"
HEVC_LEVEL="1"
VIDEO_BITRATE=6000000
ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"

TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")

if [ $? -ne 0 ]; then
	echo 'Terminating...' >&2
	exit 1
fi

eval set -- "$TEMP"
unset TEMP

while true; do
	case "$1" in
		'-h'|'--help')
			echo "$0 - H.265 compress a JPEG file into a one second stream"
			echo "Parameters:"
			echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
			echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
			echo "  -b 0..700000000 (Video Bitrate)"
			echo "  --mc <multicast ip address>"
			echo "  --port <port number> (default 5000)"
			echo "  -h This help"
			exit 0
			shift
			continue
		;;
		'-p'|'--profile')
			case "$2" in
				'main'|'Main'|'0')
					HEVC_PROFILE="main"
					;;
				'main-still-picture'|'1')
					HEVC_PROFILE="main-still-picture"
					;;
				'main-10'|'2')
					HEVC_PROFILE="main-10"
					;;
				*)
					HEVC_PROFILE="main"
					;;
			esac
			echo "HEVC Profile: '$HEVC_PROFILE'"
			shift 2
			continue
		;;
		'-l'|'--level')
			case "$2" in
				'1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
					HEVC_LEVEL="$2"
					;;
				*)
					HEVC_LEVEL="1"
					;;
			esac
			echo "HEVC Level: '$HEVC_LEVEL'"
			shift 2
			continue
		;;
		'-b'|'--bitrate')
			echo "Video Bitrate: '$2'"
			VIDEO_BITRATE=$2
			shift 2
			continue
		;;
		'mc')
			MULTICASTADDR=$2
			shift 2
			continue
		;;
		'port')
			PORT=$2
			shift 2
			continue
		;;
		'--')
			shift
			break
		;;
		*)
			echo 'Internal error!' >&2
			exit 1
		;;
	esac
done

#media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
#media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
	! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
	! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
		dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
		sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
	! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
	! queue max-size-buffers=1 leaky=0 \
	! tiperfoverlay title="Camera 1" \
	! v4l2h265enc extra-controls=${ENC_EXTRA_CONTROLS} \
	! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
	! rtph265pay config-interval=1 pt=96 \
	! udpsink host=${MULTICASTADDR} auto-multicast=true port=${PORT} 

VPAC 是否支持3840x2160 @ 30fps? 如果是、如何提高第一个流水线的帧速率?

此致、

Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bas、

    [报价用户 id="590891" url="~/support/processors-group/processors/f/processors-forum/1410891/am62a7-q1-3840x2160-unable-to-run-vpac-with-viss-and-ldc-at-30-fps "]

    VPAC 是否支持3840x2160 @ 30fps? 如果是、如何提高第一个流水线的帧速率?

    [报价]

    是的、AM62A VPAC 最高可支持每秒315MPixel。 您的传感器为3840x2160 @ 30fps = 249MPixel/s 它可由 AM62A VPAC 提供支持。

    [quote userid="590891" url="~/support/processors-group/processors/f/processors-forum/1410891/am62a7-q1-3840x2160-unable-to-run-vpac-with-viss-and-ldc-at-30-fps 如果是、如何提高第一个管道的帧速率?

    您可以尝试增加缓冲池大小、例如:

          gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
    	! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
    	! tiovxisp sink_0::pool-size=4 sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
    		dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
    		sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
    	! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin sink_0::pool-size=4 src::pool-size=4 \
    

    此致、

    建中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的建中:

    增加缓冲池不会增加每秒帧数。 它仍然是22 fps、而不是30 fps。

    我还可以尝试其他哪些操作吗? 简单地使用 v4l2-ctl -d 3 - stream-mmap 进行流式传输可以为我提供30.02 fps、因此传感器/MIPI 能够维持所需的帧速率(如前所述、根据 tiperfoverlay、删除 LDC 可让我们恢复到可接受的29 fps)。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在 tiovxldc 之前添加队列元素应该会有所帮助:

          gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
    	! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
    	! tiovxisp sink_0::pool-size=4 sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
    		dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
    		sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
    	! queue ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin sink_0::pool-size=4 src::pool-size=4 \

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的建中:

    添加队列元素将使我达到25 fps (池大小为4或不为4)。

    删除 tiperfoverlay 元素将使帧速率达到26fps、但仍无法达到~30。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    您是否可以尝试在 v4l2h265enc 和 rtph265pay 之前添加队列?

    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
    	! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
    	! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
    		dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
    		sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
    	! queue ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin \
    	! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
    	! queue max-size-buffers=1 leaky=0 \
    	! tiperfoverlay title="Camera 1" \
    	! queue ! v4l2h265enc extra-controls=${ENC_EXTRA_CONTROLS} \
    	! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
    	! queue ! rtph265pay config-interval=1 pt=96 \
    	! udpsink host=${MULTICASTADDR} auto-multicast=true port=${PORT} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    添加队列会将帧速率降至23fps。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您可以将摄像头数据流式传输到显示器而不是发送到网络、还是可以在 tiovxldc 后使用 fakesink? 这可以帮助我们找到瓶颈所在。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    以下流水线为我提供30fps:

    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
                    sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
            ! queue \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin \
            ! queue max-size-buffers=1 leaky=0 \
            ! fakesink

    如果我添加 convert 行和 tiperfoverlay、将下降至21:

    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
                    sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
            ! queue \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin \
            ! queue max-size-buffers=1 leaky=0 \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! tiperfoverlay title="Camera 1" \
            ! fakesink

    从那里删除 tiperfoverlay 可以使我恢复到30 fps。

    如果我添加 v4lh265enc 行、fps 将再次降至26。 我可以添加 RTP payloader、并且 fps 保持为26。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    如果我添加了转换行和 tiperfoverlay、将下降到21:

    是否可以尝试在 tiperfoverlay 之前添加队列? 例如:

            ! queue max-size-buffers=1 leaky=0 \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! queue ! tiperfoverlay title="Camera 1" \
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们提供了以下具有完整性能(30fps)的 gstreamer 流水线:

    #!/bin/bash
    
    MULTICASTADDR=224.1.1.1
    PORT=5004
    
    HEVC_PROFILE="main"
    HEVC_LEVEL="1"
    VIDEO_BITRATE=6000000
    ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"
    
    TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")
    
    if [ $? -ne 0 ]; then
            echo 'Terminating...' >&2
            exit 1
    fi
    
    eval set -- "$TEMP"
    unset TEMP
    
    while true; do
            case "$1" in
                    '-h'|'--help')
                            echo "$0 - H.265 compress a JPEG file into a one second stream"
                            echo "Parameters:"
                            echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
                            echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
                            echo "  -b 0..700000000 (Video Bitrate)"
                            echo "  --mc <multicast ip address>"
                            echo "  --port <port number> (default 5000)"
                            echo "  -h This help"
                            exit 0
                            shift
                            continue
                    ;;
                    '-p'|'--profile')
                            case "$2" in
                                    'main'|'Main'|'0')
                                            HEVC_PROFILE="main"
                                            ;;
                                    'main-still-picture'|'1')
                                            HEVC_PROFILE="main-still-picture"
                                            ;;
                                    'main-10'|'2')
                                            HEVC_PROFILE="main-10"
                                            ;;
                                    *)
                                            HEVC_PROFILE="main"
                                            ;;
                            esac
                            echo "HEVC Profile: '$HEVC_PROFILE'"
                            shift 2
                            continue
                    ;;
                    '-l'|'--level')
                            case "$2" in
                                    '1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
                                            HEVC_LEVEL="$2"
                                            ;;
                                    *)
                                            HEVC_LEVEL="1"
                                            ;;
                            esac
                            echo "HEVC Level: '$HEVC_LEVEL'"
                            shift 2
                            continue
                    ;;
                    '-b'|'--bitrate')
                            echo "Video Bitrate: '$2'"
                            VIDEO_BITRATE=$2
                            shift 2
                            continue
                    ;;
                    'mc')
                            MULTICASTADDR=$2
                            shift 2
                            continue
                    ;;
                    'port')
                            PORT=$2
                            shift 2
                            continue
                    ;;
                    '--')
                            shift
                            break
                    ;;
                    *)
                            echo 'Internal error!' >&2
                            exit 1
                    ;;
            esac
    done
    
    #media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
    #media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
    media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
                    sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
                    sink_0::pool-size=4 \
            ! queue max-size-buffers=1 leaky=0 \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin \
                    sink_0::pool-size=4 src::pool-size=4 \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! queue max-size-buffers=1 leaky=0 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 \
            ! udpsink host=${MULTICASTADDR} auto-multicast=true port=${PORT}
    

    主要修改是在 tiovxisp 和 tiovxldc 之间添加一个队列、将另一个队列向下移动到 capsfilter 行下方、并将 output-io-mode=dmabuf-import 添加到 vhl2h265enc 行。

    接下来、我会得到以下统计数据:

    perf_stats 输出:

    Summary of CPU load,
    ====================
    
    CPU: mpu1_0: TOTAL LOAD =  27.81 % ( HWI =   1.50 %, SWI =   1.25 % )
    CPU:  c7x_1: TOTAL LOAD =   0. 2 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    
    HWA performance statistics,
    ===========================
    
    HWA:   VISS: LOAD =  69.50 % ( 255 MP/s )
    HWA:   LDC : LOAD =  72.49 % ( 256 MP/s )
    
    DDR performance statistics,
    ===========================
    
    DDR: READ  BW: AVG =   2905 MB/s
    DDR: WRITE BW: AVG =   1775 MB/s
    DDR: TOTAL BW: AVG =   4680 MB/s
    
    SoC temperature statistics
    ==========================
    
    thermal_zone0(DDR):     72.94 degree Celsius
    thermal_zone1(CPU):     71.33 degree Celsius
    thermal_zone2(C7x):     72.74 degree Celsius

    Parse_gst_tracer.py:

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.51         33.31            30          17184      |
    |tiovxisp0                     25.16        33.31            30          17183      |
    |queue0                        0.91         33.31            30          17183      |
    |tiovxldc0                     25.92        33.30            30          17182      |
    |capsfilter1                   0.65         33.30            30          17182      |
    |queue1                        0.59         33.30            30          17182      |
    |v4l2h265enc0                  31.15        33.30            30          17181      |
    |capsfilter2                   0.65         33.30            30          17181      |
    |v4l2src0                      86.80        33.30            30          17181      |
    |rtph265pay0                   1.27         33.30            30          17181      |
    +-----------------------------------------------------------------------------------+

    非常感谢您的帮助! 这个速度可以达到每秒30帧、延迟确实不错。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我需要跟进此事;我尝试使用 TEE 同时从同一视频源运行两个流。 执行此操作时、帧速率将降至25 (使用 TEE 时)或15 (使用 tiovxmultiscaler 时)。

    我用来测试的脚本:

    #!/bin/bash
    
    MULTICASTADDR1=224.1.1.1
    MULTICASTADDR2=224.1.1.2
    PORT=5004
    
    TEE=tee
    HEVC_PROFILE="main"
    HEVC_LEVEL="1"
    VIDEO_BITRATE=6000000
    ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"
    
    TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")
    
    if [ $? -ne 0 ]; then
            echo 'Terminating...' >&2
            exit 1
    fi
    
    eval set -- "$TEMP"
    unset TEMP
    
    while true; do
            case "$1" in
                    '-h'|'--help')
                            echo "$0 - H.265 compress a JPEG file into a one second stream"
                            echo "Parameters:"
                            echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
                            echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
                            echo "  -b 0..700000000 (Video Bitrate)"
                            echo "  --mc <multicast ip address>"
                            echo "  --port <port number> (default 5000)"
                            echo "  -h This help"
                            exit 0
                            shift
                            continue
                    ;;
                    '-p'|'--profile')
                            case "$2" in
                                    'main'|'Main'|'0')
                                            HEVC_PROFILE="main"
                                            ;;
                                    'main-still-picture'|'1')
                                            HEVC_PROFILE="main-still-picture"
                                            ;;
                                    'main-10'|'2')
                                            HEVC_PROFILE="main-10"
                                            ;;
                                    *)
                                            HEVC_PROFILE="main"
                                            ;;
                            esac
                            echo "HEVC Profile: '$HEVC_PROFILE'"
                            shift 2
                            continue
                    ;;
                    '-l'|'--level')
                            case "$2" in
                                    '1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
                                            HEVC_LEVEL="$2"
                                            ;;
                                    *)
                                            HEVC_LEVEL="1"
                                            ;;
                            esac
                            echo "HEVC Level: '$HEVC_LEVEL'"
                            shift 2
                            continue
                    ;;
                    '-b'|'--bitrate')
                            echo "Video Bitrate: '$2'"
                            VIDEO_BITRATE=$2
                            shift 2
                            continue
                    ;;
                    'mc')
                            MULTICASTADDR=$2
                            shift 2
                            continue
                    ;;
                    'port')
                            PORT=$2
                            shift 2
                            continue
                    ;;
                    '--')
                            shift
                            break
                    ;;
                    *)
                            echo 'Internal error!' >&2
                            exit 1
                    ;;
            esac
    done
    
    #media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
    #media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
    media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=/opt/imaging/ar0823/linear/dcc_viss.bin \
                    sink_0::dcc-2a-file=/opt/imaging/ar0823/linear/dcc_2a.bin format-msb=11 \
            ! queue max-size-buffers=1 leaky=0 \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=/opt/imaging/ar0823/linear/dcc_ldc.bin \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! ${TEE} name=multi \
            multi. \
            ! queue max-size-buffers=1 leaky=0 name=qstream1 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 \
            ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT} \
            multi. \
            ! queue max-size-buffers=1 leaky=0 name=qstream2 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 \
            ! udpsink host=${MULTICASTADDR2} auto-multicast=true port=${PORT}

    如果您将脚本中的 tee 变量设置为 tiovxmultiscaler、它将使用多标量、当设置为 tee 时、它将使用 tee 元素。

    我的最终目标是能够动态地更改我的管道、从流式传输到多个 fakesink、再到流式传输到一个或两个网络(UDP)接收器和一个屏幕(均以30 fps 的速率运行)。

    删除 TEE 的第二个分支将使流水线以30fps 的速率运行。

    有什么想法、如何让它以30fps 的速率与两个或更多个分支一起运行?

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    如果我理解正确、您会看到、当您将 TEE 元素添加到输出 tiovxldc 并流式传输两个编码流时、您会看到 FPS 为25fps、而如果您不使用 TEE 元素并使用 tiovxmultiscaler、则您会看到 FPS 为15。  

    此外、如果将脚本与 TEE 元素和多标量一起使用、您是否可以共享所看到的跟踪器以查看导致 fps 下降的元素?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Suren:

    正确。 如果我丢弃第二个编码器(替换为 fakesink)、我会返回到30fps。 如果我使用两个编码器、我得到25 (TEE)和15 (tiovxmultiscaler)。

    TEE=TEE 时脚本的 parse_gst_tracers.py 输出:

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.39         39.19            25          1033       |
    |tiovxisp0                     65.18        39.15            25          1031       |
    |queue0                        15.02        39.17            25          1031       |
    |tiovxldc0                     36.67        39.15            25          1030       |
    |capsfilter1                   0.55         39.15            25          1030       |
    |multi                         0.72         19.57            51          2060       |
    |qstream1                      0.53         39.15            25          1030       |
    |qstream2                      0.64         39.14            25          1030       |
    |v4l2h265enc1                  51.01        39.04            25          1028       |
    |capsfilter3                   0.65         39.04            25          1028       |
    |v4l2src0                      163.60       19.52            51          2057       |
    |rtph265pay1                   1.23         39.04            25          1028       |
    |v4l2h265enc0                  34.20        39.00            25          1029       |
    |capsfilter2                   0.64         39.00            25          1029       |
    |rtph265pay0                   1.23         39.00            25          1029       |
    +-----------------------------------------------------------------------------------+

    tee=tiovxmultiscaler 的脚本的 parse_gst_tracers.py 输出:

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.52         64.00            15          862        |
    |tiovxisp0                     111.86       63.98            15          860        |
    |queue0                        39.77        64.03            15          860        |
    |tiovxldc0                     25.57        64.00            15          859        |
    |capsfilter1                   0.72         64.00            15          859        |
    |multi                         36.01        31.97            31          1718       |
    |qstream1                      0.80         63.94            15          859        |
    |qstream2                      0.71         63.94            15          859        |
    |v4l2h265enc0                  32.39        63.82            15          858        |
    |capsfilter2                   0.70         63.82            15          858        |
    |v4l2src0                      258.53       31.92            31          1716       |
    |rtph265pay0                   1.46         63.82            15          858        |
    |v4l2h265enc1                  50.01        63.82            15          858        |
    |capsfilter3                   0.69         63.82            15          858        |
    |rtph265pay1                   1.39         63.82            15          858        |
    +-----------------------------------------------------------------------------------+

    我总是觉得很难判断导致额外延迟的因素是什么。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    如果您尝试相同的1080分辨率实验、则可以吗? 我怀疑两个4K 流编码会导致系统过度使用并导致帧丢失。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    如果您尝试相同的1080分辨率实验、则可以吗? 我怀疑两个4K 流编码会导致系统过度使用并导致帧丢失。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我在 EVM 上运行了一个流水线(使用 imx219摄像头、不使用 LDC)、其中同时运行了4K 流和全高清流。

    #!/bin/bash
    
    MULTICASTADDR=224.1.1.1
    PORT=5000
    MULTICASTADDR1=224.2.2.1
    PORT1=5000
    
    HEVC_PROFILE="main"
    HEVC_LEVEL="1"
    VIDEO_BITRATE=0
    
    TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:,mc1:,port1:' -n '$0' -- "$@")
    
    if [ $? -ne 0 ]; then
            echo 'Terminating...' >&2
            exit 1
    fi
    
    eval set -- "$TEMP"
    unset TEMP
    
    while true; do
            case "$1" in
                    '-h'|'--help')
                            echo "$0 - H.265 compress a JPEG file into a one second stream"
                            echo "Parameters:"
                            echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
                            echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
                            echo "  -b 0..700000000 (Video Bitrate)"
                            echo "  --mc <multicast ip address>"
                            echo "  --port <port number> (default 5000)"
                            echo "  --mc1 <multicast ip address>"
                            echo "  --port1 <port number> (default 5000)"
                            echo "  -h This help"
                            exit 0
                            shift
                            continue
                    ;;
                    '-p'|'--profile')
                            case "$2" in
                                    'main'|'Main'|'0')
                                            HEVC_PROFILE="main"
                                            ;;
                                    'main-still-picture'|'1')
                                            HEVC_PROFILE="main-still-picture"
                                            ;;
                                    'main-10'|'2')
                                            HEVC_PROFILE="main-10"
                                            ;;
                                    *)
                                            HEVC_PROFILE="main"
                                            ;;
                            esac
                            echo "HEVC Profile: '$HEVC_PROFILE'"
                            shift 2
                            continue
                    ;;
                    '-l'|'--level')
                            case "$2" in
                                    '1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
                                            HEVC_LEVEL="$2"
                                            ;;
                                    *)
                                            HEVC_LEVEL="1"
                                            ;;
                            esac
                            echo "HEVC Level: '$HEVC_LEVEL'"
                            shift 2
                            continue
                    ;;
                    '-b'|'--bitrate')
                            echo "Video Bitrate: '$2'"
                            VIDEO_BITRATE=$2
                            shift 2
                            continue
                    ;;
                    'mc')
                            MULTICASTADDR=$2
                            shift 2
                            continue
                    ;;
                    'port')
                            PORT=$2
                            shift 2
                            continue
                    ;;
                    'mc1')
                            MULTICASTADDR1=$2
                            shift 2
                            continue
                    ;;
                    'port1')
                            PORT1=$2
                            shift 2
                            continue
                    ;;
                    '--')
                            shift
                            break
                    ;;
                    *)
                            echo 'Internal error!' >&2
                            exit 1
                    ;;
            esac
    done
    
    media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
    gst-launch-1.0 -q v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=1920, height=1080, framerate=30/1, format=rggb10 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_SONY_IMX219_RPI" \
                    dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_10b.bin \
                    sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_10b.bin format-msb=9 \
            ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 \
            ! tiovxmultiscaler name=multi target=0 \
            multi.src_0 \
            ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 \
            ! mosaic.sink_0 \
            multi.src_1 \
            ! video/x-raw, format=NV12,width=1920, height=1080, framerate=30/1 \
            ! mosaic.sink_1 \
            multi.src_2 \
            ! video/x-raw, format=NV12,width=1920, height=1080, framerate=30/1 \
            ! mosaic.sink_2 \
            multi.src_3 \
            ! video/x-raw, format=NV12,width=1920, height=1080, framerate=30/1 \
            ! mosaic.sink_3 \
            multi.src_4 \
            ! video/x-raw, format=NV12,width=1920, height=1080, framerate=30/1 \
            ! queue max-size-buffers=1 leaky=0 \
            ! v4l2h265enc extra-controls="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5" \
            ! rtph265pay config-interval=1 pt=96 \
            ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT1} \
            tiovxmosaic name=mosaic target=2 \
            sink_0::startx="<0>" sink_0::starty="<0>" \
            sink_1::startx="<1920>" sink_1::starty="<1080>" \
            sink_2::startx="<0>" sink_2::starty="<1080>" \
            sink_3::startx="<1920>" sink_3::starty="<0>" \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! queue max-size-buffers=1 leaky=0 \
            ! v4l2h265enc extra-controls="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5" \
            ! rtph265pay config-interval=1 pt=96 \
            ! udpsink host=${MULTICASTADDR} auto-multicast=true port=${PORT}

    parse_gst_tracers.py 输出:

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.27         33.33            30          6594       |
    |tiovxisp0                     8.55         33.32            30          6601       |
    |capsfilter1                   0.38         33.32            30          6605       |
    |multi                         11.87        6.66             150         33040      |
    |capsfilter2                   0.37         33.32            30          6612       |
    |capsfilter3                   0.23         33.32            30          6618       |
    |capsfilter4                   0.21         33.32            30          6618       |
    |capsfilter5                   0.20         33.32            30          6618       |
    |capsfilter6                   0.21         33.32            30          6618       |
    |queue0                        0.27         33.32            30          6618       |
    |v4l2h265enc0                  27.46        33.31            30          6617       |
    |v4l2src0                      79.19        16.66            60          13232      |
    |rtph265pay0                   0.53         33.31            30          6617       |
    |mosaic                        40.56        33.31            30          6616       |
    |capsfilter7                   0.35         33.31            30          6620       |
    |queue1                        0.25         33.31            30          6621       |
    |v4l2h265enc1                  44.34        33.30            30          6622       |
    |rtph265pay1                   0.73         33.30            30          6623       |
    +-----------------------------------------------------------------------------------+

    与我现在尝试的唯一区别是、该流水线没有 LDC、并且我将使用 tiovxmultiscaler + tiovxmosaic 来生成4K 流。

    这就是为什么我不真正理解为什么所有东西都是如此慢,当使用更大的相机.

    编码应该没有问题。 我只是不明白为什么我不能把它翻译到我们的平板与4K 摄像头。

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    下周早些时候、我将尝试在我的 AM62A 板上使用一些流水线、并在最后向您提供我的观察结果

    祝您周末愉快!

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的

    您是否能够运行一些流水线、您的观察结果如何?

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    我尝试了下面的管道与1080p 和视频测试 src。  

    [2024-10-09 16:32:43.589] root@am62axx-evm:/opt/edgeai-gst-apps# GST_TRACERS="latency(flags=pipeline+element)" GST_DEBUG=GST_TRACER:7 GST_DEBUG_FILE="/run/latency_4k.txt" \
    [2024-10-09 16:32:46.483] > gst-launch-1.0 -v videotestsrc ! \
    [2024-10-09 16:32:46.535] > video/x-raw, width=1920, height=1080, framerate=60/1, format=NV12 ! \
    [2024-10-09 16:32:46.635] > tee name=tee_split0 \
    [2024-10-09 16:32:46.687] > tee_split0. ! queue ! v4l2h265enc ! rtph265pay ! udpsink host=127.0.0.1 port=5001 \
    [2024-10-09 16:32:46.845] > tee_split0. ! queue ! v4l2h265enc ! rtph265pay ! udpsink host=127.0.0.1 port=6001 
    [2024-10-09 16:32:48.405] Setting pipeline to PAUSED ...
    +-----------------------------------------------------------------------------------+
    [2024-10-09 17:08:49.619] |element                       latency      out-latancy      out-fps     frames     |
    [2024-10-09 17:08:49.635] +-----------------------------------------------------------------------------------+
    [2024-10-09 17:08:49.636] |capsfilter0                   0.21         22.12            45          302        |
    [2024-10-09 17:08:49.651] |tee_split0                    0.88         11.06            90          604        |
    [2024-10-09 17:08:49.651] |queue0                        19.00        22.12            45          302        |
    [2024-10-09 17:08:49.667] |queue1                        21.27        22.12            45          302        |
    [2024-10-09 17:08:49.667] |v4l2h265enc1                  39.21        22.04            45          301        |
    [2024-10-09 17:08:49.683] |videotestsrc0                 61.15        11.02            90          601        |
    [2024-10-09 17:08:49.683] |rtph265pay1                   0.46         22.01            45          300        |
    [2024-10-09 17:08:49.699] |v4l2h265enc0                  39.47        21.98            45          301        |
    [2024-10-09 17:08:49.699] |rtph265pay0                   0.44         21.97            45          301        |
    [2024-10-09 17:08:49.700] +-----------------------------------------------------------------------------------+
    

    不清楚、为什么 TEE 元件会接收一半的帧。 大家都尝试对此进行更多实验。  

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    继续以4K 分辨率运行 IMX219:

    流水线下方:

    gst_tracer="latency (flags=pipelini+Element)" gst_debug=gst_tracer:7 gst_debug_file="/run/latency_4k-enc-1.txt \
    gst-launch-1.0 v4l2src device=/dev/video-imx219-cam0 io-mode=dmabuf-import! 队列 max-size-buffers=1泄漏=2! \
    video/x-bayer、宽度=3280、高度=2464、帧速率=15/1、格式=rggb10! \
    tiovxisp sink_0::pool-size=4 sink_0::device=/dev/v4l-imx219-subdev0 sensor-name="sensor_Sony_IMX219_RPI"\
    dcc-isp-file=/opt/imaging/imx219/linear/dcc_viss_10b.bin
    sink_0::dcc-2a-file=/opt/imaging/imx219/linear/dcc_2a_10b.bin format-msb=9 ! \
    video/x-raw、格式=NV12、宽度=3280、高度=2464、帧速率=15/1! 队列! tiovxmultiscaler! 队列! \
    video/x-raw、格式=NV12、宽度=1920、高度=1080、帧速率=15/1! \
    v4l2h264enc! RTPH264支付! TEE 名称=t1 \
    T1。 ! 队列! udpsink host=127.0.0.1 port=5001 \
    T1。 ! 队列! udpsink host=127.0.0.1端口=6001

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Suren:

    遗憾的是、使用4K @ 15fps 时、问题不可见。 您是否可以使用4K @ 30fps 进行测试?

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    遗憾的是、我没有可以运行4K@30fps 的摄像头。  

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的

    在我们的讨论之后、您是否从您的团队那里获得了任何见解?

    此致、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    它的排灯周和大多数人都在度假。 他们将在下周重新上班时收到最新消息。

    对于延迟、我们深表歉意。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的

    我希望你和你的团队有一个美好的排气周。 在我们的讨论结束后、您能从您的团队获得任何见解吗?

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    我简短地进行了讨论、专家认为这可能是由于建立了网络。

    我们是否可以尝试将编码的流转储到文件中而不是流式传输到网络上?我们是否看到同样的问题?  

    AFAIK、Fakesink 显示30fps。 是这样吗?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    使用 fakesink 时、我不会使用编码器。 我可以在 RTP Payloader 之后使用 fakesink 进行测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我用 fakesink 替换了两条路径上的 udpsink、然后我可以得到30 fps。

    有人知道、调整 udpsink 性能的最佳方法是什么吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    我们可能必须对 udpsink 的属性进行试错。  

    您是否可以尝试在使用 udpsink 的情况下输入 sync=false? 设置缓冲区大小参数、   

    我们还可以尝试使用队列元素的 max-size-buffers、min-threshold-bytes。

    请告诉我如何发展。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、很抱歉耽误您的时间。

    我正在尝试使用 fakesink @ 30fps 重新创建两条完整路径、似乎那里失败了。 我重新介绍编码器的那一刻、fps 下降到25、因此这可能是限制因素。 我已经实验在第二个流上添加一个 tiovxmultiscaler、这会将编码器元件的延迟降低到33ms 以下、这应该是可以接受的。 但帧速率仍降至25。

    我目前有适用于以下场景的脚本:

    1. 将 TEE 用于两个流的流水线、其中一个具有 udpsink、另一个具有 fakesink
      Sensor -> ISP -> LDC -> TEE ->队列->编码器-> RTP payloader -> udpsink 至多播地址
                              |->队列-> fakesink
      该流水线将达到30fps 或与之接近。
    2. 将 TEE 划分为两个流的流水线、这两个流都使用 udpsink
      Sensor -> ISP -> LDC -> TEE ->队列->编码器-> RTP payloader -> udpsink 至多播地址1.
                             |->队列-> tiovxmultiscaler 至1920x1080 ->编码器-> RTP payloader -> udpsink 至多播地址2.
      此流水线数据速率为25-26fps
    3. 具有 TEE 到两个流的流水线、使用编码器和 RTP 支付加载器、从而实现链接
      Sensor -> ISP -> LDC -> TEE ->队列->编码器-> RTP payloader -> fakesink
                             |->队列-> tiovxmultiscaler 至1920x1080 -> 编码器-> RTP payloader -> fakesink
      此流水线数据速率为25-26fps
    4. 将 TEE 用于两个流的流水线、其中一个具有 udpsink、另一个具有 fakesink
      Sensor -> ISP -> LDC -> TEE ->队列->编码器-> RTP payloader -> udpsink 至多播地址
                              |->队列-> tiovxmultiscaler 至1920x1080 -> fakesink
      此流水线将获得26fps 或接近此值。
    5. 将 TEE 划分为两个流的流水线、这两个流都使用 udpsink
      Sensor -> ISP -> LDC -> TEE ->队列->编码器-> RTP payloader -> udpsink 至多播地址1.
                             |->队列->编码器-> RTP payloader -> udpsink 至多播地址2.
      该流水线获得25fps

    我不确定是什么原因导致帧速率下降。 让我烦恼的是,我确信我以前尝试过正确的东西,但显然这是错误的。 当我在第二个流队列后面使用一个严重的元素时,我的帧速率下降到大约25 fps。

    使用单个多标量降低第二个流的分辨率会有所帮助。

    我已经尝试增加队列中的 max-size-buffers、但这没有帮助(从1到4)。 如果可能、我不想增加这些值、因为这会增加系统的延迟。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、巴斯

    Sensor -> ISP -> LDC -> TEE ->队列->编码器-> RTP payloader -> udpsink 至多播地址1.
                           |->队列-> tiovxmultiscaler 至1920x1080 ->编码器-> RTP payloader -> udpsink 至多播地址2.

    在上述情况下、您将流式传输4K 编码流 、而另一个 FHD 是否正确?  

    如果使用 LDC->Multiscaler 的输出转 FHD->Encode -> tee -> queue -> udpstream1、会怎么样

                                                               ->队列-> udpstream2  

    这在 FPS 中没有下降的情况下是否有效? 我怀疑4K + FHD 两者@30fps 会是一个拉伸。 我将尝试以5MP 分辨率和 FHD 运行管线、并向您提供最新结果。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    每秒生成24帧。

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.41         41.05            24          749        |
    |tiovxisp0                     68.63        40.98            24          747        |
    |queue0                        16.84        41.00            24          746        |
    |tiovxldc0                     39.73        40.98            24          745        |
    |capsfilter1                   0.54         40.98            24          745        |
    |queue1                        17.07        41.00            24          745        |
    |tiovxmultiscaler0             39.37        40.98            24          744        |
    |capsfilter2                   0.68         40.98            24          744        |
    |queue2                        0.53         40.98            24          744        |
    |multi                         1.07         20.49            48          1488       |
    |qstream1                      0.68         40.98            24          744        |
    |qstream2                      0.72         40.98            24          744        |
    |v4l2h265enc0                  19.65        40.87            24          744        |
    |capsfilter3                   0.58         40.87            24          744        |
    |v4l2src0                      210.66       20.45            48          1487       |
    |rtph265pay0                   1.08         40.87            24          744        |
    |v4l2h265enc1                  27.26        40.87            24          743        |
    |capsfilter4                   0.52         40.87            24          743        |
    |rtph265pay1                   1.05         40.87            24          743        |
    +-----------------------------------------------------------------------------------+

    我使用的脚本:

    #!/bin/bash
    
    DCC_ISP_FILE=/opt/imaging/ar0823/linear/dcc_viss.bin
    DCC_2A_FILE=/opt/imaging/ar0823/linear/dcc_2a.bin
    LDC_DCC_FILE=/opt/imaging/ar0823/linear/dcc_ldc.bin
    
    MULTICASTADDR1=224.1.1.1
    MULTICASTADDR2=224.1.1.2
    PORT=5004
    
    if [ x$TEE == x ]; then
        TEE=tee
    fi
    HEVC_PROFILE="main"
    HEVC_LEVEL="1"
    VIDEO_BITRATE=6000000
    ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"
    
    TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")
    
    if [ $? -ne 0 ]; then
            echo 'Terminating...' >&2
            exit 1
    fi
    
    eval set -- "$TEMP"
    unset TEMP
    
    while true; do
            case "$1" in
                    '-h'|'--help')
                            echo "$0 - H.265 compress a JPEG file into a one second stream"
                            echo "Parameters:"
                            echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
                            echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
                            echo "  -b 0..700000000 (Video Bitrate)"
                            echo "  --mc <multicast ip address>"
                            echo "  --port <port number> (default 5000)"
                            echo "  -h This help"
                            exit 0
                            shift
                            continue
                    ;;
                    '-p'|'--profile')
                            case "$2" in
                                    'main'|'Main'|'0')
                                            HEVC_PROFILE="main"
                                            ;;
                                    'main-still-picture'|'1')
                                            HEVC_PROFILE="main-still-picture"
                                            ;;
                                    'main-10'|'2')
                                            HEVC_PROFILE="main-10"
                                            ;;
                                    *)
                                            HEVC_PROFILE="main"
                                            ;;
                            esac
                            echo "HEVC Profile: '$HEVC_PROFILE'"
                            shift 2
                            continue
                    ;;
                    '-l'|'--level')
                            case "$2" in
                                    '1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
                                            HEVC_LEVEL="$2"
                                            ;;
                                    *)
                                            HEVC_LEVEL="1"
                                            ;;
                            esac
                            echo "HEVC Level: '$HEVC_LEVEL'"
                            shift 2
                            continue
                    ;;
                    '-b'|'--bitrate')
                            echo "Video Bitrate: '$2'"
                            VIDEO_BITRATE=$2
                            shift 2
                            continue
                    ;;
                    'mc')
                            MULTICASTADDR=$2
                            shift 2
                            continue
                    ;;
                    'port')
                            PORT=$2
                            shift 2
                            continue
                    ;;
                    '--')
                            shift
                            break
                    ;;
                    *)
                            echo 'Internal error!' >&2
                            exit 1
                    ;;
            esac
    done
    
    #media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
    #media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
    media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=${DCC_ISP_FILE} \
                    sink_0::dcc-2a-file=${DCC_2A_FILE} format-msb=11 \
            ! queue max-size-buffers=1 leaky=0 \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=${LDC_DCC_FILE} \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! queue max-size-buffers=1 leaky=0 \
            ! tiovxmultiscaler \
            ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 \
            ! queue max-size-buffers=1 leaky=0 \
            ! ${TEE} name=multi \
            multi.src_0 \
            ! queue max-size-buffers=1 leaky=0 name=qstream1 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 mtu=1400 \
            ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT} \
            multi.src_1 \
            ! queue max-size-buffers=1 leaky=0 name=qstream2 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 mtu=1400 \
            ! udpsink host=${MULTICASTADDR2} auto-multicast=true port=${PORT}
    

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Suren:

    如果我们向您发送我们的一个摄像机设置、会有什么帮助吗? 这包括一块物理板+ am62a SOM、一块摄像头板和一个组件、用于将所有元件都固定在一起。 添加以太网、用于串行端口访问的 Micro USB 电缆和用于电源的 USB C 电源线。

    此软件基于 SDK 9.2.0、将包含此软件。

    请告诉我、这是否会帮助您调查此问题。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一个注意事项是、对于 imx219 4K + FHD 流、我可以使用 udpsink 同时对两个流进行流处理。 因此网络应该不会有发送的数据量问题。

    同样的流水线还显示编码器能够同时编码3840x2160和1920x1080;这是我想要进行测试的部分原因、以确保该区域不存在瓶颈。

    我只是不确定瓶颈目前在哪里。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    已向您发送私人消息。  

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Suren:

    在这方面有任何进展、我可以做些什么来帮助您进行测试? 这是我们最后的高度优先事项、如果可能的话、我们希望在年底之前解决这一问题。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    因为这是一个感恩节周,没有机会在这方面工作。 只想告诉您、我们已在码头收到封装。  

    我的同事建中将尝试运行设置、并很快与您联系。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、 和 Jianzhong、

    您是否能够运行设置、以及您是否能够对可能的瓶颈有一些了解?

    我开始变得越来越重要的是解决这个问题和/或清除限制。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bas、

    很抱歉我们迟到了响应。 Suren 是商务旅行。

    [报价 userid="590891" url="~/support/processors-group/processors/f/processors-forum/1410891/am62a7-q1-3840x2160-unable-to-run-vpac-with-viss-and-ldc-at-30-fps/5444302 #5444302"]

    这就是为什么我不真正理解为什么所有东西都是如此慢,当使用更大的相机.

    编码应该没有问题。 我只是不明白为什么我不能把它翻译到我们的平板与4K 摄像头。

    [报价]

    一个可能的原因是 DDR 的利用率。 使用4K 摄像头时、CSI Rx 接收器、ISP 和编码器的 DDR 读取/写入都将上升。 您的定制 Linux 中是否有可用的 perf_stat 工具- github.com/.../perf_stats 您可以使用此工具来配置 DDR 利用率。

    您也可以进行一些手工计算。 例如、随附了一个电子表格、该电子表格计算 CSI2 Rx 和 ISP 的 DDR 使用情况。 您可以添加编码器、RTP 等其他内容

    e2e.ti.com/.../DDR_2D00_analysis.xlsx

    得出总 DDR 利用率估算后、您就可以看到 DDR 带宽之下有多少空间。 经验法则是至少具有25%的裕度。   

    此致、

    建中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    许建中先生、您好!

    我已向 Bryan 发送了一封邮件、邮件中包含指向我们电路板的 perf_stats 编译版本的链接。

    我还做了一些额外的测试,编译了板的 mbw 实用程序,并运行它。  

    一个实例将一个 CPU 限制为100%、并获得4 Gb/s (2 Gb/s 读取和2 Gb/s 写入)。
    四个实例以100%的速度覆盖所有 CPU、并获得大约8GB/s 的吞吐量(读取速度为4GB/s、写入速度为4GB/s)。

    因此、LPDDR4本身似乎不是瓶颈、因为在总带宽为8GB/s (至少)下、它可以达到4GB/s 的读取和写入速度。

    运行我的脚本时、没有完全加载的 CPU (平均约为35-45%)、而大多数时间花在内核上(htop 显示使用情况为红色)。

    一个连接到 TEE 的 udpsink 的脚本

    #!/bin/bash
    
    DCC_ISP_FILE=/opt/imaging/ar0823/linear/dcc_viss.bin
    DCC_2A_FILE=/opt/imaging/ar0823/linear/dcc_2a.bin
    LDC_DCC_FILE=/opt/imaging/ar0823/linear/dcc_ldc.bin
    
    MULTICASTADDR1=224.1.1.1
    MULTICASTADDR2=224.1.1.2
    PORT=5004
    
    if [ x$TEE == x ]; then
        TEE=tee
    fi
    HEVC_PROFILE="main"
    HEVC_LEVEL="1"
    VIDEO_BITRATE=6000000
    ENC_EXTRA_CONTROLS="enc,prepend_sps_and_pps_to_idr=1,video_gop_size=5,frame_level_rate_control_enable=1,video_bitrate_mode=0,vbv_buffer_size=3000,video_bitrate=${VIDEO_BITRATE}"
    
    TEMP=$(getopt -o 'p:l:b:h' --long 'profile:,level:,bitrate:,input:,output:,help,mc:,port:' -n '$0' -- "$@")
    
    if [ $? -ne 0 ]; then
            echo 'Terminating...' >&2
            exit 1
    fi
    
    eval set -- "$TEMP"
    unset TEMP
    
    while true; do
            case "$1" in
                    '-h'|'--help')
                            echo "$0 - H.265 compress a JPEG file into a one second stream"
                            echo "Parameters:"
                            echo "  -p main|main-still-picture|main-10 (HEVC Profile)"
                            echo "  -l 1|2|2.1|3|3.1|4|4.1|5|5.1 (HEVC Level)"
                            echo "  -b 0..700000000 (Video Bitrate)"
                            echo "  --mc <multicast ip address>"
                            echo "  --port <port number> (default 5000)"
                            echo "  -h This help"
                            exit 0
                            shift
                            continue
                    ;;
                    '-p'|'--profile')
                            case "$2" in
                                    'main'|'Main'|'0')
                                            HEVC_PROFILE="main"
                                            ;;
                                    'main-still-picture'|'1')
                                            HEVC_PROFILE="main-still-picture"
                                            ;;
                                    'main-10'|'2')
                                            HEVC_PROFILE="main-10"
                                            ;;
                                    *)
                                            HEVC_PROFILE="main"
                                            ;;
                            esac
                            echo "HEVC Profile: '$HEVC_PROFILE'"
                            shift 2
                            continue
                    ;;
                    '-l'|'--level')
                            case "$2" in
                                    '1'|'2'|'2.1'|'3'|'3.1'|'4'|'4.1'|'5'|'5.1')
                                            HEVC_LEVEL="$2"
                                            ;;
                                    *)
                                            HEVC_LEVEL="1"
                                            ;;
                            esac
                            echo "HEVC Level: '$HEVC_LEVEL'"
                            shift 2
                            continue
                    ;;
                    '-b'|'--bitrate')
                            echo "Video Bitrate: '$2'"
                            VIDEO_BITRATE=$2
                            shift 2
                            continue
                    ;;
                    'mc')
                            MULTICASTADDR=$2
                            shift 2
                            continue
                    ;;
                    'port')
                            PORT=$2
                            shift 2
                            continue
                    ;;
                    '--')
                            shift
                            break
                    ;;
                    *)
                            echo 'Internal error!' >&2
                            exit 1
                    ;;
            esac
    done
    
    #media-ctl -V '"imx219 4-0010":0 [fmt:SRGGB10_1X10/1920x1080 field:none]'
    #media-ctl -V '"ar0521 1-0036":0 [fmt:SGRBG8_1X8/3840x2160 field:none]'
    media-ctl -V '"ar0823 1-0010":0 [fmt:SGRBG12_1X12/3840x2160 field:none]'
    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=${DCC_ISP_FILE} \
                    sink_0::dcc-2a-file=${DCC_2A_FILE} format-msb=11 \
            ! queue max-size-buffers=1 leaky=0 \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=${LDC_DCC_FILE} \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! queue max-size-buffers=1 leaky=0 \
            ! ${TEE} name=multi \
            multi.src_0 \
            ! queue max-size-buffers=1 leaky=0 name=qstream1 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 mtu=1400 \
            ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT} \
            multi.src_1 \
            ! queue max-size-buffers=1 leaky=0 name=qstream2 \
            ! fakesink

    获得约4.7 Gb/s 的内存带宽使用量

    Summary of CPU load,
    ====================
    
    CPU: mpu1_0: TOTAL LOAD =  28.60 % ( HWI =   1.71 %, SWI =   1.46 % )
    CPU:  c7x_1: TOTAL LOAD =   0. 2 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    
    HWA performance statistics,
    ===========================
    
    HWA:   VISS: LOAD =  68.80 % ( 253 MP/s )
    HWA:   LDC : LOAD =  72.77 % ( 255 MP/s )
    
    DDR performance statistics,
    ===========================
    
    DDR: READ  BW: AVG =   2899 MB/s
    DDR: WRITE BW: AVG =   1801 MB/s
    DDR: TOTAL BW: AVG =   4700 MB/s
    
    SoC temperature statistics
    ==========================
    
    thermal_zone0(DDR):     69.51 degree Celsius
    thermal_zone1(CPU):     69.31 degree Celsius
    thermal_zone2(C7x):     70.93 degree Celsius

    和显示了 ISP 和 LDC 的预期吞吐量超过248MP/s。

    两个 UDP 受电方时被分配了一个新的受电方

    --- record-4k-to-rtp-multicast.ar0822.tee+udpsink+fakesink.sh
    +++ record-4k-to-rtp-multicast.ar0822.tee+udpsinkx2.sh
    @@ -121,7 +121,10 @@
            ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT} \
             multi.src_1 \
             ! queue max-size-buffers=1 leaky=0 name=qstream2 \
    -       ! fakesink
    +        ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
    +        ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
    +       ! rtph265pay config-interval=1 pt=96 mtu=1400 \
    +       ! udpsink host=${MULTICASTADDR2} auto-multicast=true port=${PORT}
    

    DDR 带宽略有上升(从大约4.7GB/s 到大约4.8GB/s)、但 ISP 和 LDC 吞吐量降至~218MP/s

    Summary of CPU load,
    ====================
    
    CPU: mpu1_0: TOTAL LOAD =  33.49 % ( HWI =   1.98 %, SWI =   1.48 % )
    CPU:  c7x_1: TOTAL LOAD =   0. 1 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    
    HWA performance statistics,
    ===========================
    
    HWA:   VISS: LOAD =  59.19 % ( 217 MP/s )
    HWA:   LDC : LOAD =  61.29 % ( 215 MP/s )
    
    DDR performance statistics,
    ===========================
    
    DDR: READ  BW: AVG =   3058 MB/s
    DDR: WRITE BW: AVG =   1710 MB/s
    DDR: TOTAL BW: AVG =   4768 MB/s
    
    SoC temperature statistics
    ==========================
    
    thermal_zone0(DDR):     71.33 degree Celsius
    thermal_zone1(CPU):     70.93 degree Celsius
    thermal_zone2(C7x):     72.54 degree Celsius

    HTop 显示了类似的 CPU 使用情况、所有内核上的 CPU 占20-45%。 所有内核都不是100%的、因此 CPU 似乎不是瓶颈。

    这里的限制因素还有什么? 复员方案能够持续运行至少8 GB/s 的吞吐量、而我的脚本仅使用4.7 GB/s;
    内核之间的 CPU 负载间隔很好、进程似乎没有 CPU 限制。

    我只是不确定如何找出瓶颈可能是什么。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    为什么要设置 max-size-buffers=1?
    您能否删除此文件并尝试

    此致
    Rahul T R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Rahul:

    我将对队列使用 max-size-buffers=1、以尝试将总流水线延迟保持在较低水平。

    我已经尝试删除所有,并获得相同的帧速率(25-26 )。

    修改后的脚本:

    gst-launch-1.0 -v -e v4l2src device=/dev/video3 io-mode=dmabuf-import do-timestamp=true \
            ! video/x-bayer, width=3840, height=2160, framerate=30/1, format=grbg12 \
            ! tiovxisp sink_0::device=/dev/v4l-subdev2 sensor-name="SENSOR_ONSEMI_AR0823" \
                    dcc-isp-file=${DCC_ISP_FILE} \
                    sink_0::dcc-2a-file=${DCC_2A_FILE} format-msb=11 \
            ! queue leaky=0 \
            ! tiovxldc sensor-name="SENSOR_ONSEMI_AR0823" dcc-file=${LDC_DCC_FILE} \
            ! video/x-raw, format=NV12, width=3840, height=2160, framerate=30/1 \
            ! queue leaky=0 \
            ! ${TEE} name=multi \
            multi.src_0 \
            ! queue leaky=0 name=qstream1 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 mtu=1400 \
            ! udpsink host=${MULTICASTADDR1} auto-multicast=true port=${PORT} \
            multi.src_1 \
            ! queue leaky=0 name=qstream2 \
            ! v4l2h265enc output-io-mode=dmabuf-import extra-controls=${ENC_EXTRA_CONTROLS} \
            ! "video/x-h265, profile=(string)${HEVC_PROFILE}, level=(string)${HEVC_LEVEL}" \
            ! rtph265pay config-interval=1 pt=96 mtu=1400 \
            ! udpsink host=${MULTICASTADDR2} auto-multicast=true port=${PORT}

    parse_gst_tracer.py 的输出:

    +-----------------------------------------------------------------------------------+
    |element                       latency      out-latancy      out-fps     frames     |
    +-----------------------------------------------------------------------------------+
    |capsfilter0                   0.38         39.05            25          3745       |
    |tiovxisp0                     66.01        39.04            25          3743       |
    |queue0                        14.96        39.05            25          3743       |
    |tiovxldc0                     37.82        39.04            25          3742       |
    |capsfilter1                   0.50         39.04            25          3742       |
    |queue1                        0.40         39.04            25          3742       |
    |multi                         0.73         19.52            51          7484       |
    |qstream1                      0.47         39.04            25          3742       |
    |qstream2                      0.47         39.04            25          3742       |
    |v4l2h265enc1                  50.87        39.01            25          3741       |
    |capsfilter3                   0.60         39.01            25          3741       |
    |v4l2src0                      165.33       19.50            51          7482       |
    |rtph265pay1                   1.10         39.01            25          3741       |
    |v4l2h265enc0                  33.89        39.00            25          3741       |
    |capsfilter2                   0.57         39.00            25          3741       |
    |rtph265pay0                   1.08         39.00            25          3741       |
    +-----------------------------------------------------------------------------------+

    perf_stats 的输出:

    Summary of CPU load,
    ====================
    
    CPU: mpu1_0: TOTAL LOAD =  31.72 % ( HWI =   1.77 %, SWI =   1.26 % )
    CPU:  c7x_1: TOTAL LOAD =   0.14 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    
    HWA performance statistics,
    ===========================
    
    HWA:   VISS: LOAD =  59.49 % ( 219 MP/s )
    HWA:   LDC : LOAD =  60.40 % ( 215 MP/s )
    
    DDR performance statistics,
    ===========================
    
    DDR: READ  BW: AVG =   2968 MB/s
    DDR: WRITE BW: AVG =   1618 MB/s
    DDR: TOTAL BW: AVG =   4586 MB/s
    
    SoC temperature statistics
    ==========================
    
    thermal_zone0(DDR):     65.20 degree Celsius
    thermal_zone1(CPU):     64.58 degree Celsius
    thermal_zone2(C7x):     66.65 degree Celsius

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、 、徐拉胡尔、Ravikumar、

    圣诞假期回来

    对此还有其他想法吗? 我已尝试在 LPDDR4上测量数据吞吐量、但这能够/应该能够处理比我目前使用的多得多的数据吞吐量。 我看到 LPDDR 吞吐量约为8.2Gb/s

    Summary of CPU load,
    ====================
    
    CPU: mpu1_0: TOTAL LOAD = 100. 0 % ( HWI =   0.48 %, SWI =   0.24 % )
    CPU:  c7x_1: TOTAL LOAD =   0.14 % ( HWI =   0. 0 %, SWI =   0. 0 % )
    
    HWA performance statistics,
    ===========================
    
    
    DDR performance statistics,
    ===========================
    
    DDR: READ  BW: AVG =   4064 MB/s
    DDR: WRITE BW: AVG =   4030 MB/s
    DDR: TOTAL BW: AVG =   8094 MB/s
    
    SoC temperature statistics
    ==========================
    
    thermal_zone0(DDR):     67.68 degree Celsius
    thermal_zone1(CPU):     67.88 degree Celsius
    thermal_zone2(C7x):     68.70 degree Celsius

    我不确定系统中存在哪些其他瓶颈。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    当我切换到同一管道中的两个 UDP 接收装置
    时、DDR 带宽稍微上升(从大约4.7Gb/s 到大约4.8Gb/s)、但 ISP 和 LDC 吞吐量下降至~MP/s [报价]

    切换到两个 UDP 接收器时、还添加了第二个"v4l2h265enc"元素。 我想知道这是否会减慢流水线速度。 两个"v4l2h265enc"元素看起来也在执行相同的操作。 您可以尝试将"tee"移至 v4l2h265enc 之后、甚至是 rtph265pay 之后吗?

    此致、

    建中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的建中:

    在实际应用中、我希望能够将第二条数据流缩小到不同的分辨率。 现在是一样的,但一旦这个问题解决,我们将切换到不同的东西。

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 现在、您是否可以尝试以下操作来查看问题的来源:

    1. 将"三通"移到 v4l2h265enc 或 rtph265pay 之后

    2. 将第二个数据流缩小到较低的分辨率

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    我认为瓶颈运行2个 8M@30fps 编码。 我将让 谈谈编码器的功能。

    此致、

    建中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    MSC (tiovxmultiscaler0)可能是管道吞吐量的瓶颈。 请尝试执行以下操作以使 MSC 能够并行处理 Y 数据和 UV 数据:

    1.更新 GStreamer 插件: https://github.com/TexasInstruments/edgeai-gst-plugins/pull/368/files

    2.更新 edgeai-tiovx-modules、方法是将 /opt/edgeai-tiovx-modules src / tiovx_multi_scaler_module.c 和 /opt/edgeai-tiovx-modules/include/tiovx_multi_scaler_module.h 替换为随附的 files.e2e.ti.com/.../tiovx_5F00_multi_5F00_scaler_5F00_module.ce2e.ti.com/.../tiovx_5F00_multi_5F00_scaler_5F00_module.h

    3.运行脚本 /opt/edgeai-gst-apps/scripts/install_tiovx_modules.sh 和/opt/edgeai-gst-apps/scripts/install_gst_plugins.sh

    这应该会将 MSC 处理时间缩短至~25ms、且摄像头采集+ VISS + LDC + MSC 应以30fps 的速率运行。

    此致、

    建中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的建中:

    我试图在 SDK 9.2基础上集成这些更改、但遇到了一些问题。 我应该以哪些版本的 edgeai-gst-plugins 和 edgeai-tiovx-modules 为基础?

    此致、

    Bas Vermeulen

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗨、Bas、

    请使用以下标签
    EDGEAI_APP_STACK_09_02_00_00

    此致
    Rahul T R