当前位置: 首页 > news >正文

从零开始精通Onvif之图片抓拍

💡 如果想阅读最新的文章,或者有技术问题需要交流和沟通,可搜索并关注微信公众号“希望睿智”。

概述

        在视频监控系统中,图片抓拍功能(也称为快照功能)是指通过摄像头或其他视频采集设备,将实时视频流中的某一帧或多帧画面保存为静态图片。这一功能在多种场景下都具有极高的实用价值,比如:交通违章抓拍、人员进出监控、安全事件记录等。

        Onvif标准规定了图片抓拍功能的基本要求和实现方式,包括:抓拍命令的发送、图片格式的约定、传输协议的选择等。图片抓拍主要通过Media服务实现,特别是GetSnapshotUri操作。该操作返回一个URI,客户端通过该URI可以直接访问到摄像头拍摄的实时图像。

工作机制

        图片抓拍作为Onvif标准中的一项重要功能,允许用户通过网络请求从摄像机获取静态图像,其工作机制如下。

        1、Media服务初始化。设备被发现后,客户端会根据设备提供的WSDL文件初始化与设备的Web服务连接。对于图片抓拍,主要是与设备的Media服务建立通信。

        2、获取抓拍URL。客户端通过发送SOAP消息调用Media服务中的GetSnapshotUri操作,该操作需要一个参数,即Profile Token,它标识了摄像机配置文件中的一个视频流配置。每个配置文件可能对应不同的分辨率、帧率等参数,选择合适的Profile可以得到满足需求的抓拍图像质量。设备收到请求后,会生成一个临时的URI,指向一张代表当前视频流画面的图像。这个URI是有时效性的,一般仅在短时间内有效,且每次调用可能会生成不同的URI。

        3、下载图片。客户端收到抓拍URI后,通过HTTP GET方法直接访问该URI。设备接收到HTTP请求后,立即将当前视图的图像数据发送给客户端。客户端接收数据后,可保存为图片文件,也可直接用于进一步的处理和显示。

获取抓拍URL

        获取Onvif设备的抓拍URL通常需要向设备的Media服务发送一个SOAP请求,实际上就是调用GetSnapshotUri操作。在下面的示例报文中,<onv:ProfileToken>表示需要获取抓拍URL的视频流配置的标识符。这个Token一般通过调用GetProfiles操作获取到,每个Profile对应不同的视频流参数。

<soapenv:Envelopexmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"xmlns:onv="http://www.onvif.org/ver10/media/wsdl"><soapenv:Header><wsa:Action>http://www.onvif.org/ver10/media/wsdl/GetSnapshotUri</wsa:Action><wsa:MessageID>uuid:UniqueMsgId</wsa:MessageID><wsa:To>http://[IP]:[Port]/onvif/MediaService</wsa:To></soapenv:Header><soapenv:Body><onv:GetSnapshotUri><onv:ProfileToken>[ProfileToken]</onv:ProfileToken></onv:GetSnapshotUri></soapenv:Body>
</soapenv:Envelope>

        当设备接收到请求抓拍URL的SOAP请求报文并成功处理后,会返回一个包含抓拍URI的SOAP响应报文给客户端。可以参考下面的示例报文来进行理解,其中的一些关键节点和属性描述如下。

        <soap:MediaUri>:表示媒体资源的URI信息。

        <soap:Uri>:表示抓拍图片的URL。通过这个URL,客户端可以获取到设备当前视图的图像。

<soapenv:Envelopexmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><soap:ResponseMessage xmlns="http://www.onvif.org/ver10/media/wsdl"><soap:MediaUri><soap:Uri>http://camera_ip/image.cgi?resolution=640x480</soap:Uri></soap:MediaUri></soap:ResponseMessage></soapenv:Body>
</soapenv:Envelope>

相关文章:

  • Mybatis --- 动态SQL 和数据库连接池
  • docker Pulling fs layer 含义
  • DeepSpeed Monitoring Comm. Logging
  • 速盾:什么是高防CDN?有什么优势?
  • 网络安全复习笔记
  • 入门Rabbitmq
  • QT中出现ASSERT failure in QList::at: “index out of range”的情况和解决办法
  • 全面解析AdaBoost:多分类、逻辑回归与混合分类器的实现
  • 基于DPU的云原生裸金属服务快速部署及存储解决方案
  • Jupyter Notebook 中 %run 魔法命令
  • 高级优化理论与方法(十五)
  • 外网怎么访问内网?
  • 【rabbitmq的消息堆积问题】
  • 【perl】环境搭建
  • Java基础面试重点-3
  • create-react-app项目添加less配置
  • CSS居中完全指南——构建CSS居中决策树
  • exif信息对照
  • iOS小技巧之UIImagePickerController实现头像选择
  • laravel 用artisan创建自己的模板
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • PAT A1120
  • PV统计优化设计
  • React+TypeScript入门
  • Spring Boot快速入门(一):Hello Spring Boot
  • spring boot下thymeleaf全局静态变量配置
  • Vim 折腾记
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 计算机常识 - 收藏集 - 掘金
  • 解析 Webpack中import、require、按需加载的执行过程
  • 你真的知道 == 和 equals 的区别吗?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前端学习笔记之观察者模式
  • 设计模式 开闭原则
  • 问题之ssh中Host key verification failed的解决
  • 一文看透浏览器架构
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #define与typedef区别
  • ( 10 )MySQL中的外键
  • (1)svelte 教程:hello world
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (一)kafka实战——kafka源码编译启动
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • *1 计算机基础和操作系统基础及几大协议
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET关于 跳过SSL中遇到的问题
  • .NET命令行(CLI)常用命令
  • .NET实现之(自动更新)
  • .net中我喜欢的两种验证码
  • @test注解_Spring 自定义注解你了解过吗?
  • [2019.2.28]BZOJ4033 [HAOI2015]树上染色