在 JavaScript 和 ActionScript 之间共享数组引用
Posted
技术标签:
【中文标题】在 JavaScript 和 ActionScript 之间共享数组引用【英文标题】:Share Array Reference between JavaScript and ActionScript 【发布时间】:2016-11-13 13:27:18 【问题描述】:我一直在使用 WebcamJS 库在浏览器中从摄像头流式传输视频,但我遇到了一个主要的性能瓶颈。由于我使用的是 Internet Explorer 11(并且无法切换到其他浏览器),因此该库将恢复为 Flash 后备以访问相机。
返回图像的 ActionScript 回调非常慢,因为它有很多步骤。当它返回图像时,它首先将其字节数组编码为 PNG 或 JPG,然后编码为 base 64 字符串。然后使用 ExternalInterface 将此字符串传递给 javascript,后者通过数据 URI 对图像进行解码。鉴于我只需要 JavaScript 中的字节数组,这些额外的步骤似乎很浪费。
我之前不得不在 C++/Python 中解决类似的问题。我没有在两种语言之间反复传递数组数据,而是使用 Python 在程序开始时传递一个 NumPy 数组引用。然后,从那时起,他们都可以访问相同的数据,而无需任何额外的通信。
既然您了解了我的情况,那么问题来了:是否可以通过引用 ActionScript 来传递 JavaScript Array 或 ArrayBuffer?在这种情况下,我可以让 ActionScript 直接修改 JavaScript 数组,而不是浪费时间转换、编码和解码每一帧的图像。
(网络摄像头JS:https://github.com/jhuckaby/webcamjs)
【问题讨论】:
我实际上可能刚刚通过 SharedObjects 找到了我自己的问题的答案:***.com/questions/2860839/…***.com/questions/14010707/… 对于将来遇到同样问题的其他人来说,SharedObjects 实际上 don't 似乎是答案。看起来我想要的功能在 JavaScript/ActionScript 中没有。但是,通过使用这个相机库,我能够获得更好的性能:github.com/macobo/meemoo-camcanvas 【参考方案1】:为了完整起见,Flash 中的 SharedObjects 将使用 AMF 协议序列化的数据存储在 Javascript 无法访问以读取数据的文件系统上(在一个非常特定的沙盒和锁定位置)。
您是否尝试过简单地调用 ExternalInterface 方法并将字节数组作为参数传递?它将按值传递,自动从 Actionscript 数据结构转换为 Javascript 数据结构,但您会跳过所有编码步骤,它应该足够快...
【讨论】:
以上是关于在 JavaScript 和 ActionScript 之间共享数组引用的主要内容,如果未能解决你的问题,请参考以下文章
MXML 和用于移动设备的 ActionScript 之间的真正区别是啥?
语法错误 - rightparen - ActionScript 3 - 使用数组
如何创建由 xml 文件驱动的 Adobe Flash cs6 Actionscript 3 rtmp 视频播放器?
javascript 在Javascript中连接文本和变量