问题标签 [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 回答
568 浏览

c# - File Writer 是否加快了我捕获的流媒体视频的 FPS?

我在 graphedit 中连接了一个网络摄像头,在 C# 代码中,我保存的所有视频的保存速度比流式传输快 2-3 倍。网络摄像头设置为运行 640x480 @ 30fps。我录制了一个 15 秒的视频,当我重播它时,视频只有 5 秒长,它包含整个 15 秒的视频,但 FPS 更高。

我已经改变了我的过滤器。我使用了 ffdshow 编码器、xvid 编码器、mpeg 编码器、divx 编码器以及 avi mux、xvid mux、mpeg mux,它们都连接到 File Writer,它们都以更高的 FPS 保存视频流。

那么 File Writer 是否在做它不应该做的事情?

有没有办法修复它或解决它?

或者也许是更好的选择?

编辑:

这些是我一直在尝试使用的图表,但所有输出都在加速 FPS

使用所有这些图表,我录制了一个 15 秒的视频,当它们重播时,它们有 5 秒长

0 投票
1 回答
1001 浏览

c# - 如何在其他计算机上运行 DirectShow.net 应用程序

我有一个 C# DirectShow.Net 应用程序,我想测试它在其他计算机上以发布模式运行。我如何才能确保我的程序可以在其他不包含 windows sdk 和它可用的过滤器的机器上运行?

我将不得不包括 dirctshow dll 等,但我可以对过滤器本身做些什么?

更新:我有虚拟机来运行它,但此外,我如何确保某个 Directx 过滤器在计算机上,如果不是,获取 dll 并将其从代码注册到计算机?

编辑:在我注册了 DLL 之后,我运行我的程序。它没有运行,所以我抓取 graphstudio 并将程序的图表附加到 graphstudio 并且没有连接任何过滤器,当我尝试手动连接它们时,它们拒绝连接。

编辑2:

我正在运行我的应用程序,该应用程序在我的 Virtualbox VM 上的 Windows 7 32 位机器上运行。virtualbox 不允许我访问我的 USB 设备以进行流式传输,因此我注释掉了依赖它的代码。当我运行它时,过滤器不会连接。我做了一些测试并尝试在没有源的情况下重新创建图表,它们不会连接在一起,所以这实际上可能是问题所在。

目前我正在运行 32bit XP virtualbox VM

我在用

(w)riter 出于某种奇怪的原因必须是小写的。开发机器有 (w)riter 和 (W)riter

您的意思是我在代码中放入的操作系统或过滤器上的标准并且没有连接到哪些?

Graphedit 仅包含在完整的 windows sdk 中,在我所在的位置下载起来很痛苦。

0 投票
1 回答
4759 浏览

c#-4.0 - directshow.net 视频输入设备过滤器枚举是否损坏(在较新的环境中)?

directshow.net 示例文件夹(标记为“2010-February”)中的每个示例都可以正常编译,并且从文件中播放视频的示例效果很好。但是,每个尝试枚举 FilterCategory.VideoInputDevices 的示例总是找不到我的任何过滤器,特别是DsDevice.GetDevicesOfCat(FilterCategory.VideoInputDevice); 总是返回我没有设备。在使用 directshow.net 的每个其他程序中,我都会遇到同样的问题,例如 touchless 和 codeplex 上的各种示例。

我安装了四个视频输入过滤器(1 个网络摄像头和 3 个屏幕捕获过滤器),Windows SDK 和 rl 过滤器管理器附带的图形编辑器可以找到/使用它们。这两个程序都在“视频捕获源”下列出了四个过滤器,每个 Moniker 都以 directshow.net 的 FilterCategory.VideoInputDevices 指向的正确 GUID 开头(“860BB310-5D01-11D0-BD3B-00A0C911CE86”)。

我已经尝试自己编译和使用最新的 directshow.net dll,但没有任何改变。

包装器可以使视频渲染过滤器正常但不能枚举视频捕获过滤器是否有某些原因?我在win7 sp1,64位,使用visual C# 2010 express。我的环境中有什么导致这种情况吗?如果我知道是什么原因造成的,我很乐意自己处理更改。

感谢您的时间。

0 投票
1 回答
1947 浏览

video-streaming - 如何使用 DirectShow.Net 将捕获的视频从客户端流式传输到服务器

我的想法是在我的家用 PC 上运行一个服务或应用程序,让我能够在我离开时查看我的家、外部条件等。我正在使用 DirectShow.Net,并且开始了解过滤器、图形和 GMFBride 的概念。我已经能够获得要渲染的预览,并且我开始连接流媒体部分。但这是我的问题开始的地方。我真的不知道从这里去哪里。

我的想法是能够将捕获的视频转换为某种类型的 MemoryStream、循环数据缓冲区或其他东西;然后从服务器读取它以显示在网页上。因此,如果您能帮助我了解如何进行这种转换的逻辑,我将不胜感激。

但是我对此很陌生,所以如果我的想法是错误的,请纠正我。

0 投票
1 回答
829 浏览

c# - Smart Tee 无法连接到相机

我有一个在 Windows 7 32 位机器上创建的 C# DirectShow.net 程序。它适用于我的开发机器,也适用于 xp 32 位和 vista 32 位虚拟机。

我遇到的问题是该程序的部署。我将把程序按原样放在单独的机器上。它不会运行。

我将代码放在 Windows 7 64 位机器上并得到错误:

所以我现在停止在代码中注册我的 DLL,只是手动注册它们。之后我重新启动我的程序并得到另一个错误

在我将相机连接到 Smart Tee 过滤器的代码中。我在机器上有 GraphStudio 并尝试在其中构建图形,但只要我连接过滤器,它就会一直崩溃。引脚不为空,他们发现过滤器并且图表不为空。不确定发生了什么。

除了我自己的以外,我还尝试过 win 7 32 位机器并遇到同样的问题。把我弄糊涂了。

我有 2 个 Windows 7 32 位虚拟机。一个是通过Virtual PC运行,另一个是通过Virtual Box。1 将在我的程序上崩溃并在尝试在 graphstudio 中复制图形时崩溃。Virtual PC 根本不会崩溃。两者都使用完全相同的win7版本:(

0 投票
2 回答
2263 浏览

c# - C# 控件使用 DirectShow.Net 显示摄像机视频

我想使用 DirectShow.Net 从网络摄像头捕获流。

我可以使用哪种类型的 UI 控件来显示网络摄像头视频捕获?

我见过一个使用窗体的整个窗口的示例,但是我可以使用任何其他控件:Panel、PictureBox?

0 投票
1 回答
717 浏览

directx - .net DirectX 翻转或镜像 IGraphBuilder(网络摄像头)

一直在兜圈子,directx 新手并在 c# 中使用 directshow 我需要翻转和镜像网络摄像头流,任何人都可以提供有关如何从 graphBuilder 执行此操作的指针。

谢谢

0 投票
2 回答
553 浏览

c# - 如何将 Video For Windows 代码迁移到更好的东西?

我有一个 IP 摄像机将视频流式传输到一家公司提供给我的黑盒缓冲区代码中。他们还为我提供了如何获取缓冲区并将其转换为 unsigned char* 数组的示例代码。使用这个数组,我可以创建一个 AVI 文件并将视频缓冲区保存到其中并创建一个视频文件。

它在很多方面都是一个糟糕的系统。包括这一切都在 VFW 中完成的事实

目前我在 C# 和 C++/CLi DLL 中执行所有这些代码。我知道如何使用 Directshow.Net,我想知道是否有一种更优雅的方法可以将这个视频缓冲区保存到一个 avi 文件或者我可以在 DirectShow 或 DirectShow.net 中轻松处理的东西?

0 投票
1 回答
972 浏览

c# - Overlaying Text with transparent background on a 24bit webcam feed

I'm using the DirectShow.Net library to display a feed from a web cam. I've created the capture graph with an ISampleGrabber interface which uses a callback containing a pointer to the video frame buffer. I use this pointer to create a .net bitmap, and Graphics object which I use to overlay some red text with the method Graphics.DrawString. This takes a Brush object parameter. When I draw the text, it gets displayed in multicolors instead of red. The Brush is correct because I'm using the preset Brushes.Red. At the moment I reckon this is caused by the fact that the Brush is painting in 32bpp but the web cam image is 24bpp. I could create a temporary 24bpp bitmap, draw the text onto that, then overlay it on the video frame, but this wont give me text with a transparent background.

Any ideas? (easy ones are more preferable)

Thanks

0 投票
1 回答
2216 浏览

c# - 有没有办法在程序中伪造 DirectShow 过滤器?

我有一个 IP 摄像机,它通过网络接收包含图像的字符缓冲区。在我在程序中设置与它的连接之前,我无法访问它。我正在尝试剖析 Windows 源过滤器代码,但我的速度不是很快,所以我想我会问是否可以只使用这样的缓冲区并将其转换为可以在 Directshow 中将引脚连接到 AVISplitter 等的东西/。网

更新

我的程序在命名空间中捕获视频,并且我在其自己的命名空间中拥有来自 GSSF 的代码。我将带有图像的 ptr 从 cam 命名空间传递到 GSSF 命名空间。这只会发生一次,但是图形从这幅图像中流出,而相机从网络中流出。有没有办法不断地将缓冲区从 cam 传递到 GSSF 或者我应该以某种方式组合命名空间?我尝试将主摄像机指针发送到 GSSF,但它崩溃了,因为它正在访问指针并被写入。也许如果我抓取了一张图片,传递了指针,等待抓取一个新的?

*更新*

我缩小了我的代码,现在我也不相信我在正确地做命名空间。

也有 GetImage 但那是相对相同的,将缓冲区复制到指针中。发生的事情是我抓取图像的缓冲区并将其发送到 DxPlay 类。它能够处理它并将它放在directshow线上没有问题; 但它永远不会更新也不会更新,因为它只是一个缓冲区。如果我改为向 DxPlay 发送一个包含图像缓冲区地址的 IntPtr,则代码会因访问内存而崩溃,因为我假设 ImageFromPixels 代码(现在不存在(更改

)) 正在访问指针的内存,因为 Cam_Controller 类正在编辑它。我制作并传递了 IntPtrs 和新 IntPtrs 的副本,但它们在转换中途失败。