QGC代码解析之视频流和管理(二十二)

本文档介绍 QGroundControl 的视频流和管理系统,该系统负责处理视频源配置、流处理、显示渲染和录制功能。该系统支持多种视频协议,包括 RTSP、UDP H.264/H.265、TCP-MPEG2 和 MPEG-TS 流,以及 USB UVC 摄像头。

有关任务期间摄像机控制和云台管理的信息,请参阅复杂任务项目和调查模式。有关飞行显示 UI 组件的信息,请参阅飞行显示和主视图

系统架构

视频流系统由几个相互连接的组件组成,用于处理视频流的配置、处理、显示和记录。

视频流架构概述

视频设置和配置

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

VideoSettings 类结构

支持的视频源

系统支持设置中定义的多种视频源类型:

源类型标识符配置要求
RTSP 流videoSourceRTSP需要 RTSP URL
UDP H.264videoSourceUDPH264UDP地址和端口
UDP H.265videoSourceUDPH265UDP地址和端口
TCP-MPEG2videoSourceTCPTCP 地址和端口
MPEG-TSvideoSourceMPEGTSUDP地址和端口
UVC相机特定于设备自动检测 USB 摄像头
Herelink AirUnitvideoSourceHerelinkAirUnit无需配置
Herelink 热点videoSourceHerelinkHotspot无需配置

视频源枚举是根据编译时特性和可用硬件动态构建的src/设置/VideoSettings.cc24-51

流配置验证

streamConfigured()方法验证视频源是否配置正确:

GStreamer 集成

QGroundControl 使用 GStreamer 进行视频解码和渲染,并针对特定平台进行优化。

视频解码器选择

系统提供根据平台而变化的硬件加速视频解码选项:

平台可用的解码器已删除的选项
安卓软件,Android MediaCodecDirectX3D、VideoToolbox、VAAPI、NVIDIA、英特尔
Linux软件、VAAPI、NVIDIA、英特尔、VulkanDirectX3D、视频工具箱
视窗软件、DirectX3D、NVIDIA、英特尔、VAAPI视频工具箱、Vulkan
macOS软件、VideoToolbox、NVIDIA、英特尔DirectX3D、VAAPI
iOS软件,VideoToolboxDirectX3D、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)
maxVideoSizeuint32最大存储空间(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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值