一、理解

1.1 技术理解

ONVIF = 服务端 + 客户端 =(Web Services + RTSP)+ 客户端 = ((WSDL + SOAP) + RTSP) + 客户端

WSDL是服务端用来向客户端描述自己实现哪些请求、发送请求时需要带上哪些参数xml组织格式;SOAP是客户端向服务端发送请求时的参数的xml组织格式

Web Services实现摄像头控制(比如一些参数配置、摄象头的上下左右(PTZ)控制);RTSP实现报像头视频传输

Web Services具摄像头控制具体到技术交互实现上,其实和http差不多,客户端以类似http post的格式向服务端发送请求,然后服务端响应客户端请求。

比如GetStatus请求长这样(POST的data部份就是soap格式):

POST /onvif/device_service HTTP/1.1
Host: 192.168.220.128
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 333 <?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:tptz="http://www.onvif.org/ver20/ptz/wsdl" xmlns:tt="http://www.onvif.org/ver10/schema">
<s:Body>
<tptz:GetStatus>
<tptz:ProfileToken>prof0</tptz:ProfileToken>
</tptz:GetStatus>
</s:Body>
</s:Envelope>

参考:https://blog.csdn.net/benkaoya/article/details/72453403

1.2 位置说明

这里直接盗用一张图,原文链接:https://wenku.baidu.com/view/a2ba36327fd5360cba1adb5a.html

二、检测工具

2.1 ONVIF Device Test Tool

ONVIF Device Test Tool是官方发布的onvif检测工具,该工具只提供给ONVIF会员使用,官网不提供下载

下载链接:http://www.happytimesoft.com/download.html(20190219更新:当前似乎该页面也已不提供下载)

2.1.1 基本使用方法

这里只讲检测报像头支持哪些请求,更具体的可参考:https://wenku.baidu.com/view/510b1105a58da0116d174906.html

打开onvif device test tool之后:

第一步,下接选择要用以收发探测数据包的网卡

第二步,点击“Discover Devices”按钮检测局域网中的摄像头(本质是向发239.255.255.250:3702发送组播数据包,要求所有收到数据包的摄像头向本机3702端口进行回应)

第三步,检测完成后左下方就会呈现摄像头列表,双击要检测的摄像头,其信息就会自动填到右上方的相应内容框中

第四步,点击“Probe”探测选中主机是否真的支持onvif协议,如果没有弹框报错那就是支持的

第五步,在username和password域中填入web管理员的用户名密码,然后点击右方的“check”检测用户名密码是否有误。如果没有错误右下方的几个框将会呈现摄像头的一些信息。该处用户名密码是要输入的,因为其他选项卡的请求(如果要用到)会自动从该处读取用户名密码发往服务端进行操作鉴权。

切换到Debug选项卡

第一步,将上面Discovery选项卡中,Device Service Address框的值复制到Debug选项卡的“Service Address”框中

第二步,在左下方“Templates”中双出选择要进行检测的请求

第三步,在左上方“Authentication”中选择权限验证方式(None为不发送用户名密码,WS-Username token是onvif标准的用户名密码验证方式,Digest是RTSP中的Digest形式,用户名密码就是从Discovery那里读过来的)

第四步,点击“Send Request”发送数据包,如果没有问题在“Response”框中就会呈现返回结果

(以上操作基于我使用该工具的目的是:确认摄像头支持onvif、获取onvif请求报文以构造畸形报文测试摄像头对报文处理是否有问题。)

2.2 ONVIF Device Manager

ONVIF Device Manager是一个第三方的onvif协议测试工具,具有以下功能

下载链接:https://sourceforge.net/projects/onvifdm/?source=navbar

2.2.1 基本使用方法

onvif device manager的感觉可以认为是onvif device test tool的简化版,简化的意思一是功能少了一些,二是功能少了同时操作起来更简单明了。更具体使用可参考:https://wenku.baidu.com/view/3cb0bf1a3c1ec5da51e27002.html

第一步,打开onvif device manager,左侧是当前检测到的支持onvif的设备,可点击“Refresh”按钮刷新列表。实际使用发现不管怎么刷新该工具总是很难发现全部设备,此时可使用“Add”按钮手动添加。

第二步,双击自己要检测的设备,如果该设备真支持onvif那么在中部就会呈现支持的onvif操作。当前图中告警是因为用户名密码错误。

第三步,如果设备要求用户名密码那就在左上方的name和password框中分别输入摄像头web端的用户名密码,然后点击“Log in”。注意这里不管输什么都会“登录成功”,但真正发包时只有正确的用户名密码才能完成请求,所以一定要输入正确的web端用户名密码。

输入正确用户名密码后如下图,中部那些链接就是onvif device manager支持的操作,自己随便点即可。

ONVIF协议学习笔记的更多相关文章

  1. HTTP协议学习笔记(四)

    HTTP协议学习笔记(四) 与 HTTP 协作的 Web 服务器 一台 Web 服务器可搭建多个独立域名的 Web 网站,也可作为通信路径上的中转服务器提升传输效率. 1.用单台虚拟主机实现多个域名 ...

  2. HTTP协议学习笔记(三)

    HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...

  3. HTTP协议学习笔记(二)

    HTTP协议学习笔记(二) 1.HTTP报文 HTTP报文:用于HTTP协议交互的信息.请求报文:请求端(客户端)的HTTP报文叫做请求报文.响应报文:响应端(服务端)的HTTP报文叫做响应报文. H ...

  4. HTTP协议学习笔记(一)

    HTTP协议学习笔记(一) 1.HTTP协议用于客户端和服务端之间的通信 客户端:请求访问文本或图像等资源的一端服务端:提供资源响应的一端 在两台计算机之间使用HTTP协议通信时,在一条通信线路上必定 ...

  5. TCP/IP协议学习笔记

    计算机网络基础知识复习汇总:计算机网络基础知识复习 HTTP协议的解析:剖析 HTTP 协议 一个系列的解析文章: TCP/IP详解学习笔记(1)-- 概述 TCP/IP详解学习笔记(2)-- 数据链 ...

  6. RSA算法、SSL协议学习笔记

    最近学习计算机网络,涉及到SSL协议,我想起了去年密码学课程讲过的非对称加密RSA算法,结合阮老师的博客,写写学习笔记,这里再回忆一下. RSA算法 RSA算法是一种非对称密码算法,所谓非对称,就是指 ...

  7. 网络协议学习笔记(二)物理层到MAC层,交换机和VLAN,ICMP与ping原理

    概述 之前网络学习笔记主要讲解了IP的诞生,或者说整个操作系统的诞生,一旦有了IP,就可以在网络的环境里和其他的机器展开沟通了.现在开始给大家讲解关于网络底层的相关知识. 从物理层到MAC层:如何在宿 ...

  8. tcp/ip协议学习笔记一

    一. 简述 以前在学校学习计算机网络的时候学习多是网络7层模型OSI,了解了一些基本的计算机网络概念和协议通信格式,但是一直没弄明白其中的原理,包括各层之间的关系,应用,还有一些常见的令牌环网到底是什 ...

  9. 实验:传输层:UDP协议 学习笔记

    一.传输层协议 从之前介绍的网络层协议来看,通信的两端是两台主机,IP数据报首部就标明了这两台主机的IP地址.但是从传输层来看,是发送方主机中的一个进程与接收方主机中的一个进程在交换数据,因此,严格地 ...

随机推荐

  1. Codeforces 786 C. Till I Collapse

    题目链接:http://codeforces.com/contest/786/problem/C 大力膜了一发杜教的代码感觉十分的兹瓷啊! 我们知道如果$k$是给定的我们显然是可以直接一遍$O(n)$ ...

  2. python 判断两个列表中相同和不同的元素

    背景: 在做接口自动化时,通常会判断接口返回中的数据信息,与数据库中返回的数据信息是否一致,比如:将接口返回信息的用户姓名存放到一个列表中,将数据库返回的用户姓名存放到另一个列表中,这时需要判断两个列 ...

  3. ArrayList的详解

    数组一旦给定大小就是固定的,只能放同类型的不能再改,还有一种高级的可扩充的,就是arrayList类,被称作动态数组或者集合. 使用步骤: 1. 引用命名空间system.collections: 2 ...

  4. cacheManager ABP中的缓存

    ABP的缓存是key---(key,value) 形式存储 GetCache获取到的是ICache类型   如果知道这个ICache的具体类型  可以直接强转Icache.AsTyped<int ...

  5. System.out.println 报错: 只能运行在方法体内哦, 类里面只包含属性和方法哦,注意!

    类里面包含属性和方法 所以, System.out.println,只能放在方法体内运行,不能放在类里.方法外哦

  6. 排序——冒泡排序(java描述)

    百度百科:冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法. 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小.首字母从A到Z)错误就把他们交 ...

  7. es6 Set 结合 Array.from 用法

    var arr=[1,2,3,2,3,4,5]; var set=new Set(arr) var arr1=Array.from(set) 重复数组  -  Set 化 (去重) - 转回数组 上述 ...

  8. pipenv安装.whl

    windows下很多库安装不方便,主要是编译C之类的. 之前这样做: 1去https://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载各种版本编译好的.whl 2 pi ...

  9. x1c2017 8G版 win linux的取舍纠结记录

    x1c 2017 的 i5 7200U 8G ram 的丐版.换了1T SSD.其实一般使用没啥问题. 1 外出携带的轻便性太满意(mac13寸相比之下都太重了): 2 coding时候的安静性,比原 ...

  10. springboot之启动方式

    我们在ideal中启动springboot项目时时不需要加载Tomcat容器的,直接在启动类启动就行了,原因是springboot项目中默认包含了内置Tomcat //springboot项目必须引入 ...