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 库,主要功能如下:

  1. 跨平台支持:通过后端特定的实现支持 Windows、Linux 和 Android 平台
  2. 本机方法包装器:为 GStreamer 本机方法提供 C# 包装器
  3. 管道管理:创建和管理用于视频处理的 GStreamer 管道
  4. 帧通知:当有新的视频帧可用时引发事件

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

该管道:

  1. 在端口 5600 上接收 UDP 数据(udpsrc
  2. 将其解释为 RTP 封装的 H.264 视频 ( application/x-rtp)
  3. 将 H.264 视频解码为原始帧(decodebin3
  4. 使用小缓冲区来最小化延迟(queue max-size-buffers=1 leaky=2
  5. 将视频转换为 Mission Planner 可用的格式(videoconvertvideo/x-raw,format=BGRA
  6. 将帧传送给应用程序(appsink

自动发现和连接

该类AutoConnect管理视频流的自动发现和连接,具有以下主要特点:

  1. 预定义连接:系统包括常见的视频流配置,以简化设置
  2. 自动发现:它在公共端口上监听传入的视频流
  3. 连接管理:它设置并管理与检测到的流的连接
  4. 事件通知:检测到新流时引发事件

连接信息

视频流配置存储为ConnectionInfo对象,其中包括:

  • 标签:连接的用户友好名称
  • 协议:网络协议(UDP、TCP)
  • 端口:要使用的网络端口
  • 格式:数据格式(视频)
  • 方向:连接是入站还是出站
  • ConfigString:GStreamer 管道配置

用户界面集成

视频流显示在任务规划器用户界面中,主要在飞行数据视图中。关键的 UI 集成点包括:

  1. 视频显示:显示车辆的视频流
  2. 控制菜单:允许选择和配置视频流
  3. 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 才能进行视频流传输。系统通过两种方式处理此问题:

  1. 自动检测:Mission Planner 寻找现有的 GStreamer 安装
  2. 自动安装:如果未找到 GStreamer,Mission Planner 可以下载并安装它

GStreamerUI.DownloadGStreamer()方法管理下载和安装过程。

配置和定制

用户可以通过多种方式配置视频流:

  1. 预定义连接:使用内置连接配置文件
  2. 自定义 GStreamer 管道:根据特定需求创建自定义 GStreamer 管道
  3. 连接设置:配置连接参数,如端口、IP 地址等。

添加自定义视频流

要配置自定义视频流,您可以ConnectionInfoAutoConnect.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 是否正确安装:

  1. Mission Planner 检查 GStreamerGStreamer.GstLaunch
  2. 如果未找到,请使用GStreamerUI.DownloadGStreamer()安装
  3. 通过检查 GStreamer 二进制文件来验证安装

网络配置问题

视频流需要正确的网络配置:

  1. 确保适当的网络端口已打开(例如,用于常见 UDP 视频的 5600)
  2. 验证视频源的IP地址是否正确
  3. 检查没有防火墙阻止视频流

性能问题

为了提高视频流性能:

  1. 调整 GStreamer 管道中的缓冲区大小
  2. 降低延迟设置以获得更灵敏的视频
  3. 确保您的计算机具有足够的处理能力进行视频解码

概括

Mission Planner 的视频流系统提供了一种灵活而强大的方式,可以查看来自自动驾驶汽车的实时视频。通过利用 GStreamer 并支持各种协议和格式,它实现了视频源与地面控制站其他功能的无缝集成。

该系统的架构允许轻松扩展和定制,而自动发现功能简化了最终用户的设置和配置。

相关推荐
Xの哲學17 小时前
Linux 分区表深度技术剖析
linux·网络·算法·架构·边缘计算
TracyCoder12317 小时前
微服务概念理解学习笔记
学习·微服务·架构
小璞18 小时前
六、React 并发模式:让应用"感觉"更快的架构智慧
前端·react.js·架构
ALex_zry18 小时前
高并发系统渐进式改造技术调研报告:策略、架构与实战
java·运维·架构
木易 士心18 小时前
WebSocket 与 MQTT 在即时通讯中的深度对比与架构选型指南
websocket·网络协议·架构
Tadas-Gao19 小时前
Spring Boot 4.0架构革新:构建更精简、更安全、更高效的Java应用
java·spring boot·分布式·微服务·云原生·架构·系统架构
BG8EQB19 小时前
开发者的存储救赎计划:从SQL到云原生的架构演进
sql·云原生·架构
Leinwin19 小时前
微软发布全新一代 Arm 架构云原生处理器 Cobalt 200
arm开发·microsoft·架构
勇气要爆发19 小时前
【第五阶段-高级特性和架构】第三章:高级状态管理—GetX状态管理篇
android·架构