前言
一、ONVIF協議是什么
ONVIF(Open Network Video Interface Forum,開放式網絡視頻接口論壇)是一種全球性的開放行業標準,由安訊士(AXIS)、博世(BOSCH)和索尼(SONY)于2008年共同發起,旨在解決不同品牌網絡視頻設備(如攝像頭、錄像設備等)的互通性問題。通過定義統一的接口和通信規范,ONVIF協議實現了設備發現、實時視頻流傳輸、設備控制等功能,成為安防監控領域的主流標準。
核心作用與優勢:
- 互通性:打破廠商壁壘,支持跨品牌設備集成。
- 靈活性:用戶可自由選擇設備,構建定制化監控方案。
- 成本優化:降低系統集成復雜度,減少專有系統依賴。
- 技術創新:通過開放性標準推動行業技術迭代。
二、ONVIF規范的實現機制
ONVIF協議基于Web Service架構,通過WSDL(Web服務描述語言)定義服務接口。什么?WSDL是什么?這都不知道,不會百度啊。
采用SOAP(簡單對象訪問協議)實現設備間通信。
WSDL(網絡服務描述語言,Web Services Description Language)是一門基于 XML 的語言,用于描述 Web Services 以及如何對它們進行訪問。
SOAP 是基于 XML 的簡易協議,可使應用程序在 HTTP 之上進行信息交換。或者更簡單地說:SOAP 是用于訪問網絡服務的協議。
其實現機制可分為以下關鍵模塊:
-
Web Service與SOAP
ONVIF將設備功能抽象為Web服務,客戶端通過HTTP發送SOAP請求調用服務。例如,獲取設備信息的SOAP請求示例如下:<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"><soap:Body><tds:GetDeviceInformation/></soap:Body> </soap:Envelope>
SOAP消息由Envelope、Header、Body和Fault四部分組成,基于XML格式,支持跨平臺通信。
-
WSDL描述文檔
WSDL是ONVIF的“接口說明書”,以XML格式詳細描述服務的位置、操作、參數及數據類型。例如,ONVIF的DeviceService
接口通過WSDL定義設備管理操作(如GetServices
)及其輸入輸出消息結構。 -
設備發現與交互流程
ONVIF使用WS-Discovery協議實現設備自動發現。典型交互流程包括:- 設備上線后發送
HELLO
消息; - 客戶端通過
PROBE
消息搜索設備; - 通過SOAP請求獲取設備能力集和配置信息;
- 基于RTSP協議拉取實時視頻流。
- 設備上線后發送
工作方式
簡單來講,ONVIF協議將終端設備(攝像頭等)提供Web Service服務,將每一個功能看做一個Web Service。
首先獲取攝像頭的主地址比如(http://10.0.0.47/onvif/device_service),我的攝像頭的IP為10.0.0.47,獲得這個地址后,我們就可以向這個地址提供的接口來獲取相應的功能,每個接口可以認為一個功能,也就是一個Web Service
三、WSDL文檔的核心組成
WSDL文件定義了ONVIF服務的交互規則,主要包含以下部分:
- Types:定義數據類型(如分辨率、編碼格式),通過XML Schema導入。
- Message:描述請求與響應的數據結構(如
GetServicesRequest
和GetServicesResponse
)。 - Operation:服務支持的操作(如獲取視頻流URL的
GetStreamUri
)。 - Binding & Service:指定服務綁定方式(如HTTP傳輸)和訪問地址。
示例:ONVIF設備服務的WSDL片段:
<definitions xmlns:tns="http://www.onvif.org/ver10/device/wsdl"><types><xsd:import schemaLocation="onvif.xsd"/></types><message name="GetServicesRequest"/><portType name="Device"><operation name="GetServices"/></portType><binding name="DeviceBinding" type="tns:Device"><soap:binding transport="http://schemas.xmlsoap.org/soap/http"/></binding><service name="DeviceService"><port binding="tns:DeviceBinding"><soap:address location="http://camera-ip/onvif/device_service"/></port></service>
</definitions>
四、構建SOAP消息的實踐
構建SOAP消息需嚴格遵循WSDL定義的參數類型和命名空間。以設置H.265視頻編碼為例,Python代碼示例如下:
import requests
from requests.auth import HTTPDigestAuthsoap_message = """
<ns2:SetVideoEncoderConfiguration xmlns:ns2="http://www.onvif.org/ver10/media/wsdl"><ProfileToken>MediaProfile2</ProfileToken><Configuration><Name>H.265 Encoder</Name><Encoding>H265</Encoding><Resolution><Width>1920</Width><Height>1080</Height></Resolution></Configuration>
</ns2:SetVideoEncoderConfiguration>
"""response = requests.post(url="http://192.168.1.100/onvif/Media",auth=HTTPDigestAuth("admin", "password"),data=soap_message,headers={'Content-Type': 'application/soap+xml'}
)
print(response.content)
此示例通過zeep
庫解析WSDL生成客戶端,并發送SOAP請求修改編碼配置。
五、ONVIF的核心功能
- 設備管理:獲取設備信息(型號、固件版本)、配置網絡參數。
- 媒體控制:設置視頻編碼(如H.264/H.265)、分辨率、幀率。
- PTZ控制:遠程操控云臺(轉動、變焦)。
- 事件處理:訂閱運動檢測、報警觸發等實時事件。
- 視頻分析:支持目標檢測、行為分析等智能功能。
應用場景:
- 車載監控:360°全景環視系統通過ONVIF實現多攝像頭統一管理,支持實時視頻傳輸與盲區預警。
- 智能安防:集成門禁、報警設備,構建多模塊聯動的安防平臺。
六、總結
ONVIF協議通過標準化接口和開放的Web Service架構,解決了網絡視頻設備的碎片化問題。其核心在于WSDL定義的統一接口和SOAP實現的跨平臺通信。開發者可借助工具(如gSOAP
)快速生成代碼,而終端用戶則受益于靈活的集成方案與成本優化。隨著物聯網和智能安防的發展,ONVIF將持續推動行業生態的協同創新。
參考資料:
- [ONVIF協議介紹 - 阿里云開發者社區]
- [ONVIF規范的實現機制 - CuPlayer]
- [ONVIF WSDL詳解 - CSDN]