当前位置: 首页 > news >正文

MissionPlanner架构梳理之(十八)视频流

概述和目的

Mission Planner 通过与强大的多媒体框架 GStreamer 集成,支持无人机和其他自动驾驶车辆的实时视频流传输。本页面介绍了视频流传输子系统,该子系统允许操作员直接在 Mission Planner 界面中查看来自其车辆的摄像头信号。

Mission Planner 中的视频流功能包括:

  • 支持多种视频格式(H.264、H.265)
  • 多种传输协议(UDP、RTSP)
  • 自动发现并连接视频流
  • 与飞行数据视图和HUD集成

建筑学

Mission Planner 中的视频流系统由几个协同工作的关键组件组成:

视频流架构

数据流处理

视频流数据流

支持的视频格式和协议

Mission Planner 支持各种视频流格式和协议:

格式协议默认端口笔记
H.264UDP5000、5100、5600最常用的格式
H.265UDP5601更高效的编码
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 的视频流系统提供了一种灵活而强大的方式,可以查看来自自动驾驶汽车的实时视频。通过利用 GS​​treamer 并支持各种协议和格式,它实现了视频源与地面控制站其他功能的无缝集成。

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

http://www.dtcms.com/a/395528.html

相关文章:

  • 2025 前端突围战:当 React Server Components 遇上 AI 编程,我们该如何重构开发范式?
  • xss-labs闯关【1-11】
  • vue2利用canvas翻页浏览pdf文件
  • 仿生视觉芯片迈向实用化:《Advanced Science》报道双极性宽谱光电晶体管,赋能自动驾驶与机器感知
  • 如何在手机上把CAD图纸导出为PDF?
  • 【2025最新】02 Spring Boot 第一个小程序 for VS Code - 通过 Spring Initializr 扩展创建
  • map和set的使用和实现(C++)
  • Qt 系统相关 - 网络
  • Java中List转换成Map的两种方式
  • 嵌入式 - RAM10
  • Qwen新开源tongyi-DeepResearch:核心优势
  • Java Stream API性能优化实践指南
  • Qt配置序列化与反序列化实战:QSettings的深度应用指南
  • MySQL下载时出现“starting the server”或“initializing错误”的原因以及解决方案
  • MySQL 数据库核心知识点详解
  • 让机器人边思考边行动!新一代具身智能EO-1:统一架构突破VLA瓶颈
  • 数据库笔试选择题:题组1
  • 一款相机是只有桶形畸变 和 枕形畸变的一种,还是两个都有?
  • 德克西尔井盖异动传感器:城市安全的隐形守护者
  • HTML基本标签一
  • BGP高防服务器具体是指什么
  • 打工人日报#20250922
  • Django视图与路由
  • 在thinkphp8的模板文件中 如何调用公共服务类函数
  • Nextcloud增加模块内嵌网页
  • Ubuntu18.04 MySQL5.7.42 内存升高导致OOM MySQL重启解决办法
  • html调起exe程序
  • C#中的Task怎么理解,理解异步编程的核心
  • fastApi框架开发一个web端仓库管理系统
  • mosquitto求医之路(3):Docker安装也不好使