如何使用直接Show.net图书馆合作,将屏幕捕捉的视频?如何使用、屏幕、图书馆、直接

2023-09-03 11:48:40 作者:朕好萌!

如何使用直接Show.net库使屏幕捕获的视频? 我读的MSDN直接显示文件,并找到在以下code更改视频源设备的方式。 这code得到Mobiola®WebCamera的视频设备。

 公共IBaseFilter FindCaptureDevice()
{
  INT HR = 0;
  IEnumMoniker classEnum中= NULL;
  的IMoniker []名字=新的IMoniker [1];
  对象源= NULL;
  //创建系统设备枚举器
  ICreateDevEnum devEnum =(ICreateDevEnum)新CreateDevEnum();

  //创建一个枚举视频捕获设备
  HR = devEnum.CreateClassEnumerator(FilterCategory.VideoInputDevice,classEnum中出,0);
  DsError.ThrowExceptionForHR(小时);

  //设备枚举没有更多的需要
  对Marshal.ReleaseComObject(devEnum);

  //如果没有枚举为所请求的类型,则
  // CreateClassEnumerator会成功,但classEnum中将为NULL。
  如果(classEnum中== NULL)
  {
    抛出新ApplicationException的(未检测到视频采集设备。\ r \ñ\ r \ N+
                                   此示例需要视频捕捉设备,如USB摄像头,\ r \ N+
                                   要安装并正常工作的样品将立即关闭。);
  }




  如果(classEnum.Next(moniker.Length,绰号,IntPtr.Zero)== 0)

  {

    GUID IID = typeof运算(IBaseFilter).GUID;
    绰号[0] .BindToObject(NULL,NULL,裁判IID,出源);
  }
  其他
  {
    抛出新ApplicationException的(无法访问视频采集设备!);
  }


  Marshal.ReleaseComObject的(绰号[0]);
  对Marshal.ReleaseComObject(classEnum中);


  返回(IBaseFilter)来源;
}
 

解决方案

您需要一个过滤器捕获屏幕,并发送视频往下流。在DirectShow的SDK中有一个叫PushSource样品过滤器和里边有PushSourceDesktop。编译它,并插入到图形作为源过滤器。

芯象导播软件使用教程

How to make screen capture video using Direct Show.net Library? I read msdn Direct show document and find the way to change video source device within the following code. This code got webcamera as video device.

   public IBaseFilter FindCaptureDevice()
{
  int hr = 0;
  IEnumMoniker classEnum = null;
  IMoniker[] moniker = new IMoniker[1];
  object source = null;
  // Create the system device enumerator
  ICreateDevEnum devEnum = (ICreateDevEnum) new CreateDevEnum();

  // Create an enumerator for the video capture devices
  hr = devEnum.CreateClassEnumerator(FilterCategory.VideoInputDevice, out classEnum,0);
  DsError.ThrowExceptionForHR(hr);

  // The device enumerator is no more needed
  Marshal.ReleaseComObject(devEnum);

  // If there are no enumerators for the requested type, then 
  // CreateClassEnumerator will succeed, but classEnum will be NULL.
  if (classEnum == null)
  {
    throw new ApplicationException("No video capture device was detected.\r\n\r\n" +
                                   "This sample requires a video capture device, such as a USB WebCam,\r\n" +
                                   "to be installed and working properly.  The sample will now close.");
  }




  if (classEnum.Next (moniker.Length, moniker, IntPtr.Zero) == 0)

  {

    Guid iid = typeof(IBaseFilter).GUID;
    moniker[0].BindToObject(null, null, ref iid, out source);
  }
  else
  {
    throw new ApplicationException("Unable to access video capture device!");   
  }


  Marshal.ReleaseComObject(moniker[0]);
  Marshal.ReleaseComObject(classEnum);


  return (IBaseFilter) source;
}

解决方案

You need a filter which captures screen and sends the video down the stream. In DirectShow SDK there is a sample filter called PushSource and inside there is PushSourceDesktop. Compile it and insert into your graph as a source filter.