我一直在使用WebcamJS库在浏览器中传输来自摄像头的视频,但我遇到了一个主要的性能瓶颈。由于我使用的是Internet Explorer 11(并且无法切换到其他浏览器),因此该库将恢复为访问相机的Flash后备。
由于其步骤很多,返回图像的ActionScript回调非常慢。当它返回图像时,它首先将其字节数组编码为PNG或JPG,然后编码为基本64字符串。然后使用ExternalInterface将此字符串传递给JavaScript,JavaScript通过数据URI对图像进行解码。鉴于我只需要JavaScript中的字节数组,这些额外的步骤似乎很浪费。
我以前在C ++ / Python中必须解决类似的问题。我不是在两种语言之间来回反复传递数组数据,而是在程序开始时使用Python传递NumPy数组引用。然后,他们可以从此开始访问相同的数据而无需任何额外的通信。
既然您已了解我的情况,那么问题是:是否可以通过引用ActionScript传递JavaScript Array或ArrayBuffer?在这种情况下,我可以让ActionScript直接修改JavaScript数组,而不是浪费时间转换,编码和解码每个帧的图像。
(WebcamJS:https://github.com/jhuckaby/webcamjs)
答案 0 :(得分:0)
为了完整起见,Flash中的SharedObjects存储数据,使用AMF协议序列化,在文件系统上(在非常特定的沙盒和锁定位置)Javascript无法访问以读取数据。
您是否曾尝试简单地调用ExternalInterface方法并将一个字节数组作为参数传递?它会按值传递,自动从Actionscript数据结构转换为Javascript版本,但是你跳过所有的编码步骤,它应该足够快......