【问题标题】:Firebreath NPAPI plugin rendering video to top level browser window (HWND)Firebreath NPAPI 插件将视频渲染到顶级浏览器窗口 (HWND)
【发布时间】:2014-07-09 22:56:34
【问题描述】:

我正在开发一个使用 FireBreath 的音频/视频渲染插件,我们需要让 HTML 元素覆盖在视频之上。我知道要做到这一点,我需要在 FireBreath 中使用无窗口模式。但是,由于我使用 DirectX 来渲染视频,因此当我被指示以无窗口模式渲染时,我无法使用 HDC 句柄(它需要 HWND)初始化 DirectX。

此外,出于其他软件安全原因,我无法将视频渲染到屏幕外表面,然后将这些位传送到 HDC。

我尝试完成的替代方法是使用 DirectX 中的硬件覆盖功能并使用浏览器的 TOP 级别 HWND 来初始化 DirectX,然后使用 HDC 和坐标告诉 directX 在 TOP 浏览器窗口中渲染视频帧的位置.并将其直接渲染到顶部的父浏览器窗口。

我已经厌倦了概念验证,但我看到我的视频帧在绘制后经常被删除,因此视频似乎在闪烁。我试图理解为什么会这样,我想知道考虑到我的参数,这是否不是一个可行的解决方案。

此外,鉴于我的限制,我对如何完成此任务的建议持开放态度。

任何帮助将不胜感激!

【问题讨论】:

  • @taxilian 希望您能对此有所帮助!谢谢!
  • 如果你只在一个地方而不是三个地方发布这个会更好。我会将我对您的其他回复复制并粘贴到此处,但下次请只询问一次。

标签: plugins browser npapi firebreath


【解决方案1】:

在 FireBreath-dev 组中,John Tan 写道:

据我所知,您几乎无法准确控制屏幕何时绘制。唯一能做的就是:

1) 通过发出无窗口无效窗口通知浏览器重新绘制

2) 浏览器绘制事件与 hdc 一起到达。在 hdc 上绘图

约翰完全正确。此外,每次调用 draw 时,HDC 都可能(可能会)不同。我不知道有谁使用无窗口模式成功获得了 directx 绘图,并且您绝对不能保证您所做的事情将永远有效,因为即使您让它正常工作,浏览器也可能会改变它绘制的方式或顺序以一种会破坏它的方式。

您可能想查看异步表面 API;我不知道这适用于哪些浏览器,但我怀疑可能只有 Firefox 和 IE。它是在this commit 中实现的。

我根本没有使用过它,所以我无法告诉你它是如何工作的,但它旨在完全解决你所描述的问题。您的主要问题将是浏览器支持。 What documentation there is is here.

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多