FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | ubuntu20.04 gnome软解测试

2023-05-16

@[TOC](FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | ubuntu20.04 gnome软解测试)

1. 简介

最近搭建了基于树莓派和wfb_ng通信的FPV摄像头方案,该方案能解决:

  • 视频数据传输
  • 控制链路通信
  • 链路状态检测
  • 链路安全加密

对该方案的一些简单学习和研读,基本规格&特性如下:

  • 1280x720@60FPS latency ~50ms
  • 支持MAVLink OSD显示 (兼容Ardupilot/PX4)
  • 支持Smart FEC
  • 支持双向MAVLink电传通道
  • 支持IP-over-WFB IPv4 tunnel
  • 基于libsodium支持数据加密
  • 支持链路维护检测

注:本文不做其他扩展,主要基于当前测试框架下对测试数据做出解释,并提出后续完善的硬件方案和预测。

2. 硬件准备

天空端#1

  • Rapberry Pi Zero W
  • Rapberry Pi v2.1 imx219 3280x2464

天空端#2

  • Rapberry Pi 3B+
  • Rapberry Pi v2.1 imx219 3280x2464

地面端

  • Lenovo Laptop SL410
  • Intel® Core™2 Duo CPU T6570 @ 2.10GHz
  • [AMD/ATI] RV710/M92 [Mobility Radeon HD 4530/4570/545v]

注:后来发现gst-launch-1.0播放H264的时候,并没有使用显卡GPU,而从一些参考信息中看该显卡至少是支持的,具体原因不清楚,有知道的朋友也请指点下。

3. 软件准备

请参考wfb-ng Release 23.01镜像无头烧录&配置(2)准备天空端和地面端软件。

鉴于测试,所有脚本都采用显式命令行调用方式执行,以确保每个步骤执行是否有意外发生,方便定位问题。

分辨率(加粗部分我们将针对性测试)

  • QVGA, //320x240
  • CIF, //400x296
  • HVGA, //480x320
  • VGA, //640x480
  • SVGA, //800x600
  • XGA, //1024x768
  • SXGA, //1280x1024
  • 720P, //1280x720
  • 1080P, //1920x1080

3.1 天空端命令

启动天空端wfb_ng

$ sudo systemctl start wifibroadcast@drone

天空端wfb_ng状态查询

$ sudo systemctl status wifibroadcast@drone

天空端wfb_ng日志查询

$ sudo journalctl -xu wifibroadcast@drone

停止天空端wfb_ng

$ sudo systemctl stop wifibroadcast@drone

视频采集命令(CTRL + C 退出)

$ raspivid -n  -ex fixedfps -w 1280 -h 720 -b 4000000 -fps 30 -t 0 -o - \
				| gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=35 ! udpsink sync=false host=127.0.0.1 port=5602

or

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=30/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

3.2 地面端命令

启动地面端wfb_ng

$ sudo systemctl start wifibroadcast@gs

地面端wfb_ng状态查询

$ sudo systemctl stop wifibroadcast@gs

地面端wfb_ng日志查询

$ sudo journalctl -xu wifibroadcast@gs

停止地面端wfb_ng

$ sudo systemctl stop wifibroadcast@gs

地面端维测命令(CTRL + C 退出)

$ wfb-cli gs

视频播放命令(CTRL + C 退出)

$ gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
               ! rtph264depay ! avdec_h264 ! clockoverlay valignment=bottom ! autovideosink fps-update-interval=1000 sync=false

or

$ gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
               ! rtph264depay ! avdec_h264 ! clockoverlay valignment=bottom ! xvimagesink sync=false

4. 测试

默认地面端采用以下方式播放天空端视频:

$ gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
               ! rtph264depay ! avdec_h264 ! clockoverlay valignment=bottom ! autovideosink fps-update-interval=1000 sync=false

4.1 使用 天空端#1 + 地面端 测试

4.1.1 raspivid 1280x720 720P 30FPS

$ raspivid -n  -ex fixedfps -w 1280 -h 720 -b 4000000 -fps 30 -t 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=35 ! udpsink sync=false host=127.0.0.1 port=5602

raspivid1280x720@fps30

4.1.2 raspivid 1280x720 720P 60FPS

$ raspivid -n  -ex fixedfps -w 1280 -h 720 -b 4000000 -fps 60 -t 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=1 pt=35 ! udpsink sync=false host=127.0.0.1 port=5602

raspivid1280x720@fps60

4.1.3 gst-launch-1.0 1280x720 720P 30FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=30/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI-zero-gst1280x720@fps30

4.1.4 gst-launch-1.0 1280x720 720P 60FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=60/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

**测试失败,需要重启树莓派才能启动摄像头。**请参考:Performance test issue based on Release 23.01 image #289

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
                                extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_lin                            e_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_                            header=1" \
                                ! video/x-h264,profile=high,width=1280,height=720,framerate=60/1,stream-format=byte-stream \
                                ! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-laten                            cy ! udpsink host=127.0.0.1 port=5602 sync=false
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
0:00:07.5 / 99:99:99.
Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.640766] Internal error: Oops - undefined instruction: 0 [#1] ARM

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.660055] Process v4l2src0:src (pid: 786, stack limit = 0xcb2e4637)
0:00:07.5 / 99:99:99.
Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.660360] Stack: (0xc32cbe10 to 0xc32cc000)

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.660558] be00:                                     c32cbe3b c0099ba4 c0c2f028 00000000

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.660898] be20: 00000000 00000000 00000000 00000000 c990d0a0 b3c0c878 00004000 00000003

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.661152] be40: 00000001 00000000 00002003 00000001 00000000 00000000 00000000 00000000

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.661376] be60: 00000000 00000000 00000000 00000000 00000000 00000000 00000001 002a3000

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.661614] be80: 000e1000 00000000 00000000 c020f9a4 c32cbed8 00000080 00000001 00000000

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.672070] bea0: c32cbde4 00000010 00010000 00000000 00000000 c32cbdbc 00000000 3c38b2dd

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.689153] bec0: 00000000 bf26cd50 c990d0a1 00000000 c990d0a0 c0c2f028 b3c0c878 00000009

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.700053] bee0: c32cbefc c32cbef0 bf26cd6c bf26c7b4 c32cbf14 c32cbf00 bf264148 bf26cd5c

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.718157] bf00: c044560f c990d0a1 c32cbfa4 c32cbf18 c02244d4 bf264108 00000010 00000000

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.728048] bf20: 00000517 c04e0794 c32cbf74 c32cbf38 c008072c c04e0780 00000517 00000000

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.738462] bf40: 25eee4e0 00000000 00000193 3c38b2dd c32ca000 b4df8b48 c0c2f028 b6f15880

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.754826] bf60: 00000193 c00083e4 c32cbfa4 c32cbf78 c0091c74 3c38b2dd 00000517 b3c0c850

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.766579] bf80: 00000001 b3c0c858 00000036 c00083e4 c32ca000 00000000 00000000 c32cbfa8

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.785670] bfa0: c0008260 c02243cc b3c0c850 00000001 00000009 c044560f b3c0c878 b6b53d40

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.794324] bfc0: b3c0c850 00000001 b3c0c858 00000036 004dd790 b5840000 004f4a6c 004f4b94

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.805115] bfe0: b58405d8 b4df839c b57efa84 b6b53d4c 60000010 00000009 00000000 00000000
0:00:07.5 / 99:99:99.
Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.820897] Backtrace:

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.830017] [<bf26c7a8>] (video_usercopy [videodev]) from [<bf26cd6c>] (video_ioctl2+0x1c/0x24 [videodev])

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.849377]  r10:00000009 r9:b3c0c878 r8:c0c2f028 r7:c990d0a0 r6:00000000 r5:c990d0a1

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.859025]  r4:bf26cd50

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.867712] [<bf26cd50>] (video_ioctl2 [videodev]) from [<bf264148>] (v4l2_ioctl+0x4c/0x64 [videodev])

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.880672] [<bf2640fc>] (v4l2_ioctl [videodev]) from [<c02244d4>] (sys_ioctl+0x114/0x9b0)

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.892259]  r5:c990d0a1 r4:c044560f

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.903704] [<c02243c0>] (sys_ioctl) from [<c0008260>] (ret_fast_syscall+0x0/0x1c)

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.917238] Exception stack(0xc32cbfa8 to 0xc32cbff0)

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.929780] bfa0:                   b3c0c850 00000001 00000009 c044560f b3c0c878 b6b53d40

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.939761] bfc0: b3c0c850 00000001 b3c0c858 00000036 004dd790 b5840000 004f4a6c 004f4b94

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.954747] bfe0: b58405d8 b4df839c b57efa84 b6b53d4c

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.968891]  r10:00000000 r9:c32ca000 r8:c00083e4 r7:00000036 r6:b3c0c858 r5:00000001

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.985942]  r4:b3c0c850

Message from syslogd@piCamera at Mar  9 09:26:11 ...
 kernel:[ 1303.993852] Code: bfa396d4 00000018 0001712a 00000056 (00051cf2)
^Chandling interrupt..
Interrupt: Stopping pipeline ...
Execution ended after 0:00:47.241435745
Setting pipeline to NULL ...

4.2 使用 天空端#2 + 地面端 测试

4.2.1 gst-launch-1.0 1280x720 720P 30FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=30/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI3B-gst1280x720@fps30

4.2.2 gst-launch-1.0 1280x720 720P 45FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=45/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI3B-gst1280x720@fps45

4.2.3 gst-launch-1.0 1280x720 720P 60FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=1280,height=720,framerate=60/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI3B-gst1280x720@fps60

4.2.4 gst-launch-1.0 800x600 SVGA 60FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=800,height=600,framerate=60/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI3B-gst800x600@fps60

4.2.5 gst-launch-1.0 640x480 VGA 60FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=640,height=480,framerate=60/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI3B-gst640x480@fps60

4.2.6 gst-launch-1.0 480x320 HVGA 60FPS

$ gst-launch-1.0 v4l2src do-timestamp=true io-mode=mmap device=/dev/video0 \
				extra-controls="controls,image_stabilization=1,h264_profile=4,h264_i_frame_period=60,h264_level=11,power_line_frequency=1,exposure_metering_mong=1,exposure_dynamic_framerate=0,scene_mode=0,video_bitrate_mode=1,video_bitrate=2000000,repeat_sequence_header=1" \
				! video/x-h264,profile=high,width=480,height=320,framerate=60/1,stream-format=byte-stream \
				! h264parse disable-passthrough=true ! rtph264pay config-interval=1 pt=96 mtu=1400 aggregate-mode=zero-latency ! udpsink host=127.0.0.1 port=5602 sync=false

RPI3B-gst480x320@fps60

5. 测试总结

本次测试,基本上没有发生丢包,也没有显著的FEC纠错报文出现,整体收到WiFi信号干扰可以忽略不计。

5.1 天空端#1(RPI Zero W)

  1. raspiivid视频性能不如gst-launch-1.0
  2. gst-launch-1.0 720P 60FPS出现内核异常,视频卡主
  3. RPI v2.1摄像头可手动调节焦距(测试视频没有调好)

wfb_ng作者svpcom当下推荐:RPI3 or jetson with MIPI cameras

注:RPI Zero W出现内核驱动异常,可能是88XXau_wfb.ko在ARM1176JZF-S上执行时出现了问题,有兴趣的朋友可跟下这个问题。

在这里插入图片描述

5.2 天空端#2(RPI 3b+)延时分析

5.2.1 480x320 HVGA 60FPS x 3张清晰延时,统计平均 44ms,最小43ms,最大44ms

  • 第一张:75 - 31 = 44 ms
    在这里插入图片描述

  • 第二张:852 - 808 = 44ms

在这里插入图片描述

  • 第三张:457 - 414 = 43 ms

在这里插入图片描述

5.2.2 640x480 VGA 60FPS x 3张清晰延时,统计平均 57ms,最小43ms,最大87ms

  • 第一张:304 - 261 = 43ms

在这里插入图片描述

  • 第二张:687 - 644 = 43ms

在这里插入图片描述

  • 第三张:863 - 776 = 87ms

在这里插入图片描述

5.2.3 800x600 SVGA 60FPS x 3张清晰延时,统计平均 86ms,最小86ms,最大86ms

  • 第一张:200 - 114 = 86ms
    在这里插入图片描述
  • 第二张:614 - 528 = 86ms

在这里插入图片描述

  • 第三张:994 - 908= 86 ms

在这里插入图片描述

5.2.3 1280x720 720P 45FPS x 3张清晰延时,统计平均 100ms,最小86ms,最大130ms

  • 第一张:1028 - 898= 130 ms

在这里插入图片描述

  • 第二张:934 - 848 = 86 ms

在这里插入图片描述

  • 第三张:816 - 686= 130 ms

在这里插入图片描述

5.2.5 1280x720 720P 60FPS - 视频卡顿

鉴于该模式下,整体视频出现卡顿,延时测试取消。

**天空端CPU占用率:7.9 + 7.9 + 1.0 x 2 + 0.7 x 4 ~= 20 **
天空端CPU占用率

**地面端CPU占用率:69.6 + 20.6 + 18.6 + 15.7 + 7.8 + 2.9 + 2.0 x 2 + 1.0 x 3 ~= 142.2 **
地面端CPU占用率

5.3 视频延时组成

视频链路:摄像头==》编码==》传输==》解码==》显示,大体上可以分为以下几个延时:

  1. 摄像头数据采集延时(camera)
  2. 编码器编码延时(H264 codec)
  3. 无线网络延时(wfb_ng): ~ 5ms
  4. 解码器解码延时(H264 decoder)
  5. 显示器刷新延时(monitor refresh rate)

上述时延并非全同步的情况下顺序发生,因为编解码码过程有IBP帧算法问题考虑,这里我们暂时不深入研究,对算法有兴趣的朋友可以看下补充资料,然后扩展,自行研究。

5.4 视频延时测试结果

基于以下前提:

  1. 视频流畅
  2. 静态背景
  3. 丢包为零
  4. FEC纠正忽略不计
  5. 地面端软解
  • 480x320 HVGA 60FPS x 3张清晰延时,统计平均 44ms,最小43ms,最大44ms
  • 640x480 VGA 60FPS x 3张清晰延时,统计平均 57ms,最小43ms,最大87ms
  • 800x600 SVGA 60FPS x 3张清晰延时,统计平均 86ms,最小86ms,最大86ms
  • 1280x720 720P 45FPS x 3张清晰延时,统计平均 100ms,最小86ms,最大130ms

得出以下结论:

  1. 天空端CPU占用率低,主要采用H264编码器编码
  2. 地面端CPU占用率高,主要采用CPU软解H264
  3. 降低分辨率,减少编解码延时,可以显著提升时延
  4. 与wfb_ng开源作者svpcom测试 720P ~ 50ms相比,主要问题可能是解码

后续工作重点:

  1. 视频时延计算方法,需要了解H264/H265编解码和IPB帧;
  2. RPI3摄像头编码部分CPU占用率低,考虑地面端采用同类型芯片进行解码测试;
  3. 背景画面大幅度变化(飞机飞行画面对比);
  4. gstream参数优化 ;

6. 参考资料

【1】模拟FPV-肥鲨HDO2+无牙仔2+熊猫VT5804ML1+Foxeer野火 时延测试
【2】FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | Ubuntu 20.04 xfce软解测试
【3】FPV Camera(RPI 3B+/Zero W+V2.1) | wfb_ng Release 23.01 | H264硬解测试
【4】wfb-ng Release 23.01镜像无头烧录&配置(2)
【5】wfb-ng Release 23.01镜像无头烧录&配置(1)
【6】wfb-ng 锁定WiFi接口
【7】Raspbian镜像无头烧录
【8】ATI Mobility Radeon HD 4530
【9】RadeonDriver for ubuntu
【10】Test RPI ZERO W(8812AU) + laptop (8812AU) with Release 23.01
【11】Performance test issue based on Release 23.01 image #289

7. 补充资料

Understanding Video Codecs -Why Some Footage is So Hard to Edit-

H.265 (HEVC) vs H.264 (AVC) Compression: Explained!

H264 vs H265 Explained

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | ubuntu20.04 gnome软解测试 的相关文章

  • Three.js 在平面上旋转相机

    我的应用程序中有一个相机 camera new THREE PerspectiveCamera 75 window innerWidth window innerHeight 0 1 1000 camera position z 1 cam
  • iphone如何通过Xcode拍照后进入图片库

    大家好 我正在实施以下代码来通过我的应用程序拍照 UIApplication sharedApplication keyWindow setRootViewController picker picker sourceType UIImag
  • 如何从里程计/tf数据获取投影矩阵?

    我想将视觉里程计的结果与 KITTI 数据集提供的事实进行比较 对于地面中的每一帧 我都有一个投影矩阵 例如 1 000000e 00 9 043683e 12 2 326809e 11 1 110223e 16 9 043683e 12
  • 在 Windows 8.1 平板电脑上的 Web 应用程序中捕获图像

    我即将开发一个在 Windows 8 1 平板电脑上运行的应用程序 一个重要的功能是能够单击按钮来访问相机来拍摄一些照片 理想情况下 我想将其创建为Web应用程序由于多种原因 许可证 跨平台 开发时间 没有本机应用程序经验等 而不是本机应用
  • 实体框架 4 的 System.Reflection.ReflectionTypeLoadException

    我在 Windows 窗体应用程序中使用 EF4 每当我在未安装 Visual Studio 2010 的计算机中运行发布文件时 我都会遇到问题 我总是收到此错误 System Reflection ReflectionTypeLoadEx
  • Firemonkey相机组件太慢

    我有一个问题TCameraComponent在安卓上 我第一次运行该应用程序时 相机正常 但如果我停止TCameraComponent再次启动 相机变得太慢 对正在发生的事情有什么想法吗 CameraComponent1 Active fa
  • 还有其他访问相机的替代方法吗?

    除了使用 ActionScript 3 之外 还有其他方法来访问相机吗 import flash media Camera videoInstance attachCamera cameraInstance 或者我应该使用任何 API 吗
  • OpenCV 从相机捕获 YUYV,无需 RGB 转换

    我尝试使用 openCV c 从 LI USB30 V024 立体相机捕获左右图像 而不自动将其转换为 RGB 相机输出 YUYV 格式的图像 我尝试使用 videoCapture set CV CAP PROP CONVERT RGB f
  • 如何更改Vuforia AR相机对焦模式?

    我在用Vuforia 6 2 AR SDK对于在Unity中 但是当我在 Android 手机中测试该应用程序时 相机看起来像blurry 我在 Vuforia 的开发者网站中搜索并找到了一些相机对焦模式 但我无法实现 因为该指南适用于较旧
  • 3D 图形矩阵 4x4 中最后一行的 magic 4 的用途是什么?

    当我阅读有关WebGL的书时 我看到了下一个矩阵描述 有关于书中最后一行的信息 WebGL 初学者指南 初学者指南 Diego Cantor Brandon Jones 神秘的第四排 第四排没有任何特殊之处 意义 元素 m4 m8 m12
  • 当相机断开连接时,opencv videocapture 挂起/冻结而不是返回“False”

    我正在使用 OpenCV Python 3 1 遵循此处的示例代码 http opencv python tutroals readthedocs io en latest py tutorials py gui py video disp
  • 如何检测前置摄像头放置在设备上的位置?

    有什么方法可以检测 Android 设备上前置摄像头的放置位置吗 我认为在手机上它总是在它的顶部 靠近耳机 但所有平板电脑都是不同的 我检查了华硕 Transformer 前置摄像头位于侧面 如果我以横向模式握住它 则位于顶部 但三星 Ga
  • 有机会通过 Android NDK 相机访问来减少快门时间吗?

    我编写了一个 Android 应用程序 可以从相机捕获实时预览 快门时间短很重要 至少应该是恒定的 目前我使用以下代码来实现低快门时间 Parameters params camera getParameters params setSce
  • Marshmallow 中的手电筒控制

    我对最新 Marshmallow 版本中的相机 更具体地说是手电筒 有疑问 在任何棉花糖之前的版本上 我需要执行以下操作来打开 关闭闪光灯 private void turnFlashOn final Camera camera int f
  • PWA 可以访问联系人、GPS 或使用手机摄像头吗?

    PWA 可以访问联系人 GPS 或使用手机摄像头吗 这在任何系统 ios android 中都可能吗 是否有任何开发计划来实现这些功能 PWA 无法克服一些限制 you cannot访问电话上的联系人列表 另一方面 你can拍照并使用 GP
  • 将图片添加到图库 - Android

    我有一个活动 用相机拍照 然后将其添加到正确的文件夹 在本例中为 DCIM Camera 但是当你退出应用程序并加载 Android 图库时 它不在那里 我正在玩一些游戏 发现它只在重新启动手机后才出现 我不确定这背后的原因 也许它必须创建
  • 浏览器显示“已阻止摄像头以保护您的隐私”

    浏览器说 阻止摄像头以保护您的隐私 我的项目包括使用用户摄像头 当我从本地主机访问应用程序时 摄像头工作正常 但是当通过 IP 地址访问时 浏览器默认阻止摄像头和其他资源 我如何允许它们用于我的应用程序 我的应用程序适用于将使用 IP 地址
  • iPhone AVFoundation 相机方向

    我一直在绞尽脑汁地试图让 AVFoundation 相机以正确的方向 即设备方向 捕获图片 但我无法让它工作 我看过教程 看过 WWDC 演示 还下载了 WWDC 示例程序 但即使这样也没有成功 我的应用程序的代码是 AVCaptureCo
  • 如何在 Ionic 3 中调整图像大小而不降低质量和目标宽度和高度?

    我想减小相机 API 拍摄的图像的大小 但质量降低不好 最好的办法是降低分辨率 但我不想对所有图像使用目标宽度和高度 例如 我希望图像宽度为 1280 图像高度按其比例自动变化 但在 API 中我应该使用精确的宽度和高度 如何通过图像比例更
  • Ionic-Angular.js 拍照并发送到服务器:空图像

    因此 我设法使用自定义指令通过 Angular js 将图像上传到我的服务器 我还成功地实现了 Cordova 的相机功能 现在我尝试连接两者 但是当将图像发送到服务器时 它们被存储为空 我认为问题在于我使用输入字段来获取图像 并且它获取了

随机推荐

  • iNavFlight之RC遥控MSP协议

    iNavFlight之RC遥控MSP协议 1 RC摇杆MSP协议2 地面站配置 amp MSP遥控器2 1 iNav地面站 配置2 2 iNav地面站 MSP遥控器 3 RC摇杆总体逻辑框架3 1 摇杆信息获取3 2 摇杆信息处理3 3 摇
  • iNavFlight之RC遥控CRSF协议

    iNavFlight之RC遥控CRSF协议 1 遥控器电传框架设计1 1 场景分析1 2 逻辑框架1 2 1 电传信息获取1 2 2 电传信息处理1 2 3 电传初始化 1 3 模块化设计 2 CRSF电传报文2 1 CRSF电传报文格式2
  • iNavFlight之电传MAVLink协议

    iNavFlight之电传MAVLink协议 1 业务逻辑框架2 MAVLink电传报文2 1 MAVLink电传报文格式2 2 iNav支持地面站报文 接收 2 3 iNav支持飞控报文 发送 3 MAVLink报文处理4 参考资料 本章
  • PX4模块设计之四十七:mavlink模块

    PX4模块设计之四十七 xff1a mavlink模块 1 mavlink模块简介2 模块入口函数mavlink main3 mavlink模块重要函数3 1 Mavlink start3 2 Mavlink task main3 3 Ma
  • SVN工程转Git工程&Github托管

    SVN工程转Git工程 amp Github托管 1 介绍2 autoAudioTest之SVN转Github步骤Step 1 工作环境 ubuntu Step 2 安装升级必要软件Step 3 转换脚本Step 4 检查软件运行环境Ste
  • iNav飞控AOCODARC-F7MINI固件编译

    iNav飞控AOCODARC F7MINI固件编译 1 编译目标 xff08 AOCODARC F7MINI xff09 2 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 构建命令介绍Step 4 厂家目标板
  • BetaFlight飞控AOCODARC-F7MINI固件编译

    BetaFlight飞控AOCODARC F7MINI固件编译 1 编译目标 xff08 AOCODARC F7MINI xff09 2 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 构建命令介绍Step 4
  • Google AIY Vision Kit安装及国内配置

    Google AIY Vision Kit安装及国内配置 1 AIY Vision Kit组装环节Step 1 xff1a 收集其他附件选择1 xff1a 使用AIY项目应用程序选择2 xff1a 使用显示器 鼠标和键盘 Step 2 xf
  • WiFi monitor模式的配置和运行检查(Ubuntu系统)

    WiFi monitor模式的配置和运行检查 1 WiFi monitor模式介绍2 WiFi monitor模式查看Step1 xff1a 确保计算机上有安装硬件WiFi无线网卡Step2 xff1a 安装必要的工具Step 3 xff1
  • github上的源码编译成.hpi插件

    目录 1 xff0c vim安装 安装 Maven 编译源码生成 hpi 2 xff0c windos 安装idea 安装maven idea设置maven 将github上的源码拉进并编译 成功 近期做jenkins监控github xf
  • BetaFlight统一硬件资源简单配置修改

    BetaFlight统一硬件资源简单配置修改 1 源由2 资源配置注意事项3 资源配置文件修改验证步骤Step 1 xff1a 确认硬件修改内容Step 2 xff1a 资源配置文件修改Step 3 xff1a 验证配置文件Step 4 x
  • SSH远程登录RaspberryPi命令行响应缓慢问题

    SSH远程登录RaspberryPi命令行响应缓慢问题 1 问题2 分析3 解决3 1 去掉PAM部分鉴权模块3 2 去掉sshd的DNS设置3 3 无线WiFi信号优化方法一 xff1a ifconfig操作方法二 xff1a 内核自动检
  • ESP32-FPV-Camera介绍和使用

    ESP32 FPV Camera介绍和使用 1 编译目标2 编译步骤Step 1 软件配置环境准备Step 2 获取开源代码Step 3 2 4G WiFi频段选择Step 4 要确保2 4G WiFi网卡处于Monitor状态Step 5
  • DIY-BETAFPV和DIY(ESP-01F+E19-900M20S2模块)915MHz信号测试对比

    DIY BETAFPV和DIY xff08 ESP 01F 43 E19 900M20S2模块 xff09 915MHz信号测试对比 1 前提条件2 实测效果2 1 起点附近 xff08 距离3m左右 xff09 2 2 30m米距离 xf
  • Raspbian镜像无头烧录

    Raspbian镜像无头烧录 1 源由2 需求3 分析4 步骤4 1 删除tf卡分区内容4 2 balena烧录镜像4 3 配置USB直接登录4 4 配置WiFi 2 4G网络登录4 5 修改登录账号密码4 6 数据同步和弹出tf卡 5 登
  • wfb-ng Release 23.01镜像无头烧录&配置(1)

    64 TOC wfb ng Release 23 01镜像无头烧录 amp 配置 1 最近打算搭一个数字图传系统 xff0c 并进行一些简单测试 xff0c 在刚开始烧录阶段就遇到各种问题 当然 xff0c 主要的问题就是不熟悉 xff0c
  • wfb-ng 锁定WiFi接口

    wfb ng 锁定WiFi接口 1 源由2 需求3 分析4 步骤4 1 确认网卡MAC地址4 2 修改udev配置文件4 3 配置重载 amp 重启4 4 确认逻辑网卡接口4 6 修改wfb ng逻辑WiFi通信接口 5 参考资料6 补充资
  • apt-get通过代理更新系统

    apt get通过代理更新系统 1 源由2 需求3 分析4 步骤4 1 安装CCProxy4 2 配置CCProxy4 3 apt get更新4 4 apt get升级4 5 apt get安装 5 补充资料 命令行设置代理6 参考资料 1
  • wfb-ng Release 23.01镜像无头烧录&配置(2)

    64 TOC wfb ng Release 23 01镜像无头烧录 amp 配置 2 1 简介 在wfb ng Release 23 01镜像无头烧录 amp 配置 1 的基础上 xff0c 整理天空端step by step配置过程 2
  • FPV Camera(RPI3+V2.1) | wfb_ng Release 23.01 | ubuntu20.04 gnome软解测试

    64 TOC FPV Camera RPI3 43 V2 1 wfb ng Release 23 01 ubuntu20 04 gnome软解测试 1 简介 最近搭建了基于树莓派和wfb ng通信的FPV摄像头方案 xff0c 该方案能解决