问题标签 [directshow.net]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
144 浏览

directshow - directshow,如何知道过滤器是否被另一个应用程序使用

我有一个不能同时在两个应用程序中使用的源过滤器。有没有办法知道过滤器是否被另一个应用程序使用?我可以将过滤器添加到图表中,将其连接起来,但是当我执行“运行图表”时会出现异常。应用程序以一般的“未知错误”退出。我使用 DirectShowLibNET。我想显示一个特定的错误,例如“正在使用的过滤器”。

0 投票
2 回答
2633 浏览

c# - 给定一个 WPF Image 控件,是否可以确定它的 HWND?

我正在将网络摄像头集成到 WPF 应用程序中。当我将它的 HANDLE 传递给 DirectShow 函数时,我可以在主窗口中看到摄像机源。但这不是我想要的。

主窗体有一个图像控件,我想在其中查看输出。但是,为了做到这一点,我需要控件的句柄。

关于如何做到这一点的任何提示?

在此先感谢,吉安卢卡。

0 投票
1 回答
167 浏览

c# - 如何使用 DirectShow.Net 从 GMFBridgeController 接收器过滤器创建缓冲区池

在“Looser Coupling”下的 GMFBridge 文档中,它指出可以从 Sink Filter 创建缓冲区池。如何???我对 DirectShow 有点陌生,并且正在使用 DirectShow.Net 库,并且能够创建一个过滤器图并使用 InfTee 过滤器通过桥接接收器。但这会导致死锁,因为我正在尝试使用三个不同的源图。我一直在网上到处寻找有关如何创建缓冲区池的示例,以便我可以渲染不绑定到其他缓冲区的接收器过滤器。有人可以帮我解决这个问题吗,如果可能的话,你可以举一个例子让我看到。谢谢你。

0 投票
2 回答
572 浏览

c# - 在 directshow 上创建了一个 UYVY 图像及其损坏,我不知道为什么

我有一个来自相机的 UYVY 数据缓冲区,我正在使用 GSSF Directshow.net 过滤器将缓冲区推送到图形中。

目前的图表是

该图正确计算颜色并正确显示它,但图像中的条不应该存在,我不确定它们来自哪里。盯着图像看我的眼睛很痛。

在此处输入图像描述

此函数获取 UYVY 缓冲区(mainbyte)并将其复制到整数数组

此函数采用相同的整数数组并将其打包到 GSSF 流指针中

这为 GSSF 的输出引脚设置了位图压缩,我想我可能在这里做错了,但它看起来是正确的。

更新 改变了它

// 覆盖 public void SetMediaType(IGenericSampleConfig psc) { BitmapInfoHeader bmi = new BitmapInfoHeader();

//

在此处输入图像描述

如果我更改 GetImage 中的其他数字以更改视频的高度,或者如果我在 ImagePixel 中更改它,那么我只会得到黑屏:|

0 投票
2 回答
9492 浏览

directshow - 无法使 IAMStreamConfig.SetFormat() 与 LifeCam Studio 一起使用

我是 DirectShow 的新手,正在向我的应用程序添加视频流。我已经研究了很多解决方案(TouchLess、DirectShow.net 等),最后选择了Code Project 上的这个小项目。 它没什么大不了的,这就是我选择它的原因;我想要一个小的代码库,因为我需要快速实现这个功能。

经过一整天的阅读、试验和调试,我终于让一切都运行良好。有一个延迟,这很糟糕,但我可以稍后再担心。我现在遇到的问题是相机能够达到 1280X720,我想使用这个分辨率。然而,它似乎决心以 640x480 进行捕捉。随着我越来越深入地学习如何设置分辨率,我终于认为我已经弄清楚了。我还在作为基础的注释中找到了代码项目页面上的代码。

经过 6 小时的尝试,我无法让这台相机更改其分辨率。我没有收到任何错误,并且从 SetFormat() 返回的 HRESULT 为 0,但相机不会改变分辨率。

粘贴所有内容的代码太多,但我想包括构建图表的部分,因为我想这就是问题所在。

这是设置图表的代码

[更新] 在下面添加了 ConfigureSampleGrabber() 方法

这几乎是 CodeProject 源代码中的确切代码。然后我添加了这个方法来设置分辨率:

我已经单步执行了代码并验证了对 SetFormat() 的调用是否已执行并返回一个有效的 HRESULT。但是捕获的帧没有变化。

如果没有错误消息,很难知道从哪里开始。我希望这里有一些 DirectShow 专家会看到这个问题,我什至会对一个很好的时尚居高临下感到满意“嗯,是的,一旦缓冲区分配到过滤器堆栈和小部件被初始化为 foobar!Pft...lol" ;)

教我,哦 DirectShow/COM 上帝!

[更新#2](仅供参考,奇怪的是,我们不能只向该系统添加新消息并且需要像这样编辑原始消息)

根据 Roman 的建议,我使用 GraphStudio 来查看图表的底层。我承认我仍然不明白我到底在看什么。我发现了一个“文本报告”功能,并认为在此处发布该报告会有所帮助,以防它显示一些有价值的信息。

[更新#3] - 圣牛,我开始了什么?!为什么在我遇到支持Roman 的色彩空间不匹配理论的东西之前,我的谷歌搜索比以往任何时候都更深入。我下载了该应用程序,并立即修复了一个缓冲区太小的错误。解决后,我能够生成以下报告:

0 投票
2 回答
1315 浏览

c# - 未调用 ISampleGrabber 回调

我正在使用 DirectShow.Net 并尝试在一个类上实现 ISampleGrabberCB。

为了在图表中设置 Grabber,我遵循以下清单:

  1. 创建一个 SampleGrabber 对象

  2. 定义 MediaType 格式(AMMediaType: Video, Rgb, VideoInfo)并将其设置到 SampleGrabber 对象中。HRESULT 为 0,所以我认为没关系。

  3. 我使用 sampleGrabber.SetCallback(this, 0) 设置回调。我正在传递“this”,因为 ISampleGrabber 是在类本身中实现和定义的;第二个参数是 0,因为我希望调用 SampleCB 方法。

  4. 最后,我将过滤器添加到图表中。HRESULT 再次为 0。

但是 ISampleGrabber.SampleCB 方法没有被调用。

您对这种不当行为的原因有任何想法吗?

[编辑]

我发现这里发生了什么!但我仍然需要一些帮助。我拥有的两个网络摄像头都返回 YUY2 子类型视频格式。如上所述,我使用的代码将 MediaType 强制为 RGB24。在运行时我可以看到 HResult 为 0,因此没关系。但是因为它们是“不兼容的”,所以从不调用 Sample Callback。如果我删除了子类型显式定义,则会点击回调。但是我收到的帧是 YUY2;它不是一个有效的位图,因此它看起来“损坏”、“扭曲”。

在这一点上,我想知道如何成功强制 RGB24 格式或如何将视频帧转换为 RGB24 格式。

我在谷歌上花了很多时间试图找到一个有效的答案,但我没有运气。

任何想法?

干杯。詹卢卡。

0 投票
1 回答
1623 浏览

c# - 是否可以使用 http url 作为 DirectShow .Net 中源过滤器的源位置?

我正在使用 DirectShow.Net 库创建一个过滤器图,该过滤器图使用 http 地址和 WM Asf Writer 流式传输视频。然后在网页上,我可以使用 object 元素在 Windows Media Player 对象中呈现视频源。所以现在我很好奇是否可以使用某种类型的 FilterSource 从该 http 地址读取。我看到有些人将 AsyncReader 用作 IBaseFilter,然后将其转换为 IFileSourceFilter 并调用 load 方法并将其传递给他们的网络的 url。但是我无法使用“http://localhost:8080”的 url 成功地做到这一点。我猜这是因为它不是实际的“文件源”。我尝试在 IFileSourceFilter Load 方法中使用具有 MediaType.URLStream 主要类型和 MediaSubType.Asf 子类型的 AMMediaType,但仍然没有运气。如果有人能帮我解决这个问题,我会比喻性地亲吻他们,因为我已经为此工作了一段时间。请哦,请帮助我。

在我的代码中,我相应地创建了 FilterGraph 和 CaptureGraph。然后创建一个 AsyncReader 实例并将其转换为 IBaseFilter。接下来,我将其转换为 IFileSourceFilter 并调用 Load 方法,将“http://localhost:8080”url 传递给它。然后将其添加到 FilterGraph。然后我创建视频渲染过滤器并添加它,但是当我尝试调用 CaptureGraphBuilder2 对象的 RenderStream 方法时,它会引发“未指定错误”异常。这是我的代码...

因此,如果您对我有任何建议,我将不胜感激。再次感谢你的帮助。

0 投票
3 回答
11204 浏览

c# - 如何列出相机可用的视频分辨率

如果我的 PC 上连接了多个摄像头...我想知道特定摄像头的最佳可用分辨率...

例如,一些摄像头是高清或全高清(1,280×720 像素 (720p) 或 1,920×1,080 像素 (1080i/1080p)),或者最常见的是网络摄像头......

我至少想知道相机正常工作的最佳视频模式......(相机使用的模式)

我的工作是使用 C# 处理 WPF(我正在使用 Directshow)

提前致谢

0 投票
1 回答
771 浏览

wpf - .NET 4 错误中的 DirectShowLib 捕获设备

在 WPFMediaKit 中使用 videocaptureelement 时,我无法使用 .net 4 VS2010 应用程序运行它,但是该应用程序在 .NET 3.5 VS2010 环境中运行良好。

该应用程序只是弹出而没有错误(尽管我在域和应用程序中捕获了异常)。调试到 WPFMediaKit 会导致错误

删除上面的行将使应用程序在 .NET 4 VS2010 中正常工作。

我尝试在 WPFMediaKit 中的 sampleapplication 中进行调试,结果与在 .NET 4 中调试应用程序时应用程序将无错误退出的结果相同。使用 .NET 4 重新编译 WPFMEdiakit 和 DirectShowLib 也不起作用。

在谷歌中搜索会导致没有答案的问题。

这使我怀疑 DirectShowLib 问题在 .NET 4 中呈现捕获引脚...

任何帮助请...

0 投票
1 回答
2726 浏览

c# - 使用 DirectShow.NET 在 C# 中的 IVideoWindow 上显示半透明图像对象

我一直在使用 DirectShow.NET 与 C# 中的网络摄像头进行交互,到目前为止一切进展顺利。但是,现在我正在尝试设置一种“裁剪”图像的方法(虽然它仍然显示为网络摄像头预览)。

基本上,我试图在 IVideoWindow 对象的顶部显示某种大部分透明的图像。然而,在 C# 中处理透明度远非小菜一碟。

那么,我怎样才能在 IVideoWindow 上叠加一个 Image 对象呢?谢谢!