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

visual-c++ - 在 vc++ 中使用 directshow 停止视频预览

hai .. 只是我为向用户显示预览并捕获图像编写了应用程序。我使用示例绘图过滤器从捕获 PIN 捕获图像。预览 PIN 用户仅用于预览视频。它运行良好但是当我停止预览时它会影响 CAPTURE.cant捕捉图像

我正在使用 CONTROL STREAM 停止预览..

请帮忙

0 投票
2 回答
3921 浏览

c# - 由于以下错误,检索具有 CLSID {...} 的组件的 COM 类工厂失败:80040154

我正在使用 DirectShowLib 和 SampleGrabber 来捕获 AVI 文件的视频帧。我通过使用图形生成器和几个过滤器来实现这一点。一切正常,我能够初始化图形和过滤器。

然后我添加了代码来获取一些视频信息,如尺寸、帧速率等。为此,我使用了 IMediaDet。但是当我尝试初始化它时:

Activator.CreateInstance(t)抛出异常:

由于以下错误,检索具有 CLSID {65BD0710-24D2-4FF7-9324-ED2E5D3ABAFA} 的组件的 COM 类工厂失败:80040154。

我不认为这是构建的问题,因为过滤器和图形构建器正在初始化。任何人都有任何想法,或者是否有任何其他 API 可以用来收集 AVI 文件信息,如尺寸、帧速率、视频长度?

0 投票
1 回答
3001 浏览

c# - 我如何获得任何视频文件的帧率、比特率(wmv、mov、H.264、mp4)

我需要获取信息,例如每秒帧数、视频文件的比特率(wmv、mov、H.264、mp4)我使用 IMediaDet 获取信息,它适用于 wmv、avi 但不适用于 mov 和 H264,我是使用 ffddow 编解码器播放 mov 和其他文件。

有没有其他方法可以使用 DirectShow 或任何其他 api 找到这些信息。

0 投票
2 回答
1809 浏览

audio - 使用 DirectShow 确定音频文件的长度

我刚开始使用 DirectShow.NET,我正在尝试获取音频文件的长度(以秒为单位)。音频可以是 .mp3、.wav、.aac 或 .m4a。

我可以使用 DirectShow 获取此信息,还是需要一些其他 API?

0 投票
0 回答
873 浏览

c# - 使用 DirectShow 过滤器解压缩 AVI 文件

我正在尝试使用 DirectShow 过滤器解压缩 AVI 文件。

这是我正在构建的图表。

文件阅读器 -> AVI 拆分器 -> AVI 解压缩器 -> SampleGrabber -> AVI Mux -> 文件写入器

我正在起诉 SampleGrabber 报告转换进度,仅此而已。

我遇到的问题是,一旦文件被转换,里面就没有音频了。视频一切正常,但没有音频。我使用 GraphEdt 尝试了相同的过滤器集,它转换正常(音频和视频都完好无损)。

我真的不知道在整个过程中可能会出现什么问题。有任何想法吗?

我正在使用 DirectShowNet

0 投票
1 回答
5384 浏览

directshow - 如何让 IMediaControl.Run() 无延迟地开始播放文件

我正在尝试使用 DirectShow 连续播放两个 AVI 文件(一个接一个),这样当播放器从一个文件转换到下一个文件时,音频或视频不会中断。

我的表单上有两个自定义控件。每个都预加载了一个 AVI 文件,在开始播放之前,我设置了所有 DirectShow 接口,设置视频窗口并调整它们的大小,调用 IMediaControl.Run(),然后调用 IMediaControl.Pause(),然后调用 IMediaSeeking.SetPositions在两个控件上重置为第 0 帧。在表单上,​​您可以看到两个文件都在其初始帧处暂停。

然后我在第一个控件上调用 IMediaControl.Run(),并等待它完成,然后再在第二个控件上调用 Run()。最初,我连接到第一个视频的 EC_COMPLETE 通知消息,并用它来启动第二个。考虑到这个事件可能会来得很慢(事实证明确实如此,但出于一个奇怪的原因),我尝试了另外两种方法:

  1. 检查第一个视频在每秒钟左右关闭的计时器内的当前位置(使用 IMediaPosition.get_CurrentPosition)。当当前位置在视频停止时间的一秒内(从 IMediaPosition.get_StopTime 提前知道),我进入一个紧密while循环并等待当前位置等于停止时间,然后在第二个调用 Run()视频。
  2. 与第一个相同,除了我将while循环替换为对timeSetEventfrom的调用winmm.dll,并设置了延迟,以便在第一个文件应该结束时立即触发。我使用回调来 Run() 第二个文件。

这两种方法中的任何一种都大大减少了第一个文件结束和第二个文件开始之间的延迟,表明 EC_COMPLETE 消息不会在文件完成后立即到达(我也尝试过挂钩 EC_SEGMENT_COMPLETE 消息,即应该用于在文件中循环,但显然没有人支持这一点 - 至少在我的机器上从未发生过)。

完成上述所有操作已将转换延迟从一秒减少到几乎无法察觉的故障;大约三分之一的时间文件完全没有中断地转换,这表明没有根本原因我不能让它一直工作。

不幸的是,轻微的延迟仍然是不可接受的。我假设(我很容易出错)剩余的延迟是由于调用 IMediaControl.Run() 和视频实际开始播放之间的轻微可变延迟。

有人知道我能做些什么来消除这个小滞后吗? 被告知无论出于何种原因这基本上是不可能的也将有所帮助,这不会让我感到惊讶。我从来没有在 Windows 中遇到过没有这个问题的视频播放器,所以它可能不可行。

更多信息:我正在播放的 AVI 文件完全未压缩(视频和音频未压缩),所以我认为延迟不是因为 DirectShow 必须在播放开始前解压缩视频,尽管它可能仍会提前缓冲当然(这可能是问题的根源)。我会认为开始播放,暂停然后倒回到开头会解决这个问题。

此外,我处理转换的方式实际上是将第二个控件放在第一个控件之下;当第一个完成播放时,我开始第二个,然后在其上调用 BringToFront,创建两个原件之间的单个视频过渡的外观。我不认为故障是由于这个原因,因为它在某些时候工作得很好,即使这是有问题的,它也不能解释匹配的音频故障。

更重要的是:我只是尝试“提前”30-50 毫秒开始第二个视频,这似乎消除了更多的差距,所以我猜 Run() 中的延迟大约有那么长。不过,它似乎是可变的,所以这仍然不是我需要的地方。

还有更多:也许我可以通过从内存而不是从文件中加载 AVI 来消除这种延迟。不幸的是,我不知道该怎么做。IMediaControl 只有一个RenderFile()方法,而不是类似RenderStreamorRenderMemory方法的东西。

0 投票
1 回答
1106 浏览

visual-c++ - 水印 + Directshow 过滤器

我想在我的视频上加水印。是否可以使用 directshow 过滤器。想要在视频上重叠图像,例如频道徽标。以便在播放视频时固定图像。

请提供一些有价值的帮助或示例(VC++)

0 投票
1 回答
573 浏览

c# - Marshal.PtrToStructure 上的堆栈溢出读取 wmv 文件

我正在使用图像采集器类来捕获和处理视频中的每一帧。该类可以在这里找到:http: //www.codeproject.com/KB/graphics/FrameGrabber.aspx

但是,我在运行它时遇到问题。加载文件时,它会尝试将视频格式指针编组到 VideoInfoHeader(我使用的是 DirectShow.Net)。执行此操作的代码如下:

当我运行它时,它会立即从调试环境中崩溃,可能是堆栈溢出。单步执行时,我可以看到 formatPtr 始终等于 93,尽管我不知道该怎么做,因为我对编组相当陌生。

我检查了视频在 Windows Media Player 中运行良好。

这对于查找视频的尺寸以及标题的大小至关重要,在读取帧之前需要跳过它。

我正在运行 Windows 7 x64。

对此的任何帮助将不胜感激,我必须尝试十五种不同的帧抓取技术。

0 投票
2 回答
696 浏览

directshow - DirectShow.NET 打开 Windows Media Player 可以打开的任何文件

这是来自 DirectShowNet 库的代码片段,用于打开视频文件:

但 RenderFile 方法失败。同时,Windows Media Player 也能很好地打开同一个文件。可能是什么问题。

我在没有 DirectShowNet 的情况下得到了相同的行为,但是使用了本机 C++ 代码......

0 投票
1 回答
974 浏览

c# - directshow Renderstream 因灰度位图而失败

我正在尝试创建一个直接显示图来播放由 8 位灰度位图组成的视频。(使用directshow.net。)

我正在使用源过滤器和 vmr9 渲染器。

源过滤器的输出引脚使用以下代码定义:

这会导致 Renderstream 返回“找不到中间过滤器的组合来建立连接”。

请帮忙!

谢谢。