码迷,mamicode.com
首页 > Windows程序 > 详细

C# 通过Emgu CV播放流媒体(RTSP)

时间:2015-05-30 18:12:53      阅读:972      评论:0      收藏:0      [点我收藏+]

标签:

      Emgu CV is a cross platform .Net wrapper to the OpenCV image processing library. Allowing OpenCV functions to be called from .NET compatible languages such as C#, VB, VC++, IronPython etc. The wrapper can be compiled by Visual Studio, Xamarin Studio and Unity, it can run on Windows, Linux, Mac OS X, iOS, Android and Windows Phone.

  Emgu CV 下载地址:http://www.emgu.com/wiki/index.php/Main_Page,需要下载3.0版本以后的,Emgu CV 3.0继成了ffmpeg

  

Capture _capture = new Capture(fileName); //rtsp://user:password@192.168.1.66:554/  
_capture.ImageGrabbed += capture_ImageGrabbed;
_capture.Start();

private void capture_ImageGrabbed(object sender, EventArgs e)
{
  try
  {
    Mat frame = new Mat();

    lock (lockObj)
    {
      if (capture != null)
      {
        if (!capture.Retrieve(frame))
        {
          frame.Dispose();
          return;
        }
        if (frame.IsEmpty)
          return;

        //显示图片 可以使用Emgu CV 提供的 ImageBox显示视频, 也可以转成 BitmapSource显示。

        //略

      }
    }
  }
  catch (Exception ex)
  {
  }
}

 

 

public static class BitmapSourceConvert
    {
        /// <summary>
        /// Delete a GDI object
        /// </summary>
        /// <param name="o">The poniter to the GDI object to be deleted</param>
        /// <returns></returns>
        [DllImport("gdi32")]
        private static extern int DeleteObject(IntPtr o);

        /// <summary>
        /// Convert an IImage to a WPF BitmapSource. The result can be used in the Set Property of Image.Source
        /// </summary>
        /// <param name="image">The Emgu CV Image</param>
        /// <returns>The equivalent BitmapSource</returns>
        public static BitmapSource ToBitmapSource(IImage image)
        {
            using (System.Drawing.Bitmap source = image.Bitmap)
            {
                IntPtr ptr = source.GetHbitmap(); //obtain the Hbitmap

                BitmapSource bs = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
                    ptr,
                    IntPtr.Zero,
                    Int32Rect.Empty,
                    System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());

                DeleteObject(ptr); //release the HBitmap
                return bs;
            }
        }
    }

 

 注意事项:由于ffmpeg 默认使用TCP同步连接请求视频源,连接超时时间很长,

Capture _capture = new Capture(fileName),如果访问的媒体不存在,会导致阻塞。需要设置ffmpeg连接方式或者超时时间。

设置方式:
public bool SetCaptureProperty(CapProp property, double value); //Capture方法。具体怎么设置不知道、或者Emgu CV没有提供这个接口

 

C# 通过Emgu CV播放流媒体(RTSP)

标签:

原文地址:http://www.cnblogs.com/shon/p/4540729.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!