MTStream SDK 开发者手册
什么是 MTStream SDK ?
MTStream SDK 是专为 摩尔线程长江 SoC(M1000) 平台设计的高性能多媒体处理软件开发包。它通过插件的形式,封装了底层硬件编解码器、图像处理单元的复杂操作,提供简单易用的插件。 目前支持的硬件形态是 MTT E300 AI 计算模组 (AIModule) 。
工作原理
MTStream SDK 基于 GStreamer Pipeline 架构,采用数据流驱动模型,允许开发者以模块化方式连接输入源(SRC)、处理单元(DECODE/INFER/OSD/ENCODE)和输出目标(SINK)。
所有中间帧数据通过 Linux 共享内存 DMABUF(Direct Memory Access Buffer) 在硬件间共享,避免内存开销,实现数据高速流转。
同时,MTStream SDK 深度集成以下 M1000 的硬件引擎,确保每一步都由专用硬件完成,最大化吞吐量并降低 CPU 负载:
- VPU: H.264/H.265 硬件编解码
- NPU/GPU:AI 推理加速
数据流路径 (Data Flow)
下图展示了从码流(Bitstream)到像素(Pixels)再到输出流的完整处理过程:
组件说明
| 组件 | 说明 |
|---|---|
| SRC(Source) | 视频输入源: • FILE:本地 H.264 文件• RTSP:网络拉流• Camera:V4L2 摄像头 • Others:UDP、自定义源 |
| DECODE | 使用 mtvdec 插件调用 VDE,硬解 H.264/H.265,输出 YUV 帧(NV12 格式) |
| INFER | 使用 mtnpuinfer(NPU)或 mtgpuinfer(GPU)加载 .mtnn 模型,执行目标检测等任务,结果写入帧元数据 |
| OSD | 使用 mtosd 插件在帧上叠加检测框、类别标签、FPS 等信息 |
| ENCODE | 使用 mtvenc 调用 VEE,将处理后帧重新编码为 H.264/H.265 |
| SINK(Sink) | 输出目标: • FILE:保存视频• RTSP:推流(如 rtspclientsink)• Display:HDMI/VGA 显示• Others:自定义输出 |
| DMABUF | Linux 内核提供的跨设备共享内存机制。MTStream SDK 所有插件间通过 DMABUF 传递帧,无内存拷贝,极大提升吞吐效率 |
| Pipeline 控制器 | GStreamer 自动管理状态机、时钟同步、缓冲区生命周期,无需用户干预 |
软件分层
- 应用层:用户构建 GStreamer Pipeline(C/C++ 或命令行)
- GStreamer 层:标准框架,负责调度、同步、错误处理
- MTStream SDK 插件层:提供
mtvdec、mtnpuinfer等自定义元素 - HAL 层:驱动 M1000 硬件寄存器、中断、DMA
- 硬件层:M1000 SoC 专用加速单元
核心组件与插件
下表列出了M1000 MTStream SDK的核心插件,对应的功能和应用场景。
| M1000插件名称 | 主要功能 | 典型应用场景 | 插件参数 |
|---|---|---|---|
| gst-mtvenc | 提供基于VPU硬件视频编码 | 视频存储、RTSP推流 | |
| gst-mtvdec | 提供基于VPU硬件视频解码 | RTSP/h264文件解码 | |
| gst-mtgpuinfer | GPU推理 | 使用GPU进行推理 | model-file 网络权重model-name 网络名称(后处理) |
| gst-mtnpuinfer | NPU推理 | 使用NPU进行推理 | model-file 网络权重model-name 网络名称(后处理)npu-id NPU core (0~2, 2表示core0/core1交替使用) |
| gst-mtosd | osd绘制结果 | 绘制推理结果 | show-fps 是否显示视频帧率信息 |
| gst-mtvideoconvert | color space转换 | YUV转RGB | |
| gst-mtpreprocess | 预处理加速(归一化,ColorSpace转换,Resize,Crop等) | 图像归一化、颜色空间转换 |