【问题标题】:How can I overlay html elements over my DirectShow application?如何在我的 DirectShow 应用程序上覆盖 html 元素?
【发布时间】:2013-06-06 15:24:25
【问题描述】:

我正在使用一个 DirectShow 应用程序,该应用程序作为 Firefox 插件导出用于视频流。

据我所知,该插件似乎是在与网页不同的窗口上呈现的。我想编辑应用程序以允许插件上的 html 元素,就像 flash 允许 wmode='opaque' 或 'transparent' 一样。另一个可行的选择是通过应用程序传递鼠标事件(例如鼠标移动和鼠标按下)。

我一直在阅读有关 put_MessageDrain 和 put_Owner 的信息,但我不确定如何将它们应用到应用程序或它们是否会起作用。

我也知道 iframe 匀场可能会起作用,但由于我可以访问应用程序的源代码,因此我想直接添加功能而不是使用变通方法。 iframe 匀场是我的最佳选择吗?这似乎是最简单的选择。

该应用程序当前使用无窗口模式,并且始终位于网页上的所有其他内容之上。

【问题讨论】:

    标签: html rendering directshow always-on-top windowless


    【解决方案1】:

    使用 DirectShow 视频渲染器显示视频的方式,如果不提供您自己的视频渲染器过滤器或用于标准视频渲染器之一的自定义分配器/演示器对象,您将无法使其透明。 DirectShow 渲染器使用 DirectDraw 或 Direct3D 表面显示视频,该表面独立于宿主窗口,并且不与宿主交互,以使您将图片与透明视频和其他内容组合在一起。

    我一直在阅读 put_MessageDrainput_Owner

    这些是用于窗口模式的,您似乎使用 Windowless,它假定您提供了一个托管窗口和矩形来不透明地覆盖。 Renderless,VMR-7/9 和 EVR 为您提供的第三种模式是您提供分配器/演示器并覆盖演示的模式。

    Windows SDK(对于某些您可能需要寻找旧版本,而不是最新版本)提供了samplesRenderlessVMR9AllocatorEVRPresenter,它们演示了无渲染模式。

    【讨论】:

    • 这非常有用,谢谢 :) 我会做更多的研究,如果我有任何其他问题,请告诉你。
    猜你喜欢
    • 1970-01-01
    • 2022-11-30
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    相关资源
    最近更新 更多