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

时间:2014-07-09 22:56:34

标签: plugins browser npapi firebreath

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

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

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

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

此外,我对于如何在限制条件下实现这一目标持开放态度。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

  

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

     

据我所知,你几乎无法准确控制屏幕的时间。什么只能做:

     

1)通过发出无窗口invalidatewindow

通知浏览器重绘      

2)浏览器绘制事件随hdc到达。借鉴hdc

约翰是完全正确的。此外,每次调用抽签时,HDC都可能(可能会)不同。我不知道有没有人使用无窗口模式成功获得directx绘图,并且你绝对不能保证你正在做的事情将会工作,即使你使它工作浏览器可能改变它吸引的方式或顺序以某种方式打破它。

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

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

希望这有帮助