跳到主要内容

OS04A10 / OV13855 MIPI 摄像头使用指南

适用范围:本文提供了在 LKD3576、LKD3588、LKD3562、LKB1126BP 系列设备上使用 OV13855;在 LKD3588、LKB1126BP、HI3403、HI3519 系列设备上使用 os04a10 摄像头的使用方法。

1. 模组介绍

在开始操作前,请务必确认一下基础信息,避免硬件损坏或功能异常:

摄像头型号分辨率接口类型资料
os04a10400万像素30Pin 0.5mm 间距 FPC 插座os04a10 资料
ov138551300万像素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文件打开。设置Formatyvu420Width1920Height1080。此时,就可以看到摄像头图像了。

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

比如,上面的输出表示摄像头支持UYVYNV16NV12NM12等格式,我们选择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捕获视频

  1. 执行以下命令,捕获视频,/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:最高级别的详细模式,会输出最完整的调试信息,包括每一步的数据处理过程、缓冲区传递、错误调试细节等,适合排查管道配置或运行时的问题。

  2. 录制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服务启动

  1. 由系统初始化脚本触发启动:
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
  1. 系统服务启动后,执行/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
  1. 加载IQ配置文件

rkaiq_3A_server扫描/etc/iqfiles/目录下.json配置文件,如ov13855_CMK-OT2016-FV1_default.json

解析配置文件,提取3A算法的初始化参数:

  • AE:初始曝光时间范围、增益范围、目标亮度值;
  • AWB:白平衡色温范围(如 2000K~10000K)、增益校准系数;
  • AF:对焦区域、步长、搜索策略。
  1. 建立与ISP/传感器的通信

通过ioctl系统调用与/dev/video10ISP节点绑定,获取ISP内部统计数据:

  • AE统计:图像分块亮度均值;
  • AWB统计:RGB通道均值,色温估计值;
  • AF统计:相位差数据(PD值)或对比度数据;

之后通过/dev/video31注册回调,用于发送3A调整命令(如修改传感器曝光时间、增益)。

完成以上步骤,初始化3A算法,3A服务进入主循环,实时处理图像数据并调整参数。