Windows 平台实时多源视频采集与零拷贝渲染工具 Windows 平台实时流多源视频采集与零拷贝渲染工具一款面向 Windows 平台的多源视频采集与零拷贝渲染工具集成 ONVIF 设备发现、摄像头/桌面实时采集、硬件解码与 OpenGL 零拷贝渲染构建从「发现 → 采集 → 解码 → 渲染」的完整低延迟链路。一、核心特性1. 播放器DX 零拷贝解码 OpenGL 渲染播放器内核muxPlayer采用 **D3D11VA 硬件解码 零拷贝技术解码后的 NV12 纹理直接驻留 GPU通过 WGL 互操作共享给 OpenGL 纹理全程不落 CPU把多路高分辨率视频的 CPU 负载压到极低。硬解零拷贝D3D11VA 解码 → D3D11 共享纹理 → WGL interop → OpenGL 渲染GPU→GPU 直传软解兜底FFmpeg CPU 解码 → YUV Shader 上色兼容任意 GPU多路并发单进程多路独立管线ImmediateContext 三线程互斥串行化保证线程安全Overlay / PIP / 截图 / 录像 / SEI 回调完整播放器能力栈音频同步RenderScheduler音频时钟驱动支持 AAC / Opus / G.7112. ONVIF 设备发现与媒体能力获取独立子进程onvif_device基于ONVIF 协议客户端封装实现局域网内 IPC / NVR 的发现与能力查询WS-DiscoveryUDP 多播发现局域网内 ONVIF 设备设备能力探测获取Device/Media/Imaging/PTZ等服务能力媒体配置拉取Profiles、VideoSourceConfig、EncoderConfiguration流地址协商获取 RTSP 流地址供播放器直接拉流3. 摄像头画面实时采集与播放camera_cap静态库基于Windows Media Foundation (SourceReader)实现本地摄像头采集并可叠加 AI 处理MF SourceReader采集低延迟直读设备帧AI 背景虚化OpenCV ONNX RuntimeRVM-256 模型实时人像分割 背景模糊采集即渲染采集帧直接送入 muxPlayer 渲染管线端到端低延迟4. 桌面采集DXGI 与 WGC 多模式cap_desktop子进程提供双模式桌面捕获按能力自动降级模式技术说明DXGI Desktop DuplicationD3D11IDXGIOutputDuplication性能最高GPU 纹理直接复用Windows Graphics Capture (WGC)Windows.Graphics.CaptureAPI兼容性更好支持指定窗口采集采集后的 BGRA 纹理经OpenGL Shader (BGRA→NV12)转换后送入 H.264 编码器可同时输出实时预览与 MP4 录像。5. 路线图主流厂商 SDK 接入wdz_device子进程已通过searchDll实现 UDP 设备搜索与网络参数修改框架后续将在此基础上接入主流厂商 SDK厂商计划能力海康 (Hikvision)设备搜索 / 拉流 / PTZ / 报警订阅大华 (Dahua)设备搜索 / 拉流 / 配置下发科达 (Kedacom)NVR 接入 / 国标协议宇视 (Uniview)设备搜索 / 拉流统一抽象为「搜索 → 获取媒体能力 → 拉流」三层接口与 ONVIF 通道并列。二、性能实测四路 4K25fps测试环境CPUAMD Ryzen 7 8745H集显AMD Radeon 780M场景同时播放 4 路 4K3840×2160H.264 视频每路 25 fps实测占用指标占用CPU~3%GPU (780M)~60%得益于 D3D11VA 硬解 WGL interop 零拷贝路径4K×4 路总像素吞吐量约829 Mpixels/sCPU 仍处于极低负载证实零拷贝链路在核显平台同样高效。ps:可直接拖拽视频文件mp4,flv等到窗口播放三、架构总览┌─────────────────────────────────────────────────────┐ │ omni_station (主进程) │ │ ┌───────────┐ ┌──────────────┐ ┌───────────────┐ │ │ │ MainUI │ │ ServiceMgr │ │ SystemMonitor│ │ │ │ (Qt5 GUI) │ │ (进程管理) │ │ (CPU/GPU监控) │ │ │ └─────┬─────┘ └──────┬───────┘ └───────────────┘ │ │ │ │ │ │ ┌─────┴─────┐ ┌──────┴───────┐ │ │ │ muxPlayer │ │ MsgRouter │ │ │ │ (视频播放) │ │ (ZeroMQ ROUTER)│ │ │ └───────────┘ └──────┬───────┘ │ └─────────────────────────┼───────────────────────────┘ │ ZeroMQ (tcp://127.0.0.1:5555) ┌───────────────┼───────────────┐ │ │ │ ┌───────▼──────┐ ┌─────▼──────┐ ┌─────▼──────┐ │ onvif_device │ │ cap_desktop │ │ wdz_device │ │ (DEALER) │ │ (DEALER) │ │ (DEALER) │ │ ONVIF搜索 │ │ 桌面捕获 │ │ SDK搜索 │ └──────────────┘ └──────────────┘ └──────────────┘主进程omni_stationQt5 GUI 子进程生命周期 ZeroMQ ROUTER 消息中枢采集/搜索子进程onvif_device/cap_desktop/wdz_device各自 DEALER 接入共享库muxPlayer播放、camera_cap摄像头、wdzOnvifClientONVIF、searchDll搜索进程通信ZeroMQ ROUTER-DEALER JSON 协议见 include/json_protocol.h四、技术栈层技术语言 / 标准C17GUIQt 5.15 (Widgets OpenGL) QWindowKit 无边框窗口构建CMake 3.17 / vcpkg进程通信ZeroMQ (ROUTER-DEALER) JSON视频解码FFmpeg D3D11VA硬解/ CPU软解视频渲染WGL 零拷贝 D3D11 OpenGL Shader桌面采集DXGI Desktop Duplication Windows.Graphics.Capture摄像头采集Windows Media Foundation (SourceReader)视频编码FFmpeg libx264 (H.264)AI 推理OpenCV ONNX RuntimeRVM 背景虚化音频FFmpeg FDK-AAC Opus miniaudio五、快速使用# 输出# omni_station.exe 主程序# cap_desktop.exe 桌面采集子进程# onvif_device.exe ONVIF 搜索子进程# sdk_device.exe SDK 搜索子进程测试版本--github地址:https://github.com/feng9201/omni_station