Onvif协议5: 预置位的操作

Onvif协议5: 预置位的操作球机的云台预置位控制主要包含的内容有 预置位的设置 预置位的调用 预置位的删除以及预置位的名称修改等云台预置位的设置 调用 Onvif 协议中云台预置位设置接口 对应预置位名称的入参可以根据情况输

大家好,欢迎来到IT知识分享网。

目录

1. 介绍

2. GetPreset

3. SetPreset

4.预置位的索引

5. GotoPreset


1. 介绍

云台预置位的调用:如上面所说的,调用云台预置位时需要知道该预置位的token值。按照正常的规律,一般都是1、2、3等数值,一般和云台预置位列表对应,前提是云台预置位列表是按照顺序排列中间没有预置位被删除。

云台预置位的删除:同样删除预置位需要先前服务端返回的token,入参同样是需要删除预置位的token。

云台预置位的修改:根据wsdl生成的接口文件,预置位的修改入参需要有预置位修改后的名称已经对应的token值,这个token值同样是设置预置位返回的值,修改后的预置位名称如果是中文应该将字符编码转成UTF-8格式,否则会出现乱码。

其实通过前面的学习,onvif操作是比较简单的。调一下相应的接口即可。

2. GetPreset

Onvif协议5: 预置位的操作

获取请求有1个参数:ProfileToken。

首先获取ProfileToken

 _trt__GetProfiles profiles; _trt__GetProfilesResponse profileresp; result = soap1.GetProfiles(&profiles, profileresp); if(result==401) { http_da_save(&soap1,&daInfo, soap1.authrealm, User, Pass); soap1.GetProfiles(&profiles, profileresp); http_da_release(&soap1,&daInfo); }

然后根据结果,创建请求

 _tptz__GetPresets GetPresetsReq; _tptz__GetPresetsResponse GetPresetsResp; GetPresetsReq.ProfileToken = profileresp.Profiles[0]->token; result = Ptz.GetPresets(&GetPresetsReq, GetPresetsResp); if(result==401) { http_da_save(&Ptz,&daInfo, Ptz.authrealm, User, Pass); Ptz.GetPresets(&GetPresetsReq, GetPresetsResp); http_da_release(&Ptz,&daInfo); }

返回的GetPresetsResp,中的GetPresetsResp.Preset是个数组指针,GetPresetsResp.__sizePreset指明了有多少个preset。根据个数,遍历包含了哪些Name,Token。

Onvif协议5: 预置位的操作

3. SetPreset

REQUEST:

  • ProfileToken [tt:ReferenceToken]  Reference to an existing media profile.
  • PresetToken – optional [tt:ReferenceToken]  Optional existing preset token to update a preset position.
  • PresetName – optional [xs:string]  Optional name to be assigned to the preset position.
     

RESPONSE:

  • PresetToken [tt:ReferenceToken] Reference token assigned by the device to the preset.

创建和修改preset时,调用SetPreset。请求有3个参数:ProfileToken, PresetToken, PresetName。

同get操作相同,先获取ProfileToken,设置时,如果不指定PresetToken,会返回一个新的PresetToken,这就相当于创建新的preset。如果指定了PresetToken,那么该PresetToken,必须存在,否则将返回错误,这就是修改preset。PresetName随便定义,如果想用中文,那么要开启UTF8格式,方法是使能SOAP_C_UTFSTRING,如下。

 _tptz__SetPreset SetPresetReq; _tptz__SetPresetResponse SetPresetResp; 。。。   soap_set_mode(&Ptz, SOAP_C_UTFSTRING); Ptz.SetPreset(&SetPresetReq, SetPresetResp); 

4.预置位的索引

这其实是个问题,onvif没有定义索引,这需要自己维护。onvif只靠PresetToken来管理相应的预置位,PresetToken值,基本上定义的是字符串“1”,“2”,“100”等。获取时是按token的数字排序的。如果满配置了预置位,那么索引号基本与token一致了。如果删除一个预置位,将会出现不匹配的问题。

好的办法就是,自己维护一个索引表。比如你的预置位索引号1,对应的presettoken是“5”,那么操作索引1时,查找到的token是5,那么操作token=5的就行了。

5. GotoPreset

Onvif协议5: 预置位的操作

 _tptz__GotoPreset GotoPresetReq; _tptz__GotoPresetResponse GotoPresetResp; GotoPresetReq.ProfileToken = profileresp.Profiles[0]->token; GotoPresetReq.PresetToken = token; Ptz.GotoPreset(&GotoPresetReq, GotoPresetResp); 

参考:

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/130145.html

(0)
上一篇 2025-08-19 13:10
下一篇 2025-08-19 13:15

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信