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