如何使用Delphi/DSPack捕获帧而不将其显示在TVideoWindow上?

2024-03-16

DSpack 具有播放 DirectShow 兼容视频设备并同时捕获视频帧的示例代码。 TVideoWindow 附加到 FilterGraph 以显示视频 (Figure-1)。如果删除 TVideoWindow,则操作系统 (Windows) 将自动启动 ActiveMovie 并在单独的窗口上显示视频(图 2)。

有没有一种方法可以使用 DSPack 捕获视频帧而不使用任何 GUI 组件且不显示视频?

DSPack 论坛有一些关于 NullRenderer 过滤器的提及,但没有关于如何使用它的文档或示例。看起来如果我们直接在 GraphEdit 中手动将视频渲染器替换为 Null Render,我们就可以实现这一点(图 3)。

我们如何通过在代码中进行所有操作来实现图 3 所示的结果? DSPack 没有解释如何创建空渲染器。

Figure-1: The graph of the default example code
Figure-2: Shows what happens if I remove the TVideoWindow
Figure-3: Shows what happens if I replace Video Renderer with a 
         Null Renderer and manually connect them in the GraphEdit. 

这就是我最终所做的(到目前为止)

拨打以下电话ReassignSampleGrabberOutput就在之前filterGraph.Play;

procedure TForm1.ReassignSampleGrabberOutput;
var
  nullRenderer : IBaseFilter;
  nullRendererPins: IEnumPins;
  nullRendererPin : IPin;
  graph:   IGraphBuilder;
begin

  nullRenderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;
  FilterGraph1.QueryInterface(IID_IGraphBuilder, graph);
  graph.AddFilter(nullRenderer, 'Null Renderer');

  nullRenderer.EnumPins(nullRendererPins);

  nullRendererPins.Reset;

  if nullRendererPins.Next(1, nullRendererPin, nil) = S_OK then
  begin
    //SampleGrabber1.OutPutPin.Disconnect;
    //SampleGrabber1.OutPutPin.Connect(nullRendererPin, nil);

    graph.Disconnect(SampleGrabber1.OutPutPin);
    graph.FindFilterByName('Video Renderer', filter);
    graph.RemoveFilter(filter);
    graph.Connect(SampleGrabber1.OutPutPin, nullRendererPin);

  end;
end;

Null Renderer Filter http://msdn.microsoft.com/en-us/library/windows/desktop/dd390934%28v=vs.85%29.aspx是一个标准过滤器/类。在代码中你只需要实例化它(CoCreateInstance),将其添加到图表中,并将其输入引脚连接到样本采集器未连接的输出引脚。

在 Delphi/DSPack 中应该是这样的:

Renderer := CreateComObject(CLSID_NullRenderer) as IBaseFilter;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用Delphi/DSPack捕获帧而不将其显示在TVideoWindow上? 的相关文章

  • 如何在以管理员身份运行模式下部署应用程序?

    如何部署应用程序 使其需要管理员权限 而无需最终用户手动执行此操作 我使用 Delphi 2009 来构建该应用程序 您可以使用以下命令通知 Windows 您的应用程序需要以管理员身份运行requestedExecutionLevel应用
  • Delphi 2010 控制闪烁

    我一直在从 XP 操作系统升级或迁移我们的软件 以便能够在 Windows 7 下编译和运行 我们的软件开始出现我们在 Windows XP 下没有注意到的问题 目前 我正在处理 TForm 上闪烁的用户定义控件 它似乎时不时地闪烁 但并非
  • 是否有适用于 >= Delphi 2007 的 Delphi 混淆器

    我曾经使用 Pythia 来混淆我的 D6 程序 但 Pythia 似乎不再适用于我的 D2007 这是 Pythia 的链接 自 2007 年初以来没有更新 http www the interweb com serendipity in
  • 为什么我不能在接收数组参数的函数中使用 SetLength?

    我正在尝试使用以下函数来设置动态数组 即 var 参数 的长度 当我尝试编译代码时只有一个错误 dcc64 错误 lolcode dpr 138 E2008 不兼容类型 function execute var command array
  • 如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小?

    有谁知道如何更改 Delphi 2010 IDE 中编辑器选项卡的字体大小 我的 1080p 22 显示器的字体太小 无法阅读 而且会导致眼睛疼痛 一些笔记 它不尊重系统的 DPI 设置 因此更改系统设置没有帮助 而且 我现在已经使用 14
  • delphi定时器比定时器服务中断例程更快

    大家好 我被要求为某人维护一个基于 Delphi 5 的程序 该程序使用一个计时器对象每 50 毫秒计时一次 并且在每次计时结束时运行单线程代码块 我只是想知道 如果执行这段代码所花费的时间比计时器滴答间隔长 会发生什么 这会很糟糕吗 例如
  • 递归遍历树视图中的节点?

    我有一个树视图 其中已经填充了另一个过程中的文件 文件夹 我想按照从上到下的确切顺序逐项迭代树视图中的项目 但是 与普通列表不同 我不能仅使用简单的for对此的声明 我必须进入每个节点等 我该怎么做呢 我希望有一种方法可以在不运行递归过程的
  • ADODB 组件导致 Win7/Server 2008 上的访问冲突

    我有一段用 Delphi 2005 编写的代码 用于在 LDAP 中搜索用户的特定属性 当在 Windows 7 或 Server 2008 上运行时 我遇到访问冲突 但在 XP 或 2003 上则没有 Function IsSSOUser
  • 我可以在“Delphi 2007 for Win32”中使用.NET DLL吗?

    是否可以在 Delphi 2007 for Win32 中使用 NET DLL 我尝试以与 ActiveX 组件相同的方式导入 DLL 但它似乎不起作用 组件菜单 gt 导入组件 gt 导入 NET 程序集 是否可能 如果可以 步骤是什么
  • 如何在 OSX 上的应用程序名称下创建子项菜单?

    如何在下面添加TMenuItemProject1以上Quit在下面的屏幕截图上 我创建了一个 TMenuBar 并选中了 UseOSMenu 属性 我添加的第一个 TMenuItem 是主栏中的第二个 TMenuItem 您可以通过将 II
  • 如何仅在调试模式下激活 ReportMemoryLeaksOnShutdown?

    我需要激活ReportMemoryLeaksOnShutdown报告应用程序内存泄漏的功能 但仅限于调试模式 当 Delphi IDE 运行时 我怎样才能做到这一点 如果您的意思是使用调试构建配置 D2007 编译的 调试模式 则您将定义
  • Delphi - 自XE8以来如何正确注册图形类?

    我正在编写一个 Delphi 包 它提供了一个新的自定义 TGraphic 对象 允许读取 VCL 组件 如 TImage 中的新图像格式 我最初使用 RAD Studio XE7 开发了这个包 并且运行良好 然而 我最近迁移到了较新的 R
  • 开源 Delphi 包可使用哪些项目选项?

    我写了一些 Delphi 代码 想在 GitHub 上分享 所有代码都根据需要包含在运行时和设计时包中 每个项目有许多项目选项需要设置 输出目录 搜索路径 编译选项等 我设法找到了一些适合我的情况的默认选项 但阅读此处的其他问答很明显有多个
  • Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

    我正在使用 Delphi XE6 并在我的项目中使用 Datasnap 和 JSON 我想纠正 VCL 单元 System JSON pas 在 TJSONString ToString 函数中 中的一个错误 它应该转义反斜杠字符和引号 为
  • 德尔福数据结构

    我可能需要在 Delphi 中做一个项目 并且是该领域的初学者 目前 我正在网上搜索资源 但由于资源站点太少而感到困惑 首先 你能给我一些好的网站 其中包含我迄今为止错过的 Delphi 资源吗 我也在 Delphi 中搜索数据结构 想知道
  • 有人用CrossKylix进行真正的跨平台开发吗?

    新版本克罗斯凯利克斯 http crosskylix untergrund net 两周前更新过 即使 Kylix 已经停产很久了 但它似乎仍然被一些 Delphi 开发人员使用 有人在 Windows 和 Linux 的跨平台开发中成功使
  • 如何在Delphi中下载一个非常简单的HTTPS页面?

    我尝试了在这里看到的代码 但它不适用于 HTTPS 我需要将此页面作为字符串下载 并在其上添加一些换行符 以便将信息按顺序放入 TMemo 中 怎么做 我尝试使用 Indy 但由于 SSL 问题而失败 我尝试了此页面的解决方案 如何将网页下
  • Delphi 返回 TList 时出错

    我做了一个非常简单的应用程序 但我有一个我真的无法理解的问题 看一下这个基本代码 unit Unit1 interface uses Winapi Windows Winapi Messages System SysUtils System
  • 具有 csOwnerDrawFixed 样式的组合框如何表现得像 csDropDown 样式?

    我正在使用一个组合框 http docwiki embarcadero com Libraries en Vcl StdCtrls TComboBoxstyle 属性设置为的组件csOwnerDrawFixed 我实现了绘图项一切工作正常
  • 当responseText包含有效的Xml时,IXMLHttpRequest.responseXml为空,没有解析错误

    我正在从中获取一些 XML政府网站 http www bankofcanada ca stats assets rates rss noon en all xml http www bankofcanada ca stats assets

随机推荐

  • Control.ResolveUrl 与 Control.ResolveClientUrl 与 VirtualPathUtility.ToAbsolute

    在解析以波形符 开头的路径时 使用其中一种方法比使用另一种方法有什么好处吗 一般来说 更好的做法是什么 您应该在 html 中发送相对路径还是绝对路径 ResolveUrl 和 ResolveClientUrl 的区别在于 ResolveC
  • MongoDB 记录太多?

    我有一个与 MongoDB 交互的 PHP 应用程序 直到最近 该应用程序运行良好 但几天前我发现该应用程序开始响应非常慢 其中一个收藏已突破 500K 条记录 因此 对该集合的任何查询的 MongCursor 都会超时 我认为 500K
  • 如何通过 ajax 操作向表添加行link

    我是 MVC4 的新手 我遇到了一个问题 当我想在 ajax 中向表中添加一行时 它似乎不是我想要的 这是我的代码 table thead tr th T n h c sinh th th Gi o l vi n th th N m H c
  • 避免序列化 REST 服务中的某些属性

    我有一个 Net应用程序分为客户端和服务器端 服务器提供REST服务 使用WCF 我有这样的服务定义 WebGet UriTemplate Customers id Customer GetCustomerById string id We
  • 对类型为其他模型的属性进行环回验证

    我定义了两个模型 位置和地址 定义如下 address properties address1 type string required true public true dataSource db plural addresses loc
  • Flask 蓝图在蓝图中查找静态文件而不是根目录

    我的蓝图应该在根目录中查找静态文件 但事实并非如此 假设我有一个名为 前端 的蓝图 frontend 仅传入了 template folder frontend 即使我将静态文件放在 app frontend static file css
  • 如何:Parallel.Foreach 执行许多进程,每个进程运行一个新进程(但一次一个)? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我确信有人知道这一点 我将非常感谢您
  • 休眠中的未知实体

    执行主类时出现此错误 我正在尝试在表投资组合中插入新记录 正如您所看到的 我使用 Hibernate ORM 模型来做到这一点 另外 可以说 hibernate 与数据库的连接没有任何问题 Exception in thread main
  • 同一模型上雄辩的亲子关系

    我有一个模型CourseModule 并且每个项目都与同一模型相关 数据库结构 模型中的关系 public function parent return this gt belongsTo App CourseModule parent i
  • Java接口命名约定[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用线程进行 Android 媒体录制

    我正在开发一个 Android 应用程序 只需使用按钮即可开始和停止录制 我用了线程 我创建了三个类 一个开始录制 一个停止录制和主类 问题是我可以在手机中看到该文件 但它是空的 并且手机给我一条消息 无法播放视频 我希望它与线程一起使用
  • 仅当用户在计算机上时才显示通知

    检测用户当前是否在其计算机上 即以某种方式使用它 的最佳方法是什么 我们有一个应用程序 仅当用户在计算机前时才发出通知 带有关闭按钮的横幅通知 例如 想象一个股票交易应用程序 它提醒用户各种可能只与几分钟相关的时间敏感信息 如果用户离开计算
  • pygtk glib.timeout_add():如何判断计时器是否没有被销毁?

    在我的应用程序中 我使用一个函数来显示带有超时的 GtkInfoBars 如所述https stackoverflow com a 1309257 406281 https stackoverflow com a 1309257 40628
  • CSS:图像链接,悬停时更改

    我有一个图像 它是一个链接 我想当用户将鼠标悬停在链接上时显示不同的图像 目前我正在使用这段代码 a href http twitter com me title Twitter link div class sidebar poster
  • 通过EntityFramework获取表的最新Value

    我有一个包含多个字段的表 每个字段都通过单独的 ViewModel 单独更新 现在我想获取特定字段的最新值 也许它已在我表的第五条记录中更新 好吗 现在我写的看起来像这样 public ViewResult ShowPiece var co
  • 对数据库持久对象进行版本控制,您会如何? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 与数据库架构的版本控制无关 与数据库交互的应用程序通常具有由许多表中的数据组成的域对象 假设应用程序要支持这些域对象的 CVS 意义上的版本
  • 使用 Bean Utils 填充 POJO 时设置字段的默认值

    我正在尝试使用填充 POJO 的字段BeanUtilsBean populate object fieldNameVSfieldValueMap method 我的 POJO 看起来像 class POJO Integer intField
  • 你能解决这个简单的 SQL 查询吗?

    假设这是一个销售相机的网站 这是我的实体 表 Camera A simple camera Feature A feature like 6mp max resolution 1024x768 事情是在相机和功能之间我有一个多对多的关系 所
  • 在 laravel 4 中提交表单后重定向到联系人页面

    提交详细信息后 我想重定向回联系人页面 我已经从论坛中查看了解决方案 但找不到解决方案 到目前为止 这就是我所拥有的 Route post sendmail function Mail send emails auth mail array
  • 如何使用Delphi/DSPack捕获帧而不将其显示在TVideoWindow上?

    DSpack 具有播放 DirectShow 兼容视频设备并同时捕获视频帧的示例代码 TVideoWindow 附加到 FilterGraph 以显示视频 Figure 1 如果删除 TVideoWindow 则操作系统 Windows 将