MIPI 摄像头测试
QuecPi Alpha 单板电脑支持 MIPI 接口摄像头,下面选取微雪的一款 imx219 CSI 接口 CMOS 摄像头为例进行测试。
摄像头连接
按照下图进行连接,连接时向上拉开连接器的黑色锁扣部分,插入 FPC 排线,注意金属接触面朝向板内金属接触面,按下锁扣,确认 FPC 排线稳定没有松动。

QuecPi连接示意图

摄像头连接示意图
单摄像头流启动
- 在 device 终端中运行以下命令
mount -o rw,remount /
export XDG_RUNTIME_DIR=/dev/socket/weston
export WAYLAND_DISPLAY=wayland-1
gst-launch-1.0 -e qtiqmmfsrc name=camsrc ! 'video/x-raw(memory:GBM),format=NV12,width=1280,height=720,framerate=30/1' ! fakesink
- 此示例说明如何使用 720p@30 FPS 配置启动摄像头。来自摄像头传感器的帧被 fakesink 丢弃。如果 gst pipeline 状态更改为 “PLAYING”,如下所示,则表示摄像头正在运行。由于此命令会将摄像头帧转储到 fakesink,因此不会在设备上保存任何内容。
gbm_create_device(187): Info: backend name is: msm_drm
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
- 如果想实时显示摄像头捕捉的画面,需提前连接好 HDMI 屏幕,并执行以下命令:
gst-launch-1.0 -e qtiqmmfsrc name=camsrc ! 'video/x-raw(memory:GBM),format=NV12,width=1280,height=720,framerate=30/1' ! waylandsink
- 如果想全屏显示,请在命令后面加上
fullscreen=true
- 如果要停止摄像头录制,请按下
CTRL+C
视频编码
- 在 device 终端中运行以下命令:
gst-launch-1.0 -e qtiqmmfsrc name=camsrc camera=0 ! \
video/x-raw\(memory:GBM\),format=NV12,width=1280,height=720,framerate=30/1,\
compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
capture-io-mode=5 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
- 此命令以 720p 30 FPS 配置启动相机,并在 h264 视频编码后将其另存为视频文件。如果 gst 管道状态更改为 “PLAYING”,则表示摄像头正在运行。
- 如果要停止摄像头录制,请按下
CTRL+C
- MP4 文件保存在 /opt/ 目录
命令说明:
! 是一个连接符号,用于将前一个元素的输出连接到后一个元素的输入
gst-launch-1.0
这是 GStreamer 的命令行工具,用于启动一个 GStreamer 管道(pipeline)。-e 参数表示在管道结束时退出,而不是继续运行。qtiqmmfsrc name=camsrc camera=0
高通平台专用的摄像头源插件,从设备 camera=0(主摄像头)采集视频。video/x-raw\(memory:GBM\),format=NV12,width=1280,height=720,framerate=30/1
video/x-raw(原始视频),使用 GBM 内存管理(适用于高通 GPU 加速),NV12(YUV 4:2:0,单平面格式,常见于视频编码),分辨率 1280×720(720p),帧率 30fps。compression=ubwc,interlace-mode=progressive,colorimetry=bt601
启用高通的UBWC(Ultra Bandwidth Compression) 技术,通过硬件压缩减少内存带宽需求,逐行扫描(非隔行),色彩空间为 ITU-R BT.601(适用于标清视频)。`v4l2h264enc capture-io-mode=5 output-io-mode=5 \
extra-controls="controls,video_bitrate=6000000,video_bitrate_mode=0;"` 使用 DMABUF(直接内存访问缓冲区)进行输入,优化数据传输效率,同样使用 DMABUF 输出编码后数据,目标比特率为 6 Mbps,使用 CBR(固定比特率) 模式,适合网络流媒体或需要稳定带宽的场景。
h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4
解析 H.264 流,添加必要的 NAL 单元头部,使其符合 MP4 封装要求,将 H.264 视频流封装为 MP4 格式,将数据写入文件 /opt/mux_avc.mp4。
视频编码和快照
- 在 device 终端中运行以下命令:
gst-pipeline-app -e qtiqmmfsrc name=camsrc camera=0 ! \
video/x-raw\(memory:GBM\),format=NV12,width=1280,height=720,framerate=30/1,\
compression=ubwc,interlace-mode=progressive,colorimetry=bt601 ! v4l2h264enc \
capture-io-mode=5 output-io-mode=5 extra-controls="controls,video_bitrate=6000000,\
video_bitrate_mode=0;" ! h264parse ! mp4mux ! filesink location=/opt/mux_avc.mp4 \
camsrc.image_1 ! "image/jpeg,width=1280,height=720,framerate=30/1" \
! multifilesink location=/opt/frame%d.jpg async=false sync=true
- 按
Enter
键。此命令将打印以下菜单并等待用户输入。
##################################### MENU #####################################
============================== Pipeline Controls==============================
(0) NULL: Set the pipeline into NULL state
(1) READY: Set the pipeline into READY state
(2) PAUSED: Set the pipeline into PAUSED state
(3) PLAYING: Set the pipeline into PLAYING state
==================================== Other====================================
(p) Plugin Mode: Choose a plugin which to control
(q) Quit : Exit the application
Choose an option:
- 使用以下菜单步骤在录制视频时拍摄快照。
(1) ready -> (3) Playing -> (p)Plugin Mode : Select (8)camerasrc ->(36) capture-image -> (1): still – Snapshot ->(1) Snapshot count ('guint' value for arg1)
- 要停止相机,请按
Enter
,按b
(返回),然后按q
(退出)。录制的视频文件和快照图像保存在 /opt/ 中。通过在主机 PC 上运行以下scp
命令,可以从设备中提取录制的内容:
scp -r root@[ip-addr]:/opt/<file name> .
- 生成文件如下图所示: