2012年7月31日 星期二

Open DHCP Server


以下紀錄 Open DHCP Server 的使用心得。經過筆者測試,Windows XP 與 Windows 7 64bit皆可正常使用。

1. 軟體安裝
至 http://sourceforge.net/projects/dhcpserver/ 可以下載程式(此時最新版為V1.50)
下載後,雙擊程式後會自動安裝至 C:\OpenDHCPServer 或是 C:\Program Files\OpenDHCPServer

ONVIF -- Test Tool 11.12 測試環境設定注意事項


執行 ONVIF 11.12 測試工具時,幾點注意事項整理如後

  • Static IP 測試,會將IP位址為目前IP位址+1,例如:原始的IP位址為 192.168.0.30, 設定後的位址會是 192.168.0.31。因此設定IPCam位址時,需要注意區域網路上不能夠存在有相同或相鄰的位址。
  • 因為測試過程會使用 DHCP 取得新的 IP Address,DHCP取得的位址與靜態設定的位址可能屬於不同網域,例如:static ip=192.168.0.90, DHCP IP=192.168.82.90因此測試工具機器可能需要設定兩組IP位址。否則 DHCP 測試之後便會無法正常運行。
  • 需要設定Events,包含event topic 與 Topic namespaces
  • 每台IPCam處理訊息與重新啟動的時間不同,因此需要針對各機器的特性設定不同的timeout 值。
  • 執行 Test Tool時,要記得使用administrator的權限

ONVIF -- Test Tool 與 Core spec 版本對應關係

Below list the latest version of ONVIF test tool.

2012年7月29日 星期日

ONVIF -- Genetec NVR add a new device


Genetec NVR version SR1 新增IPCame的流程(使用 ONVIF 規範)

|Time     | 192.168.0.169                         |
|         |                   | 192.168.0.30      |                   
|3.138    |         GetNetworkInterface           |SOAP/ONVIF: GetNetworkInterfaces
|         |(49575)  ------------------>  (80)     |
|3.215    |         Fault     |                   |SOAP/ONVIF: Fault
|         |(49575)  <------------------  (80)     |

ONVIF -- Milestone NVR add a new device


MileStone NVR 新增 IPCam 的流程

|Time     | 192.168.0.241                         | 192.168.0.30                          |
|         |                   | 192.168.0.240     |                   
|9.148984 |         HTTP/1.1 200 OK               |                   |HTTP/XML: HTTP/1.1 200 OK 
|         |(2869)   ------------------>  (1212)   |                   |
|24.187365|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1218)   ------------------>  (80)     |
|24.432826|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1218)   <------------------  (80)     |
|24.437700|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1219)   ------------------>  (80)     |
|24.577916|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1219)   <------------------  (80)     |
|34.201754|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1249)   ------------------>  (80)     |
|34.339486|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1249)   <------------------  (80)     |
|34.342224|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1250)   ------------------>  (80)     |
|34.496421|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1250)   <------------------  (80)     |
|35.033815|         HTTP/1.1 200 OK               |                   |HTTP/XML: HTTP/1.1 200 OK 
|         |(2869)   ------------------>  (1251)   |                   |
|44.217232|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1254)   ------------------>  (80)     |
|44.416000|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1254)   <------------------  (80)     |
|44.426606|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1255)   ------------------>  (80)     |
|44.574057|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1255)   <------------------  (80)     |
|48.782766|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1256)   ------------------>  (80)     |
|49.133063|                   |         GetCapabilitiesResp           |SOAP/ONVIF: GetCapabilitiesResponse
|         |                   |(1256)   <------------------  (80)     |
|49.144355|                   |         GetNetworkProtocols           |SOAP/ONVIF: GetNetworkProtocols
|         |                   |(1257)   ------------------>  (80)     |
|49.364338|                   |         GetNetworkProtocols           |SOAP/ONVIF: GetNetworkProtocolsResponse
|         |                   |(1257)   <------------------  (80)     |
|49.374824|                   |         GetDeviceInformatio           |SOAP/ONVIF: GetDeviceInformation
|         |                   |(1258)   ------------------>  (80)     |
|49.576957|                   |         GetDeviceInformatio           |SOAP/ONVIF: GetDeviceInformationResponse
|         |                   |(1258)   <------------------  (80)     |
|49.583928|                   |         GetVideoEncoderConf           |SOAP/ONVIF: GetVideoEncoderConfigurationOptions
|         |                   |(1259)   ------------------>  (80)     |
|49.935724|                   |         GetVideoEncoderConf           |SOAP/ONVIF: GetVideoEncoderConfigurationOptionsResponse
|         |                   |(1259)   <------------------  (80)     |
|49.944473|                   |         GetVideoEncoderConf           |SOAP/ONVIF: GetVideoEncoderConfigurations
|         |                   |(1261)   ------------------>  (80)     |
|50.149230|                   |         GetVideoEncoderConf           |SOAP/ONVIF: GetVideoEncoderConfigurationsResponse
|         |                   |(1261)   <------------------  (80)     |
|50.154842|                   |         GetVideoSources               |SOAP/ONVIF: GetVideoSources
|         |                   |(1262)   ------------------>  (80)     |
|50.299977|                   |         GetVideoSourcesResp           |SOAP/ONVIF: GetVideoSourcesResponse
|         |                   |(1262)   <------------------  (80)     |
|50.305202|                   |         GetImagingSettings            |SOAP/ONVIF: GetImagingSettings
|         |                   |(1263)   ------------------>  (80)     |
|50.507408|                   |         GetImagingSettingsR           |SOAP/ONVIF: GetImagingSettingsResponse
|         |                   |(1263)   <------------------  (80)     |
|50.515345|                   |         GetOptions|                   |SOAP/ONVIF: GetOptions
|         |                   |(1264)   ------------------>  (80)     |
|50.722685|                   |         GetOptionsResponse            |SOAP/ONVIF: GetOptionsResponse
|         |                   |(1264)   <------------------  (80)     |
|50.735629|                   |         GetAudioEncoderConf           |SOAP/ONVIF: GetAudioEncoderConfigurationOptions
|         |                   |(1265)   ------------------>  (80)     |
|50.952790|                   |         GetAudioEncoderConf           |SOAP/ONVIF: GetAudioEncoderConfigurationOptionsResponse
|         |                   |(1265)   <------------------  (80)     |
|50.955850|                   |         GetAudioEncoderConf           |SOAP/ONVIF: GetAudioEncoderConfigurations
|         |                   |(1266)   ------------------>  (80)     |
|51.218220|                   |         GetAudioEncoderConf           |SOAP/ONVIF: GetAudioEncoderConfigurationsResponse
|         |                   |(1266)   <------------------  (80)     |
|51.227107|                   |         GetAudioSourceConfi           |SOAP/ONVIF: GetAudioSourceConfigurations
|         |                   |(1267)   ------------------>  (80)     |
|51.448708|                   |         GetAudioSourceConfi           |SOAP/ONVIF: GetAudioSourceConfigurationsResponse
|         |                   |(1267)   <------------------  (80)     |
|51.456690|                   |         GetProfiles                   |SOAP/ONVIF: GetProfiles
|         |                   |(1268)   ------------------>  (80)     |
|51.743706|                   |         GetProfilesResponse           |SOAP/ONVIF: GetProfilesResponse
|         |                   |(1268)   <------------------  (80)     |
|51.746977|                   |         GetRelayOutputs               |SOAP/ONVIF: GetRelayOutputs
|         |                   |(1269)   ------------------>  (80)     |
|51.926615|                   |         GetRelayOutputsResp           |SOAP/ONVIF: GetRelayOutputsResponse
|         |                   |(1269)   <------------------  (80)     |
|51.947577|                   |         GetNetworkInterface           |SOAP/ONVIF: GetNetworkInterfaces
|         |                   |(1270)   ------------------>  (80)     |
|52.130577|                   |         GetNetworkInterface           |SOAP/ONVIF: GetNetworkInterfacesResponse
|         |                   |(1270)   <------------------  (80)     |
|54.231426|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1272)   ------------------>  (80)     |
|54.344283|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1272)   <------------------  (80)     |
|54.350844|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1273)   ------------------>  (80)     |
|54.505541|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1273)   <------------------  (80)     |
|64.246181|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1276)   ------------------>  (80)     |
|64.352016|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1276)   <------------------  (80)     |
|64.365884|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1277)   ------------------>  (80)     |
|64.517547|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1277)   <------------------  (80)     |
|74.259460|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1280)   ------------------>  (80)     |
|74.376467|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1280)   <------------------  (80)     |
|74.379551|                   |         GetCapabilities               |SOAP/ONVIF: GetCapabilities
|         |                   |(1281)   ------------------>  (80)     |
|74.527776|                   |         Fault     |                   |SOAP/ONVIF: Fault
|         |                   |(1281)   <------------------  (80)     |

2012年7月25日 星期三

ONVIF -- 透過 gSOAP 產生程式碼



gSOAP 可以幫忙將 wsdl 所定義的 schema 轉換成對應的程式碼,以下紀錄如何轉換的過程。


操作步驟

一、下載 gSOAP
連結 http://gsoap2.sourceforge.net/,下載 gSOAP,此篇文章撰寫時的最新版本為 2.8.9 。
 
二、利用 wsdl2h.exe ,產生 header files,此處以 media.wsdl 為例
wsdl2h.exe -c -o media.h http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.w3.org/2006/03/addressing/ws-addr.xsd 

三、使用 header file 產生程式碼,若 header file 較大,則需較長的產生時間。
soapcpp2 -C –I../../import  media.h
註:"-C"表示產生Client端的程式碼,改成"-S"便會產生Server端程式碼。

四、成功後,會產生 149 個檔案,如下
media.h
MediaBinding.AddAudioDecoderConfiguration.req.xml
MediaBinding.AddAudioDecoderConfiguration.res.xml
MediaBinding.AddAudioEncoderConfiguration.req.xml
MediaBinding.AddAudioEncoderConfiguration.res.xml
MediaBinding.AddAudioOutputConfiguration.req.xml
MediaBinding.AddAudioOutputConfiguration.res.xml
MediaBinding.AddAudioSourceConfiguration.req.xml
MediaBinding.AddAudioSourceConfiguration.res.xml
MediaBinding.AddMetadataConfiguration.req.xml
MediaBinding.AddMetadataConfiguration.res.xml
MediaBinding.AddPTZConfiguration.req.xml
MediaBinding.AddPTZConfiguration.res.xml
MediaBinding.AddVideoAnalyticsConfiguration.req.xml
MediaBinding.AddVideoAnalyticsConfiguration.res.xml
MediaBinding.AddVideoEncoderConfiguration.req.xml
MediaBinding.AddVideoEncoderConfiguration.res.xml
MediaBinding.AddVideoSourceConfiguration.req.xml
MediaBinding.AddVideoSourceConfiguration.res.xml
MediaBinding.CreateProfile.req.xml
MediaBinding.CreateProfile.res.xml
MediaBinding.DeleteProfile.req.xml
MediaBinding.DeleteProfile.res.xml
MediaBinding.GetAudioDecoderConfiguration.req.xml
MediaBinding.GetAudioDecoderConfiguration.res.xml
MediaBinding.GetAudioDecoderConfigurationOptions.req.xml
MediaBinding.GetAudioDecoderConfigurationOptions.res.xml
MediaBinding.GetAudioDecoderConfigurations.req.xml
MediaBinding.GetAudioDecoderConfigurations.res.xml
MediaBinding.GetAudioEncoderConfiguration.req.xml
MediaBinding.GetAudioEncoderConfiguration.res.xml
MediaBinding.GetAudioEncoderConfigurationOptions.req.xml
MediaBinding.GetAudioEncoderConfigurationOptions.res.xml
MediaBinding.GetAudioEncoderConfigurations.req.xml
MediaBinding.GetAudioEncoderConfigurations.res.xml
MediaBinding.GetAudioOutputConfiguration.req.xml
MediaBinding.GetAudioOutputConfiguration.res.xml
MediaBinding.GetAudioOutputConfigurationOptions.req.xml
MediaBinding.GetAudioOutputConfigurationOptions.res.xml
MediaBinding.GetAudioOutputConfigurations.req.xml
MediaBinding.GetAudioOutputConfigurations.res.xml
MediaBinding.GetAudioOutputs.req.xml
MediaBinding.GetAudioOutputs.res.xml
MediaBinding.GetAudioSourceConfiguration.req.xml
MediaBinding.GetAudioSourceConfiguration.res.xml
MediaBinding.GetAudioSourceConfigurationOptions.req.xml
MediaBinding.GetAudioSourceConfigurationOptions.res.xml
MediaBinding.GetAudioSourceConfigurations.req.xml
MediaBinding.GetAudioSourceConfigurations.res.xml
MediaBinding.GetAudioSources.req.xml
MediaBinding.GetAudioSources.res.xml
MediaBinding.GetCompatibleAudioDecoderConfigurations.req.xml
MediaBinding.GetCompatibleAudioDecoderConfigurations.res.xml
MediaBinding.GetCompatibleAudioEncoderConfigurations.req.xml
MediaBinding.GetCompatibleAudioEncoderConfigurations.res.xml
MediaBinding.GetCompatibleAudioOutputConfigurations.req.xml
MediaBinding.GetCompatibleAudioOutputConfigurations.res.xml
MediaBinding.GetCompatibleAudioSourceConfigurations.req.xml
MediaBinding.GetCompatibleAudioSourceConfigurations.res.xml
MediaBinding.GetCompatibleMetadataConfigurations.req.xml
MediaBinding.GetCompatibleMetadataConfigurations.res.xml
MediaBinding.GetCompatibleVideoAnalyticsConfigurations.req.xml
MediaBinding.GetCompatibleVideoAnalyticsConfigurations.res.xml
MediaBinding.GetCompatibleVideoEncoderConfigurations.req.xml
MediaBinding.GetCompatibleVideoEncoderConfigurations.res.xml
MediaBinding.GetCompatibleVideoSourceConfigurations.req.xml
MediaBinding.GetCompatibleVideoSourceConfigurations.res.xml
MediaBinding.GetGuaranteedNumberOfVideoEncoderInstances.req.xml
MediaBinding.GetGuaranteedNumberOfVideoEncoderInstances.res.xml
MediaBinding.GetMetadataConfiguration.req.xml
MediaBinding.GetMetadataConfiguration.res.xml
MediaBinding.GetMetadataConfigurationOptions.req.xml
MediaBinding.GetMetadataConfigurationOptions.res.xml
MediaBinding.GetMetadataConfigurations.req.xml
MediaBinding.GetMetadataConfigurations.res.xml
MediaBinding.GetProfile.req.xml
MediaBinding.GetProfile.res.xml
MediaBinding.GetProfiles.req.xml
MediaBinding.GetProfiles.res.xml
MediaBinding.GetServiceCapabilities.req.xml
MediaBinding.GetServiceCapabilities.res.xml
MediaBinding.GetSnapshotUri.req.xml
MediaBinding.GetSnapshotUri.res.xml
MediaBinding.GetStreamUri.req.xml
MediaBinding.GetStreamUri.res.xml
MediaBinding.GetVideoAnalyticsConfiguration.req.xml
MediaBinding.GetVideoAnalyticsConfiguration.res.xml
MediaBinding.GetVideoAnalyticsConfigurations.req.xml
MediaBinding.GetVideoAnalyticsConfigurations.res.xml
MediaBinding.GetVideoEncoderConfiguration.req.xml
MediaBinding.GetVideoEncoderConfiguration.res.xml
MediaBinding.GetVideoEncoderConfigurationOptions.req.xml
MediaBinding.GetVideoEncoderConfigurationOptions.res.xml
MediaBinding.GetVideoEncoderConfigurations.req.xml
MediaBinding.GetVideoEncoderConfigurations.res.xml
MediaBinding.GetVideoSourceConfiguration.req.xml
MediaBinding.GetVideoSourceConfiguration.res.xml
MediaBinding.GetVideoSourceConfigurationOptions.req.xml
MediaBinding.GetVideoSourceConfigurationOptions.res.xml
MediaBinding.GetVideoSourceConfigurations.req.xml
MediaBinding.GetVideoSourceConfigurations.res.xml
MediaBinding.GetVideoSources.req.xml
MediaBinding.GetVideoSources.res.xml
MediaBinding.nsmap
MediaBinding.RemoveAudioDecoderConfiguration.req.xml
MediaBinding.RemoveAudioDecoderConfiguration.res.xml
MediaBinding.RemoveAudioEncoderConfiguration.req.xml
MediaBinding.RemoveAudioEncoderConfiguration.res.xml
MediaBinding.RemoveAudioOutputConfiguration.req.xml
MediaBinding.RemoveAudioOutputConfiguration.res.xml
MediaBinding.RemoveAudioSourceConfiguration.req.xml
MediaBinding.RemoveAudioSourceConfiguration.res.xml
MediaBinding.RemoveMetadataConfiguration.req.xml
MediaBinding.RemoveMetadataConfiguration.res.xml
MediaBinding.RemovePTZConfiguration.req.xml
MediaBinding.RemovePTZConfiguration.res.xml
MediaBinding.RemoveVideoAnalyticsConfiguration.req.xml
MediaBinding.RemoveVideoAnalyticsConfiguration.res.xml
MediaBinding.RemoveVideoEncoderConfiguration.req.xml
MediaBinding.RemoveVideoEncoderConfiguration.res.xml
MediaBinding.RemoveVideoSourceConfiguration.req.xml
MediaBinding.RemoveVideoSourceConfiguration.res.xml
MediaBinding.SetAudioDecoderConfiguration.req.xml
MediaBinding.SetAudioDecoderConfiguration.res.xml
MediaBinding.SetAudioEncoderConfiguration.req.xml
MediaBinding.SetAudioEncoderConfiguration.res.xml
MediaBinding.SetAudioOutputConfiguration.req.xml
MediaBinding.SetAudioOutputConfiguration.res.xml
MediaBinding.SetAudioSourceConfiguration.req.xml
MediaBinding.SetAudioSourceConfiguration.res.xml
MediaBinding.SetMetadataConfiguration.req.xml
MediaBinding.SetMetadataConfiguration.res.xml
MediaBinding.SetSynchronizationPoint.req.xml
MediaBinding.SetSynchronizationPoint.res.xml
MediaBinding.SetVideoAnalyticsConfiguration.req.xml
MediaBinding.SetVideoAnalyticsConfiguration.res.xml
MediaBinding.SetVideoEncoderConfiguration.req.xml
MediaBinding.SetVideoEncoderConfiguration.res.xml
MediaBinding.SetVideoSourceConfiguration.req.xml
MediaBinding.SetVideoSourceConfiguration.res.xml
MediaBinding.StartMulticastStreaming.req.xml
MediaBinding.StartMulticastStreaming.res.xml
MediaBinding.StopMulticastStreaming.req.xml
MediaBinding.StopMulticastStreaming.res.xml
soapC.c
soapClient.c
soapClientLib.c
soapH.h
soapStub.h

五、參考 soapStub.h,實作對應的函數,例如:soap_serve___ns2__GetStreamUri(struct soap*);,此處,我將所有相關的函數統一放在soapStub.c內。


六、若要產生完整的 onvif API,則可以加入所有 onvif 所定義的 wsdl, 參考下列指令

wsdl2h.exe -c -o onvif.h
http://www.onvif.org/onvif/ver10/schema/onvif.xsd
http://www.w3.org/2006/03/addressing/ws-addr.xsd
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl
http://www.onvif.org/onvif/ver10/deviceio.wsdl
http://docs.oasis-open.org/wsrf/rw-2.wsdl
http://docs.oasis-open.org/wsn/bw-2.wsdl
http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl
http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl
http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl


問題釋疑

1. Critical error: #import: Cannot open file "ns1.h" for reading.
    wsdl2h.exe 使用時加入 http://www.w3.org/2006/03/addressing/ws-addr.xsd 即可。


2. 編譯時發現少了 stdsoap2.h
    此檔案可在 \gsoap_2.8.9\gsoap-2.8\gsoap\ 取得。
    複製時應該同時複製 stdsoap2.h 與 stdsoap2.c


3. Makefile 舉例,因為我在 Windows 使用 mingw 來編譯,其Makefile 如下
OBJS = stdsoap2.o soapC.o soapClient.o soapClientLib.o soapStub.o
all: onvif_media
%.o: %.c soapH.h soapStub.h import/*.h
gcc -c $< -o $@
onvif_media: $(OBJS)
gcc $(OBJS) -o $@
clean:
rm -f *.o onvif_media.exe

參考資料:

  1. wsdl2h 與 soapcpp2 用法
  2. gSOAP 中文使用介紹
  3. http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html

 



2012年7月24日 星期二

[日文][歌詞] 瞳をとじて


http://vlog.xuite.net/play/ZVV1UzV0LTE5MjAzMTAuZmx2/平井堅-輕閉雙眼?html5=1


每當早晨醒來 你脫下的軀殼總在身邊
過去總能感受到你背後的溫暖 今天卻是一陣寒冷
停止苦笑 拉開沉重的窗簾 炫目的朝陽 每天追趕著我
那天 讓你見到我哭泣的臉 眼淚映照著夕陽
每當我祈禱著能夠卸下肩膀上的溫暖
我的心 與身體 卻都牢記著你