无法使用EMGU CV连续从RTSP流中抓取图像

问题描述 投票:0回答:1

我正在尝试使用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;
            }

        }


我已经在网上找到了一些答案,但是找不到一种确定的方法来保持视频流的活力。在这方面的任何帮助,我都将不胜感激。

仅供参考:我已经尝试过的内容:

  1. 我每隔一段时间尝试重新初始化VideoCapture,但速度很慢,许多初始帧都是嘈杂/不清楚的图像。

  2. 我已经尝试过使用VLC.Dotnet运行RTSP蒸汽,流工作正常,但是要抓取图像并将其转换为图像,图像速度很慢,这主要是因为VLCControl.TakeSnapshot()将文件保存在磁盘上。最好情况下,这会耗费超过500毫秒的时间,并且在此期间会丢失许多帧。

  3. [[我还尝试使用RTSPClientSharp,同时使用该事件时,imageGrabbed事件会定期触发,但我却无法显示解码后的图像。
  4. <<

    我正在尝试使用C#Windows Forms应用程序从IP摄像机从RTSP流中获取图像。我正在使用EMGU CV连续捕获流,但是RTSP Steam会在几秒钟后停止...

c# .net emgucv rtsp
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.