ONVIF协议网络摄像机(IPC)客户端程序开发(13):图像抓拍
来源:互联网 发布:网络会员制营销 通过 编辑:程序博客网 时间:2024/06/08 05:52
1 专栏导读
本专栏第一篇文章「专栏开篇」列出了专栏的完整目录,按目录顺序阅读,有助于你的理解,专栏前面文章讲过的知识点(或代码段),后面文章不会赘述。为了节省篇幅,突出重点,在文章中展示的示例代码仅仅是关键代码,你可以在「专栏开篇」中获取完整代码。
如有错误,欢迎你的留言纠正!让我们共同成长!你的「点赞」或「打赏」是对我最大的支持和鼓励!
2 原理简介
IPC图像抓拍有两种方法:
- 对RTSP视频流进行视频截图;
- 使用HTTP的GET方式获取图片。
第一种方法我还没试过,没有发言权,以下介绍第二种方法。
ONVIF协议除了提供RTSP的URL外,其实也给出了抓拍的URL,使用Media模块的GetSnapshotUri接口可获取图像抓拍的URL。
比如,我从IPC获得的抓拍URL为:http://100.100.100.160/onvifsnapshot/media_service/snapshot?channel=1&subtype=0
。
那如何通过这个地址获得图片呢?其实在media.wsdl中,该接口的函数功能说明中已经描述的很清楚了:「The URI can be used for acquiring a JPEG image through a HTTP GET operation」,也就是通过HTTP的GET方式获得JPEG图片。
在浏览器上输入抓拍的URL,在浏览器中就会显示出图片,刷新,图片会变化,对于需要验证的IPC,会要求我们输入用户名密码进行HTTP用户认证。
3 编码流程
通过「设备发现」,得到 「设备服务地址」。
使用「设备服务地址」调用GetCapabilities接口,得到「媒体服务地址」。
使用「媒体服务地址」调用GetProfiles接口,得到主次码流的「媒体配置信息」,其中包含ProfileToken。
使用ProfileToken 调用GetSnapshotUri接口,得到主次码图像抓拍的URI地址。
根据URI地址,使用HTTP的GET方式获取图片。
4 示例代码
Windows的MFC里有CInternetSession,CHttpConnection,CHttpFile这些类提供通过HTTP获得图像数据。
Linux可以使用很多开源方案,甚至可以直接使用shell命令wget来下载图像即可,简单高效。比如:
- 1
如果需要带认证信息,可以使用:
- 1
以下的示例代码就是使用wget实现的图像抓拍功能。
- ONVIF协议网络摄像机(IPC)客户端程序开发(13):图像抓拍
- ONVIF协议网络摄像机(IPC)客户端程序开发(13):图像抓拍
- ONVIF协议网络摄像机(IPC)客户端程序开发(5):门外汉理解ONVIF协议
- ONVIF协议网络摄像机(IPC)客户端程序开发(5):门外汉理解ONVIF协议
- ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头
- ONVIF协议网络摄像机(IPC)客户端程序开发(2):第一次使用IPC摄像头
- ONVIF协议网络摄像机(IPC)客户端程序开发(9):鉴权(认证)
- ONVIF协议网络摄像机(IPC)客户端程序开发(9):鉴权(认证)
- ONVIF协议网络摄像机(IPC)客户端程序开发(1):专栏开篇
- ONVIF协议网络摄像机(IPC)客户端程序开发(3):理解什么是Web Services
- ONVIF协议网络摄像机(IPC)客户端程序开发(7):设备搜索
- ONVIF协议网络摄像机(IPC)客户端程序开发(8):获取设备基本信息
- ONVIF协议网络摄像机(IPC)客户端程序开发(10):设备校时
- ONVIF协议网络摄像机(IPC)客户端程序开发(11):设备能力
- ONVIF协议网络摄像机(IPC)客户端程序开发(12):读取音视频流
- ONVIF协议网络摄像机(IPC)客户端程序开发(14):修改分辨率
- ONVIF协议网络摄像机(IPC)客户端程序开发(15):遮挡报警
- ONVIF协议网络摄像机(IPC)客户端程序开发(1)
- Android ConstraintLayout
- 第十一周-项目二-操作用邻接表存储的图
- python--字符串操作(删除,替换)
- 第十三周项目二
- (二十五)基础系列 AJAX、JQuery
- ONVIF协议网络摄像机(IPC)客户端程序开发(13):图像抓拍
- 组合模式
- Java web项目如何获取某个文件夹下面的文件路径 绝对路径 ?
- springboot(十四):springboot整合shiro-登录认证和权限管理
- Linux 限制SFTP用户只能访问某个目录
- 一个简单C++语言状态机实现
- install tensorflow 遇到的问题
- hover 选择器
- storm concepts