Tag: directshow

C#注册嵌入式Directshowfilter

我正在研究在运行时注册directshowfilter,可能需要使用reflection来执行此操作,然后以某种方式在二进制数据上调用regsvr32。 不确定这是否可行,听起来很棘手。 基本上我有一个dll文件是一个filter,我把它作为一个嵌入式资源添加到解决方案但在此之后我被卡住…不知道如何去注册它。 有人有任何见解吗? 这是可能的,还是我必须要有文件才能注册? 谢谢。 干杯。

使用directshow在桌面录制上翻转光标图标

使用Directshow.NET我开发了一个应用程序,它将记录桌面屏幕,获取我们需要绘制鼠标指针的鼠标指针。 所以我在BufferCB添加了SampleGrabber BufferCB我写了下面的代码: public const Int32 CURSOR_SHOWING = 0x00000001; [StructLayout(LayoutKind.Sequential)] public struct ICONINFO { public bool fIcon; public Int32 xHotspot; public Int32 yHotspot; public IntPtr hbmMask; public IntPtr hbmColor; } [StructLayout(LayoutKind.Sequential)] public struct POINT { public Int32 x; public Int32 y; } [StructLayout(LayoutKind.Sequential)] public struct CURSORINFO { public Int32 cbSize; public Int32 flags; public IntPtr […]

首次打开后,Dxsnap无法正确显示video

我正在使用DirectShowLib-2005 – DxSnap示例来显示和捕获来自Webcam的图像。 这个例子一切正常。 但是当我尝试将它与我的应用程序合并时(我试图从我的主要表单中调用该表单),这是第一次工作。 关闭并打开捕获窗口后,它无法正常显示video。 但是图像的捕获始终完美无缺。 public partial class frmMain : Form { public frmMain() { InitializeComponent(); } /// /// The main entry point for the application. /// [STAThread] private static void Main() { Application.Run(new frmMain()); } private void button1_Click(object sender, EventArgs e) { frmdxSnap frmdxSnap = new frmdxSnap(); frmdxSnap.ShowDialog(this); } } 即使在重新启动PC之后,它仍然是相同的。 我没有更改DxSnap表格中的任何内容。

关于在C#中设置FIle Writer的问题

我在C#中使用DirectShowLib。 我想在C#中使用File Writer来设置文件输出。 我想使用File Writer,因为Graph.SetOutputFileName()不会连接到我的编码器,但File Writer会。 如何在C#中设置File Writer保存的文件? 我尝试像在DxPropPages示例中那样提取其属性页,但是文件编写器不会出现。

如何在c#中从网络摄像头抓取恒定的位图图像流

我们有ac#应用程序,可以对video流进行处理。 这是一个以Bitmap格式接收每个帧的低级应用程序,所以基本上我们每秒需要25个图像。 此应用程序已经适用于我们的一些媒体源,但我们现在需要添加网络摄像头作为输入设备。 因此,我们基本上需要连续捕获网络摄像头中的位图图像,以便我们可以将所有这些帧作为“流”传递给我们的应用程序。 访问网络摄像头的最佳和最简单的方法是什么?直接从网络摄像头读取实际帧作为单独的图像? 我还在起跑线上。 有许多库允许人们访问网络摄像头,在Windows面板上预览网络摄像头的内容,然后使用屏幕捕获再次捕获此图像。 不幸的是,当每秒捕获25帧时,这不会给我们提供必要的性能。 IVMRWindowlessControl9 :: GetCurrentImage已被提及作为另一种选择,但这似乎再次针对的是一个不常见的快照,而不是一个恒定的图像流。 Directshow.Net被许多人称为一个很好的候选人,但目前还不清楚如何简单地从网络摄像头抓取图像。 此外,许多消息来源表示担心微软不再支持Directshow。 此外,我已经看到的实现需要ImageGrabber,显然也不再支持 。 MS的新替代品似乎是媒体基金会,但我的研究还没有找到任何可以实现的实例(我不确定这是否会在旧版本的Windows上运行,如XP)。 DirectX.Capture是一个很棒的库( 参见一个很好的实现 ),但似乎缺乏直接获取video图像的filter和方法。 我也开始研究滤镜和滤镜图,但这看起来非常复杂,感觉有点像“重新发明轮子”。 总的来说,上面简要提到的所有解决方案似乎都相当陈旧。 有人可以指点我一步一步的指导,让网络摄像头在C#中工作,并从中每秒抓取几张图像? (我们还必须在某些时候做音频,因此不排除video的解决方案将是最有帮助的)。

使用DirectShow同时进行video录制和播放

我应该开发一个记录和播放录制video的应用程序,同时继续录制(不停止图形)。 我知道如何使用和开发使用DirectShow,但我需要我的图形的架构。 我应该使用什么filter? 我使用DirectShow和SampleGrabber使用原始video,但我应该压缩video,我不知道如何在压缩video文件中执行此操作(由于录制仍在继续,因此未关闭)。 我认为MPEG-2录制对我的应用来说是最好的,但请指导我应该使用的滤镜。 谢谢

使用DirectShowNet寻求关键帧

我的任务是:创建一个图形,将SampleGrabber附加到它,并在构建图形后使用IMediaSeeking接口获取关键帧。 以下是我所做的:在Main方法中: Type comType = Type.GetTypeFromCLSID ( new Guid ( “e436ebb3-524f-11ce-9f53-0020af0ba770” ) ); IGraphBuilder graphBuilder = (IGraphBuilder) Activator.CreateInstance ( comType ); comType = Type.GetTypeFromCLSID ( new Guid ( “C1F400A0-3F08-11d3-9F0B-006008039E37” ) ); ISampleGrabber sampleGrabber = (ISampleGrabber) Activator.CreateInstance ( comType ); graphBuilder.AddFilter ( (IBaseFilter) sampleGrabber, “samplegrabber” ); AMMediaType mediaType = new AMMediaType ( ); mediaType.majorType = MediaType.Video; […]

如何获取可用video捕获设备列表

我正在使用DirectShow.Net创建一个项目,该项目使用Visual C#显示Windows窗体中的网络摄像头视图的预览。 我想首先获得一系列可用的video设备,以便我可以在内置网络摄像头或USB网络摄像头之间进行选择。 我已经看到了几个用C ++完成的例子,例如msdn“ http://msdn.microsoft.com/en-us/library/windows/desktop/dd377566(v=vs.85).aspx ”。 但是,由于我不知道任何C ++,我不知道如何将此代码转换为C#。

如何使用SampleGrabber为音频构建频谱/可视化工具?

我目前正在构建一个使用DS sdk的应用程序,我需要弄清楚如何从音频源不断获取振幅以绘制可视化器或某种类型的光谱。 我一直试图看看样本采集器是如何在音频上实现的,但我发现的所有信息都已经过时,并且没有用。 经过几十次尝试,这就是我目前所拥有的: ISampleGrabber pGrabber = (ISampleGrabber)pSampleGrabber; hr = pGraph.ConnectDirect(GetPin(pInfinitePinTeeFilterAudio, “Output3”), GetPin(pSampleGrabber, “Input”), null); checkHR(hr, “1040”); if (hr < 0) return false; hr = pGraph.ConnectDirect(GetPin(pSampleGrabber, "Output"), GetPin(pNullRenderer, "In"), null); checkHR(hr, "1041"); if (hr < 0) return false; AMMediaType media = new AMMediaType(); media.formatType = FormatType.WaveEx; pGrabber.GetConnectedMediaType(media); //gets and sets media type into media pGrabber.SetBufferSamples(true); […]

DirectShow:如何更改filter属性?

我正在开发一个帮助用户配置电视调谐卡的应用程序。 基本上用户选择设备,应用程序生成图形文件(.GRF)作为输出。 但是,用户应该能够更改一些设置。 这些设置包括video标准(PAL,NTSC,SECAM),video输入(调谐器,复合video,SVideo)等。 在GraphEdit中,可以通过右键单击所需的filter,然后选择“filter属性…”来完成。 但是,我不知道如何在代码中实现相同的function。 问题1 :如何在代码中更改DirectShowfilter的属性? 因为我使用ICaptureGraphBuilder2 :: RenderStream来构建我的图形,所以我只保留对源filter和渲染器的引用。 我希望能够更改的大多数属性都可以在其他filter上找到,例如交叉开关filter,它由RenderStream方法自动添加。 问题2 :如何获取图表中其他filter的引用,以便更改其属性? 注意:我不会使用FindFilterByName,因为我的应用程序应该与大多数电视调谐器卡一起使用,并且每张卡都可以作为不同的名称。 编辑 :我找到了一种通过EnumFilters枚举来获取对这些filter的引用的方法。 然后我在每个filter上使用QueryFilterInfo来查找它的名称。 这与使用FindFilterByName不同,因为我现在可以使用Contains来查找某些单词(如“Crossbar”)。 但是,我已经有一个横杆filter命名的例子(“… Xbar”),所以我仍然在寻找一种更通用的方法来做到这一点。 我希望我能按他们的类别找到filter…… 顺便说一句,我目前正在使用DirectShow.Net库 ,但我相信这种方法应该与C ++库相同。 但是,我并不完全理解C ++语法,因此如果您计划发布(引用)代码示例,那么如果它是在C#或VB.NET中,它将是一个很大的帮助。 解决方案 :查看已接受的答案评论。 我需要将需要更改属性的filter转换为各自的接口。 例如,需要将交叉开关filter连接到IAMCrossbar接口 。 通过此界面,我现在可以更改所有与横杆相关的属性。