11. 海思 MPP 平台的系统架构是什么VI、VPSS、VENC 三者之间的关系和数据流向是怎 样的答MPP 是海思提供的媒体软件处理平台屏蔽芯片底层硬件细节向应用提供 MPI媒体处理接口API。系统架构分四层硬件层Hi35xx 芯片外围器件、OS 层Linux、MPP层VI/VPSS/VENC 等模块、应用层用户开发的软件系统。数据流向VI视频输入通过 MIPI CSI 接口从 IMX586 采集 RAW Bayer 图像进入 VPSS视频处理子系统进行预处理去噪、缩放、锐化、畸变校正再送入 VENC视频编码输出 H.264/H.265 码流。12. MPP 系统中视频缓存池VB Pool的作用是什么在 Hi3516 上如何合理配置 VB 块大小和数量答VB Pool 是内存池提供大块物理连续内存供 VI、VPSS 等模块使用避免频繁分配释放导致内存碎片。配置 VB 块大小和数量需要平衡内存占用和帧率稳定性。之前遇到编码延迟从 200ms 降到 80ms就是调整 VB 块大小与编码图像尺寸匹配和缓存块数量保证流水线不阻塞实现的。【补充】VB PoolVideo Buffer Pool是海思 MPP预先申请的一组连续物理内存用来存放 VI、VPSS、VENC之间传递的图像帧。作用主要是避免视频运行过程中频繁申请和释放大块内存让 VI、VPSS、VENC共享图像缓冲区减少内存复制保证高分辨率、多路视频处理时的实时性。典型流程VB Pool分配图像块 ↓ VI采集一帧并写入VB ↓ VPSS读取并处理 ↓ VENC读取并编码 ↓ 所有模块释放后VB块回到池中复用VB块大小如何配置块大小由以下参数决定分辨率像素格式如 YUV420、RAW10位宽stride和内存对齐是否使用压缩格式。例如1920×1080的 YUV420图像理论大小为1920 × 1080 × 1.5 ≈ 3 MB但实际配置还要考虑宽高对齐、stride和压缩头不能直接写死。应调用海思 SDK提供的图像缓冲区大小计算接口再把结果配置给blk_size。概念示例vb_cfg.common_pool[0].blk_sizeget_pic_buffer_size(1920,1080,PIXEL_FORMAT_YUV420,...);vb_cfg.common_pool[0].blk_cnt8;不同 SDK版本的计算函数名称可能不同应以 Hi3516CV610 SDK头文件和 sample代码为准。VB块数量如何配置数量要覆盖各模块同时占用的帧数VI缓存 VPSS处理缓存 VENC编码缓存 安全余量例如单路1080P编码可以先配置约810块再根据运行情况调整块数太少可能出现获取 VB失败、丢帧、卡顿或无图。块数太多占用过多连续物理内存导致系统可用内存减少。多分辨率时通常建立多个 PoolPool 01080P主码流约3 MB/块 Pool 1640×360子码流约0.35 MB/块 Pool 2抓图或其他专用缓存面试总结VB Pool是 VI、VPSS和 VENC之间共享的视频帧缓存池通过预分配连续物理内存实现帧复用和少拷贝。块大小根据最大分辨率、像素格式、位宽、对齐和压缩方式使用厂家接口计算块数量根据流水线上同时占用的帧数并留出一定余量配置。实际运行中再根据 VB不足、丢帧情况和内存占用进行调整。13. VI 模块的“在线模式”和“离线模式”有什么区别项目中用哪种为什么答在线模式VI 不写 DDR直接把数据流送给 VPSS延迟极低但灵活性差离线模式VI 先写数据到 DDRVPSS 从 DDR 读取灵活性高但延迟增加。执法仪需要视频同步编码和网络传输通常用离线模式因为需要 VPSS 将同一路图像缩放成多路不同分辨率主码流存储子码流网传。【补充】VI的在线、离线模式核心区别是VI输出的图像是否先写入 DDR。在线模式Sensor → VI/ISP → VPSS → VENC 不经过DDR中转VI生成图像后直接交给 VPSS延迟低DDR带宽和内存占用小适合单路实时预览、编码和低延迟推流灵活性较低不方便应用直接获取 VI原始帧。离线模式Sensor → VI/ISP → DDR中的VB缓存 → VPSS → VENCVI先把图像写入 VB缓存再由 VPSS读取可以获取、保存或分析 VI输出帧方便多模块复用和调试支持更灵活的处理流程会增加 DDR读写带宽、缓存占用和处理延迟。14. VPSS 支持哪些图像处理功能在项目中你用了哪些答VPSS主要承担图像缩放、裁剪、格式转换、帧率控制和多通道分流。项目中我用它将 VI的一路图像转换为不同分辨率和帧率分别送给主码流、子码流和抓图通道从而避免 Sensor重复采集。【补充】VPSS视频处理子系统位于 VI和 VENC之间主要负责对 VI输出的图像进行处理和多通道分发。常见功能包括图像缩放裁剪多通道输出帧率控制像素格式转换降噪和图像增强镜像、翻转等处理将同一输入转换成不同分辨率分别用于主码流、子码流和抓图。具体是否支持旋转、畸变校正等功能需要以 Hi3516CV610的 MPP接口为准部分功能可能由 VI、VGS或 GDC模块完成而不是 VPSS。项目中可以这样回答项目中主要使用了 VPSS的缩放、多通道输出和帧率控制。VI输入一路高分辨率图像后VPSS主通道保持较高分辨率送给 VENC生成主码流子通道将图像缩小并降低帧率生成低码率子码流用于远程预览另外保留一个通道用于抓图或算法处理。例如VI输出1920×108030 fps ↓ VPSS ├─ 通道01920×108030 fps → H.265主码流 ├─ 通道1640×36015 fps → H.264子码流 └─ 通道2指定分辨率 → 抓图或算法面试总结VPSS主要承担图像缩放、裁剪、格式转换、帧率控制和多通道分流。项目中我用它将 VI的一路图像转换为不同分辨率和帧率分别送给主码流、子码流和抓图通道从而避免 Sensor重复采集。15. VENC 编码通道如何接收 VPSS 输入的图像如何配置编码参数码率、帧率、GOP项目中先创建 VENC通道并启动接收再通过SYS_Bind将 VPSS输出通道绑定到 VENC输入MPP会自动完成图像传递。编码参数在创建 VENC通道时配置包括 H.264/H.265、分辨率、CBR或VBR、目标码率、源帧率、目标帧率和 GOP。比如1080P、25帧的 H.265主码流配置约24 MbpsGOP设为50即约2秒一个关键帧。最后应用程序从 VENC通道循环获取并释放编码码流。【补充】VENC接收 VPSS图像通常有两种方式。1. 系统绑定——项目常用先创建 VPSS和 VENC通道然后通过 MPP绑定接口连接VPSS通道 → VENC编码通道概念代码ot_mpp_chn src;ot_mpp_chn dst;src.mod_idOT_ID_VPSS;src.dev_idvpss_grp;src.chn_idvpss_chn;dst.mod_idOT_ID_VENC;dst.dev_id0;dst.chn_idvenc_chn;ss_mpi_sys_bind(src,dst);绑定后VPSS输出的图像由 MPP内部自动送给 VENC不需要应用层逐帧复制。应用程序只需从 VENC获取编码码流。2. 手动送帧应用程序先从 VPSS获取图像再调用 VENC送帧接口VPSS_GetChnFrame() ↓ VENC_SendFrame() ↓ VPSS_ReleaseChnFrame()这种方式适合需要在编码前进行算法处理或修改图像的场景但处理流程和资源管理更复杂。编码参数配置创建 VENC通道时需要配置编码类型H.264、H.265或 JPEG分辨率必须与 VPSS输出分辨率匹配码率控制CBR、VBR或 AVBR目标码率源帧率和目标帧率GOP长度Profile、码流缓冲区等参数。例如1080P实时编码可以配置编码格式H.265 分辨率1920×1080 源帧率25 fps 目标帧率25 fps 码率模式CBR 目标码率20484096 kbit/s GOP5025 fps、GOP为50表示每50帧产生一个关键帧也就是大约每2秒一个 I帧关键帧间隔 GOP ÷ 帧率 50 ÷ 25 2秒参数选择原则码率越高画质越好但网络和存储压力越大GOP越小关键帧越频繁起播和错误恢复更快但码率更高GOP越大压缩效率更高但拖动、起播和丢包恢复较慢目标帧率不能高于 VPSS实际输出帧率。面试回答项目中先创建 VENC通道并启动接收再通过SYS_Bind将 VPSS输出通道绑定到 VENC输入MPP会自动完成图像传递。编码参数在创建 VENC通道时配置包括 H.264/H.265、分辨率、CBR或VBR、目标码率、源帧率、目标帧率和 GOP。比如1080P、25帧的 H.265主码流配置约24 MbpsGOP设为50即约2秒一个关键帧。最后应用程序从 VENC通道循环获取并释放编码码流。16. 视频编码过程中遇到花屏、卡顿或编码延迟突然增大如何排查答按顺序排查第一确认摄像头输出正常v4l2-ctl --stream-mmap --stream-count1000测试观察dmesg有无buffer queue underrun第二步检查 VPSS 通道绑定关系用memdump分析编码器输入帧第三步用tcpdump抓 RTP 封包看序列号是否连续。17. MPP 系统初始化需要做哪些工作为什么必须先初始化 VB Pool 才能启动 VI参数准备VI-VPSS-VENC基础参数初始化分配VBVI初始化VI必须在 VB初始化之后启动因为采集到的每帧图像都需要从 VB Pool取得连续物理缓冲区没有 VBVI就无法保存和传递图像。18. 如何通过调试节点查看 VI 的工作状态帧率异常时如何调整 settle time答在/sys/kernel/debug/mpp/vi节点查看当前或上次工作状态CSI_TOP 和 CSI_ISP 对应工作频率input行显示 CSI 接收到的图像尺寸和格式output行显示输出尺寸和格式最后一行显示平均帧间隔、最大帧间隔、最小帧间隔可以计算帧率。调 整 settle time 可 以 通 过 MIPI 子 设 备 的settle_time节 点 在 线 修 改 路 径 类 似/sys/devices/platform/soc/5800800.vind/5810100.mipiecho增大值直到不出图再取略低于最大值的数值即可调整范围 0x00-0xff。19. MPP 的音频处理模块AI/AENC如何与视频流同步音频卡顿或杂音怎么排查答音频通过 AI音频输入采集后经 AENC音频编码得到 AAC/MP3 码流与视频共用时间基准实现同步每帧 PTS 时间戳对齐。音频问题排查用示波器抓 I2S 时钟信号看是否被 WiFi 模块干扰调整音频采样率48kHz→44.1kHz匹配设备能力检查 I2S 时钟相位和位时钟BCLK频率是否正常用aplay -l确认声卡设备是否正确。20. VPSS 通道绑定关系和缩放配置如何修改主码流分辨率切换时需要重建所有通道吗答VPSS 支持HI_MPI_VPSS_GetChnAttr和SetChnAttr接口动态调整通道属性。切换主码流分辨率时不需要完全销毁重建整个 Group——可以通过动态调整 VPSS 通道的缩放参数实现平滑切换同时保持子码流通道固定避免频繁重建导致远程预览中断。
阅读完成 · 觉得有帮助?