012、安防NVR/DVR多路编码架构:海思Hi3516与瑞芯微RK3588的ISP与编码协同
012、安防NVR/DVR多路编码架构海思Hi3516与瑞芯微RK3588的ISP与编码协同去年年底接了个项目客户要把老旧的DVR方案从海思Hi3516DV300整体切到瑞芯微RK3588理由是算力不够要上AI。结果板子回来第一天8路1080P预览就卡成PPTCPU占用飙到85%编码器利用率才60%。查了半天问题出在ISP输出格式和编码器输入格式的匹配上——海思的VI通道默认输出NV12RK3588的ISP默认输出NV12但带了个奇怪的stride对齐而编码器那边又要求按16字节对齐。就这么个看似不起眼的差异导致编码器每次都要做一次内存拷贝8路下来带宽直接打满。先聊海思的架构。Hi3516DV300这颗芯片ISP和编码器是紧耦合设计的VIVideo Input通道直接挂VGSVideo Graphics Subsystem做缩放和格式转换然后进VENCVideo Encoder。它的数据通路是ISP - VI - VGS - VENC中间有个关键点VI通道的buffer是硬件管理的支持按帧自动轮转而且VGS可以做到零拷贝的格式转换——只要你的目标格式和源格式在同一个内存池里VGS直接改描述符就行不搬数据。这个设计在安防场景非常实用因为NVR/DVR的典型需求是8路1080P输入同时要出4路CIF子码流和1路主码流海思的VGS可以一条命令链搞定一路画面的多路缩放而且带宽开销极小。瑞芯微这边就完全是另一套思路。RK3588的ISP实际是RKISP3.x输出走的是RGARaster Graphic Acceleration或者直接进VPUVideo Processing Unit的编码器。RGA是个2D图形加速器能做缩放、旋转、格式转换但它的设计初衷是给UI合成用的不是给视频管线用的。问题在于RGA的输入输出格式要求非常严格比如NV12输入要求宽度按16对齐高度按2对齐而且它的stride行字节数计算方式跟海思的VGS不一样——海思是按实际宽度算strideRK3588是按对齐后的宽度算。这就导致你从ISP拿到的buffer如果直接丢给编码器编码器会按自己的对齐规则去读读出来的画面就是斜的或者花屏。我在RK3588上调第一版的时候就是直接ISP输出NV12丢给MPPMedia Process Platform的编码器结果8路里有3路画面是歪的查了半天发现是stride不匹配。海思的VI通道会自动帮你把stride对齐到编码器要求的值RK3588的ISP不会你得自己在RGA或者CPU里做一次拷贝。后来我改成ISP输出NV12_MST多平面格式然后通过RGA做一次格式转换到NV12同时指定输出stride为编码器要求的对齐值问题就解决了。但代价是每路多了一次RGA操作8路下来RGA的负载到了40%左右好在RK3588的RGA有3个核可以并行。再说编码器本身的差异。海思的VENC是硬编码器支持H.264/H.265但它的码控策略比较保守尤其是CBR模式在场景切换剧烈的时候会突然掉帧。RK3588的VPU编码器码控更激进但有个坑它的GOPGroup of Pictures结构默认是IDR帧间隔等于GOP大小不像海思那样支持自适应IDR插入。在安防场景这意味着如果网络丢包导致关键帧丢失海思的方案会在下一个IDR自动恢复RK3588可能要等很久。解决办法是在应用层做强制IDR请求但MPP的接口里这个功能藏得比较深得用MPP_ENC_SET_CFG配合MppEncRcCfg里的gop_mode参数设成GOP_MODE_NORMAL然后手动触发MPP_ENC_SET_IDR_FRAME。还有个容易踩的坑是内存分配。海思的mpp注意海思的mpp是Media Process Platform跟瑞芯微的MPP同名但完全不同的东西内存池是统一管理的你申请buffer的时候指定MMB_VI、MMB_VGS、MMB_VENC这些属性系统会自动做cache一致性管理。RK3588的MPP用的是dma_buf你得自己保证cache同步否则会出现编码出来的画面有随机噪点——尤其是ISP写入buffer后CPU或者RGA读的时候如果没做dma_buf_sync那画面就是花的。我一开始没注意这个调试了三天最后用dma_buf_begin_cpu_access和dma_buf_end_cpu_access包住RGA操作才解决。多路编码的调度策略也完全不同。海思的VENC是硬件多路并行每路独立编码你只需要配置好通道参数硬件自己调度。RK3588的VPU虽然也是多路并行但它的编码器核是共享的如果一路的码率控制参数设置不当比如码率上限设太高会挤占其他路的带宽导致其他路画面质量下降。我做过一个测试8路1080P同时编码如果一路设成4Mbps其他路设成2Mbps结果那路4Mbps的实际码率能跑到5Mbps其他路掉到1.5Mbps。后来我把所有路的rc_mode设成MPP_RC_MODE_CBR并且把max_i_bit_rate和max_p_bit_rate都设成跟目标码率一致才把这个问题压住。再说说ISP和编码器协同的延迟问题。安防场景对延迟敏感尤其是PTZ控制的时候从云台转动到画面更新延迟超过200ms就感觉卡顿。海思的ISP到VENC的延迟大约在40ms左右因为VI通道是零拷贝直通的。RK3588这边ISP输出到RGA再进VPU每级都有buffer排队延迟轻松到80ms以上。我试过用RK3588的ISP直接输出到VPU的mpp_buffer绕过RGA但ISP的输出格式是NV12_MSTVPU编码器不支持必须转。后来发现RK3588的ISP有个rkisp_vir节点可以配置输出NV12非MST但这样会牺牲一些ISP的3A统计功能。权衡之下我选择了保留RGA转换但把RGA的buffer池缩小减少排队延迟最终做到60ms左右勉强能接受。最后说产线调试的经验。海思的方案产线上主要用himm工具直接改寄存器调试方便但风险高改错了直接死机。RK3588的调试工具是rk_mpi_aiq和rkisp_demo可以在线调3A参数但它的日志系统比较啰嗦建议用export RK_LOG_LEVEL2只打错误信息。另外瑞芯微的MPP有个mpp_info命令可以查看编码器状态包括每路的帧率、码率、编码耗时这个对产线测试非常有用海思那边没有直接对应的工具得自己写脚本解析/proc下的统计信息。总结一下我的经验如果项目是纯安防NVR/DVR没有AI需求海思Hi3516系列依然是更稳的选择它的ISP和编码器协同是经过十几年量产验证的坑少。如果一定要上RK3588做AI那就要接受它的架构差异重点做好三件事一是统一stride对齐策略二是管好dma_buf的cache同步三是用MPP的码控参数把多路编码的带宽隔离做好。别指望RK3588能像海思那样开箱即用它的优势在算力不在影像管线你得花时间把管线调顺。

相关新闻

011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度

011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度

011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度 昨晚在台架上调一个环视拼接的案子,客户报了个现象:车速过了60km/h,左右两侧的拼接缝就开始“呼吸”——亮度忽明忽暗,偶尔还闪一下。我第一反应是…

2026/9/29 3:23:32 阅读更多 →
RC电路设计实战:从滤波、延时到信号整形,硬件工程师必懂的核心原理与工程实践

RC电路设计实战:从滤波、延时到信号整形,硬件工程师必懂的核心原理与工程实践

RC电路,这个在硬件工程师面试中几乎必问的基础知识点,你真的理解透彻了吗? 很多工程师在面试时,能背出“RC电路可以滤波、延时、移相”这几个标准答案,但一旦被追问“为什么这个电容值选1uF而不是0.1uF?”…

2026/10/6 15:35:19 阅读更多 →
AI时代生存指南:从认知重塑到人机协作的实践路径

AI时代生存指南:从认知重塑到人机协作的实践路径

1. 从焦虑到行动:一个从业者眼中的AI生存指南 最近和不少同行、朋友聊天,话题总绕不开AI。从ChatGPT的惊艳亮相,到Sora带来的视觉震撼,再到各种AI编程助手、设计工具、写作模型的层出不穷,大家普遍的感受是&#xff1a…

2026/10/8 7:49:05 阅读更多 →

最新新闻

前端图片翻转避坑指南:CSS transform与canvas重绘的选型与实现

前端图片翻转避坑指南:CSS transform与canvas重绘的选型与实现

简介:面向网页前端初学者的图片翻转示例包,围绕 JavaScript 操作 CSS transform、事件监听与 DOM 样式切换展开,演示点击图片实现 180 度翻转并再次点击恢复原状的效果,适合学习交互设计与动效实现的开发者参考,也适合…

2026/10/10 15:44:24 阅读更多 →
MIPSsim实验报告精讲:指令语义、数据通路与三个汇编程序的避坑要点

MIPSsim实验报告精讲:指令语义、数据通路与三个汇编程序的避坑要点

简介:面向计算机系统结构课程学习的 MIPS 指令系统实验报告资源,适合高校本科生或自学处理器架构的初学者。报告基于 MIPSsim 模拟器,覆盖 MIPS 指令语义、寄存器与内存操作、64 位整数求补等典型实验场景,能帮助读者快速掌握 MIP…

2026/10/10 15:44:24 阅读更多 →
告别手改配置:CC Switch 让 Claude Code 模型切换像切输入法一样简单

告别手改配置:CC Switch 让 Claude Code 模型切换像切输入法一样简单

1. 手动改配置的痛苦,相信你也有过先说个场景,你应该也经历过:Claude Code 用得好好的,突然想试试某个新出的开源模型,或者团队里有人分享了一个调优过的模型服务地址,你第一反应是去翻~/.claude底下的配置…

2026/10/10 15:44:24 阅读更多 →
CodeIgniter 4 仓库开发规范完全指南:兼容性策略、编码标准与 FrankenPHP Worker Mode

CodeIgniter 4 仓库开发规范完全指南:兼容性策略、编码标准与 FrankenPHP Worker Mode

后端Web框架 【免费下载链接】CodeIgniter4 Open Source PHP Framework (originally from EllisLab) 项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter4 点击查看 免费下载 CodeIgniter 4 是一个成熟的 PHP 开源全栈框架,其生产代码位于 syste…

2026/10/10 15:44:23 阅读更多 →
编译原理实验核心:词法分析、语法分析与符号表实战指南

编译原理实验核心:词法分析、语法分析与符号表实战指南

简介:电子科技大学编译原理实验完整代码包,面向高校计算机专业学生及编译原理自学者,用于深入理解词法分析、语法分析、语义分析等核心概念,解决理论学习与实验实践脱节的问题,也是课程设计或期末实验的极佳参考。压缩…

2026/10/10 15:44:23 阅读更多 →
编译原理课程实验全流程解析:从词法分析到目标代码优化

编译原理课程实验全流程解析:从词法分析到目标代码优化

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 15:43:22 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →