【发布时间】:2018-07-30 11:20:16
【问题描述】:
将二进制数据从插件传输到浏览器的最佳方式是什么。 我们想在浏览器选项卡上播放从网络接收到的 YUV 缓冲区。 目前正在转换为 base64 并通过回调提供。但效率不高,我发现以下问题
1> CPU 和内存在增加 2> 当我们改变浏览器标签时回调事件不会被传递,稍后所有事件都会在回到我们的标签时一次性给出。
我也想知道有什么方法可以直接在浏览器上使用插件线程本身绘制 YUV 帧。
提前致谢。
【问题讨论】:
将二进制数据从插件传输到浏览器的最佳方式是什么。 我们想在浏览器选项卡上播放从网络接收到的 YUV 缓冲区。 目前正在转换为 base64 并通过回调提供。但效率不高,我发现以下问题
1> CPU 和内存在增加 2> 当我们改变浏览器标签时回调事件不会被传递,稍后所有事件都会在回到我们的标签时一次性给出。
我也想知道有什么方法可以直接在浏览器上使用插件线程本身绘制 YUV 帧。
提前致谢。
【问题讨论】:
NPAPI 已从大多数主要浏览器中删除...最后一个支持者 Safari 将在 macOS Mojave 中删除它。在这种情况下,不要期望对规范进行任何形式的更新——但是你正在使用它可能是一种垂死的方法。
在这种情况下,在 Windows there is a method(真的是超级黑客)上,您可以使用它从本机消息扩展直接绘制到浏览器中的窗口,但它不是可移植的,它取决于内部实现细节。自从我写了另一个答案(在本段中链接)后,我实际上并没有研究过它,所以我不知道它是否仍然有效。
无论如何,如果您使用的是完全支持 NPAPI 的浏览器,那么您可以将 YUV 数据直接绘制到浏览器上提供给您的插件窗口中;有一个example of blitting image data in FireBreath 可以作为示例进行追踪。
您还可以尝试在插件中侦听 TCP 端口并从浏览器连接到它的一些变体;你很容易在那里遇到一些安全问题,但这是我能想到的唯一其他方法。
NPAPI 根本没有设计为允许插件和浏览器之间快速传输数据;几年前我提交了一个添加该功能的提案,但它基本上太接近 NPAPI 的死亡(此时基本上已经过去),它无法去任何地方。不过,您看到的问题与我的预期 100% 一致……而且这仍然是我所知道的最佳方式。
【讨论】: