2012年7月4日 星期三

ONVIF -- 自動偵測IPCam 的流程分析


使用一台符合 ONVIF 標準的 NVR 與 IPCam,測試並記錄其自動偵測 IPCam 以及加入 IPCam 的流程,以(Gxxx NVR為例)


自動偵測 IPCam

1. NVR 會使用 multicast的方式,
   傳送資料到 239.255.255.250 port 3702(ws-discovery)
 
2. 若網路上存在 IPCam,則會回應此訊息

3. NVR 與 IPCam 完成 ws-discovery 流程之後,其實此時就已經找到 IPCam了
   後續便可以改成使用 ONVIF 的訊息進行溝通





設定IPCam 

當確定 IPCam 的 IP位址之後,就可以透過 ONVIF 指令設定 IPCam

1. 取得系統基本資訊
a. GetNetworkInterfaces(此時沒帶帳號密碼,因此可能會失敗)
b. GetSystemDateAndTime(此時沒帶帳號密碼,因此可能會失敗)
c. GetNetworkInterfaces(此時會帶帳號密碼,可得知IPCam有幾張網路卡,對應的ipaddress)
d. GetCapabilities(詢問IPCam支援ONVIF定義的那些能力,例如Imaging,Media等等)

2. 取得 video 設定資訊
a. GetProfiles(取得IPCam預設的Profiles,一個Profile主要設定溝通時所採用的meida,
可能會設定對應的video source, video encoder等資訊)
b. GetVideoEncoderConfigurationOptions
c. GetVideoEncoderConfigurations
d. GetVideoSourceConfigurations
e. GetVideoSources
f. GetGuaranteedNumberOfVideoEncoderInstances

3. 取得網路與audio 設定資訊
GetProfiles
GetNetworkInterfaces
GetNetworkDefaultGateway
GetDeviceInformation
GetRelayOutputs
GetAudioEncoderConfigurationOptions
GetAudioSources
GetAudioSourceConfigurations
GetAudioEncoderConfigurations

4. 取得 PTZ 資訊
GetProfiles
GetConfigurations
GetConfiguration
GetNode
GetPresets
GetOptions
GetMoveOptions
GetOptions

5. 設定 Video/Audio,其作法固定會先Get一次,之後才做Set
GetVideoSourceConfigurations
SetVideoSourceConfigurations
GetAudioSourceConfigurations
SetVideoSourceConfigurations
GetAudioSourceConfigurations
SetAudioSourceConfigurations


6. 開始播放串流
GetStreamUri
SetSynchronizationPoint
此時 NVR 便開始與 IPCam 建立RTSP連線,當連線建立之後便會回復 SetSynchronizationPointResponse,所以當收到 SetSynchronizationPointResponse 時,RTP 可能就已經在傳送封包了。

心得

  1. 使用其他廠商NVR測試,Get/Set流程略有不同,但基本上都屬上述六個步驟的範疇。
  2. 上述流程沒有記錄到 CreateProfiles。
  3. 幾個值得特別注意的點
  • 一開始設定尋找設備時,便已經設定帳號密碼了,但是GetNetworkInterfaces仍會試著作一次無帳號密碼的詢問?
  • GetAudioSourceConfigurations 之後,卻呼叫 SetVideoSourceConfigurations?
  • GetVideoXXX 與 GetAudioXXX 的流程並不一致,Why?