C# 从海康威视IP摄像头抓取帧

C# 从海康威视IP摄像头抓取帧,c#,.net,ip-camera,C#,.net,Ip Camera,我在从远程IP摄像头抓取帧时遇到问题。 我的雇主希望它在C#NET(Windows)中完成,如果可能的话,可以使用轻量级的解决方案,即不使用任何大型框架 设备型号是,它目前连接到我的局域网,摄像头的网络界面工作得非常好 我已经尝试过几种流行的框架,例如AForge、EmguCV、OzekiSDK和Directshow.NET,但它们似乎都不起作用。 特别是(显然是海康威视推荐的)无法从摄像机中获取视频流,即使我只是使用了提供的示例项目,它只是显示一个黑屏,如果我试图抓取一帧,就会抛出一个“空摄像

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

设备型号是,它目前连接到我的局域网,摄像头的网络界面工作得非常好

我已经尝试过几种流行的框架,例如AForge、EmguCV、OzekiSDK和Directshow.NET,但它们似乎都不起作用。 特别是(显然是海康威视推荐的)无法从摄像机中获取视频流,即使我只是使用了提供的示例项目,它只是显示一个黑屏,如果我试图抓取一帧,就会抛出一个“空摄像机对象”异常

摄像头的Web界面工作正常,甚至VLC播放器也能通过rtsp://链接(
rtsp://my_ip:554//Streaming/Channels/1
),而不要求登录名和密码

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


你有什么建议吗?

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

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

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