ubuntu下onvif协议的编译和使用
- 本文主要分享一下整体的过程和我遇到的一些问题,详细过程见参考博客中的专栏。
目录
参考文章
-https://blog.csdn.net/benkaoya/article/category/6924052
流程
编译gsoap库(需要支持openssl功能)
- 了解编译前需要下载依赖的库
- gsoap不要下最新版(最新版编译onvif时会出现错误,我现在用的是gsoap2.8.60)
- 可以参考我的分享 https://blog.csdn.net/qq_25188995/article/details/81587083
gsoap编译onvif协议
- 上面的支持openssl的gsoap编译完成后就可以用来编译onvif(在线编译)
onvif协议中调用函数以实现功能
- 编译项目时注意链接openssl的库文件,增加编译选项(-DWITH_OPENSSL)(以上是两步,我之前以为是同一步卡了好久QAQ)
- 为此专门去学习了以下cmake,写了一个CMakeiststxt(编译果然方便了很多),可以参考我的文章https://blog.csdn.net/qq_25188995/article/details/81811756
- 这一步的代码主要参考了上面博主大神的代码
- 博主的代码中显示结构体数据的文件是他自己写的(如dump…),不过他没有分享,我们只要去查一下数据结构,很容易写一个显示的代码
- 这一过程肯定要理清onvif各个函数的关系,只要去 soapStub.h这一头文件去搜索好了
- 编程过程中需要用到wireshark抓包进行分析
- 测试时用到的文件
CMakeCache.txt cmake_install.cmake dom.c duration.h
mecevp.c MediaBinding.nsmap RemoteDiscoveryBinding.nsmap smdevp.h
wsseapi.h CMakeFiles CMakeLists.txt DeviceBinding.nsmap
duration.c Makefile mecevp.h onvif.h smdevp.c
soapC.c soapH.h stdsoap2.c testfiles threads.h wsaapi.h wsseapi.c
已经实现的功能
- 设备查找
- 查询及修改设备系统时间
- 获取设备的功能
- 获取视频流的rstp流地址和截图(其实是个10s的短视频)的http地址
- 测试了几个IPC,大华、海康,DUNLOP,其中有3个海康IPC,有一个完全搜索不到
后续
- 有一些设备的信息获取不全,以及功能需要完善
- 对于大华IPC的支持
- 由于以后开发的软件是windows的,肯定要在windows环境进行编译和编码
感受
- 由于是转行,基础知识不扎实,为了一些常识类的问题折腾了许多时间,不过总算折腾出了大概的思路。这一过程中了解了许多基础工具的用途和编译的流程,收获颇丰。非常感谢各博主的分享。编译过程中存在许多重复和冗余的过程。欢迎各位交流学习。