onvif协议之抓图

本来一直以为抓图,需要先取出视频码流,在进行抓图,业务非常复杂。今天发现,onvif协议居然能够直接进行抓图操作。

首先获取图片的url,然后调用http协议把图片下载下来。

本人测试摄像机为海康IPC。

onvif协议的实现可以参考前面一篇文章,

https://blog.csdn.net/g0415shenw/article/details/80068728

这里主要介绍抓图的api的使用。使用GetSnapshotUri方法获取图片的url

Profile[] mProfiles = mediaClient.GetProfiles();
            if (mProfiles.Length > 0)
            {
                var ttt = mediaClient.GetSnapshotUri(mProfiles[0].token);
                if(SavePhotoFromUrl("pictest.JPEG", ttt.Uri))
                {
                    Console.WriteLine("success");
                }
            }

在用http协议把图片下载到本地,注意根据onvif协议的规定,抓图的图片一定是JPEG格式。标准说明如下:

网络客户端使用GetSnapshotUri命令从NVT获得JPEG 快照 。返回的URI应无限期地保持有效,即使文件改变。ValidUntilConnect、ValidUntilReboot和Timeout参数应相应的设置(ValidUntilConnect = FALSE,ValidUntilReboot = FALSE, Timeout=PT0S)。URI可通过一个HTTP GET操作获取JPEG图像。图像编码总是JPEG的编码设置,忽略在媒体配置文件中的编码设置。NVT支持此命令。

另外海康的设备需要校验用户名和密码,开始抓图失败就是这个原因。获取url下浏览器上也可以直接打开。



工程源码如下,开发环境vs2017 开发语C#

onvif协议之抓图





猜你喜欢

转载自blog.csdn.net/g0415shenw/article/details/80074779
今日推荐