Plugins Firebreath NPAPI插件将视频渲染到顶级浏览器窗口(HWND)

Plugins Firebreath NPAPI插件将视频渲染到顶级浏览器窗口(HWND),plugins,browser,npapi,firebreath,Plugins,Browser,Npapi,Firebreath,我正在开发一个使用FireBreath的音频/视频渲染插件,我们需要让HTML元素覆盖在视频之上。我知道要做到这一点,我需要在FireBreath中使用无窗口模式。但是,由于我使用DirectX渲染视频,因此无法使用HDC句柄初始化DirectX(它需要一个HWND),当我被指示以无窗口模式渲染时,我会得到该句柄 此外,出于其他软件安全原因,我无法将视频渲染到屏幕外表面,然后将位Blt到HDC 我尝试实现的另一种方法是使用DirectX中的硬件覆盖功能,并使用浏览器的顶级HWND初始化Direc

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

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

我尝试实现的另一种方法是使用DirectX中的硬件覆盖功能,并使用浏览器的顶级HWND初始化DirectX,然后使用HDC和坐标告诉DirectX在顶部浏览器窗口中渲染视频帧的位置。并将其直接渲染到顶部的父浏览器窗口

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

此外,鉴于我的限制,我对如何实现这一目标的建议持开放态度

任何帮助都将不胜感激

在FireBreath开发小组中,John Tan写道:

据我所知,你实际上无法精确控制屏幕何时绘制。唯一能做的是:

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

2) 浏览器绘制事件随hdc一起到达。利用hdc

约翰完全正确。此外,每次调用draw时,HDC可能会(可能会)不同。我不知道有谁成功地使用无窗口模式绘制了directx图形,而且你也绝对不能保证你所做的工作能够正常工作,即使你让它正常工作,浏览器也可能会改变它的绘制方式或顺序,从而破坏它

您可能想看看async surface API;我不知道它适用于哪些浏览器,但我怀疑可能只有Firefox和IE。它是在中实现的

我根本没有用过这个,所以我不能告诉你它是如何工作的,但它的目的正是为了解决你所描述的问题。您的主要问题是浏览器支持


希望这有帮助

@taxilian希望你能帮我弄明白这一点!谢谢如果你只在一个地方发布,而不是在三个地方发布,那会更好。我会将我的其他回复复制粘贴到这里,但下次请只问一次。