本文档介绍 QGroundControl 的视频流和管理系统,该系统负责处理视频源配置、流处理、显示渲染和录制功能。该系统支持多种视频协议,包括 RTSP、UDP H.264/H.265、TCP-MPEG2 和 MPEG-TS 流,以及 USB UVC 摄像头。
有关任务期间摄像机控制和云台管理的信息,请参阅复杂任务项目和调查模式。有关飞行显示 UI 组件的信息,请参阅飞行显示和主视图。
系统架构
视频流系统由几个相互连接的组件组成,用于处理视频流的配置、处理、显示和记录。
视频流架构概述

视频设置和配置
该类VideoSettings通过基于事实的设置系统管理所有与视频相关的配置。
VideoSettings 类结构

支持的视频源
系统支持设置中定义的多种视频源类型:
| 源类型 | 标识符 | 配置要求 |
|---|---|---|
| RTSP 流 | videoSourceRTSP | 需要 RTSP URL |
| UDP H.264 | videoSourceUDPH264 | UDP地址和端口 |
| UDP H.265 | videoSourceUDPH265 | UDP地址和端口 |
| TCP-MPEG2 | videoSourceTCP | TCP 地址和端口 |
| MPEG-TS | videoSourceMPEGTS | UDP地址和端口 |
| UVC相机 | 特定于设备 | 自动检测 USB 摄像头 |
| Herelink AirUnit | videoSourceHerelinkAirUnit | 无需配置 |
| Herelink 热点 | videoSourceHerelinkHotspot | 无需配置 |
视频源枚举是根据编译时特性和可用硬件动态构建的src/设置/VideoSettings.cc24-51
流配置验证
该streamConfigured()方法验证视频源是否配置正确:

GStreamer 集成
QGroundControl 使用 GStreamer 进行视频解码和渲染,并针对特定平台进行优化。
视频解码器选择
系统提供根据平台而变化的硬件加速视频解码选项:
| 平台 | 可用的解码器 | 已删除的选项 |
|---|---|---|
| 安卓 | 软件,Android MediaCodec | DirectX3D、VideoToolbox、VAAPI、NVIDIA、英特尔 |
| Linux | 软件、VAAPI、NVIDIA、英特尔、Vulkan | DirectX3D、视频工具箱 |
| 视窗 | 软件、DirectX3D、NVIDIA、英特尔、VAAPI | 视频工具箱、Vulkan |
| macOS | 软件、VideoToolbox、NVIDIA、英特尔 | DirectX3D、VAAPI |
| iOS | 软件,VideoToolbox | DirectX3D、VAAPI、NVIDIA、英特尔 |
解码器滤波实现于_setForceVideoDecodeList() src/设置/VideoSettings.cc240-271
视频显示集成
飞行显示视频组件处理视频渲染和用户交互。
FlightDisplayViewVideo 组件结构

视频显示模式
视频显示支持多种适配模式,由以下videoFit设置控制:
| 模式 | 价值 | 行为 |
|---|---|---|
| 适合宽度 | 0 | 缩放视频以适应容器宽度 |
| 适合高度 | 1 | 缩放视频以适应容器高度 |
| 充满 | 2 | 缩放以填充容器,可能会裁剪视频 |
| 无裁剪 | 3 | 缩放以显示整个视频,可能会出现信箱 |
getWidth()缩放逻辑在和getHeight()函数中实现
视频状态管理
显示组件监视几个视频管理器属性:
QGroundControl.videoManager.decoding- 视频当前是否正在解码QGroundControl.videoManager.videoSize- 当前视频尺寸QGroundControl.videoManager.aspectRatio- 视频宽高比QGroundControl.videoManager.fullScreen- 全屏模式状态QGroundControl.videoManager.hasThermal- 热成像视频可用性
相机集成和控制
视频显示器与摄像机管理系统集成,实现高级摄像机功能。
相机控制集成

热成像视频支持
系统支持多种模式的热视频显示:
THERMAL_OFF- 热显示已禁用THERMAL_FULL- 完整的热显示THERMAL_PIP- 画中画热覆盖THERMAL_BLEND- 混合热/可见覆盖层
热视频定位和不透明度根据热模式动态管理
视频记录系统
视频录制功能通过具有自动文件管理的设置系统进行配置。
录制配置
| 环境 | 类型 | 目的 |
|---|---|---|
recordingFormat | 枚举 | 文件格式:mkv (0)、mov (1)、mp4 (2) |
maxVideoSize | uint32 | 最大存储空间(MB) |
enableStorageLimit | 布尔值 | 启用自动文件删除 |
showRecControl | 布尔值 | 在 UI 中显示录制控件 |
录制系统与视频管理器集成,用于捕获和存储视频流src/设置/视频.SettingsGroup.json66-98
视频捕捉集成
视频显示组件支持通过以下onImageFileChanged连接进行帧捕获:

特定平台的考虑因素
视频系统包括特定于平台的优化和解决方法。
GStreamer 崩溃预防
系统使用一个Loader组件来防止 GStreamer 在特定硬件配置上崩溃:
GStreamer 导致联想笔记本电脑 OpenGL Intel 驱动程序崩溃。为了解决这个问题,我们在视频禁用时不会加载 QGCVideoBackground 对象。
这是通过仅在启用视频时有条件地加载视频背景组件来实现的
UVC 摄像头支持
USB 视频类(UVC)摄像头支持有条件地编译和集成:
#ifndef QGC_DISABLE_UVC
videoSourceList.append(UVCReceiver::getDeviceNameList());
#endif
该类UVCReceiver处理 USB 摄像头枚举和设备管理src/设置/VideoSettings.cc42-44
1242

被折叠的 条评论
为什么被折叠?



