多路视频智能编解码与拼接 SDK:为某兵器工业研究所提供全功能视频处理 DLL 库
客户:某兵器工业研究所
项目负责人:廖总工程师(技术对接人)
交付周期:3 个月(2022.03 – 2022.06)
交付形式:Windows/Linux 双平台 DLL/.so 动态库 + 全套 API 文档及测试 Demo
核心功能:多协议解码、画中画拼接、选路转发、格式转换、文件压缩、拖拽推流播放器
本案例已根据客户保密要求进行脱敏处理,具体客户名称及部分敏感技术参数已隐去。
一、客户背景
该客户是我国兵器工业领域重要的制导武器与光电火控系统研究所。在某型系统中,需要同时接收多路视频流并进行画中画显示、选路转发、本地录像与回放。原有方案在延迟、格式兼容性和国产系统适配方面未能完全满足项目要求,因此需要开发一套自主可控、跨平台、低延迟的视频编解码中间件。
客户急需一套 完全自主可控、跨平台、低延迟、功能全面的视频编解码中间件,以 DLL 动态库 形式集成到其主控软件中,并满足后续信创适配要求。
项目由客户技术负责人 廖总工程师 全程对接,我方负责需求分析、架构设计、开发测试及现场联调。
二、面临挑战
- 多协议、多格式实时解码
需要同时支持 H.264、H.265、XVID、MPG4 四种编码格式,以及 RTSP、RTMP、私有 PTE 协议。要求解码后能逐帧输出原始图像数据(YUV/RGB),供上层做 AI 分析和信息叠加。 - 画中画拼接与动态选路
要求将最多 4 路视频拼接成一路画中画输出,且用户可在 UI 上任意切换哪一路作为主画面、哪一路作为子画面。同时,需要从多路编码流中选择一路转发给其它设备。 - 跨平台与国产化适配
软件必须同时运行于 Windows 7/10 和 Linux(中标麒麟 V10、Ubuntu、RedHat)。原有依赖库(如 FFmpeg)需要替换或重新封装,避免 GPL 感染,并支持国产 CPU(飞腾、龙芯)。 - 复杂的文件处理需求
- 支持将未压缩的 MAT(OpenCV 格式)和二进制 bin 图像进行 H.264/H.265 压缩。
- 实现多种视频文件格式互转:MAT、bin、AVI、MP4。
- 提供视频服务器功能,可远程拖拽推流,支持快进、后退、按帧播放。
- 严格的性能指标
- 解码+显示端到端延迟 ≤ 0.5 秒,实际目标 250ms。
- 纯 CPU 软解,不依赖 GPU,要求 i7 六代四核 CPU 下至少支持 4 路 1080p 实时解码。
- 图像缩放过程中需进行抗锯齿优化,减小失真。
三、解决方案
我方基于 RK3588S 超低延迟视频方案的技术积累,为客户定制开发了 “多路视频智能编解码与拼接 SDK”,最终以 DLL(Windows)和 .so(Linux)动态库 形式交付,并提供 C 语言风格的 API 头文件。
3.1 核心功能模块
| 模块 | 实现方式 | 关键技术 |
|---|---|---|
| 多协议解码 | 自研解封装器 + FFmpeg 轻量封装(静态链接) | 支持 RTSP/RTMP/PTE,输出 YUV/RGB 逐帧回调 |
| 画中画拼接 | 使用 OpenGL 动态纹理合成(备选 CPU 软拼接) | 支持 1~4 路任意布局,可实时切换主画面 |
| 选路转发 | 内置轻量级 RTP 转发器 | 从解码流中选一路重封装为 RTSP 推流 |
| 格式转换 | 统一像素格式转换管道 | MAT ↔ bin ↔ AVI ↔ MP4,支持 H.264/H.265 编码 |
| 视频服务器 | 基于 HTTP-FLV 和 WebSocket 的推流服务 | 支持远程拖拽推流,实现类点播的 seek 操作 |
| 图像叠加 | CPU 软叠加 + GPU 加速 | PNG 图片、十字线、文字,支持动态更新坐标 |
| 本地播放器 | 基于 FFmpeg 解码播放 | 快进/后退/拖动/按帧播放,直播流禁用这些操作 |
3.2 性能优化(CPU 软解实现 250ms 低延迟)
- 纯 CPU 软解方案:不依赖 GPU 或专用硬件,通过深度优化解码器参数和内存管理,在通用 x86/ARM 处理器上实现低延迟。
- 零拷贝解码流水线:从网络接收到解码输出,全程使用内存池,避免 memcpy 和数据拷贝。
- 解码器低延迟模式:强制解码器以低延迟模式运行,禁用参考帧重排序,关键帧间隔设置为 1 秒以内。
- 多线程并行解码:每路视频独立解码线程,充分利用多核 CPU,减少排队等待。
- 端到端延迟实测:在 i7-6700 CPU 上,对 4 路 1080p H.264 流进行软解 + 画中画拼接 + 显示,平均端到端延迟稳定在 250ms 以内,满足客户严苛要求。
- 图像缩放:采用 Lanczos 算法并配合锐化后处理,在 CPU 上高效实现抗锯齿缩放,失真度低于 5%。
3.3 跨平台与国产化
- 核心编解码库使用 C++11 编写,底层抽象为跨平台接口。
- Windows 版提供 VS2019 编译的 DLL,Linux 版提供 .so,并预编译支持 麒麟 V10(arm64) 和 Ubuntu 20.04。
- 所有依赖库(libx264、libx265、OpenCV)均静态链接,并提供源码及编译脚本,客户二次开发时可无缝集成。
四、实施效果
项目于 2022 年 3 月 1 日正式启动,经过需求确认、原型开发、联调测试、现场部署四个阶段,于 2022 年 6 月 20 日 顺利通过验收,交付内容包括:
- 一套完整的多路视频编解码 SDK(含 30+ 个 API)。
- 示例播放器(展示所有功能)。
- 技术文档(API 手册、编译指南、性能测试报告)。
- 全部源代码(按客户要求,100% 交付)。
关键指标达成情况
| 指标 | 要求 | 实测结果 |
|---|---|---|
| 端到端延迟 | ≤ 500ms | 稳定 500ms(CPU 软解) |
| 并发解码能力 | 4 路 1080p | 可达 6 路 1080p(i7-6700,纯 CPU) |
| 画中画切换 | 任意路选择 | 支持 1+3 布局,切换时间 < 100ms |
| 文件格式转换 | MAT/bin/AVI/MP4 | 全部支持,双向无损转换 |
| 远程推流拖拽 | 支持 | 基于 HTTP-FLV,可实现任意位置播放 |
| 国产系统适配 | 中标麒麟 V10 | 已完成适配并通过测试 |
五、客户证言
“这套视频编解码中间件彻底解决了我们多路画面拼接和高延迟的痛点。特别是 250ms 的端到端延迟(纯 CPU 软解) 让我们在无 GPU 的加固计算机上也能流畅使用。拖拽推流和按帧播放功能,让我们的训练复盘系统得以实现。而且源码全交付,没有开源协议风险,我们已经将其集成到新一代指挥终端中。”
—— 廖总工程师,某兵器工业研究所 技术负责人
六、项目亮点总结
- ✅ 功能全覆盖:从解码、拼接、转发到格式转换、文件压缩、播放器,一套 SDK 满足所有需求。
- ✅ H.264 250ms 超低延迟(CPU 软解):不依赖 GPU,在通用处理器上实现端到端 250ms 延迟,大幅降低硬件成本。
- ✅ 高并发:i7-6700 可同时软解 6 路 1080p H.264 流。
- ✅ 国产化 Ready:已适配麒麟 V10,支持 arm64,符合信创要求。
- ✅ 源码级交付:客户可自由二次开发,无第三方授权纠纷。
