我一直在编写一个接收 QVGA 视频流的浏览器插件。我想以一种可以从 JavaScript 以编程方式接口的方式将该视频流式传输到浏览器 - 例如,可以输入画布的东西,如元素或 Image() 对象。
注意:这意味着我试图避免让我的插件绘制到一个窗口中 - 我知道我可以做到这一点,但我想要与页面的其余部分呈现良好交互的东西,并且还有一个众所周知的对象模型,我不必实施。
棘手的部分是如何快速做到这一点 - 例如,我可以通过设置 src 属性来获得 base64 编码数据,但开销非常高。
我的问题是是否有办法避免更多开销(例如,提供原始图像缓冲区而不是格式化图像并对其进行 base64 编码以让浏览器对其进行解码)——我现在所拥有的还不够快。
至于环境,我正在使用 Firebreath 来编写插件(C++ 与 NPAPI/ActiveX 大部分被抽象出来),我想保留我拥有的 Mac 和 Windows 支持。直接研究使用 NPAPI 是可以接受的,但我宁愿不这样做。
编辑:我通过使用一个元素并使用数据 UI 方案将其 'src' 属性更新为 base64 编码位图解决了这个问题 - (例如 imageJSObject->SetProperty('src', 'data:image/bmp;base64,<encoded BMP>'); 性能不是很好,但已经足够了。主要的警告是,至少在 Chrome 15 上,onload 只触发一次,而不是每次我更改 src 属性时,所以我必须生成自己的事件每次更新后。