# VPU使用指南 ***Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.*** --- 本文档主要介绍Quectel Pi M1上 VPU(视频处理单元)的功能,以及如何通过命令行、GStreamer、FFmpeg 调用硬件视频编解码能力。 ## **VPU 简介** ### **什么是 VPU** VPU(Video Processing Unit,视频处理单元)是 SC200U 设备所搭载 Qualcomm SM6115 平台上的专用硬件视频编解码器(Qualcomm Venus)。它独立于 CPU 工作,专门负责 H.264、H.265、VP8、VP9 等视频流的编码与解码。 使用 VPU 相较纯软件编解码具有以下优势: - **降低 CPU 负载**:视频处理完全由硬件完成,CPU 可专注于其他任务; - **更高吞吐**:支持实时、多路视频流并发处理; - **更低功耗**:硬件编解码比软件方案更省电。 ## **用途** VPU 可用于以下场景: - **视频解码**:播放本地或网络视频(H.264、H.265、VP9 等); - **视频编码**:将摄像头画面或原始视频压缩编码、录制、推流; - **视频转码**:实时将一种编码格式转换为另一种格式; - **多路监控**:多路视频流并发编解码,适用于 NVR/DVR 类应用; - **音视频框架集成**:通过 GStreamer、FFmpeg 无缝调用硬件编解码能力。 ## **使用教程** ### **连接设备** 通过 adb 连接设备: ```bash adb devices ``` 确认设备状态为 `device` 后即可执行后续命令。 ### **验证 VPU 是否可用** #### **检查设备节点** ```bash adb shell "ls -l /dev/video32 /dev/video33" ``` 正常应看到两个 video 设备节点,分别对应解码器和编码器。 #### **查看 Venus 固件状态** ```bash # 查看固件文件(需 root) adb shell "ls -l /lib/firmware/venus_v6.mbn" # 查看内核中 vidc 状态(需 root) adb shell "cat /sys/kernel/debug/msm_vidc/core/info" ``` 输出中应包含固件版本、寄存器基址、中断号等信息,说明 VPU 驱动与固件已就绪。 ### **使用 GStreamer 调用 VPU** 设备系统内置 GStreamer 的 V4L2 M2M 插件,可将 VPU 作为硬件编解码后端。 **硬件解码(播放 H.264 视频):** ```bash gst-launch-1.0 filesrc location=test.h264 ! h264parse ! qtic2vdec ! autovideosink ``` **硬件编码:** ```bash gst-launch-1.0 videotestsrc num-buffers=30 ! videoconvert ! \ video/x-raw,format=NV12,width=640,height=480 ! qtic2venc ! \ filesink location=out.h264 ``` > 依赖插件:`gstreamer1.0-plugins-good`(提供 `v4l2h264dec` / `v4l2h264enc`)。 ## **常见问题** ### **编解码报`-22 (EINVAL)` 或 `invalid v4l2 color format`** - **原因**:传入的像素格式 / 颜色空间参数不被支持(例如颜色格式为 0)。 - **解决**:为输入补充正确的 `colorspace` 与像素格式(如 NV12),并确认平面数与行距参数正确。 ### **调用部分 ioctl 返回 ENOTTY** - **原因**:msm_vidc 需先建立会话(懒加载固件)后才响应部分 ioctl。 - **解决**:先通过 S_FMT + STREAMON 建立会话,或在 GStreamer / FFmpeg 框架中操作。 ### **GStreamer / FFmpeg 提示缺少 v4l2 插件** - **原因**:未安装对应插件或未启用 V4L2 M2M 支持。 - **解决**:安装 `gstreamer1.0-plugins-good`;FFmpeg 需以 `--enable-v4l2-m2m` 编译。