c# - C# :OnvifClientPTZ
问题描述
我正在尝试使用 ONVIF 开发控制 IP 摄像机。但是我在连接 ONVIF 的 PTZ 服务器时遇到了一点问题。这是我的代码:
private void PTZTest(DeviceClient client, double deviceTimeOffset, string ip, int port)
{
// Create Media object
string xaddr = string.Format("http://{0}/onvif/device_service", txtIP.Text);
MediaClient mediaService = OnvifServices.GetOnvifMediaClient(xaddr, deviceTimeOffset, txtUser.Text, txtPassword.Text);
// Create PTZ object
string xaddr2 = string.Format("http://{0}/onvif/ptz_service",txtIP.Text);
PTZClient ptzService = OnvifServices.GetOnvifPTZClient(xaddr2, deviceTimeOffset, txtUser.Text, txtPassword.Text);
// Get target profile
Profile[] mediaProfiles = mediaService.GetProfiles();
Profile mediaProfile = mediaService.GetProfile(mediaProfiles[0].token);
PTZConfigurationOptions ptzConfigurationOptions = ptzService.GetConfigurationOptions(mediaProfile.PTZConfiguration.token);
PTZ.PTZSpeed velocity = new PTZ.PTZSpeed();
velocity.Zoom = new PTZ.Vector1D() { x = speed * ptzConfigurationOptions.Spaces.ContinuousZoomVelocitySpace[0].XRange.Max };
当我在该行设置断点时,
PTZConfigurationOptions ptzConfigurationOptions = ptzService.GetConfigurationOptions(mediaProfile.PTZConfiguration.token);
我收到此错误消息:
http://192.168.123.2/onvif/ptz_service上没有可以接受消息的监听端点 。这通常是由于 SOAP 地址或操作不正确造成的。如果存在,请参阅 InnerException 元素以获取更多信息。
但我不明白为什么我可以获得 PTZ 服务列表和有关 mediaService 的所有信息,但我无法获得 ptzconfiguration 选项。
有谁知道到底是什么问题?我该如何解决它,拜托!
解决方案
并非每个 onvif 设备都会在同一端点上托管其 PTZ 服务。通常使用的方法是从 DeviceService 查询 GetServices/GetCapabilities 调用。这是唯一通常始终具有相同 URL 的服务 - “ http://ip/onvif/device_service ”
因此,使用方法是(在伪代码中)
var devService = OnvifServices.GetOnvifDeviceService("http://ip/onvif/device_service)
var services = devService.GetServices() or devService.GetCapabilities()
var ptzServiceInfo = services.Where(x => x.Name.Contains("Ptz));
var ptzServiceInfo = OnvifServices.GetPtzService(ptzServiceInfo.Url);
您不使用 device_server 进行任何 ptz_service 调用,您只需使用它来查找设备服务的正确 URL 如果您进行 GetService 调用,则响应将包含类似
<tds:Service> <tds:Namespace>onvif.org/ver20/ptz/wsdl</tds:Namespace> <tds:XAddr>ip/onvif/ptz</tds:XAddr> </tds:Service>
有关更多详细信息,请参见onvif.org/specs/core/ONVIF-Core-Specification-v250.pdf
推荐阅读
- python - 如何防止mysql中的重复数据存储?
- go - 接口可以是 nil 类型,但这并不意味着它们是 nil?
- build - NUXT 构建与生成和站点地图
- phpunit - PHPunit:无法断言 API 登录测试
- google-apps-script - 将数据从一组单元格复制到另一组单元格的脚本
- python - 如何制作自定义图例标记,即。matplotlib 中的直角三角形
- datetime - 从 Julia DateTime 到 Int64 并返回
- shopify - 将促销横幅添加到 Shopify 集合的特定页面?
- c - 为 connect() winsock2 设置固定超时
- php - 进行多次计数,然后在一个查询中求和