完全指南:拍照、录像、相机配置与视频流控制)
无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载本文基于 QGroundControl 用户手册《Camera Tools》章节结合 PhotoVideoControl.qml、MavlinkCameraControlInterface.h、VehicleCameraControl.cc 等源码实现系统讲解在 Fly View飞行视图中使用相机工具拍摄静态图像、录制视频以及配置相机参数的完整方法帮助你掌握从简单自动飞控相机到完整 MAVLink 相机协议相机的差异化管理方式并理解相机定义文件Camera Definition File驱动的动态参数体系。相机工具能做什么相机工具Camera Tools是 QGroundControl 在 Fly View 中提供的相机控制与配置入口核心能力包括三部分拍摄静态图像Still Image单击快门按钮拍摄单张照片或配置间隔拍摄Time Lapse自动连拍录制视频Video启动/停止视频录制并在 QGC 本地保存录像文件配置相机Camera Configuration通过面板中的齿轮图标打开设置对话框调整曝光、ISO、快门、白平衡等相机参数以及照片模式、存储格式化等通用选项。从源码结构看这套能力的底层由 MavlinkCameraControlInterface抽象基类及其派生类 VehicleCameraControl真实相机与 SimulatedCameraControl仿真相机共同实现全部以 Fact 属性形式暴露给 QML 界面层因此不同能力相机的界面可以做到高度统一。相机能力取决于所连接的相机QGroundControl 相机工具的界面与可用功能完全取决于当前连接的相机类型这也是理解相机工具的第一原则相机类型能力表现简单自动飞控连接相机Basic Camera仅提供基本的照片/视频控制配置项有限支持 MAVLink Camera Protocol 的相机可额外获得视频模式切换、开始/停止录制、缩放对焦、热成像、目标跟踪、存储信息显示等服务对应到源码MavlinkCameraControlInterface暴露了一系列能力标志位属性hasModes、hasZoom、hasFocus、hasTracking、hasVideoStreamUI 根据这些标志决定显示哪些控件同时isBasic属性src/Camera/MavlinkCameraControlInterface.h#L51用于标记该相机是否为仅支持基础能力无法解析相机定义文件的简单相机。MAVLink Camera Protocol 相机当连接的相机支持MAVLink Camera Protocol时QGC 会与之建立标准化的参数与命令通道额外提供协议定义的各种服务。典型场景包括照片/视频模式切换相机面板中可直接在CAM_MODE_PHOTO拍照模式与CAM_MODE_VIDEO视频模式之间切换对应源码中的CameraMode枚举src/Camera/MavlinkCameraControlInterface.h#L107-L113通过setCameraModePhoto()/setCameraModeVideo()/toggleCameraMode()命令执行开始/停止录像一键控制相机侧的视频录制更多高级服务缩放Zoom、对焦Focus、目标跟踪Tracking、热成像显示Thermal、存储卡信息与格式化等均在相机面板或视频叠加控件中呈现。源码中录像控制会优先判断相机能力标志startVideoRecording()中若_mavlinkCameraInfo.flags CAMERA_CAP_FLAGS_CAPTURE_VIDEO成立则发送MAV_CMD_VIDEO_START_CAPTURE命令给相机组件否则回退到VideoManager::instance()-startRecording()由 QGC 端 GStreamer 管线负责本地录制src/Camera/VehicleCameraControl.cc#L527-L541。拍照同理支持CAMERA_CAP_FLAGS_CAPTURE_IMAGE的相机走MAV_CMD_IMAGE_START_CAPTURE不支持的则调用VideoManager::instance()-grabImage()直接从视频流抓帧src/Camera/VehicleCameraControl.cc#L456-L480。打开相机配置面板齿轮图标所有相机配置选项都通过相机面板上的齿轮图标进入。在 PhotoVideoControl.qml 中齿轮图标/res/gear-black.svg绑定了一个QGCMouseArea点击后触发settingsDialogFactory.open()打开QGCPopupDialog设置对话框。设置对话框采用两列动态布局src/FlightMap/Widgets/PhotoVideoControl.qml#L398-L477第一列是设置项标签第二列是对应的控件。设置项并非固定不变而是由以下三部分动态组合而成连接相机决定的动态设置来自 MAVLink Camera Definition File 的 active settingsQGC 硬编码的通用设置照片模式、照片间隔、重置、格式化等按能力条件显示的设置多相机切换、视频流选择、热成像模式等受_camera.capturesPhotos、_camera.hasVideoStream、_camera.thermalStreamInstance等条件控制。例如多相机/多视频流场景下对话框顶部会显示 Camera 与 Video Stream 下拉框用于选择相机与数据流src/FlightMap/Widgets/PhotoVideoControl.qml#L409-L419热成像相机则提供 Thermal View ModeOff/Blend/Full/Picture In Picture与 Blend Opacity 混合透明度滑块src/FlightMap/Widgets/PhotoVideoControl.qml#L421-L431。相机定义文件驱动的动态设置手册中特别强调所显示的大多数设置都依赖相机本身这些参数并非 QGC 写死而是定义在相机的MAVLink Camera Definition File相机定义文件中。从源码看VehicleCameraControl 构造函数会解析相机信息消息中的cam_definition_uri字段若相机广播了定义文件地址则调用_handleDefinitionFile(cam_definition_uri)拉取并解析 XML 定义src/Camera/VehicleCameraControl.cc#L126-L131并将定义文件按厂商_型号_版本.xml命名缓存在本地参数目录src/Camera/VehicleCameraControl.cc#L118-L122后续可离线复用。定义文件解析完成后其中声明的每个参数都会注册为 Fact事实对象。设置面板中通过_camera.activeSettings模型驱动Repeater动态渲染每一行src/FlightMap/Widgets/PhotoVideoControl.qml#L516-L573并根据参数类型自动选择控件形态参数特征渲染控件源码依据布尔类型typeIsBoolQGCCheckBoxSlider 开关滑块PhotoVideoControl.qml#L566-L571带枚举字符串enumStrings 非空FactComboBox 下拉框PhotoVideoControl.qml#L530-L537带增量步长increment 有效QGCSlider 滑块min/max/stepSizePhotoVideoControl.qml#L544-L565其余普通参数FactTextField 文本框PhotoVideoControl.qml#L538-L543只读参数readOnly会自动禁用编辑。这就是为什么连接不同相机时设置面板会呈现出完全不同的参数列表——所有参数元数据均来自相机定义文件QGC 仅负责按类型渲染交互控件。硬编码的通用相机设置与动态设置不同手册明确指出有几项常见设置是 QGC 硬编码的固定在设置面板底部任何相机都会显示部分项按能力条件显示。它们分别是Photo Mode照片模式Single / Time Lapse照片捕获模式二选一对应源码中的PhotoCaptureMode枚举src/Camera/MavlinkCameraControlInterface.h#L116-L121Single单张每次点击拍摄一张照片Time Lapse间隔拍摄按设定间隔自动连续拍摄。该设置由 QGCComboBox 呈现写入_camera.photoCaptureMode。在takePhoto()实现中间隔拍摄会通过MAV_CMD_IMAGE_START_CAPTURE命令的第三、四参数分别传递photoLapse拍摄间隔秒数与photoLapseCount总张数0 表示无限给相机src/Camera/VehicleCameraControl.cc#L461-L471。注意不支持静帧捕获能力的简单相机无法使用间隔拍摄此时 QGC 会弹出提示“Timelapse photo capture is not supported on cameras without still capture capability”src/Camera/VehicleCameraControl.cc#L481-L483。Photo Interval照片间隔仅 Time Lapse 时显示当照片模式为 Time Lapse 时显示Photo Interval秒滑块允许在160 秒范围内设定拍摄间隔步长 1 秒src/FlightMap/Widgets/PhotoVideoControl.qml#L584-L594。该值默认 1.0 秒并随 QGC 本地设置持久化src/Camera/VehicleCameraControl.cc#L134-L136。Reset Camera Defaults重置相机默认值点击 Reset 按钮会弹出确认对话框确认后向相机发送MAV_CMD_RESET_CAMERA_SETTINGS命令参数Do Reset 1将相机全部参数恢复为出厂默认src/Camera/VehicleCameraControl.cc#L628-L639。源码中通过_resetting标志在重置期间抑制其他操作避免并发命令冲突。对话框文案为 Reset Camera to Factory Settings / Confirm resetting all settings?src/FlightMap/Widgets/PhotoVideoControl.qml#L610-L632。Format存储格式化当相机支持存储信息上报storageStatus不等于STORAGE_NOT_SUPPORTED时面板底部显示 Format 按钮点击后同样需要二次确认Confirm erasing all files?确认后发送MAV_CMD_STORAGE_FORMAT命令参数Storage ID 1、Do Format 1清空相机存储卡src/Camera/VehicleCameraControl.cc#L641-L654。相机剩余电量、存储剩余/总容量等状态也通过storageFree、storageTotal、batteryRemaining等属性在界面上展示src/Camera/MavlinkCameraControlInterface.h#L55-L59。视频流页面显示、叠加与本地录制视频流页面用于启用/禁用视频流显示。启用后你将获得以下控制能力对应 FlightDisplayViewVideo.qml 与 PhotoVideoControl.qml 中hasVideoStream相关的控件组开始/停止视频流由 VideoSettings 中的streamEnabled设置控制Video.SettingsGroup.json#L129-L135。视频流未启用时视频视图会显示 VIDEO DISABLED 提示等待流时显示 WAITING FOR VIDEOFlightDisplayViewVideo.qml#L61网格叠加层Video Grid Lines在视频画面上叠加网格辅助线对应gridLines布尔设置默认关闭Video.SettingsGroup.json#L60-L66在设置面板中以开关形式提供PhotoVideoControl.qml#L596-L600画面适应方式Video Screen Fit控制视频图像如何适应屏幕对应videoFit设置提供四个枚举选项Video.SettingsGroup.json#L68-L76枚举值显示名称含义0Fit Width按宽度适应屏幕1Fit Height默认按高度适应屏幕2Fill填满屏幕可能裁剪3No Crop完整显示不裁剪QGC 本地录制视频QGC 可以将视频流录制到本地磁盘。录制按钮位于视频叠加控件中录制期间会显示计时PhotoVideoControl.qml#L146-L216。录制行为受 VideoSettings 配置约束录制文件格式recordingFormatmp4 / mov / mkv默认 mp4、保存目录videoSavePath、最大占用空间maxVideoSize桌面默认 10240 MB、超限自动删除旧录像enableStorageLimit等Video.SettingsGroup.json#L42-L117。视频流的网络来源也在此统一配置videoSource支持 UDP、TCP、RTSP 及 USB 摄像头UVC分别对应udpUrl默认0.0.0.0:5600、tcpUrl、rtspUrl等地址参数Video.SettingsGroup.json#L6-L40。小结QGroundControl 的相机工具是一套能力驱动、动态渲染的相机控制体系静态拍照、视频录制与基础配置对所有相机通用支持 MAVLink Camera Protocol 的相机可解锁模式切换、录像控制、缩放对焦、热成像等进阶服务而绝大多数参数项由相机定义文件动态生成QGC 仅以硬编码方式固定了照片模式、照片间隔、重置默认值与存储格式化几项通用设置。实际使用时只需记住一切以所连相机声明的能力为准齿轮图标是进入全部配置的入口。如需进一步了解相关模块可继续阅读仓库中的 VideoManager视频流接收与本地录制、QGCCameraManager.cc多相机管理以及用户手册 Fly View 总览 和 视频页面说明。赞分享无人机智能硬件【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows)项目地址https://gitcode.com/gh_mirrors/qg/qgroundcontrol点击查看免费下载相关推荐QGroundControl 相机工具Camera Tools完全指南拍照、录像与相机配置QGroundControl 相机工具Camera Tools完全指南拍照、录像与相机配置 本篇技术指南以 QGroundControl 的 Camera无人机智能硬件QGroundControl 飞行视图相机工具Camera Tools完全指南拍照、录像与相机配置QGroundControl 飞行视图相机工具Camera Tools完全指南拍照、录像与相机配置 本文以 QGroundControl 用户指南中的 C无人机智能硬件Flet Camera 控件完全指南实时相机预览、拍照、录像与图像流Flet Camera 控件完全指南实时相机预览、拍照、录像与图像流 Flet 的 flet camera 扩展包让纯 Python 开发者无需任何前端经验前端跨平台桌面应用移动开发上一篇Plotly.py 二维直方图2D Histogram完全指南用 density_heatmap 与 go.Histogram2d 绘制密度热力图下一篇SuperClaude PM Agent 插件性能测试指南基于 Claude Code Plugin 的懒加载 Token 优化验证创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考