目前ONVIF协议家族设备已占据数字监控行业半壁江山以上,亲,作为开发者的你还在犹豫是否了解下吗?本文介绍了ONVIF客户端从设备搜索,鉴权,能力获取,媒体信息获取,URI地址获取的整套流程。文章只讲述了比较重要或其他博文没有讲述的开发点,详细可以参考文末参考文章。rtsp和onvif协议哪个好最后,能获得rtsp地址之后,然后去做其他功能比如录像,ptz这些就非常得心应手了。本文出自CSDN-固本培元 ,转载注明出自:leolupy@gmail.com。
感谢guog先生,快活林高先生,onvif全国交流群的的酷夏先生在开发过程中给予的巨大支持,没有你们的帮助开发过程将异常艰难啊。谢谢了!
ONVIF致力于通过全球性的开放接口标准来推进网络视频在安防市场的应用,这一接口标准将确保不同厂商生产的网络视频产品具有互通性。2008年11月,论坛正式发布了ONVIF第一版规范——ONVIF核心规范1.0。随着视频监控的网络化应用,产业链的分工将越来越细。rtsp和onvif协议哪个好有些厂商专门做,有些厂商专门做DVS,有些厂商则可能专门做平台等,然后通过集成商进行集成,提供给最终客户。这种产业合作模式,已经迫切的需要行业提供越来越标准化的接口平台。
本文开发环境:Centos6.4 Gsoap:2.8.16 soap:1.2 onvif:2.4 。注: 本文提供的参考代码其实网上都可以找到,这里做一个整理,供大家交流学习,共同提高。
搜索:Probe: 发现网络,获取webserver地址
能力获取:GetCapabilities:获取设备能力文件,从中识别出媒体信息地址URI:
媒体信息获取:GetProfiles: 获取媒体信息文件,识别主通道、子通道的视频编码分辨率
RTSP地址获取:GetStreamUri:获取指定通道的流媒体地址rtsp://192.168.15.240:554/Streaming/Channels/2?transportmode=unicast
3.离线或者生成onvif.h。如果不需要最新的版本推荐离线方式。笔者使用的是这种方式。

如果直接生成对应C的库文件会发生重复定义错误,可以修改该文件。
wsa5.h(288): **ERROR**: remote method name clash: struct/class 'SOAP_ENV__Fault' already declared at line 274
打开文件gsoap_2.8.16/gsoap-2.8/gsoap/import/wsa5.h
将277行intSOAP_ENV__Fault修改为intSOAP_ENV__Fault_alex
笔者没有使用这种方法,是将这个结构体直接注释的方式,最后的结果是,都可以使用。
同时上一步生成的onvif.h文件中没有打开wsse.h, 导致最后生成代码中SOAP_ENV__Header 结构体中缺少定义 wsse__Security数据段,无法进行鉴权命令。
即:添加对openssl的支持,在上一步生成的onvif.h中添加(可选)
#import "wsse.h"
随后使用命令生成:
soap2 -c onvif.h -x -I/root/Tools/Gsoap/gsoap-2.8/gsoap/import -I/root/Tools/Gsoap/gsoap-2.8/gsoap/ -I/root/Tools/Gsoap/gsoap-2.8/gsoap/custom -I/root/Tools/Gsoap/gsoap-2.8/gsoap/extras -I/root/Tools/Gsoap/gsoap-2.8/gsoap/plugin
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-47681-1.html
打个比方