AHD模拟摄像头
| 维度 | AHD | MIPI | USB 摄像头 |
|---|---|---|---|
| 接口 | 同轴模拟 | CSI-2 | USB 2.0/3.0 |
| 是否需要驱动 | 解码驱动 | sensor driver + ISP | UVC免驱 |
| 延迟 | 中 | ⭐最低 | ⭐中~高 |
| 带宽 | 中 | ⭐最高 | USB限制 |
| 图像质量 | 中 | ⭐最高 | 中(压缩影响) |
| 长距离 | ⭐最强(100m+) | 很差(<30cm) | 中(线缆1~5m) |
| 调试难度 | 中 | ⭐最高 | ⭐最低 |
| 成本 | 中 | 中~高 | ⭐最低 |
延迟对比
| 类型 | 延迟 |
|---|---|
| MIPI | ⭐10~30ms |
| AHD | 30~80ms |
| USB2.0 | 80~150ms |
| USB3.0 | 30~80ms |
AHD 摄像头转接芯片
AHD是模拟摄像头,因此需要AD转换芯片来转换,输出数字信号给到主控进行接收
常见的AHD转MIPI芯片有:
- NVP系列:NVP6188/NVP6324/NVP6158C等
- TP系列:TP2815/TP9950/TP9930/TP2825等
- RN系列:RN6854/RN6752等
AHD 链路本质
AHD摄像头(带ISP)
↓ 模拟信号
AHD解码芯片(如 NVP、TP系列)
↓ 数字视频(BT656 / MIPI)
RK3588 VICAP / V4L2
什么时候可以调曝光?
AHD摄像头支持 UART/I2C 控制
AHD Camera
├── 同轴线(视频)
├── 电源
└── UART / I2C(控制)
AHD解码芯片支持“反向控制”
RK3588
↓
AHD Decoder(TP2825 / NVP6158 等)
↓(同轴)
Camera
Nextchip N4 解码芯片
支持 UTC(同轴控制) + A-CP 协议 的 AHD 摄像头
需要满足以下三个条件
- 支持 UTC(Up The Coax)
- 支持 Nextchip A-CP 协议(重点)
- 摄像头 ISP 支持参数调节
Nextchip ISP 摄像头(推荐)
- OV4689 + NVP2475H(4MP)
- IMX307 + NVP2441H(2MP)
SONYWDR.02PY.SLZD.2543 AHD摄像头图像问题
SONYWDR.02PY.SLZD.2543
从这个型号的命名规则(包含 SONYWDR 和一串自定义编码)来看,它极大概率不是索尼原厂的整机型号,而是国内安防厂商使用索尼传感器(Sensor)后自定的内部编码。

问题总结
❌ 整体发糊(细节不清) ❌ 偏色严重(偏蓝/偏紫) ❌ 对比度低(灰蒙) ❌ 边缘有暗角/遮挡 ❌ 室内灯下颜色不自然
根本原因
- 曝光/增益异常(最主要)
- 白平衡(AWB)跑偏
- 对焦/镜头问题(非常关键)
- WDR / Gamma 设置不对
如何修改
❗摄像头内部参数(OSD / ISP)问题
当前链路: AHD Camera → N4 → RK3588 → V4L2
Neardi没有实现
Neardi 的这个 AHD 文档里确实没有 N4 控制程序,而且是“故意没有”
原因是:❗他们只做了“视频采集”,没有做“摄像头控制”
为什么官方不做 N4 控制?
- N4 是“解码器”,不是 camera driver
- AHD 控制是“私有协议”: 无标准API
- 官方只保证“能出图”
如何自己实现
没有 driver,只能自己写 I2C 控制
调试命令
打开相机并预览
gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink
# gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! autovideosink
Setting pipeline to PAUSED ...
Using mplane plugin for capture
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
0:01:38.5 / 99:99:99.
更换格式
# 尝试 UYVY 格式
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080 ! videoconvert ! autovideosink
# 如果还是紫色,尝试 YUY2 格式
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=1920,height=1080 ! videoconvert ! autovideosink
# 调节亮度
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080 ! videoconvert ! videobalance brightness=0.2 contrast=1.2 saturation=1.1 ! autovideosink
相机调节对比
gst-launch-1.0 调节参数和使用同轴控制(UTC / A-CP)调节参数有什么不同吗
调节参数的本质完全不同。简单来说:GStreamer 是在“修图”,而同轴控制(UTC)是在“改变相机本身”
| 维度 | GStreamer(videobalance) | 同轴控制(UTC / A-CP) |
|---|---|---|
| 调节位置 | RK3588 后处理 | 摄像头 Sensor / ISP |
| 数据阶段 | 已压缩/已成像(YUV) | RAW/ISP内部 |
| 控制方式 | 算法修改像素 | 改寄存器(AE / Gain) |
| 延迟 | 有(软件处理) | 无(源头生效) |
| 是否影响噪点 | ❌ 无法减少 | ✅ 可降低 |
| 是否影响动态范围 | ❌ 不行 | ✅ 可以 |
| 是否可逆 | ❌ 不可逆 | ✅ 可重新采集 |
| 稳定性 | 一般 | 高(硬件级) |
| 开发难度 | 低 | 高(协议) |
查看相机支持的格式
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=UYVY,width=1920,height=1080 ! videoconvert ! autovideosink
neardi@LPA3588:~$ v4l2-ctl -d /dev/video0 --list-formats-ext
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture Multiplanar
[0]: 'NV16' (Y/UV 4:2:2)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[1]: 'NV61' (Y/VU 4:2:2)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[2]: 'NV12' (Y/UV 4:2:0)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[3]: 'NV21' (Y/VU 4:2:0)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[4]: 'YUYV' (YUYV 4:2:2)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[5]: 'YVYU' (YVYU 4:2:2)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[6]: 'UYVY' (UYVY 4:2:2)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
[7]: 'VYUY' (VYUY 4:2:2)
Size: Stepwise 64x64 - 1920x1080 with step 8/8
AHD日志查看
- 信号格式: AHD20_1080P_25P 说明驱动识别到这是一路 AHD 2.0 标准、1080P 分辨率、25 帧/秒的信号。
- 通道识别: ch::0 表示相机连接在第 1 个物理通道上。
- 状态正常: 日志中没有出现 NO SIGNAL 或 UNLOCK,说明转换芯片(如 NVP6158 或 RN6854)已经成功锁定了来自摄像头的模拟信号。
neardi@LPA3588:~$ dmesg | grep -i ahd
[ 204.561017] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.599041] [drv_eq]ch::0 >>> fmt::AHD20_1080P_25P_SINGLE_ENDED
[ 204.599056] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.599064] [drv_coax]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.677413] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.709639] [drv_eq]ch::0 >>> fmt::AHD20_1080P_25P_SINGLE_ENDED
[ 204.709648] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.709654] [drv_coax]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.774117] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.809082] [drv_eq]ch::0 >>> fmt::AHD20_1080P_25P_SINGLE_ENDED
[ 204.809089] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.809093] [drv_coax]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.879185] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.914016] [drv_eq]ch::0 >>> fmt::AHD20_1080P_25P_SINGLE_ENDED
[ 204.914025] [drv_vi]ch::0 >>> fmt::AHD20_1080P_25P
[ 204.914031] [drv_coax]ch::0 >>> fmt::AHD20_1080P_25P
用户态程序直接nextchip通信
可以直接在用户态(Application Level)编写一个程序,越过 V4L2 驱动,直接和 Jaguar1 (NVP6158) 芯片对话
核心难点:找到准确的“寄存器地图”
同轴控制协议(UTC/A-CP)绝对不是一个公开的通用标准,这正是 AHD 调试中最让人头疼的地方。
这就是典型的“行业事实标准”而非“国际技术标准”。
虽然大家都叫 AHD (Analog High Definition),但不同厂家之间的控制协议是互不兼容的:
- 厂家垄断: 这种协议通常是由芯片厂商(如韩国的 Nextchip、中国的 XM/瑞芯 等)私有定义的。你的 Jaguar1 是 Nextchip 的芯片,它使用的是其私有的 A-CP (AHD Coaxial Protocol)。
- 信号加密/编码: UTC 并不是简单的串行数据,它是利用视频信号中的 VBI(垂直消隐期) 间隙,通过特定的电压脉冲或频率调制来传输的。不同厂商定义的波形、起始位和校验码完全不同。
- 寄存器级保密: 芯片手册(Datasheet)通常只发给签约的硬件合作伙伴(NDA)。这也是为什么你在网上很难直接搜到 Jaguar1 寄存器地址的原因。