首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Hikvision IP摄像机抓取帧

从Hikvision IP摄像机抓取帧
EN

Stack Overflow用户
提问于 2015-07-14 14:13:34
回答 1查看 10.4K关注 0票数 5

我在从远程IP摄像头抓取图像时遇到了问题。我的雇主希望它在C# .NET (用于Windows)中完成,如果可能的话,使用轻量级的解决方案,即不使用任何大型框架。

设备型号是DS-2CD2632F-I,它当前连接到我的局域网,摄像头的网络接口工作得很好。

我已经尝试了几个流行的框架,例如AForge,EmguCV,OzekiSDK和Directshow.NET,但它们似乎都不起作用。尤其是OzekiSDK (显然是Hikvision推荐的?)无法从摄像头获取视频流,即使我只是使用提供的示例项目,它只是显示一个黑屏,并在我尝试抓取帧时抛出一个“空摄像头对象”异常。

摄像机的网络接口工作正常,甚至VLC播放器也可以通过rtsp://链接(rtsp://my_ip:554//Streaming/Channels/1)成功地播放摄像机的流,而不需要登录和密码。

我考虑过使用libvlcnet,但我不确定这是一个可行的解决方案。

你有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-15 02:57:13

好了,我想我已经弄明白了。我会在这里发布解决方案,以防将来有人需要它。我发现,对于这种特殊类型的相机,有一个url,它只是将相机中的当前帧作为JPEG图片返回,如下所示:http://IP_ADDRESS:PORT/Streaming/channels/1/picture?snapShotImageType=JPEG

因为我的雇主只需要在他想要的时候从摄像机中抓取一帧,而不需要流传输视频本身,所以我刚刚编写了一个应用程序,通过使用异步Web请求从该url复制此JPEG:

代码语言:javascript
复制
private Bitmap loadedBitmap;
...
private void requestFrame()
{    
 string cameraUrl = @"http://192.168.0.1XX:80/Streaming/channels/1/picture?snapShotImageType=JPEG";
 var request = System.Net.HttpWebRequest.Create(cameraUrl);   
 request.Credentials = new NetworkCredential(cameraLogin, cameraPassword);
 request.Proxy = null;
 request.BeginGetResponse(new AsyncCallback(finishRequestFrame), request);
}

void finishRequestFrame(IAsyncResult result)
{
 HttpWebResponse response = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
 Stream responseStream = response.GetResponseStream();

 using (Bitmap frame = new Bitmap(responseStream)) {
  if (frame != null) {
   loadedBitmap = (Bitmap) frame.Clone();                        
  }
 }
}
...
requestFrame(); // call the function
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31398958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档