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 连接设备:
adb devices
确认设备状态为 device 后即可执行后续命令。
验证 VPU 是否可用¶
检查设备节点¶
adb shell "ls -l /dev/video32 /dev/video33"
正常应看到两个 video 设备节点,分别对应解码器和编码器。
查看 Venus 固件状态¶
# 查看固件文件(需 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 视频):
gst-launch-1.0 filesrc location=test.h264 ! h264parse ! qtic2vdec ! autovideosink
硬件编码:
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编译。