我正在尝试使用C#Windows Forms应用程序从IP摄像机从RTSP流中获取图像。我正在使用EMGU CV连续捕获流,但是RTSP Steam在几秒钟后停止,然后imageGrabbedEvent永不触发。
我的目的很简单:从相机中获取每一帧并进行分析。
我正在使用IP地址为192.168.1.64的HIKVision IP摄像机(DS-2CD2683G1-IZ)在端口554上传输RTSP(这是许多Hikvision IP摄像机的默认IP地址和端口号)
DateTime LastTimeImageGrabReinitialised = new DateTime();
public void InitializeCameraEMGUStream()
{
//added a datetime to the url as recommended by another answer but it didnt help.
VideoCapture myVideoCapture = new VideoCapture("rtsp://admin:[email protected]:554/ch1/main/av_stream?"+DateTime.Now.ToString());
myVideoCapture.ImageGrabbed += imageGrabbedEvent;
myVideoCapture.Start();
LastTimeImageGrabReinitialised = DateTime.Now;
}
private void imageGrabbedEvent(object sender, EventArgs e)
{
lastTimeImageGrabbed = DateTime.Now;
try
{
Mat m = new Mat();
myVideoCapture.Retrieve(m);
LatestAcquiredImage = m.ToImage<Bgr, byte>().Bitmap;
pictureBox.Image = m.ToImage<Bgr, byte>().Bitmap;
imgEntrada = m.ToImage<Bgr, byte>();
}
catch (Exception Ex)
{
}
//I tried adding some logic to reinitialize the stream after a few hundred milliseconds,
//but it seems the reinitialization takes a while to obtain a clear image and many frames cannot be read.
if((DateTime.Now- LastTimeImageGrabReinitialised).TotalMilliseconds>200)
{
myVideoCapture.Start();
LastTimeImageGrabReinitialised = DateTime.Now;
}
}
我已经在网上找到了一些答案,但是找不到一种确定的方法来保持视频流的活力。在这方面的任何帮助,我都将不胜感激。
仅供参考:我已经尝试过的内容:
我每隔一段时间尝试重新初始化VideoCapture,但速度很慢,许多初始帧都是嘈杂/不清楚的图像。
我已经尝试过使用VLC.Dotnet运行RTSP蒸汽,流工作正常,但是要抓取图像并将其转换为图像,图像速度很慢,这主要是因为VLCControl.TakeSnapshot()将文件保存在磁盘上。最好情况下,这会耗费超过500毫秒的时间,并且在此期间会丢失许多帧。
我正在尝试使用C#Windows Forms应用程序从IP摄像机从RTSP流中获取图像。我正在使用EMGU CV连续捕获流,但是RTSP Steam会在几秒钟后停止...