MissionPlanner架构梳理之(十八)视频流
概述和目的
Mission Planner 通过与强大的多媒体框架 GStreamer 集成,支持无人机和其他自动驾驶车辆的实时视频流传输。本页面介绍了视频流传输子系统,该子系统允许操作员直接在 Mission Planner 界面中查看来自其车辆的摄像头信号。
Mission Planner 中的视频流功能包括:
- 支持多种视频格式(H.264、H.265)
- 多种传输协议(UDP、RTSP)
- 自动发现并连接视频流
- 与飞行数据视图和HUD集成
建筑学
Mission Planner 中的视频流系统由几个协同工作的关键组件组成:
视频流架构
数据流处理
视频流数据流
支持的视频格式和协议
Mission Planner 支持各种视频流格式和协议:
格式 | 协议 | 默认端口 | 笔记 |
---|---|---|---|
H.264 | UDP | 5000、5100、5600 | 最常用的格式 |
H.265 | UDP | 5601 | 更高效的编码 |
H.264 | 实时消息协议 | 554, 8554 | 被 SkyViper、HereLink 等设备使用 |
GStreamer 集成
Mission Planner 使用 GStreamer 作为其视频处理引擎。该类GStreamer
提供了一个 C# 包装器,用于原生 GStreamer 库,主要功能如下:
- 跨平台支持:通过后端特定的实现支持 Windows、Linux 和 Android 平台
- 本机方法包装器:为 GStreamer 本机方法提供 C# 包装器
- 管道管理:创建和管理用于视频处理的 GStreamer 管道
- 帧通知:当有新的视频帧可用时引发事件
该GStreamer
课程提供:
- 启动和停止视频流的方法
OnNewImage
通过事件处理和传递帧- GStreamer 管道生命周期的管理
GStreamer 管道
视频处理通过 GStreamer 管道字符串进行配置。这些管道由按顺序处理视频流的元素组成。例如:
udpsrc port=5600 buffer-size=90000 ! application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264 ! decodebin3 ! queue max-size-buffers=1 leaky=2 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink sync=false
该管道:
- 在端口 5600 上接收 UDP 数据(
udpsrc
) - 将其解释为 RTP 封装的 H.264 视频 (
application/x-rtp
) - 将 H.264 视频解码为原始帧(
decodebin3
) - 使用小缓冲区来最小化延迟(
queue max-size-buffers=1 leaky=2
) - 将视频转换为 Mission Planner 可用的格式(
videoconvert
,video/x-raw,format=BGRA
) - 将帧传送给应用程序(
appsink
)
自动发现和连接
该类AutoConnect
管理视频流的自动发现和连接,具有以下主要特点:
- 预定义连接:系统包括常见的视频流配置,以简化设置
- 自动发现:它在公共端口上监听传入的视频流
- 连接管理:它设置并管理与检测到的流的连接
- 事件通知:检测到新流时引发事件
连接信息
视频流配置存储为ConnectionInfo
对象,其中包括:
- 标签:连接的用户友好名称
- 协议:网络协议(UDP、TCP)
- 端口:要使用的网络端口
- 格式:数据格式(视频)
- 方向:连接是入站还是出站
- ConfigString:GStreamer 管道配置
用户界面集成
视频流显示在任务规划器用户界面中,主要在飞行数据视图中。关键的 UI 集成点包括:
- 视频显示:显示车辆的视频流
- 控制菜单:允许选择和配置视频流
- HUD Overlay:可以在视频显示上叠加飞行数据
OnNewImage
该类的事件将GStreamer
帧传送到 UI 组件进行显示。
常见车辆集成
Mission Planner 包含对几种流行视频流系统的预配置支持:
这里链接
HereLink 通过具有特定管道配置的 RTSP 流获得支持:
rtspsrc location=rtsp://192.168.43.1:8554/fpv_stream latency=41 udp-reconnect=1 timeout=0 do-retransmission=false ! application/x-rtp ! decodebin3 ! queue max-size-buffers=1 leaky=2 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink sync=false
天空毒蛇
SkyViper 通过特定的 RTSP 配置获得支持:
rtspsrc location=rtsp://192.168.99.1/media/stream2 debug=false buffer-mode=1 latency=100 ntp-time-source=3 ! application/x-rtp ! decodebin3 ! queue max-size-buffers=1 leaky=2 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink sync=false
设置和安装
GStreamer 要求
Mission Planner 需要安装 GStreamer 才能进行视频流传输。系统通过两种方式处理此问题:
- 自动检测:Mission Planner 寻找现有的 GStreamer 安装
- 自动安装:如果未找到 GStreamer,Mission Planner 可以下载并安装它
该GStreamerUI.DownloadGStreamer()
方法管理下载和安装过程。
配置和定制
用户可以通过多种方式配置视频流:
- 预定义连接:使用内置连接配置文件
- 自定义 GStreamer 管道:根据特定需求创建自定义 GStreamer 管道
- 连接设置:配置连接参数,如端口、IP 地址等。
添加自定义视频流
要配置自定义视频流,您可以ConnectionInfo
向AutoConnect.connectionInfos
列表中添加新的内容:
new ConnectionInfo("Custom H264 Stream", true, 5700, ProtocolType.Udp, ConnectionFormat.Video,Direction.Inbound,"udpsrc port=5700 buffer-size=90000 ! application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264 ! decodebin3 ! queue max-size-buffers=1 leaky=2 ! videoconvert ! video/x-raw,format=BGRA ! appsink name=outsink sync=false")
故障排除
Mission Planner 中视频流的常见问题:
GStreamer 安装问题
如果视频流不起作用,请检查 GStreamer 是否正确安装:
- Mission Planner 检查 GStreamer
GStreamer.GstLaunch
- 如果未找到,请使用
GStreamerUI.DownloadGStreamer()
安装 - 通过检查 GStreamer 二进制文件来验证安装
网络配置问题
视频流需要正确的网络配置:
- 确保适当的网络端口已打开(例如,用于常见 UDP 视频的 5600)
- 验证视频源的IP地址是否正确
- 检查没有防火墙阻止视频流
性能问题
为了提高视频流性能:
- 调整 GStreamer 管道中的缓冲区大小
- 降低延迟设置以获得更灵敏的视频
- 确保您的计算机具有足够的处理能力进行视频解码
概括
Mission Planner 的视频流系统提供了一种灵活而强大的方式,可以查看来自自动驾驶汽车的实时视频。通过利用 GStreamer 并支持各种协议和格式,它实现了视频源与地面控制站其他功能的无缝集成。
该系统的架构允许轻松扩展和定制,而自动发现功能简化了最终用户的设置和配置。