当前位置:   article > 正文

从零开始精通Onvif之WSDL详解

从零开始精通Onvif之WSDL详解

什么是WSDL

        WSDL,英文全称Web Services Description Language,中文全称为网络服务描述语言,是XML的一种扩展应用,用于描述网络服务及其如何被调用。在Onvif中,WSDL文件描述了网络视频设备提供的各种服务接口,包括:设备管理、媒体流处理、事件处理等。简单来说,WSDL文件就是一份“说明书”,告诉开发者如何与设备进行通信。

        想象一下,你刚买了一个全新的IPC摄像头,想要让它乖乖听命于你。但设备不会说话,你也不会它的“语言”。这时候,WSDL就扮演了翻译和指导手册的角色。它是一个基于XML的语言,详细描述了网络服务接口的信息,包括:服务在哪里、如何调用、需要哪些参数、期望得到什么类型的响应等。有了WSDL,我们就能知道如何正确地与ONVIF设备进行“对话”。

WSDL文件的组成

        WSDL文件通常分为四个主要部分,每个部分就像是构建一座桥的不同材料。

        Types(类型):定义了服务中使用的数据类型,好比桥的基石。比如:定义一个字符串类型或一个日期类型,确保双方理解同一套“词汇”。

        Message(消息):服务交互的基本单位,好比桥上的车辆。它定义了请求和响应消息的数据结构,告诉我们要发送哪些数据给设备,以及设备会怎样回复。

        Operation(操作):一系列的服务动作,如同桥上的不同车道。比如:“GetStreamUri”操作可以让我们获取视频流的URL,“SetSystemDateAndTime”则能修改设备的系统时间。

        Binding & Service(绑定和服务):绑定详细说明了服务如何实现(比如:使用HTTP还是HTTPS),而服务则提供了功能和特性的网络地址,就像告诉我们桥的入口在哪里一样。绑定和服务结合在一起,确保我们能准确无误地找到并使用服务。

WSDL与Onvif的结合

        在Onvif中,WSDL文件描述了网络视频设备提供的服务接口。开发者可以通过阅读WSDL文件,了解设备支持哪些操作,以及每个操作的输入和输出参数是什么。

        为了便于大家理解,我们在这里给出一个简化版的WSDL文件,用于获取Onvif设备的所有服务。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <definitions
  3. xmlns:tns="http://www.onvif.org/ver10/device/wsdl"
  4. xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
  5. xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
  6. xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
  7. xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  8. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  9. xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/"
  10. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  11. name="DeviceService"
  12. targetNamespace="http://www.onvif.org/ver10/device/wsdl">
  13. <!-- 类型定义 -->
  14. <types>
  15. <!-- 这里会导入或定义ONVIF协议中使用的所有数据类型 -->
  16. <xsd:import namespace="http://www.onvif.org/ver10/schema" schemaLocation="onvif.xsd"/>
  17. </types>
  18. <!-- 消息定义 -->
  19. <message name="GetServicesRequest">
  20. <part name="Request" element="tns:GetServices"/>
  21. </message>
  22. <message name="GetServicesResponse">
  23. <part name="Response" element="tns:GetServicesResponse"/>
  24. </message>
  25. <!-- 端口类型定义 -->
  26. <portType name="Device">
  27. <operation name="GetServices">
  28. <input message="tns:GetServicesRequest"/>
  29. <output message="tns:GetServicesResponse"/>
  30. </operation>
  31. <!-- 这里会列出Device服务支持的所有操作 -->
  32. </portType>
  33. <!-- 绑定定义 -->
  34. <binding name="DeviceBinding" type="tns:Device">
  35. <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
  36. <operation name="GetServices">
  37. <soap:operation soapAction="http://www.onvif.org/ver10/device/wsdl/GetServices"/>
  38. <input>
  39. <soap:body use="literal"/>
  40. </input>
  41. <output>
  42. <soap:body use="literal"/>
  43. </output>
  44. </operation>
  45. <!-- 这里会列出每个操作的SOAP绑定细节 -->
  46. </binding>
  47. <!-- 服务定义 -->
  48. <service name="DeviceService">
  49. <port name="DevicePort" binding="tns:DeviceBinding">
  50. <soap:address location="http://camera-ip/onvif/device_service"/>
  51. <!-- 这里指定服务的访问地址 -->
  52. </port>
  53. </service>
  54. </definitions>

        在上面的WSDL文件中,我们首先声明了XML命名空间。xmlns:tns表示目标命名空间,指向ONVIF设备服务的WSDL定义。xmlns:wsa、xmlns:wsp、xmlns:wsam、xmlns:xsd、xmlns:soap、xmlns:soap12、xmlns:wsdl分别引用了其他用于定义服务的命名空间,比如:Web服务地址、策略、SOAP绑定等。

        接下来,我们进行了类型的定义。这部分导入了ONVIF定义的数据类型,通过xsd:import标签引入了位于onvif.xsd的XML Schema文件,其中定义了服务交互所需的所有数据结构。

        再接下来,我们进行了消息的定义。GetServicesRequest和GetServicesResponse消息分别定义了请求和响应的数据结构,为调用GetServices操作准备。

        然后,我们进行了端口类型的定义。Device端口类型定义了服务可以提供的操作,比如:GetServices。每个操作定义了输入(请求)和输出(响应)消息,并明确了服务的交互模式。

        紧随其后,我们进行了绑定的定义。DeviceBinding绑定了Device端口类型到SOAP协议上,指定了消息交换的风格(document)和传输协议(HTTP)。soapAction属性指定了操作的URI,帮助服务端识别请求的目的。

        最后,我们定义了服务。DeviceService定义了一个具体的服务实例,名为DevicePort。它绑定了前面定义的DeviceBinding,并指定了服务的实际访问地址为:http://camera-ip/onvif/device_service,客户端可通过这个地址与服务进行交互。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/738112
推荐阅读
相关标签
  

闽ICP备14008679号