ONVIF协议学习笔记
https://www.cnblogs.com/lsdb/p/9157302.html
https://blog.csdn.net/u013898698/article/details/55099152
https://www.cnblogs.com/croxd/p/10684693.html
https://www.cnblogs.com/croxd/p/10684877.html
WSDL是网络服务描述语言是Web Service的描述语言,它包含一系列描述某个web service的定义。
怎样向别人介绍你的 web service 有什么功能,以及每个函数调用时的参数呢?你可能会自己写一套文档,你甚至可能会口头上告诉需要使用你的 web service 的人。这些非正式的方法至少都有一个严重的问题:当程序员坐到电脑前,想要使用你的 web service 的时候,他们的工具(如 Visual Studio)无法给他们提供任何帮助,因为这些工具根本就不了解你的 web service。解决方法是:用机器能阅读的方式提供一个正式的描述文档。web service 描述语言 (WSDL) 就是这样一个基于 XML 的语言,用于描述 web service 及其函数、参数和返回值。因为是基于 XML 的,所以 WSDL 既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的 web service 生成 WSDL 文档,又能导入 WSDL 文档,生成调用相应 web service 的代码。
gSOAP编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现,从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多。绝大多数的C++web服务工具包提供一组API函数类库来处理特定的SOAP数据结构,这样就使得用户必须改变程序结构来适应相关的类库。与之相反,gSOAP利用编译器技术提供了一组透明化的SOAP API,并将与开发无关的SOAP实现细节相关的内容对用户隐藏起来。
gSOAP的编译器能够自动的将用户定义的本地化的C或C++数据类型转变为符合XML语法的数据结构,反之亦然。这样,只用一组简单的API就将用户从SOAP细节实现工作中解脱了出来,可以专注与应用程序逻辑的实现工作了。gSOAP编译器可以集成C/C++和Fortran代码(通过一个Fortran到C的接口),嵌入式系统,其他SOAP程序提供的实时软件的资源和信息;可以跨越多个操作系统,语言环境以及在防火墙后的不同组织。
gSOAP一种跨平台的C和 C++软件开发工具包。生成C/C++的RPC代码,XML数据绑定,对SOAP Web服务和其他应用形成高效的具体架构解析器,它们都受益于一个XML接口。 这个工具包提供了一个全面和透明的XML数据绑定解决方案,Autocoding节省大量开发时间来执行SOAP/XML Web服务中的C/C++。此外,使用XML数据绑定大大简化了XML自动映射。应用开发人员不再需要调整应用程序逻辑的具体库和XML为中心的数据,如 交涉DOM。
![](/qrcode.jpg)
if (ParseCapabilities(url)) ////Onvif解析 流Capabilities
{
if (ParseProfile(_capabilities)) //Onvif解析({})流Profile
{
return ParseRtsp(_capabilities); //解析rtsp 获取RTSP的值
}
}
哎哟,WSDL实在是好理解的不得了啊,简直太简单了。这也能云里雾里,我太无法理解你的逻辑了。
给你个WSDL,你可以看到webservice提供了哪些函数,需要传什么参数,每个参数是什么类型,,返回什么参数。。这太有用了,太直观了,太人性化了。
简单对象访问协议(Simple Object Access Protocol)
OpenSSL SSL是Secure Socket Layer(安全套接层协议)
NVR(Network Video Recorder即网络硬盘录像机)
大致编码流程:
struct soap *soap;
char *username = "admin";
char *password = "12345";
const char *soap_endpoint = "http://192.168.1.170/onvif/device_service";
const char *soap_action = NULL;
soap = soap_new();
if( soap == NULL )
{
printf( "soap_new()函数失败!\n" );
return -1;
}
soap_set_namespaces( soap, namespaces );
//使用函数soap_wsse_add_UsernameTokenDigest进行用户名与密码认证
//紧接着下面就可以进行ONVIF提供的协议函数的调用了。
onvif提供的API函数罗列:
SOAP_FMAC5 int SOAP_FMAC6 soap_call___daae__GetSupportedAnalyticsModules
soap_call___daae__CreateAnalyticsModules
soap_call___daae__DeleteAnalyticsModules
soap_call___daae__GetAnalyticsModules
soap_call___daae__ModifyAnalyticsModules
soap_call___dare__GetSupportedRules