2011-11-19 139 views
1

我一直在编写一个接收QVGA视频流的浏览器插件。我希望以可通过JavaScript以编程方式接口的方式将该视频流式传输到浏览器 - 例如,可以将其馈送到画布中的某个元素或Image()对象。将视频从插件流式传输到浏览器

注意:这意味着我试图避免让我的插件绘制到一个窗口中 - 我知道我可以做到这一点,但我想要的东西与网页的其他渲染很好地交互,并且还有一个众所周知的对象模型,我不必实现。

棘手的部分是如何快速做到这一点 - 我可以做到这一点,例如通过设置src属性来获得base64编码数据,但开销非常高。

我的问题是,是否有一种方法可以避免更多的开销(例如提供一个原始图像缓冲区而不是格式化图像,而base64编码只是为了让浏览器解码) - 我现在所拥有的并不是足够快。对于环境,我使用Firebreath编写插件(C++与NPAPI/ActiveX大多数都是抽象的),我想保留我对Mac和Windows的支持。深入研究直接使用NPAPI是可以接受的,但我宁愿不行。

编辑:我使用的元件和使用该数据的UI方案更新其“SRC”属性的base64编码的位图解决了这个问题 - (例如imageJSObject- >的SetProperty(“SRC”,“数据:图像/ bmp; base64,<编码的BMP >'); 性能不是很好,但它足够好,主要的注意事项是,至少在Chrome 15上,onload只会被触发一次,而不是每次更改src属性时我不得不在每次更新后生成我自己的事件

回答

1

有没有高性能的方法发送二进制数据到页面;你可能会使用html5视频标签进行流式处理,在这种情况下,您可能会在您的插件中提供一个Web服务器源,但实际上将二进制数据发送到JavaScript base64可能是您最快的方法。另一方面,如果您要使用无窗口插件,您必须在指示时绘制插件(您可以调用PluginWindow上的InvalidateWindow来请求重绘),并且您将绘制到hDC中,但是您会参与DOM排序。这是Windows特有的;在Mac上,如果使用CoreGraphics(一些但不是所有浏览器上的CoreAnimation)绘制,您可以做同样的事情。

至于获取数据到JavaScript,您的选择是使用套接字(和浏览器中的东西从本地主机查询它们,如websockets或xmlhttprequest或其他)或base64编码并将其作为字符串发送。 NPAPI中还没有二进制数据功能。

+0

感谢您的快速响应 - 我一直在做更多的四处看看,它看起来像

+0

不,没有跨平台的方式为标签创建自定义编解码器。我甚至不知道你是否可以制作一个directshow过滤器并在IE中工作,并且我严重怀疑它可以在Firefox上工作,但是我没有真正考虑过这些,所以我可能是错的。祝你好运,虽然 – taxilian

+0

我知道你至少可以通过媒体基金会解决它(这就是谷歌提供的IE浏览器的WebM编解码器) –

相关问题