Onvif框架代碼生成


1:Onvif簡介

      安防產品的通用標準目前有兩大主流陣營:Onvif以及Psia,從目前廠家的支持數量以及市場佔有量來說,Onvif已經牢牢佔據了領先地位,且在網絡視頻監控領域,優勢地位更明顯。下面摘錄百科的描述來給Onvif做下簡單介紹:

      2008年5月,由安訊士聯合博世及索尼三方宣佈將攜手共同成立一個國際開放型網絡視頻產品標準網絡接口開發論壇,取名爲ONVIF(Open Network Video Interface Forum,開放型網絡視頻接口論壇),並以公開、開放的原則共同制定開放性行業標準。

      ONVIF標準將爲網絡視頻設備之間的信息交換定義通用協議,包括裝置搜尋、實時視頻、音頻、元數據和控制信息等。網絡視頻產品由此所能提供的多種可能性,使終端用戶,集成商,顧問和生產廠商能夠輕鬆地從中獲益,並獲得高性價比、更靈活的解決方案、市場擴張的機會以及更低的風險。
據瞭解,目前有部分企業和電信運營商已經制定了與之相關的業內規範,也有一些企業聯盟提出了一些互聯互通的企業標準。ONVIF則是面向全球,出發點是制訂一個完全開放的標準。這項標準的主要目標在於推動不同品牌網絡視頻設備之間的整合,協助製造商,軟件開發人員以及獨立軟件廠商確保產品的互聯互通性,很適合於企業級市場。
從ONVIF的官方網站上可瞭解,從去年年底已經正式對外招收會員。同時爲適應各種不同的參與級別,ONVIF還提供了不同等級的會員資格,可以選擇高級、中級或用戶會員級別。論壇接納的會員已有近40家。其中,高級會員有12家,除了三家發起公司外,松下、三星、思科、西門子、TI等著名品牌位列其中,而國內的海康威視、浙江大華、波粒科技和佳信捷也是ONVIF論壇的高級會員。
推行標準的過程也是淨化市場的重要手段,有利於整合安防市場資源,減少大量重複開發的勞動,和無謂的人力、物力和時間消耗,提高產品的可靠性。更大的互通和兼容性有利於產業的集體升級,最終給消費者帶來更大的實惠。相信統一的開放型標準平臺將極大促進安防監控業的健康發展。

   

 2:開發框架搭建

     1:gsoap官網(http://gsoap2.sourceforge.net/)下載最新版gsoap(本次版本爲gsoap_2.8.17)並解壓。

     2:新建一個文件夾(OnvifFramework)

           將解壓的gsoap_2.8.17文件拷貝至OnvifFramework目錄下

           將gsoap_2.8.17\gsoap-2.8\gsoap 路徑下的typemap.dat以及gsoap_2.8.17\gsoap-2.8\gsoap\bin\win32 路徑下的wsdl2h.exe  soapcpp2.exe也拷貝至該目錄下。

     3: Onvif官網(http://www.onvif.org/Documents/Specifications.aspx)頁面裏ONVIF WSDL and XML Schemas Specifications找到各wsdl(18個左右)並下載下來

           (右鍵另存爲即可),放入GenerateSource文件夾中。

     4:生成onvif.h
           生成方式有在線生成和本地生成兩種方式。由於網絡的原因,在線生成很容易中斷。故臨時改用本地生成方式,在實際運行時發現,本地生成過程中也需要從網絡上下載

           相關的依賴文件,並且對文件路徑有如下要求: 

           OnvifFramework

                         ----level1

                              ----level2

                                   ----GenerateSource

                                         ----typemap.dat

                                         ----wsdl2h.exe

                                         ----soapcpp2.exe

                                         ----remotediscovery.wsdl  

                                         ----devicemgmt.wsdl

                                         ----analytics.wsdl

                                         ----analyticsdevice.wsdl 

                                         ----media.wsdl  

                                         ----deviceio.wsdl  

                                         ----display.wsdl  

                                         ----event.wsdl

                                         ----imaging.wsdl  

                                         ----recording.wsdl  

                                         ----replay.wsdl 

                                         ----search.wsdl  

                                         ----receiver.wsdl  

                                         ----ptz.wsdl

 

                                   ----ver10

                                          ----device

                                                 ----wsdl

                                                        ----devicemgmt.wsdl

                                          ----media

                                                ----wsdl

                                                      ----media.wsdl

                                         ----schema

                                               ----onvif.xsd

 

                       ----ver10

                             ----schema

                                    ----onvif.xsd


          管理員權限打開CMD,切換至GenerateSource目錄下,將如下指令貼到CMD窗口中回車運行即可生成onvif.h文件:

          wsdl2h -o onvif.h  -c  -s -t  ./typemap.dat  remotediscovery.wsdl  devicemgmt.wsdl analytics.wsdl  analyticsdevice.wsdl  media.wsdl  deviceio.wsdl  display.wsdl  event.wsdl imaging.wsdl  recording.wsdl  replay.wsdl search.wsdl  receiver.wsdl  ptz.wsdl

          結果信息如下圖所示:

         

        

        注:生成的時候可能會出現如下錯誤:

                wsa5.h(290): **ERROR**: remote method nameclash: struct/class 'SOAP_ENV__Fault' already declared at line 274

                解決辦法如下:

                打開gsoap_2.8.17\gsoap-2.8\gsoap\import 路徑下的wsa5.h, 將277行的SOAP_ENV__Fault結構體註釋掉(改成其他名字亦可)


      5:通過onvif.h生成源代碼框架

            將如下指令貼到CMD窗口中回車運行即可:

            soapcpp2 -2  -c  onvif.h  -x -I  ..\..\..\gsoap_2.8.17\gsoap-2.8\gsoap\import -I ..\..\..\gsoap_2.8.17\gsoap-2.8\gsoap

            看到下圖中的Compilation successful即可:

           

    

       6:生成文件代碼文件如下:

                  

                 最後做如下修改

                 1.後綴爲nsmap的命名空間文件內容都一樣,保留一個即可,後綴改爲.h文件(wsdd.nsmap更名爲wsdd.h),需要的時候包含此文件即可
                 2.刪除soapClientLib.c和soapServerLib.c文件。
                 3.將gsoap-2.8.17/gsoap-2.8/gsoap下的stdsoap2.h和stdsoap2.c文件和gsoap-2.8.17/gsoap-2.8/gsoap/custom下的duration.c文件都拷貝到當前目錄下
         

                最終的文件如下:

             

           至此Onvif的開發環境框架已經完成,客戶端的開發的話,使用soapClient.c文件;服務端開發的話,使用soapServer.c即可。

轉載地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章