onvif——1——从零到可以编程

在老东家做了五年的onvif,都是在已有架构上改,偏业务,由于各种原因一致也没有从头搭建过。新东家要做onvif,这回我全权负责,光杆司令一枚,配上我这个司令之前做的rtsp,现在已经能够基本运行,odm和海康NVR都OK。这篇文章就从头写到这。时间也过了很久,我尽量回忆写细。

gsoap

onvif协议一般都是用工具辅助开发,所有的都自己做当然可以,因为onvif就是 http + xml 的结构,但除了对空间和性能有极其严格的要求外不推荐。官网提供了各个模块的 wsdl 文件,配合 gsoap 能直接生成代码框架,省去网络收发和内容拼接解析,让开发人员能够把更多的精力放在业务上。很多人都说要做底层底层,总做业务不利于个人发展,不光我们linux C的这么讲,java的也这么讲。业务才能变现!业务做多了不可能不接触所谓的底层!如果在一个成熟的市场负责大规模业务开发,坚持住!哪种环节的问题和知识你都会遇到。

gsoap的安装包可以在我的下载里面找到,免积分。按正常项目去安装即可,先config再make再install,安装完后会有 wsd2hsoapcpp2 这两个工具,下面开始正式做onvif。

wsdl2h -o onvif.h -c -s -x https://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl

上面的指令指定了3个wsdl地址,https://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 是搜索,https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 是设备基本信息,https://www.onvif.org/ver10/media/wsdl/media.wsdl  是媒体信息。想正常使用onvif,这3个是最小的配置了。至于编译选项可查看help。这3个wsdl文件也可以下载到本地后再执行,但不建议,因为有很多依赖文件,虽然可以通过修改wsdl来实现本地操作,但那不是重点,把更多的精力防止后面编码调试更好。其中https://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 不知是什么原因在onvif官网上找不到,也许是升级替换掉了,认为大家都知道,但这个地址是有效可以打开的。

执行完之后生成onvif.h文件,再使用soapcpp2工具进行第二步操作,命令如下。其中import、custom和plugin是从gsoap直接拷贝过来。

soapcpp2 -c -x -S onvif.h -I./import:./custom:./plugin

执行完之后文件夹内部如下图所示。DeviceBinding.nsmap、MediaBinding.nsmap和wsdd.nsmap是一样的,留一份使用。onvif.h是中间环节使用,已经不再需要,可以删除。忽略掉wsdl和xsd文件夹。下面就可以使用这些文件进行onvif实际编程了。

onvif——1——从零到可以编程_第1张图片

onvif编程

这里实现搜索、校验和连视频功能。整个文件结构如下图所示:如果其中的文件生成的文件夹下没有,请从gsoap文件夹中拷贝过来。

onvif——1——从零到可以编程_第2张图片

onvif的校验依赖openssl,其中openssl从官网下载编译即可。这个工程我会上传到我的下载,1积分下载。

你可能感兴趣的:(linux,onvif)