文章目录
Android端实现Onvif IPC开发:
【Android音视频】Onvif-IPC开发(一)——gSoap-onvif移植到Android》
【Android音视频】Onvif-IPC开发(二)——JAVA版本onvif服务器构建Onvif-IP-Camera
【Android音视频】Onvif IPC开发(三)——YUV格式深入浅出
[【Android音视频】Onvif IPC开发(四)——Onvif移植Android架构与补全方案(更新中…) ]
阅读说明(必读)
改动,在我2018年12月1日前,博客一直没跟新这条,前面又说onvif ndk移植失败,不过我后面又调通了,相比于java版本,用java实现显得有点生硬,且容易漏下一些协议内容,导致识别或者控制上的问题,最稳妥的还是用gosap生成的onvif server端去处理协议
移植NDK最主要的问题是生成的OnvifServer工程太大,而关键便在于如何缩小工程量,这边文章整个配置是没有问题的,在环境搭建第5步,根据wsdl生成onvif.h时,需要相应的裁切。我会专门写一篇文章来介绍如何做
本文详解,在android端通过java搭建的server去模拟IPC,达到需求(实现Android端可供Onvif检测的IPC),以下是我移植的步骤及碰到的问题,你可以尝试阅读或者直接跳转到《Android端实现Onvif IPC开发(二)——在Android端搭建服务器模拟Onvif IP Camera》,以下问题留待有时间会继续解决,尽请关注后续文章,如果你已经有解决办法请务必指点一下,不甚感激 ####
一、本篇项目简介
- 大家都知道Onvif在安防领域占有牢牢领先的地位,ONVIF标准为网络视频设备之间的信息交换定义通用协议,包括装置搜寻、实时视频、音频、元数据和控制信息等,Onvif在现实中的应用,大多是嵌入式开发中使用。于是我在想,能否降Onvif协议集成到Android设备上呢,并且打包成SDK,这样的话也许很有趣,让我们来动手吧!
- Onvif协议的内容:
- ONVIF规范中设备管理和控制部分所定义的接口均以Web Services的形式提供。ONVIF规范涵盖了完全的XML及WSDL的定义。每一个支持ONVIF规范的终端设备均须提供与功能相应的Web Service。服务端与客户端的数据交互采用SOAP协议
- 音视频流则通过RTP/RTSP进行
- Onvif协议模板的生成可以通过gSoap去自动生成,SOAP协议是基于XML的,需要通过他生成的.c和.h去集成到我们的项目中
- 了解一些基本概念:
- xml:可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言
- http:超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议
- soap:简单对象访问协议是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议,它被设计成在WEB上交换结构化的和固化的信息
- WS-discovery:你在预先不知道目标服务的情况下,可以动态的探测可用的服务并调用
- wsdl:网络服务描述语言是Web Service的描述语言,它包含一系列描述某个web service的定义。这里可以通俗的理解为协议定义。
二、环境搭建
-
我的开发环境是Ubuntu 16.04 LTS 内存 8G I5 4核
-
gSoap下载地址:http://www.cs.fsu.edu/~engelen/soap.html,我下载的版本是2.8.66
-
下载好解压到工程目录ipc_project
$:./configure $:make $:make install 安装完成后执行:wsdl2h或者soapcpp2查看gSOAP是否已经安装成功 然后需要安装以下基本库: sudu apt install libssl-dev sudo apt-get install cmake sudo apt-get install build-essential sudo apt-get install libgtk2.0-dev liblib2.0-dev sudo apt-get install checkinstall 将wsa5.h的SOAP_ENV__Fault改名,因为其它地方也存在这个结构体,随意改,不冲突即可 修改typemap.dat,在 wstop = "http://docs.oasis-open.org/wsn/t-1" 后面加: # WS-Discovery 1.0 remapping wsdd10__HelloType = | wsdd__HelloType wsdd10__ByeType = | wsdd__ByeType wsdd10__ProbeType = | wsdd__ProbeType w