Android WebView + WebGL + Camera:BufferQueue已被放弃

时间:2016-11-27 16:35:57

标签: javascript android webview camera webgl

我正在使用webGL和android WebView(chrome 54.0)编写具有增强现实的应用程序。这就是我在JS应用程序中获取视频流的方式(并且工作得很好):

return navigator
        .mediaDevices
        .getUserMedia({video: {
            "facingMode": "environment",
            "width": cameraWidth,
            "height": cameraHeight
        }})
        .then((stream) => {
            let cameraURL = URL.createObjectURL(stream);

            // create Three.js texture with updated camera picture
        })
        .catch(function(exception) {
            // ...
        });

我必须在我的webview中显示一些UI视图,所以我从视图中捕获位图并将其上传到JS应用程序:

Bitmap viewBitmap = Bitmap.createBitmap(
        myView.getMeasuredWidth(),
        myView.getMeasuredHeight(),
        Bitmap.Config.ARGB_8888
);

Canvas canvas = new Canvas(viewBitmap);
myView.draw(canvas);

ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
viewBitmap.compress(Bitmap.CompressFormat.PNG, 100, byteStream);
String base64EncodedBitmap = "data:image/png;base64," 
        + Base64.encodeToString(
              byteStream.toByteArray(),
              Base64.DEFAULT
          );

mWebView.loadUrl(
    String.format(
        "javascript:someFunction(\"%s\");void(0);",
        base64EncodedBitmap
    )
);

这适用于我的设备,华为P8 Lite(6.0),但在Nexus 5(6.0.1)上失败 - 在加载一些视图后(可能在垃圾收集器的工作之后)它冻结了来自摄像头的视频并在日志中不断重复:

E/BufferQueueProducer: [ImageReader-640x480f23m2-7366-1] dequeueBuffer: BufferQueue has been abandoned

有谁知道,出了什么问题,以及如何解决这个问题? 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

嗯,我没有找到正确的解决方案。最后,我得到了带有透明背景的WebView,它放在Android TextureView上,显示来自摄像头的视频。