You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用C#开发ONVIF中间件以调用API对接第三方系统

C# 调用ONVIF API对接第三方系统实现方案

前期准备

  • 提前确认目标ONVIF设备支持的协议版本,优先匹配ONVIF Profile S/Profile T等通用标准,避免出现接口不兼容的情况
  • 项目依赖可直接通过NuGet安装ONVIF相关封装库,也可以手动添加WCF服务引用,服务地址格式为http://{设备IP}/onvif/device_service
  • 提前申请设备的有效鉴权账号密码,绝大多数ONVIF业务接口都需要WS-UsernameToken鉴权才可正常调用

核心实现流程

1. 设备发现与鉴权

首先通过WS-Discovery协议扫描局域网内的ONVIF设备,示例代码如下:

// 初始化发现客户端
var discoveryClient = new DiscoveryClient(new UdpDiscoveryEndpoint());
// 扫描ONVIF设备,设置超时时间可根据需求调整
var findResult = discoveryClient.Find(new FindCriteria(typeof(Device)) { Duration = TimeSpan.FromSeconds(3) });
foreach (var endpointMetadata in findResult.Endpoints)
{
    string deviceServiceAddr = endpointMetadata.Address.Uri.ToString();
    // 后续用该地址初始化设备服务客户端
}

鉴权逻辑需要自行实现WS-UsernameToken规范:生成随机nonce、当前UTC时间戳,将nonce、时间戳、明文密码拼接后做SHA1哈希,再转Base64格式,最终拼接到请求头中。注意本地时间和设备时间误差不能超过5分钟,否则会被设备拒绝请求,可以先调用GetSystemDateAndTime接口获取设备时间再生成鉴权信息。

2. 常用业务接口调用

根据你的业务需求选择对应接口调用即可,常见场景示例:

  • 拉取设备基础信息:调用GetDeviceInformation接口,可获取设备厂商、型号、序列号、固件版本等基础字段
  • 获取媒体流地址:调用GetStreamUri接口,传入对应的媒体配置token,即可获取RTSP/HTTP格式的直播流地址
  • 拉取事件消息:如果需要获取移动侦测、遮挡告警、IO触发等设备事件,可调用CreatePullPointSubscription创建订阅,定期拉取事件数据

3. 第三方系统对接

拿到ONVIF接口数据后,按以下步骤对接即可:

  • 先开发数据转换层,将ONVIF接口返回的异构数据统一转换为第三方系统要求的字段格式,比如把ONVIF返回的Model字段映射为第三方系统约定的device_model字段
  • 根据第三方系统的对接规范选择数据上报方式:如果第三方提供HTTP接口,直接用HttpClient推送格式化后的JSON/XML数据;如果是MQTT协议,可引入MQTTnet等客户端库上报数据
  • 新增异常重试机制,接口调用失败、数据推送失败时按指数退避策略重试3-5次,必要时做本地数据缓存,避免数据丢失

常见问题排查

  • 调用接口返回401:首先确认账号密码是否正确,其次检查账号是否有对应接口的访问权限,部分设备的配置类、事件类接口需要管理员权限才可调用
  • 流地址无法访问:检查部署服务的服务器和ONVIF设备的网络是否互通,部分设备需要单独开启RTSP访问权限、关闭音视频加密才可正常拉流
  • 设备发现不到:检查服务器和设备是否在同一个局域网内,UDP 3702端口是否被防火墙拦截

内容的提问来源于stack exchange,提问作者ogi3538

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:57:02