接触soap和xml第三天,稍有一点认识,看了很多文章,都不适合我的项目。目前项目中用到三台不同品牌的IPC,虽说厂家都用SDK,但在项目中引入三套SDK有点臃肿,何况目前已实现了使用VLC的拉流播放,就差云台控制了。只有一条路了就是使用ONVIF,C#中简单,C++都是使用gsoap,走了一遍流程,太麻烦,太复杂,使用WSDL文件生的代码好几兆不说,需要引用的源文件一大堆!现在就是要简单的实现云台控制PTZ,没必要搞这么复杂,研究了一天,不按寻常路也是挺香!
一、获取PTZ控制XML消息
需要的工具:WireShark、XMLspy、ONVIF Device Test Tool。
具体思路:控制PTZ使用的是soap协议,soap协议可以通过微软的Soap ToolKit3.0来实现,现在就差具体的控制协议了,也就是XML消息,获取XML消息的流程:
1、使用ONVIF Device Test Tool连接IPC
首先用ONVIF Device Test Tool连接IPC,这一块文章很多,就不多说了,然后进行云台控制,测试没有问题后进行下一步。
2、使用WireShark抓包查看XML
第一步实现后就可以使用WireShark抓包,启动本地连接的捕获,然后用ONVIF Device Test Tool控制PTZ,根据IPC的IP地址查看HTTP包,得到控制连续移动的XML如下:
拷贝出XML后的消息如下:
<?xml version="1.0" encoding="utf-8" ?>
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope">
<s:Header>
<wsse:Security
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>
admin
</wsse:Username>
<wsse:Password
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">
6UOJDvX8SFsITkYmBA/wltXMC2A=
</wsse:Password>
<wsse:Nonce>
i+bhTDOL/vrj6s6Tox5TxQ==
</wsse:Nonce>
<wsu:Created>
2022-11-13T06:36:19Z
</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</s:Header>
<s:Body
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ContinuousMove
xmlns="http://www.onvif.org/ver20/ptz/wsdl">
<ProfileToken>
Profile_1
</ProfileToken>
<Vel