基於ONVIF協議的攝像頭開發總結
ONVIF規範中設備管理和控制部分所定義的接口均以Web Services的形式提供,設備作為服務提供者為服務端。ONVIF規範涵蓋了完全的基於
<web service>
Web Service是基於網絡的、分布式的模塊化組件,執行特定的任務。Web Service 主要利用HTTP 和SOAP 協議使數據在Web 上傳輸。Web 用戶能夠使用 SOAP 和 HTTP通過Web 調用的方法來調用遠程對象。
Web Service是基於XML和HTTPS的一種服務,其通信協議主要基於SOAP。服務端、客戶端以傳遞符合XML的SOAP消息實現服務的請求與回應。
客戶端根據 WSDL 描述文檔,會生成一個 SOAP 請求消息,該請求會被嵌入在一個HTTP POST請求中,發送到Web Services 所在的Web 服務器。Web Services 請求處理器解析收到的 SOAP 請求,調用相應的 Web Services。然後再生成相應的SOAP 應答。Web 服務器得到 SOAP 應答後,會再通過 HTTP應答的方式把信息送回到客戶端。
<ONVIF規範>
ONVIF規範向視頻監控引入了Web Service的概念。設備的實際功能均被抽象為了Web Service的服務,視頻監控系統的控制單元以客戶端的身份出現,通過
A:Web Service能為視頻監控什麽
a) 設備的無關性,任何一個設備接入系統,不會對其他系統造成影響。
b) 設備的獨立性,每一個設備只負責對接收到的請求做出反饋,甚至不需要知曉控制端的存在。
c) 管理的集中性,所有的控制由客戶端來發起。
B:ONVIF規範能為視頻監控帶來什麽
a) 抽象了功能的接口。統一了對設備的配置以及操作的方式。
b) 控制端關心的不是設備的型號,而是設備所提供的Web Service。
c) 規範了視頻系統中Web Service範圍之外的行為。
d) ONVIF提供了各個模塊的WSDL,擁有效率非常高的開發方式。
C:ONVIF規範的內容
a) 設備發現
b) 設備管理
c) 設備輸入輸出服務
d) 圖像配置
e) 媒體配置
f) 實時流媒體
g) 接收端配置
h) 顯示服務
i) 事件處理
j) PTZ控制
k) 其他
<WSDL>
WSDL是Web services 描述語言(Web Service Description Language)的縮寫。是一種基於xml的網絡服務描述語言,用來描述Web服務和說明如何與Web服務通信的XML語言,為用戶提供詳細的接口說明書。
<span data-wiz-span="data-wiz-span" style="font-size: 1rem;"><?xml version=‘1.0‘ encoding=‘UTF-8‘?> <wsdl:definitions name="HelloWorld" targetNamespace="http://server.cxf.webservice.web.apps.lucl.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://server.cxf.webservice.web.apps.lucl.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns1="http://schemas.xmlsoap.org/soap/http" > <!-- 定義數據類型 --> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://server.cxf.webservice.web.apps.lucl.com/" elementFormDefault="unqualified" targetNamespace="http://server.cxf.webservice.web.apps.lucl.com/" version="1.0"> <xs:element name="sayHi" type="tns:sayHi" /> <xs:element name="sayHiResponse" type="tns:sayHiResponse" /> <xs:complexType name="sayHi"> <xs:sequence> <xs:element minOccurs="0" name="arg0" type="xs:string" /> </xs:sequence> </xs:complexType> <xs:complexType name="sayHiResponse"> <xs:sequence> <xs:element minOccurs="0" name="return" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:schema> </wsdl:types> <!-- 定義消息分組 --> <wsdl:message name="sayHiResponse"> <wsdl:part element="tns:sayHiResponse" name="parameters" /> </wsdl:message> <wsdl:message name="sayHi"> <wsdl:part element="tns:sayHi" name="parameters" /> </wsdl:message> <!-- 定義port type --> <wsdl:portType name="HelloWorldPortType"> <wsdl:operation name="sayHi"> <wsdl:input message="tns:sayHi" name="sayHi" /> <wsdl:output message="tns:sayHiResponse" name="sayHiResponse" /> <!-- 指定當 Web 服務設法響應客戶機的請求時所發生的任何消息級異常 --> <!-- <wsdl:fault name="" message=""></wsdl:fault> --> </wsdl:operation> </wsdl:portType> <!-- binding操作到特定協議,即關聯portType到協議,這裏為SOAP --> <!-- W3C 推薦了三個 Web 服務的綁定: HTTP 上的 SOAP(SOAP over HTTP) HTTP GET/POST SOAP/MIME --> <wsdl:binding name="HelloWorldSoapBinding" type="tns:HelloWorldPortType"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="sayHi"> <soap:operation soapAction="" style="document" /> <wsdl:input name="sayHi"> <soap:body use="literal" /> </wsdl:input> <wsdl:output name="sayHiResponse"> <soap:body use="literal" /> </wsdl:output> <!-- 應用portType處的fault --> <!-- <wsdl:fault name=""> <soap:fault name="" use="literal"/> </wsdl:fault> --> </wsdl:operation> </wsdl:binding> <!-- 描述binding的連接信息,根據綁定所實現的 portType 來處理請求。 對於 HTTP 上的 SOAP,這就是指向那個進程的 URL。 --> <wsdl:service name="HelloWorld"> <wsdl:port binding="tns:HelloWorldSoapBinding" name="HelloWorldPort"> <soap:address location="http://localhost:9000/helloWorld" /> </wsdl:port> </wsdl:service> </wsdl:definitions></span>
<SOAP>
SOAP是Simple Object Access Protocol的縮寫。是基於XML的一種協議。一條SOAP 消息就是一個普通的 XML 文檔,包含下列元素:
必需的 Envelope 元素,可把此 XML 文檔標識為一條 SOAP 消息
可選的 Header 元素,包含頭部信息
必需的 Body 元素,包含所有的調用和響應信息
可選的 Fault 元素,提供有關在處理此消息所發生錯誤的信息
在向Web Service發送的SOAP請求中,Body元素中的字段需與WSDL中數據類型的相符合。在構建SOAP的過程中,必須從WSDL文件中獲取並映射這一種對應關系。然而這樣一個對應過程將是充滿了重復性和機械性的,為了避免不必要的人工差錯以及節約開發時間,一個名為gSOAP的編譯工具應運而生。
gSOAP利用編譯器技術提供了一組透明化的SOAP API,並將與開發無關的SOAP實現細節相關的內容對用戶隱藏起來。通過將WSDL文件解析序列化為C/C++文件,最小化了Web Service的開發過程。
SOAP協議位置
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">
基於ONVIF協議的攝像頭開發總結