onvif开发

gsoap

onvif开发要到gsoap库,下载不需要安装,简单例子参见gsoap-2.8\gsoap\samples\calc,实现一个服务端做加减乘除的例子,把运算结果发给客户端(代码见:http://download.csdn.net/detail/evsqiezi/6647303)。

1 gsoap首先要定义“功能”,并解释成C文件。

使用gSOAP生成代码框架。我们有两种做法:

编写WSDL,使用wsdl2h生成头文件,再soapcpp2生成框架代码;
编写头文件,使用soapcpp2生成框架代码;
方法1比较通用,可方便使用其他语言开发,但是编写wsdl语法复杂;方法2比较简单,但不能与其他语言通用。
下载ONVIF的所有WSDL文件,并生成onvif.h的命令如下:

wsdl2h -o onvif.h -c -s -t .\typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl  http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl  http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl  http://www.onvif.org/onvif/ver10/schema/onvif.xsd  

 参数的解释如下:

            -S 仅生成客户端代码

           -t 文件名,指定type map文件,默认为typemap.dat

                        -c    产生纯C代码,否则是C++代码,默认是cpp代码
                        -L    不要产生soapClientLib.c和soapServerLib.c文件
                        -I      指定import路径
                        -x  不要产生XML示例文件
              -j     不要产生soap_Heade..等详细定义
                        -i    生成C++包装,客户端为xxxxProxy.h(.cpp),服务器端为xxxxService.h(.cpp)
           -e 禁止为enum成员加上名空间前缀

           typemap.dat文件用于指定SOAP/XML中的类型与C/C++之间的转换规则,比如在wsmap.dat里写xsd__string = | std::wstring | wchar_t* ,那么SOAP/XML中的string将转换成std::wstring或wchar_t*,这样能更好地支持中文。

2 修改生成的onvif.h,增加一句#import "wsse.h",用“soapcpp2.exe”解释生成c文件(例如:soapcpp2.exe x.h -I ..\..\import)。

遇到的问题:

生成的过程中会出现SOAP_ENV__Fault重复定义,注视掉wsa5.h中得内容就行了

ONVIF模块

设备发现
设备管理
设备输入输出服务
图像配置
媒体配置
实时流媒体
接收端配置
显示服务
事件处理

PTZ控制

入门例子

 搜索设备

注:只能搜到统一网段的设备。

获取媒体信息

2013.12.5

获取设备能力
GetCapabilities(DeviceMgmt)
从报文中提取出媒体信息URI  :http://192.168.15.240/onvif/Media,将用于查询具体的视频源、编码器配置参数。
如果设备具备用户名、密码,那么查询设备能力可能需要鉴权过程。
获取RTSP的URL的步骤:
GetProfiles(media)-》GetStreamUri(media)
GetProfiles可以获得设备的所有配置信息,这是比较全面的数据。GetProfile或者是GetProfiles成功后会获得一个Profile的profileToken,并且如果里面的
VideoEncoderConfiguration不为空,那么就可以使用该ProfileToken作为getStreamURI的参数,
GetStreamUri的请求指针中必须填写profile的ProfileToken字段,就是要指明哪一个通道的流媒体地址。
获取媒体参数
GetVideoEncoderConfigurations:可以获得单独的媒体配置信息,返回的应答中包括主通道和子通道的数据,如:宽高,帧率,位率等。

问题:

Critical error: #import: Cannot open file "stlvector.h" forreading.
    那是因为我们的头文件使用了STL(wsdl2h 没用-s选项 ),这时要使用-I选项指定gSOAP的import文件路径,这个路径是"$gsoap\gsoap\import ",$gsoap为解压目录:
如:soapcpp2 hello.h -I xx\gsoap\import

mecevp.obj : error LNK2019: 无法解析的外部符号 _EVP_PKEY_encrypt_old,该符号在函数 _soap_mec_init 中被引用

可能是在openssl库里找不到函数的定义,正确编译的方法如下:
下载并安装per(网站见:http://www.activestate.com/activeperl),安装后目录自动加入系统变量。
下载openssl(网址见:http://www.openssl.org/source/),运行"Visual Studio 2008 命令提示",以下步骤为编译release版本。
1 打开命令行,进入openssl的目录,执行“perl Configure VC-WIN32 --prefix=c:/openssl”;
2 执行“ms\do_ms”;
3 执行“nmake -f ms\ntdll.mak”;
4 执行 “nmake -f ms\ntdll.mak install”,到此编译完成,在c:/openssl目录下已经生成所需文件。
如果要编译debug版,修改ms\do_ms.bat文件,在perl util\mk1mf.pl ,perl util\mkdef.pl后面加32。

你可能感兴趣的:(onvif开发)