问题标签 [directshow]
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.
c++ - DirectDraw 问题 - 将应用程序作为常规 Windows 应用程序运行
我正在开发一个视频录制应用程序,我想用徽标和录制计时器覆盖视频预览。
我尝试运行全屏应用程序,一切正常。然后我尝试将该应用程序作为常规 Windows 应用程序运行,但它返回了一个错误。
如果有办法修改它以将应用程序作为常规 Windows 应用程序运行,任何人都可以看看下面的代码吗?
c# - IStreamBufferMediaSeeking setPosition 似乎没有呈现
我创建了两个 DirectShow 图表。一个从 Hauppauge HD-PVR 捕获并将其存储在 StreamBufferSink 中。第二个使用 a StreamBufferSource
,将输出发送到 MPEG-2 Demultiplexer,将视频发送到 ArcSoft Video Decoder,然后发送到设置为无窗口模式的 Video Mixing Renderer 9。
这一切都适用于预览数据。当我使用该IStreamBufferMediaSeeking.SetPositions
方法(从 获取界面StreamBufferSource
)更改播放位置时,如果我将其设置在流开头以外的任何位置,视频将冻结并停止更新。调用GetCurrentPosition
显示IStreamBufferMediaSeeking
位置在流中移动,但视频没有跟随。
我正在使用 C# 和 DirectShowLib-2005 进行编程。
关于出了什么问题或如何找出问题所在的任何想法?
c# - 使用滞后过滤器时如何防止 DirectShow 图形帧聚集在一起?
我有一个使用 SampleGrabber 过滤器进行一些处理的 DirectShow 图。处理时间长达 50 毫秒,因此播放速度通常较慢。可以打开和关闭处理。
我的问题是,如果处理已经打开了一段时间,当我关闭它时,视频会尽可能快地播放,直到达到某个点。大概这一点是帧时间与流时间匹配的地方,不再有任何滞后。
我怎样才能阻止这种情况发生,以便在我关闭处理时播放以正常速度?我可以在处理数据时关闭流时钟吗?或者也许再次为来自 SampleGrabber 过滤器的样本添加时间戳,并添加额外的滞后?
有谁知道这样做的正确方法?
编辑:
我使用了更改样本时间的方法,如下面的答案所示,但是在寻找和计算样本时间戳时遇到了一些问题。
我发现一个更好的方法是实现我自己的参考时钟并在处理时间过长时停止时钟。
mfc - 如何设置 FilterGraph 渲染器的所有者?
我有一个 CView,我想托管一个 DirectShow 渲染器。
我没有写原始代码,我只是清理并将代码移动到VS2005。这需要升级某些第三方工具,所以我试图在不完全了解 DX/DirectShow 的情况下稍微更改代码。
问题是我的应用程序在我运行时挂起
m_pDockWnd 是 CView。我可以在预览模式下执行此操作,但不能在捕获模式下执行此操作。在捕获模式下,它会挂起应用程序。
如果我不拥有渲染窗口,则没有问题(尽管捕获窗口归桌面所有,这对我不起作用)。
此外,当捕获窗口归桌面所有时,它会显示一个忙碌的光标 - 可能它实际上也没有工作,但它至少没有挂起应用程序。挂起是指应用程序不响应用户输入,但后台线程继续运行。
更新:我们使用的是旧版本的 DirectX(06 年 8 月)。我编译/链接了与 Vista SDK 一起打包的 DirectShow 内容,并且....没有骰子。
multithreading - 如何在不锁定的情况下将数据从一个线程输出到另一个线程?
我正在开发一个 DirectShow 应用程序。我遇到了一个死锁问题,这个问题似乎是由线程调用的回调函数中的获取锁引起的。这是我在 MSDN 论坛中提出的问题:
现在我必须避免在该线程中获取锁。但问题是,我必须将音频输出到另一个线程,我怎样才能将数据不加锁地放到另一个线程?
有人告诉我,我可以使用 win32 sdk 的 PostMessage 将数据发布到另一个线程。但是,为了得到消息,我必须运行一个 Windows 程序。我的程序是一个 Python C++ 扩展模块。添加循环来拉取消息可能非常困难。所以我认为另一种在线程之间传递数据而不锁定的方法。(其实……生产者线程不能被锁定,但是消费者线程可以做到。)
锁还是不锁,这是个问题。
那么问题来了怎么办?
谢谢。
- - - 编辑 - - -
我想我知道为什么会出现死锁,那可能不是 DirectShow 的问题。
主线程是Python自己的,调用stop,即持有GIL。并在线程返回中停止等待 DirectShow 的回调。但是回调获取 GIL。
看起来像这样
Main(Hold GIL) -> Stop(Wait callback) -> Callback(Wait GIL) -> GIL(Hold by Main thread)
该死的!这就是为什么我不太喜欢多线程的原因。不管怎样,谢谢你的帮助。
windows - 你如何让 DirectShow 播放资源中的视频?
我正在扩展一个应用程序以在对话框中的控件上播放多个视频之一。从 Windowless 示例开始,我已经完成了这项工作,尽管视频必须是与主可执行文件分开的文件。
从打包的角度来看,理想的情况是将视频作为资源包含在可执行文件中。我为此做了一些谷歌搜索,有相当多的“有人应该这样做”,还有几个指向异步示例的指针,尽管不清楚如何从那里得到我想要的地方。
有谁知道一个简单的方法来做到这一点?看起来这不是一个角落案例,我有点惊讶它不在盒子里。
windows - 在 Windows 上用于视频捕获的 DirectShow 替代方案
我正在考虑更新当前使用 DirectShow 进行视频捕获的程序。虽然 DirectShow 似乎运行良好,但我想知道是否有任何更强大或最新的 SDK 或 API 值得我研究。一些有用的功能将是:
- 在捕获期间提供一致的帧速率(NTSC 帧之间为 33 毫秒)。
- 使用 DirectShow 兼容的捕获设备。
- 不需要在客户的 PC 上安装额外的许可证。
- 允许同时预览和硬件编码视频。
- 能够集成到 C++/MFC 应用程序中。
我研究了LeadTools Multimedia Capture SDK和VisioForge Capture SDK和Microsoft Media Foundation,但只是想知道其他人成功使用了什么,然后再将时间或金钱投入这些替代方案之一。我不在乎这是商业产品还是开源产品。
编辑:虽然我很欣赏解决我的特定问题的尝试,但这个问题应该是关于 DirectShow 的替代品。因此,我删除了对我的具体问题的所有引用。解决这个问题需要等待另一个问题。
windows-mobile - 如何在 windows mobile 上从 url 播放 mp3
我正在寻找一种在 Windows Mobile 5 上从 url 播放 mp3 文件的方法。
我发现使用 wmplib.WindowsMediaPlayer.url 属性的示例适用于设备上的文件,但似乎不适用于 http: url。该函数似乎成功而没有抛出异常,但没有播放音频。我已经尝试了 player.settings.volume = 100 并且还调用了 player.controls.play。此方法适用于 Windows 桌面应用程序,但不适用于移动设备。
使用 DirectShow 的另一个选项并不简单,因为根据我查看过的各种网站,Windows Mobile 不包含 Mpeg1(或 mp3)拆分器/解析器过滤器。我找到了两个示例过滤器的源代码,但都无法为 Windows Mobile 成功编译。
有谁知道用于 Windows Mobile 的预编译的、最好是免费的 mp3 解析器/拆分器过滤器,或者知道用于设置 Visual Studio 项目以便能够从源代码编译其中一个示例的明确说明?
wpf - 通过directx或其他方法在WPF应用程序中实时1394火线视频
是否有任何人都知道我可以用来将火线视频流式传输到 WPF 应用程序的控件。我不需要相机控制或仅捕获视频。我需要 WPF 托管,因为我将在顶部添加 WPF 内容。
我希望通过在 WPF 中添加直接 X 表面,可能会出现这样的情况。
理想情况下寻找相对较高水平的东西(根本不是直接的表演者)。
谢谢,布赖恩
video - DirectShow:BITMAPINFOHEADER 和 ISampleGrabber 返回不同的大小
我有一个特定的 FLV (VP6/LAME) 文件,它是 400 x 171 像素,由BITMAPINFOHEADER
结构报告并由许多 FLV 元数据编辑器(如 RichFLV)验证。
但是,当使用ISampleGrabber
生成的样本(每像素 3 个字节)从中获取样本时,只有 204,000 字节(400 x 170 x 3),而不是我期望的 205,200 字节(400 x 171 x 3)。
当我试图仅将 400 x 170 的数据推送到 400 x 171Bitmap
对象的构造函数中时,它变得相当不安并导致 A/V 异常。
我可以破解它来检测“接近但不完全符合预期”的样本大小,但我真的很想知道 1px 的垂直高度在这个过程中去了哪里。我的猜测是一个狡猾的过滤器,它不支持宽度/高度的奇数值并且正在删除它,但我不确定检查这个的简单方法。
有人知道会发生什么以及如何验证吗?
(PS:我不是一个好的C/C++开发者,所以请不要涉及过度使用它的解决方案)