海思MPP媒体处理平台架构与实践

海思MPP媒体处理平台架构与实践

一、MPP总体架构

海思MPP(Media Process Platform)是基于硬件加速的模块化媒体处理平台,采用分层设计,所有核心操作均由专用硬件完成,CPU仅负责控制和调度。
#mermaid-svg-DDjor5ZXX40xdKxF{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-DDjor5ZXX40xdKxF .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-DDjor5ZXX40xdKxF .error-icon{fill:#552222;}#mermaid-svg-DDjor5ZXX40xdKxF .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-DDjor5ZXX40xdKxF .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-DDjor5ZXX40xdKxF .marker{fill:#333333;stroke:#333333;}#mermaid-svg-DDjor5ZXX40xdKxF .marker.cross{stroke:#333333;}#mermaid-svg-DDjor5ZXX40xdKxF svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-DDjor5ZXX40xdKxF p{margin:0;}#mermaid-svg-DDjor5ZXX40xdKxF .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-DDjor5ZXX40xdKxF .cluster-label text{fill:#333;}#mermaid-svg-DDjor5ZXX40xdKxF .cluster-label span{color:#333;}#mermaid-svg-DDjor5ZXX40xdKxF .cluster-label span p{background-color:transparent;}#mermaid-svg-DDjor5ZXX40xdKxF .label text,#mermaid-svg-DDjor5ZXX40xdKxF span{fill:#333;color:#333;}#mermaid-svg-DDjor5ZXX40xdKxF .node rect,#mermaid-svg-DDjor5ZXX40xdKxF .node circle,#mermaid-svg-DDjor5ZXX40xdKxF .node ellipse,#mermaid-svg-DDjor5ZXX40xdKxF .node polygon,#mermaid-svg-DDjor5ZXX40xdKxF .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-DDjor5ZXX40xdKxF .rough-node .label text,#mermaid-svg-DDjor5ZXX40xdKxF .node .label text,#mermaid-svg-DDjor5ZXX40xdKxF .image-shape .label,#mermaid-svg-DDjor5ZXX40xdKxF .icon-shape .label{text-anchor:middle;}#mermaid-svg-DDjor5ZXX40xdKxF .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-DDjor5ZXX40xdKxF .rough-node .label,#mermaid-svg-DDjor5ZXX40xdKxF .node .label,#mermaid-svg-DDjor5ZXX40xdKxF .image-shape .label,#mermaid-svg-DDjor5ZXX40xdKxF .icon-shape .label{text-align:center;}#mermaid-svg-DDjor5ZXX40xdKxF .node.clickable{cursor:pointer;}#mermaid-svg-DDjor5ZXX40xdKxF .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-DDjor5ZXX40xdKxF .arrowheadPath{fill:#333333;}#mermaid-svg-DDjor5ZXX40xdKxF .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-DDjor5ZXX40xdKxF .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-DDjor5ZXX40xdKxF .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DDjor5ZXX40xdKxF .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-DDjor5ZXX40xdKxF .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DDjor5ZXX40xdKxF .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-DDjor5ZXX40xdKxF .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-DDjor5ZXX40xdKxF .cluster text{fill:#333;}#mermaid-svg-DDjor5ZXX40xdKxF .cluster span{color:#333;}#mermaid-svg-DDjor5ZXX40xdKxF div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-DDjor5ZXX40xdKxF .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-DDjor5ZXX40xdKxF rect.text{fill:none;stroke-width:0;}#mermaid-svg-DDjor5ZXX40xdKxF .icon-shape,#mermaid-svg-DDjor5ZXX40xdKxF .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-DDjor5ZXX40xdKxF .icon-shape p,#mermaid-svg-DDjor5ZXX40xdKxF .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-DDjor5ZXX40xdKxF .icon-shape .label rect,#mermaid-svg-DDjor5ZXX40xdKxF .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-DDjor5ZXX40xdKxF .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-DDjor5ZXX40xdKxF .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-DDjor5ZXX40xdKxF :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 应用层
MPP核心层
驱动层
硬件层
摄像头Sensor
麦克风
喇叭
显示器/HDMI
音视频编解码硬件
图形缩放硬件
运动估计硬件
VI驱动
AI驱动
VPSS驱动
VENC驱动
VDEC驱动
VO驱动
AO驱动
Proc调试节点

/proc/umap/*
视频输入

采集/裁剪/翻转
音频输入

采样/VQE处理
视频处理核心

3DNR/缩放/锐化
几何畸变校正

鱼眼/透视校正
数字防抖

陀螺仪/GME防抖
区域叠加

OSD/LOGO/马赛克
视频编码

H.264/H.265
JPEG编码

抓拍/MJPEG
码率控制

CBR/VBR/AVBR
视频解码

H.264/H.265/MJPEG
视频解码固件
音频编码

G.711/G.726
音频解码
音频编解码器
视频输出

显示/BT1120
音频输出

播放
视频分析

运动检测/遮挡检测
音视频同步
用户业务

IPC/NVR/直播
MPP SDK API

二、核心业务流程

1. IPC视频采集编码主流程(最常用)

这是安防IPC、直播摄像头等产品的核心数据通路:
#mermaid-svg-8fkCvKwfh4NP6dg4{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-8fkCvKwfh4NP6dg4 .error-icon{fill:#552222;}#mermaid-svg-8fkCvKwfh4NP6dg4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8fkCvKwfh4NP6dg4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .marker.cross{stroke:#333333;}#mermaid-svg-8fkCvKwfh4NP6dg4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8fkCvKwfh4NP6dg4 p{margin:0;}#mermaid-svg-8fkCvKwfh4NP6dg4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .cluster-label text{fill:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .cluster-label span{color:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .cluster-label span p{background-color:transparent;}#mermaid-svg-8fkCvKwfh4NP6dg4 .label text,#mermaid-svg-8fkCvKwfh4NP6dg4 span{fill:#333;color:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .node rect,#mermaid-svg-8fkCvKwfh4NP6dg4 .node circle,#mermaid-svg-8fkCvKwfh4NP6dg4 .node ellipse,#mermaid-svg-8fkCvKwfh4NP6dg4 .node polygon,#mermaid-svg-8fkCvKwfh4NP6dg4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .rough-node .label text,#mermaid-svg-8fkCvKwfh4NP6dg4 .node .label text,#mermaid-svg-8fkCvKwfh4NP6dg4 .image-shape .label,#mermaid-svg-8fkCvKwfh4NP6dg4 .icon-shape .label{text-anchor:middle;}#mermaid-svg-8fkCvKwfh4NP6dg4 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .rough-node .label,#mermaid-svg-8fkCvKwfh4NP6dg4 .node .label,#mermaid-svg-8fkCvKwfh4NP6dg4 .image-shape .label,#mermaid-svg-8fkCvKwfh4NP6dg4 .icon-shape .label{text-align:center;}#mermaid-svg-8fkCvKwfh4NP6dg4 .node.clickable{cursor:pointer;}#mermaid-svg-8fkCvKwfh4NP6dg4 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .arrowheadPath{fill:#333333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8fkCvKwfh4NP6dg4 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-8fkCvKwfh4NP6dg4 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8fkCvKwfh4NP6dg4 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-8fkCvKwfh4NP6dg4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .cluster text{fill:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 .cluster span{color:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8fkCvKwfh4NP6dg4 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-8fkCvKwfh4NP6dg4 rect.text{fill:none;stroke-width:0;}#mermaid-svg-8fkCvKwfh4NP6dg4 .icon-shape,#mermaid-svg-8fkCvKwfh4NP6dg4 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-8fkCvKwfh4NP6dg4 .icon-shape p,#mermaid-svg-8fkCvKwfh4NP6dg4 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-8fkCvKwfh4NP6dg4 .icon-shape .label rect,#mermaid-svg-8fkCvKwfh4NP6dg4 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-8fkCvKwfh4NP6dg4 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-8fkCvKwfh4NP6dg4 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-8fkCvKwfh4NP6dg4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Sensor输出RAW/YUV
VI采集

裁剪/翻转/格式转换
VPSS预处理

3DNR降噪/缩放/锐化
GDC几何校正

鱼眼畸变校正
DIS数字防抖

运动补偿
REGION叠加

时间戳/LOGO/马赛克
VENC视频编码

H.264/H.265
RC码率控制

动态调整QP/帧率
输出ES码流

封装RTSP/FLV
JPEGE编码

抓拍图片/MJPEG

2. 视频解码显示流程

适用于NVR、播放器等产品:
#mermaid-svg-YyYkDGsqytmyya1B{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-YyYkDGsqytmyya1B .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-YyYkDGsqytmyya1B .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-YyYkDGsqytmyya1B .error-icon{fill:#552222;}#mermaid-svg-YyYkDGsqytmyya1B .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-YyYkDGsqytmyya1B .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-YyYkDGsqytmyya1B .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-YyYkDGsqytmyya1B .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-YyYkDGsqytmyya1B .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-YyYkDGsqytmyya1B .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-YyYkDGsqytmyya1B .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-YyYkDGsqytmyya1B .marker{fill:#333333;stroke:#333333;}#mermaid-svg-YyYkDGsqytmyya1B .marker.cross{stroke:#333333;}#mermaid-svg-YyYkDGsqytmyya1B svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-YyYkDGsqytmyya1B p{margin:0;}#mermaid-svg-YyYkDGsqytmyya1B .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-YyYkDGsqytmyya1B .cluster-label text{fill:#333;}#mermaid-svg-YyYkDGsqytmyya1B .cluster-label span{color:#333;}#mermaid-svg-YyYkDGsqytmyya1B .cluster-label span p{background-color:transparent;}#mermaid-svg-YyYkDGsqytmyya1B .label text,#mermaid-svg-YyYkDGsqytmyya1B span{fill:#333;color:#333;}#mermaid-svg-YyYkDGsqytmyya1B .node rect,#mermaid-svg-YyYkDGsqytmyya1B .node circle,#mermaid-svg-YyYkDGsqytmyya1B .node ellipse,#mermaid-svg-YyYkDGsqytmyya1B .node polygon,#mermaid-svg-YyYkDGsqytmyya1B .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-YyYkDGsqytmyya1B .rough-node .label text,#mermaid-svg-YyYkDGsqytmyya1B .node .label text,#mermaid-svg-YyYkDGsqytmyya1B .image-shape .label,#mermaid-svg-YyYkDGsqytmyya1B .icon-shape .label{text-anchor:middle;}#mermaid-svg-YyYkDGsqytmyya1B .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-YyYkDGsqytmyya1B .rough-node .label,#mermaid-svg-YyYkDGsqytmyya1B .node .label,#mermaid-svg-YyYkDGsqytmyya1B .image-shape .label,#mermaid-svg-YyYkDGsqytmyya1B .icon-shape .label{text-align:center;}#mermaid-svg-YyYkDGsqytmyya1B .node.clickable{cursor:pointer;}#mermaid-svg-YyYkDGsqytmyya1B .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-YyYkDGsqytmyya1B .arrowheadPath{fill:#333333;}#mermaid-svg-YyYkDGsqytmyya1B .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-YyYkDGsqytmyya1B .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-YyYkDGsqytmyya1B .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YyYkDGsqytmyya1B .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-YyYkDGsqytmyya1B .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YyYkDGsqytmyya1B .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-YyYkDGsqytmyya1B .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-YyYkDGsqytmyya1B .cluster text{fill:#333;}#mermaid-svg-YyYkDGsqytmyya1B .cluster span{color:#333;}#mermaid-svg-YyYkDGsqytmyya1B div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-YyYkDGsqytmyya1B .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-YyYkDGsqytmyya1B rect.text{fill:none;stroke-width:0;}#mermaid-svg-YyYkDGsqytmyya1B .icon-shape,#mermaid-svg-YyYkDGsqytmyya1B .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-YyYkDGsqytmyya1B .icon-shape p,#mermaid-svg-YyYkDGsqytmyya1B .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-YyYkDGsqytmyya1B .icon-shape .label rect,#mermaid-svg-YyYkDGsqytmyya1B .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-YyYkDGsqytmyya1B .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-YyYkDGsqytmyya1B .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-YyYkDGsqytmyya1B :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入ES码流

H.264/H.265
VDEC视频解码

输出YUV数据
VPSS后处理

缩放/裁剪/旋转
REGION叠加OSD
VO视频输出

HDMI/LCD显示

3. 音频采集播放流程

#mermaid-svg-eFx7dHr3JP9713NE{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-eFx7dHr3JP9713NE .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-eFx7dHr3JP9713NE .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-eFx7dHr3JP9713NE .error-icon{fill:#552222;}#mermaid-svg-eFx7dHr3JP9713NE .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eFx7dHr3JP9713NE .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-eFx7dHr3JP9713NE .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eFx7dHr3JP9713NE .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eFx7dHr3JP9713NE .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-eFx7dHr3JP9713NE .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eFx7dHr3JP9713NE .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eFx7dHr3JP9713NE .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eFx7dHr3JP9713NE .marker.cross{stroke:#333333;}#mermaid-svg-eFx7dHr3JP9713NE svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eFx7dHr3JP9713NE p{margin:0;}#mermaid-svg-eFx7dHr3JP9713NE .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eFx7dHr3JP9713NE .cluster-label text{fill:#333;}#mermaid-svg-eFx7dHr3JP9713NE .cluster-label span{color:#333;}#mermaid-svg-eFx7dHr3JP9713NE .cluster-label span p{background-color:transparent;}#mermaid-svg-eFx7dHr3JP9713NE .label text,#mermaid-svg-eFx7dHr3JP9713NE span{fill:#333;color:#333;}#mermaid-svg-eFx7dHr3JP9713NE .node rect,#mermaid-svg-eFx7dHr3JP9713NE .node circle,#mermaid-svg-eFx7dHr3JP9713NE .node ellipse,#mermaid-svg-eFx7dHr3JP9713NE .node polygon,#mermaid-svg-eFx7dHr3JP9713NE .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eFx7dHr3JP9713NE .rough-node .label text,#mermaid-svg-eFx7dHr3JP9713NE .node .label text,#mermaid-svg-eFx7dHr3JP9713NE .image-shape .label,#mermaid-svg-eFx7dHr3JP9713NE .icon-shape .label{text-anchor:middle;}#mermaid-svg-eFx7dHr3JP9713NE .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-eFx7dHr3JP9713NE .rough-node .label,#mermaid-svg-eFx7dHr3JP9713NE .node .label,#mermaid-svg-eFx7dHr3JP9713NE .image-shape .label,#mermaid-svg-eFx7dHr3JP9713NE .icon-shape .label{text-align:center;}#mermaid-svg-eFx7dHr3JP9713NE .node.clickable{cursor:pointer;}#mermaid-svg-eFx7dHr3JP9713NE .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-eFx7dHr3JP9713NE .arrowheadPath{fill:#333333;}#mermaid-svg-eFx7dHr3JP9713NE .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eFx7dHr3JP9713NE .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eFx7dHr3JP9713NE .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eFx7dHr3JP9713NE .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-eFx7dHr3JP9713NE .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eFx7dHr3JP9713NE .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-eFx7dHr3JP9713NE .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eFx7dHr3JP9713NE .cluster text{fill:#333;}#mermaid-svg-eFx7dHr3JP9713NE .cluster span{color:#333;}#mermaid-svg-eFx7dHr3JP9713NE div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eFx7dHr3JP9713NE .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-eFx7dHr3JP9713NE rect.text{fill:none;stroke-width:0;}#mermaid-svg-eFx7dHr3JP9713NE .icon-shape,#mermaid-svg-eFx7dHr3JP9713NE .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eFx7dHr3JP9713NE .icon-shape p,#mermaid-svg-eFx7dHr3JP9713NE .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-eFx7dHr3JP9713NE .icon-shape .label rect,#mermaid-svg-eFx7dHr3JP9713NE .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eFx7dHr3JP9713NE .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-eFx7dHr3JP9713NE .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-eFx7dHr3JP9713NE :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 麦克风输入
ACODEC模数转换
AI采集

VQE降噪/AGC
AENC编码

G.711/G.726
输出音频码流
输入音频码流
ADEC解码
AO输出
ACODEC数模转换
喇叭播放

三、快速掌握MPP的五阶段实践法

结合proc调试节点,推荐采用"架构先行-最小验证-工具精通-模块深入-问题优化"的学习路径,可在2周内达到熟练使用水平。

阶段1:架构认知与数据流理解(1天)

核心目标:建立模块化思维,理清数据流向

  1. 记忆核心模块功能
    • 输入类:VI(视频采集)、AI(音频采集)
    • 处理类:VPSS(视频处理核心,90%预处理在此完成)、GDC(几何校正)、DIS(防抖)、REGION(OSD)
    • 编码类:VENC(H.264/H.265)、JPEGE(JPEG/MJPEG)、RC(码率控制)
    • 解码类:VDEC(视频解码)、ADEC(音频解码)
    • 输出类:VO(视频显示)、AO(音频播放)
  2. 理解MPP设计思想
    • 硬件加速:所有核心操作由硬件完成,CPU仅做控制
    • 模块化:每个模块独立配置,通过绑定关系连接
    • 零拷贝:模块间通过物理地址传递数据,避免内存拷贝

阶段2:最小系统验证(2天)

核心目标:跑通最基础的视频采集编码流程

  1. 环境准备
    • 搭建交叉编译环境,编译MPP SDK的sample程序
    • 连接开发板sensor和串口,确保系统正常启动
  2. 跑通Hello World
    • 运行sample_venc:单路VI采集→VPSS→VENC编码H.265码流保存到文件
    • 运行sample_vio:VI采集→VPSS→VO直接显示预览
  3. 基础参数修改
    • 修改分辨率(720p/1080p)、帧率(25/30fps)、码率(2M/4M)
    • 验证修改后的码流和预览效果

阶段3:调试工具精通(3天)

核心目标 :熟练使用proc节点定位基础问题

这是MPP调试最核心的技能,文档中详细列出了所有模块的proc节点和参数说明。

核心proc节点关键参数表

模块 关键参数 用途
VENC sendquery_oklost_intframe_rate 查看编码帧率、丢帧情况
VPSS recv_picsend_okframe_rate 查看VPSS处理帧率、输入输出计数
VI int_cntvb_faillost_int 查看采集帧率、VB申请失败、中断丢失
RC inst_brreal_bitstart_qp 查看瞬时码率、实际码率、QP值
VO int_ratebuf_empty_cnt 查看显示帧率、缓冲区空的次数

基础调试练习

  • 故意不释放码流,观察VENC的buf_full计数增加
  • 设置错误分辨率,查看VI的lost_intcc_err_cnt变化
  • 对比不同码率下RC的inst_br波动情况

阶段4:核心模块深入实践(1周)

核心目标:掌握VI、VPSS、VENC三大核心模块的参数配置

  1. VI模块深入
    • 配置不同输入接口(MIPI/BT1120)
    • 调试采集帧率、裁剪、水平/垂直翻转
    • 解决VI常见问题:丢帧、花屏、色彩异常
  2. VPSS模块深入
    • 调整3DNR空域/时域降噪强度,对比画质效果
    • 实现一路输入多路不同分辨率输出
    • 配置LDC畸变校正和鱼眼校正
  3. VENC模块深入
    • 对比CBR/VBR/AVBR三种码率控制模式的效果
    • 调整GOP大小、I帧间隔、QP范围
    • 配置ROI感兴趣区域编码
    • 解决码率波动大、超大帧问题
  4. REGION模块实践
    • 叠加文字OSD、图片LOGO、马赛克遮挡
    • 实现动态更新OSD内容

阶段5:问题定位与性能优化(持续)

核心目标:掌握常见问题定位方法和系统优化技巧

  1. 标准问题定位流程
    • 丢帧问题 :从后往前查(VENC→VPSS→VI),看哪个模块的lost计数增加
    • 码率异常 :查看RC的inst_brreal_bit,检查码率配置和超大帧阈值
    • 画质差:先调VPSS的3DNR参数,再调VENC的QP值和码率
    • 花屏问题:检查VI时序配置、VB缓冲区大小
  2. 系统性能优化
    • 合理配置VB缓冲区大小,避免vb_fail
    • 优化VENC的超大帧处理参数,减少I帧码率峰值
    • 复用VPSS输出,避免重复处理同一帧数据
    • 关闭不需要的模块,节省硬件资源

四、学习建议

  1. 优先使用sample程序:基于SDK提供的sample进行修改,避免从零开始
  2. 熟读对应模块文档:海思MPP文档非常详细,遇到问题先查对应章节
  3. 多做对比实验:通过修改参数对比效果,直观理解参数含义
  4. 建立调试笔记:记录常见问题的现象、定位方法和解决方案
相关推荐
treesforest2 小时前
自媒体账号限流排查指南:从风控算法视角看IP纯净度与网络隔离
网络·tcp/ip·ip·媒体
EasyDSS9 小时前
私有化视频会议系统/企业级融媒体平台EasyDSS全场景一体化协同赋能企业高效数字化办公
媒体
音乐宝贝家10 小时前
吉他桶型技术解析:GA桶 vs D桶 vs OM桶——入门弹唱选哪个
新媒体运营·音视频·业界资讯·媒体·材质·零售·内容运营
音乐宝贝家1 天前
吉他面板材质怎么选?云杉单板面单吉他配置深度解析
数据库·新媒体运营·产品运营·媒体·材质·内容运营
酉鬼女又兒3 天前
零基础入门计算机网络:点对点协议PPP、媒体接入控制基本概念、静态划分信道技术、CSMA/CD与CSMA/CA协议全面详解
服务器·网络·网络协议·计算机网络·职场和发展·求职招聘·媒体
EasyDSS3 天前
企业级私有化视频会议平台企业级融媒体平台EasyDSS,能同时做这几件事的国内没几个!
媒体
ZC跨境爬虫4 天前
跟着 MDN 学CSS day_51:支持旧浏览器的布局策略
前端·css·html·tensorflow·媒体
2601_957888564 天前
分布式新媒体架构:短视频矩阵系统的技术痛点、算法规则与效率优化实践
分布式·架构·媒体
2601_957884844 天前
分布式媒体矩阵系统的任务调度架构:高并发分发队列与背压控制控制实践
分布式·矩阵·媒体