我正在开发一个使用网络摄像头和IpCamera显示视频的应用程序。
对于IpCamera
,它会在某个时间显示视频流,但之后会停止流式传输和应用程序挂起。
我正在使用Emgu.CV Library抓取帧并在图片控件中显示它。
我已使用函数QueryFrame()
尝试使用以下代码显示视频。
用于连接IP相机
Capture capture = new Capture(URL);
用于抓取框架
Image<Bgr, Byte> ImageFrame = capture.QueryFrame();
一段时间后QueryFrame()
提供null
值并且应用程序挂起。
任何人都可以告诉我为什么会这样,以及我如何处理它?</ p>
提前谢谢。
答案 0 :(得分:2)
对于延迟感到抱歉,但我提供了一个适用于多个公共IP摄像机的示例。它需要EMGU引用替换为您当前的版本,目标构建目录应设置为“EMGU Version \ bin”或者将其提取到示例文件夹中。
http://sourceforge.net/projects/emguexample/files/Capture/CameraCapture%20Public%20IP.zip/download
它不使用旧的QueryFrame()方法,而是使用RetrieveBgrFrame()方法。它工作得相当好,我没有空例外。但是,如果你用这样的
替换ProcessFrame()方法private void ProcessFrame(object sender, EventArgs arg)
{
//If you want to access the image data the use the following method call
//Image<Bgr, Byte> frame = new Image<Bgr,byte>(_capture.RetrieveBgrFrame().ToBitmap());
if (RetrieveBgrFrame.Checked)
{
Image<Bgr, Byte> frame = _capture.RetrieveBgrFrame();
//because we are using an autosize picturebox we need to do a thread safe update
if(frame!=null) DisplayImage(frame.ToBitmap());
}
else if (RetrieveGrayFrame.Checked)
{
Image<Gray, Byte> frame = _capture.RetrieveGrayFrame();
//because we are using an autosize picturebox we need to do a thread safe update
if (frame != null) DisplayImage(frame.ToBitmap());
}
}
干杯
克里斯