问题标签 [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.
com - C# 中的 Directshow for windows mobile- 策略?
我试图弄清楚如何向 C# 应用程序(在移动设备 6 及更高版本上运行的 .net cf 3.5)添加一些 directshow 功能,但我很难弄清楚如何弥合使用非托管 c++ 类之间的差距(es) 在托管 C# 中。
我已经用 C++ 编写了我需要的功能: 基本上,我有一个管理器类,它使用 COM 来利用所需的 directshow 功能。快速免责声明:我是 COM 新手,我对 C++ 与 C# 的集成非常陌生。
我真的希望有知识的人可以建议我进一步研究的基本策略。 以下是我研究过的一些,以及我发现的问题:
创建一个 C++ DLL,然后从 C# 调用它。
问题:由于我在智能设备平台上工作,创建托管 C++ dll 不是一种选择,因此 C# 很遗憾无法直接调用我的 c++ dll。 从 C#(通过 COM)创建我的非托管 C++“dshow manager”类的实例是最佳选择吗?创建一个 C++ DLL,然后只需 Pinvoke/DLLImport 所需的方法。
问题:我的解决方案有一个事件监听器和东西,所以我需要维护一个管理器类的实例(参见选项 3),而不仅仅是调用单个方法。在 C# 中复制 C++ 类,然后从 C# 通过 COM 调用 dshow 方法。 问题:这对我来说似乎是最好的选择,但从我在这里找到的MSDN中,我需要首先“创建 com 接口和类型的托管定义”,不幸的是我找不到要导入的 directshow TLB 文件TLBImp.exe。WM6 SDK 给我的所有内容都是 dshow LIB、PDB 和 EXP。正如一些网站所建议的那样,我什至找不到 IDL 文件来创建 TLB。
就目前而言,我仍在调查事情,但现在有点卡住了。有什么建议么?提前致谢!
visual-c++ - Audio capture to a file using DirectShow from a mic (Any alternative to 'AudioRecorder WAV Dest' )
reference: http www codeproject com/KB/audio-video/cacsave.aspx?msg=3094764#xx3094764xx
I can't find anything like 'AudioRecorder WAV Dest'. Is there any alternative for this as in my PC graphEdit shows these: (Part 1 n related has worked nicely.)
And which one is the common Name exists in almost all windows PC to save a wave file. For now for WinXPSP2+.
-Rahul
c++ - DirectShow 停止/恢复直播
我正在使用 DirectShow 在我的应用程序中播放音频/视频文件。我使用IGraphBuilder::RenderFile()来构建过滤器图和IMediaControl接口来播放/暂停/停止媒体。这适用于本地媒体文件,但会导致实时彩信流出现问题。
如果我在实时流上调用IMediaControl::Stop(),则流将按预期停止播放。但是,如果我调用IMediaControl::Run()来恢复流,则不会发生任何事情。该图生成一个 EC_COMPLETE 事件,但视频不再播放。
调用IMediaControl::Pause()后跟IMediaControl::Run()将恢复它停止的流,但最终会停止。似乎只是在调用IMediaControl::Pause()时播放缓冲区中的数据,而不是与实时流重新同步。
有人知道如何在不破坏和重建过滤器图的情况下恢复播放直播吗?
c# - c# compact framework 中的 Directshow:Filtergraph 的 IMediaEvent 的触发器处理问题
我正在努力在 C# dll 中实现 directshow 功能。我的工作基于 Microsoft 随 Windows Mobile 6 sdk 提供的基于 C++ 的“CameraCapture”示例。事情进展顺利(多亏了这个网站上的早期帮助),但我在尝试在 C# 领域监听 directshow 事件时遇到了一些障碍:
我有一个循环来监听 dshow 事件的线程。它基于在此处定义的手动重置事件等待(这是在图初始化结束时定义的:构建图,调用渲染流,并且控制流已经阻塞数据流):
我遇到了两个相关的问题:
- 当我的 dshow 事件处理程序循环使用超时时间 0 通过IMediaEvent.GetEvent()拉事件时,我在第三次迭代中得到“超时超时”hresult (-2147467260)。在 C++ 示例中不会发生第三个事件触发器(以及后续错误)。
- 如果我忽略上面提到的超时情况,它将不断触发 73 事件。这会杀死处理器,因为循环基本上从不暂停。
当 C++ 示例在预览模式下运行它的图形时,它会获得两个 IMediaEvent:第一个是 13,然后是 73。之后,它会停止触发,直到开始实际捕获。我的 C# 版本拉 13,然后是 73,然后又是 73,但出现超时错误。
简而言之,似乎不应该发生 DshowRequestMan 的第三次触发,因为没有实际“获取”的 dshowevent,因此超时。
不知道我做错了什么 - 我在每次迭代时都调用“FreeEventParams()”......我怀疑 ManualResetEvent 对象的使用不正确,因为我只是为其句柄属性分配了一些东西,但同样当我使用 Pinvoked "WaitForSingleObject" 来收听 DshowEventHandle 时,事情就会发生......我现在很困惑。
任何想法将不胜感激。提前致谢!
windows-mobile - Windows Mobile 上 Directshow 中的图像捕获(照片)太慢 - 建议?
我正在使用 Directshow 在 winmo 设备上捕获图像。我的本机代码基于 Windows Mobile 6 sdk 中的“CameraCapture”示例,并进行了一些小的调整(简化了图表、添加了实时预览窗口、提高了照片分辨率等)。
我的问题是调用 IAMVideoControl::SetMode() 来实际“拍摄”照片需要很长时间才能完成。 当我调用它时,它会异步运行,需要几秒钟,然后在创建照片文件时播放相机快门声音。未经修改的 CameraCapture 示例与我自己的代码一样慢,因此我添加的任何内容似乎都不会导致此问题。
我已经通过监听 dshow 事件来解决异步部分,但是我很难找到一种更快的拍照方式。令人讨厌的是,我还没有找到任何方法来使快门声音静音(?)。这一切都非常令人失望,因为 Microsoft “CameraCaptureDialog” 会立即以相同(和更高)的分辨率拍摄照片。
[编辑]:速度评论是根据我记得它的运行方式和最近用另一台设备进行的测试做出的,但在看到下面的评论后,我用标准 CCD 重新测试——它同样慢。除非有人有任何技巧来加快速度(或消除快门噪音),否则我会说我将不得不忍受我所拥有的。再次感谢!
关于我可能会考虑加快这个过程的任何建议?有没有更快的方法来通过 Directshow 拍照?
再次感谢!
windows - 检测正在播放的电影 (Windows)
看电影是完全不同的用户活动。
用户既不触摸鼠标也不触摸键盘。然而,他“积极地”使用电脑。因此,不应运行屏幕保护程序,应小心执行索引等。
另一方面,播放视频需要使用直接写入视频内存、DirectShow 或其他一些 API。这可能是答案的关键。
确定正在播放视频的最简单方法是什么?
visual-c++ - 将位图(640x480)推送到 AVI 文件的 Visual C++ AVI 编写器功能?
我有一个带有 SDK for Visual C++ 的视频采集卡。在 SDK 的回调中,我可以以 30 fps 的速度使用彩色帧 (640 x 480)。目前,我正在将整个图像序列作为单独的 bmp 文件一次写入一个单独的线程中——即一小时内 108,000 个文件,或每小时约 100 GB,这是无法管理的。我想将这些传入的帧推送到一个 AVI 文件,而不是可选压缩。我什至从哪里开始?到目前为止,翻阅 MSDN DirectShow 文档让我感到困惑。那里有更好的例子吗?OpenCV 是答案吗?我看过一些例子,但我不确定 OpenCV 是否会将卡识别为捕获设备,我也不明白它是如何识别捕获设备的。另外,我已经把框架放进去了,我只需要将它们放在一些不支持我的生产者线程的消费者线程中的 AVI 中。谢谢你的帮助。
directshow - 是否有任何示例来说明如何编写 DirectShow 转换过滤器?
我想捕获当前帧及其前一个帧以进行分析并生成一个新帧来显示。是说我必须写一个变换 DirectShow 过滤器吗?但我是 DirectShow 的新手。我对 MSDN 的大量文档感到困惑。所以我想知道是否有任何简单的例子来展示如何做到这一点。
谢谢。厨师
c# - 如何使用directshow在多台显示器上同步播放多个视频?
我已经成功地使用用于 c# 的 directshowlib 使用具有多个流的单个视频窗口同步播放多达 8 个视频。问题是视频窗口只在一个屏幕上播放 - 当我尝试让它跨越多个屏幕时它不起作用。应用程序窗口正确跨越,但视频仅在一个屏幕上播放。有任何想法吗?
提前非常感谢。
windows - 为什么输出 IMediaSample 的缓冲区大小小于输入之一?
我已经成功构建了 ezrgb24 示例项目,它位于 DirectShow SDK 中。但是我在调试时遇到了一个困惑的问题。
Transform 方法调用了以下 Copy 方法。
断言语句失败。使用graphedit,我检查了过滤器的输入媒体类型是RGB24,输出也是RGB24。我不明白为什么输出的缓冲区大小会小于输入的 acural 数据大小。谁能帮我?
谢谢。
-------------------------------------------------- 2009/8/20 编辑
哦,我发现实际输入的媒体子类型是 RGB32,但输出的子类型是 RGB24。但是,为什么 CEZrgb24::CheckInputType 方法和 CEZrgb24::CheckTransform 的类型都可以是 RGB32 只为 RGB24 返回 OK。
-------------------------------------------------- 2009/8/21 编辑
我自己遇到了问题。我张贴作为答案。