1、电脑网络不稳定,建议通过onvif官网下载全部WSDL\XSD资源:https://www.onvif.org/ch/profiles/specifications/
WSDL资源:
media2.wsdl devicemgmt.wsdl media.wsdl event.wsdl display.wsdl deviceio.wsdl imaging.wsdl ptz.wsdl receiver.wsdl recording.wsdl search.wsdl replay.wsdl analytics.wsdl actionengine.wsdl accesscontrol.wsdl doorcontrol.wsdl accessrules.wsdl authenticationbehavior.wsdl analytics.wsdl thermal.wsdl schedule.wsdl provisioning.wsdl advancedsecurity.wsdl credential.wsdl uplink.wsdl
2、生成onvif .h源文件
./wsdl2h -o onvif.h -t ./typemap.dat media2.wsdl devicemgmt.wsdl media.wsdl event.wsdl display.wsdl deviceio.wsdl imaging.wsdl ptz.wsdl receiver.wsdl recording.wsdl search.wsdl replay.wsdl analytics.wsdl actionengine.wsdl accesscontrol.wsdl doorcontrol.wsdl accessrules.wsdl authenticationbehavior.wsdl analytics.wsdl thermal.wsdl schedule.wsdl provisioning.wsdl advancedsecurity.wsdl credential.wsdl uplink.wsdl
注意不同的wsdl以空格分开。
目前Onvif官网提供的最新的WSDL文件一共有25个,可以将其下载下来。不过这些文件直接都是相互关联的,下载的话,除了这25个文件之外,还要下载所有相关联的文件。另外,下载之后,还需要更改文件中的路径,将所有wsdl文件中的schemaLocation以及location所指的路径进行修改,修改为本地的地址。当然如果网速够快,提倡直接在线生成头文件和源文件。另外为了避免后续开发过程中出现某些功能的缺省,最好一次性生成包含所有功能的代码。
3、生成onvif C源文件:
./soapcpp2 -j -x -C -L onvif.h -I /home/gsoap/gsoap-2.8/gsoap/import -I /home/gsoap/gsoap-2.8/gsoap
4、生成libonvif.so
日志文件较大,编译时建议去除-D SOAP_DEBUG,可不生成日志文件
-rw-r--r-- 1 root root 9.4M Mar 15 02:43 RECV.log
-rw-r--r-- 1 root root 5.4M Mar 15 02:43 SENT.log
-rw-r--r-- 1 root root 576.3M Mar 15 02:43 TEST.log
RECV.log是onvif接收到的SOAP数据,没接收一条,都会在RECV.log中记录
SENT.log是onvif发送出去的SOAP数据,没发送一套,也会在SENT.log中生成记录
TEST.log,如果说RECV和SENT可以用wireshark工具抓包代替,那么TEST.log是谁也替代不了
Makefile编写:
--目标
EXEC=libonvif.so
OBJS_PATH=./
SRC=$(notdir $(wildcard *.cpp))
OBJS=$(patsubst %.cpp,$(OBJS_PATH)/%.o,$(SRC))
#--动态库编译选项
CC=arm-hisiv400-linux-g++
CFLAGS+=-fPIC -Wall -D WITH_NONAMESPACES -D WITH_OPENSSL -D WITH_NOEMPTYSTRUCT -D WITH_DOM #-D SOAP_DEBUG -O3 -g
LDFLAGS+=-shared
CXXFLAGS+='-DWITH_OPENSSL -DWITH_NONAMESPACES'
LDLIBS+= -lssl \
-lcrypto \
-lpthread
#--目标及规则
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $^ $(CFLAGS) $(LDFLAGS) -o $(EXEC) -I openssl头文件/include -L openssl动态库/lib $(LDLIBS)
%.o : %.cpp
$(CC) -c $< -o $@ $(CFLAGS) $(LDFLAGS) -I openssl头文件/include -L openssl动态库/lib $(LDLIBS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o *.so