OS04A10 / OV13855 MIPI 摄像头使用指南
适用范围:本文提供了在 LKD3576、LKD3588、LKD3562、LKB1126BP 系列设备上使用 OV13855;在 LKD3588、LKB1126BP、HI3403、HI3519 系列设备上使用 os04a10 摄像头的使用方法。
1. 模组介绍
在开始操作前,请务必确认一下基础信息,避免硬件损坏或功能异常:
| 摄像头型号 | 分辨率 | 接口类型 | 资料 |
|---|---|---|---|
| os04a10 | 400万像素 | 30Pin 0.5mm 间距 FPC 插座 | os04a10 资料 |
| ov13855 | 1300万像素 | 30Pin 0.5mm 间距 FPC 插座 | ov13855 资料 |
需要购买配件的话,可以从这里下单:点击购买。
2. 硬件连接
注意
- 摄像头FPC接口有严格正反方向,接反会短路烧坏模组,必须按下文"接线图"所示方向接入主板。
- 不可带电拔插摄像头,避免带电操作导致短路。
2.1. RK3576系列
LKD3576
接线图正面:

接线图反面:

2.2. RK3588系列
LKD3588

2.3. RK3562系列
LKD3562
接线图正面:

接线图反面:

2.4. RV1126系列
LKB1126BP

2.5. HI3519系列
LKD3519AV200

2.6. HI3403系列
LBA3403V100

3. 使用GStreamer采集视频
这里以LKD3588接入os04a10和ov13855摄像头为例
使用v4l2-ctl --list-devices命令查看摄像头节点,如下所示:
neardi@LKD3588:~$ v4l2-ctl --list-devices
rkisp_mainpath (platform:rkisp0-vir0):
/dev/video22 # os04a10视频采集节点
/dev/video23
/dev/video24
/dev/video25
/dev/video26
/dev/video27
/dev/video28
/dev/media2
rkisp_mainpath (platform:rkisp1-vir1):
/dev/video31 # ov13855视频采集节点
/dev/video32
/dev/video33
/dev/video34
/dev/video35
/dev/video36
/dev/video37
/dev/media3
找到mainpath下的第一个节点作为视频采集节点,分别是/dev/video22和/dev/video31。
使用GStreamer打开videoX
gst-launch-1.0 v4l2src device=/dev/videoX ! \
video/x-raw,format=NV12,width=1280,height=720, framerate=30/1 ! \
fpsdisplaysink
打开状态如图所示:

4. 使用v4l2-ctl工具抓图
4.1. 抓图
抓取输出的 1 帧 NV12 数据保存到/tmp/output.yuv,分辨率为 1920x1080。在保存数据前,先 丢弃前面 3 帧(即前面 3 帧虽然返回给 userspace,但不保存到文件)。
v4l2-ctl -d /dev/videoX --set-fmt-video=width=1920,height=1080,pixelformat=NV12 --stream-mmap=3 --stream-skip=3 --stream-to=/tmp/output.yuv --stream-count=1 --stream-poll
- -d,指定操作对象为/dev/videoX设备。
- –set-fmt-video,指定了宽高及pxielformat(用FourCC表示)。 NV12即用 FourCC 表示的 pixelformat。
- –stream-mmap,指定 buffer 的类型为 mmap,即由 kernel 分配的物理连续的或经过iommu 映射的buffer。
- –stream-skip,指定丢弃(不保存到文件)前 3 帧。
- –stream-to,指定帧数据保存的文件路径。
- –stream-count,指定抓取的帧数,不包括–stream-skip 丢弃的数量。
- –stream-poll,该选项指示 v4l2-ctl 采用异步 IO,即在 dqbuf 前先用 select 等等帧数据完成,从而保证 dqbuf 不阻塞。否则 dqbuf 将会阻塞直到有数据帧到来。
抓图正常返回结果:
<<<<
抓图异常返回结果:
could not open /camera.out for writing
VIDIOC_STREAMON returned -1 (Operation not permitted)
- 检查FPC线是否接反。
- 检查FPC线是否松动。
- 检查摄像头是否接好。
- 更换FPC线或摄像头。
4.2 查看图像
4.2.1. 使用ffmpeg命令查看摄像头图像
- 使用
ffmpeg命令查看摄像头图像,如下所示:
$ ffmpeg -pix_fmt nv12 -s 1920x1080 -i output.yuv result.jpg
格式要匹配,否则无法正常成像
可以使用
ffmpeg -pix_fmts命令查看ffmpeg支持的格式
- 直接播放图像:
$ ffplay -f rawvideo -pix_fmt nv12 -s 1920x1080 ./output.yuv
4.2.2. 在Windows下查看摄像头图像
在Windows下查看摄像头图像,可以使用7yuv软件 http://datahammer.de/。
打开软件后,点击File->Open,选择output.yuv文件打开。设置Format为yvu420,Width为1920,Height为1080。此时,就可以看到摄像头图像了。

5. V4L2命令补充
5.1. 获取摄像头格式
使用v4l2-ctl -d /dev/videoX --list-formats-ext命令获取摄像头格式,/dev/videoX替换为实际摄像头节点,如下所示:
neardi@LKD3588:~$ v4l2-ctl -d /dev/video31 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 32x32 - 4224x3136 with step 8/8
[1]: 'NV16' (Y/UV 4:2:2)
Size: Stepwise 32x32 - 4224x3136 with step 8/8
[2]: 'NV61' (Y/VU 4:2:2)
Size: Stepwise 32x32 - 4224x3136 with step 8/8
[3]: 'NV21' (Y/VU 4:2:0)
Size: Stepwise 32x32 - 4224x3136 with step 8/8
[4]: 'NV12' (Y/UV 4:2:0)
Size: Stepwise 32x32 - 4224x3136 with step 8/8
[5]: 'NM21' (Y/VU 4:2:0 (N-C))
Size: Stepwise 32x32 - 4224x3136 with step 8/8
[6]: 'NM12' (Y/UV 4:2:0 (N-C))
Size: Stepwise 32x32 - 4224x3136 with step 8/8
比如,上面的输出表示摄像头支持UYVY、NV16、NV12、NM12等格式,我们选择NV12格式。
5.2. 获取指定摄像头详细信息
执行以下命令,/dev/videoX替换为实际摄像头节点:
root@RK3568:/home/neardi# v4l2-ctl --all --device /dev/videoX
Driver Info:
Driver name : rkisp_v6
Card type : rkisp_mainpath
Bus info : platform:rkisp1-vir1
Driver version : 2.9.0
Capabilities : 0x84201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name : rkisp1-vir1
Model : rkisp0
Serial :
Bus info : platform:rkisp1-vir1
Media version : 6.1.99
Hardware revision: 0x00000000 (0)
Driver version : 6.1.99
Interface Info:
ID : 0x03000007
Type : V4L Video
Entity Info:
ID : 0x00000006 (6)
Name : rkisp_mainpath
Function : V4L2 I/O
Pad 0x01000009 : 0: Sink
Link 0x0200000a: from remote pad 0x1000004 of entity 'rkisp-isp-subdev' (Unknown V4L2 Sub-Device): Data, Enabled
Priority: 2
Format Video Capture Multiplanar:
Width/Height : 1920/1080
Pixel Format : 'NV12' (Y/UV 4:2:0)
Field : None
Number of planes : 1
Flags :
Colorspace : sRGB
Transfer Function : Rec. 709
YCbCr/HSV Encoding: Rec. 709
Quantization : Full Range
Plane 0 :
Bytes per Line : 1920
Size Image : 1382400
Selection Video Capture: crop, Left 0, Top 0, Width 4224, Height 3136, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 4224, Height 3136, Flags:
Selection Video Output: crop, Left 0, Top 0, Width 4224, Height 3136, Flags:
Selection Video Output: crop_bounds, Left 0, Top 0, Width 4224, Height 3136, Flags:
Image Processing Controls
pixel_rate 0x009f0902 (int64) : min=0 max=1000000000 step=1 default=1000000000 value=432000000 flags=read-only, volatile
5.3. 列出设备控制值
执行以下命令,列出设备控制值,/dev/videoX替换为实际摄像头节点:
v4l2-ctl --list-ctrls --device /dev/videoX
正确输出结果:
neardi@LKD3588:~$ v4l2-ctl --list-ctrls --device /dev/videoX
Image Processing Controls
pixel_rate 0x009f0902 (int64) : min=0 max=1000000000 step=1 default=1000000000 value=432000000 flags=read-only, volatile
执行以下命令,设置像素速率参数:
v4l2-ctl -d /dev/videoX --set-ctrl 'pixel_rate=500000000'
v4l2-ctl -d /dev/videoX --get-ctrl 'pixel_rate'
pixel_rate: 500000000
6. GStreamer命令补充
6.1. 使用GStreamer捕获视频
-
执行以下命令,捕获视频,
/dev/videoX替换为实际摄像头节点:gst-launch-1.0 -vvv v4l2src device=/dev/videoX ! videoconvert ! video/x-raw,format=NV12,width=1920,height=1080 ! autovideosink-v:显示基本的管道信息(如元素创建、连接状态等)。-vv:在 -v 的基础上,增加更多细节(如数据流格式协商、参数配置等)。-vvv:最高级别的详细模式,会输出最完整的调试信息,包括每一步的数据处理过程、缓冲区传递、错误调试细节等,适合排查管道配置或运行时的问题。 -
录制H264格式视频
录制
gst-launch-1.0 v4l2src device=/dev/videoX ! video/x-raw,width=1920,height=1080,framerate=30/1 ! videoconvert ! mpph264enc ! h264parse ! filesink location=output.h264播放
gst-launch-1.0 filesrc location=output.h264 ! h264parse ! mppvideodec ! videoconvert ! autovideosink sync=false
6.2. GStreamer常用核心插件
以下列出部分GStreamer插件,更多GStreamer内容请前往sdk\docs\cn\Linux\Multimedia\Rockchip_User_Guide_Linux_Gstreamer_CN.pdf查看。
| 插件分类 | 插件名称 | 核心功能 | 示例 |
|---|---|---|---|
| 数据源插件 | v4l2src | 读取 Linux 系统下 V4L2 设备(摄像头、视频采集)的原始视频流 | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,eight=1080 ! autovideosink 参数:device(指定设备节点,如/dev/video0) |
| filesrc | 从本地文件读取数据(支持视频、音频、图片等任意格式) | gst-launch-1.0 uridecodebin uri=rtsp://admin:123456@192.168.1.100/stream1 ! autovideosink 参数:uri(指定资源地址) | |
| 视频处理插件 | videoconvert | 转换视频流的像素格式(如 NV12→RGB、YUYV→I420),解决格式不兼容问题 | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=NV12 ! videoconvert ! video/x-raw,format=RGB ! autovideosink 无强制参数,自动适配前后格式 |
| videoscale | 调整视频分辨率(支持任意缩放比例,可指定插值算法) | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=3840,height=2160 ! videoscale ! video/x-raw,width=1920,height=1080 ! autovideosink 参数:method(插值算法,如nearest-neighbor、bilinear) | |
| videocrop | 裁剪视频画面(按像素或比例切除边缘,保留指定区域) | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080 ! videocrop left=100 right=100 top=50 bottom=50 ! autovideosink 参数:left/right/top/bottom(各方向裁剪像素数) | |
| fpsdisplaysink | 实时显示视频帧率(FPS),同时支持视频渲染,方便性能调试 | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1 ! fpsdisplaysink参数:sync(是否同步帧率,false可避免卡顿) | |
| 视频编解码插件 | x264enc | 基于 x264 库的 H.264 视频编码器,支持多种码率控制(CBR/VBR) | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080 ! x264enc bitrate=4000 ! h264parse ! filesink location=output.h264 参数:bitrate(码率,单位 kbps)、speed-preset(编码速度,ultrafast最快,slow质量最好) |
| mpph264enc | ��瑞芯微(RK)平台硬件 H.264 编码器,低 CPU 占用,适合嵌入式设备 | gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,width=1920,height=1080 ! mpph264enc ! h264parse ! filesink location=output.h264 参数:bitrate(码率)、gop-size(关键帧间隔) | |
| h264parse | 解析 H.264 码流,添加或修正 NALU 边界、时间戳,为解码 / 封装做准备 | gst-launch-1.0 filesrc location=input.h264 ! h264parse ! mppvideodec ! autovideosink 无强制参数,自动解析码流 | |
| mppvideodec | 瑞芯微平台硬件视频解码器,支持 H.264/H.265(HEVC)等格式,低延迟 | gst-launch-1.0 filesrc location=input.h265 ! h265parse ! mppvideodec ! autovideosink 参数:low-latency(是否开启低延迟模式,true/false) | |
| 渲染与输出插件 | autovideosink | 自动选择系统最优的视频渲染插件(如 X11→xvimagesink、Wayland→waylandsink) | gst-launch-1.0 v4l2src device=/dev/video0 ! autovideosink 参数:sync(是否同步视频与系统时钟,false可解决卡顿) |
| ximagesink | 在 X11 窗口系统下渲染视频(支持窗口大小调整、全屏) | gst-launch-1.0 v4l2src ! ximagesink fullscreen=true 参数:fullscreen(是否全屏)、window-x/window-y(窗口位置) | |
| filesink | 将任意数据流写入本地文件(视频、音频、编码后码流等) | gst-launch-1.0 v4l2src ! x264enc ! h264parse ! filesink location=output.h264 参数:location(文件路径)、append(是否追加到文件,true/false) |
7. IQ效果文件
这里只介绍简单让3a跑起来的效果文件命名方法,要好的效果需要找业务申请调试
跑3A需要效果文件,记录isp矫正的各种参数。一般后缀是.json文件,抓图isp的yuv图前,保证有正确的效果文件后,运行rkaiq_3A_server &,然后启动抓取isp的NV12图像。
7.1. IQ文件命名方法
.json文件命名方法,以ov13855为例:ov13855_CMK-OT2016-FV1_default.json,注意文件命名规则是:sensor型号_模块名_镜头名.json
对应设备树如下:
rockchip,camera-module-name = "CMK-OT2016-FV1";
rockchip,camera-module-lens-name = "default";
7.2. 查看aiq版本号
执行以下命令查看版本号
neardi@LKD3588:/lib$ strings librkaiq.so | grep -w AIQ
AIQ IPC UNKNOWN CMD: %d
AIQ v6.0x30.4
AIQ: %s
AIQ run with iq bin, iq bin version: %s
7.3. 检查3A是否运行
执行以下命令查看3A是否运行:
ps -aux | grep 3A
正常输出:
neardi@LKD3588:~$ ps -aux | grep 3A
root 327 0.0 0.1 131420 8136 ? Sl 02:09 0:00 /usr/bin/rkaiq_3A_server
neardi 1564 0.0 0.0 9104 2032 pts/0 S+ 02:11 0:00 grep --color=auto 3A
7.4. 3A服务启动
- 由系统初始化脚本触发启动:
neardi@LKD3588:/lib/systemd/system$ cat rkaiq_3A.service
[Unit]
Description=Enable Rockchip camera engine rkaiq
DefaultDependencies=no
Before=rockchip.service
[Service]
Type=forking
ExecStart=/etc/init.d/rkaiq_3A.sh start
ExecStop=/etc/init.d/rkaiq_3A.sh stop
[Install]
WantedBy=sysinit.target
- 系统服务启动后,执行
/etc/init.d/rkaiq_3A.sh脚本,如下:
neardi@LKD3588:/lib/systemd/system$ cat /etc/init.d/rkaiq_3A.sh
#!/bin/bash
start_3A()
{
/usr/bin/rkaiq_3A_server 2>&1 | logger -t rkaiq &
}
stop_3A()
{
killall rkaiq_3A_server || true
}
case "$1" in
start)
start_3A
;;
stop)
stop_3A
;;
reload)
stop_3A
start_3A
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
- 加载IQ配置文件
rkaiq_3A_server扫描/etc/iqfiles/目录下.json配置文件,如ov13855_CMK-OT2016-FV1_default.json。
解析配置文件,提取3A算法的初始化参数:
- AE:初始曝光时间范围、增益范围、目标亮度值;
- AWB:白平衡色温范围(如 2000K~10000K)、增益校准系数;
- AF:对焦区域、步长、搜索策略。
- 建立与ISP/传感器的通信
通过ioctl系统调用与/dev/video10ISP节点绑定,获取ISP内部统计数据:
- AE统计:图像分块亮度均值;
- AWB统计:RGB通道均值,色温估计值;
- AF统计:相位差数据(PD值)或对比度数据;
之后通过/dev/video31注册回调,用于发送3A调整命令(如修改传感器曝光时间、增益)。
完成以上步骤,初始化3A算法,3A服务进入主循环,实时处理图像数据并调整参数。