我正在使用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
有谁知道,出了什么问题,以及如何解决这个问题? 任何帮助将不胜感激!
答案 0 :(得分:0)
嗯,我没有找到正确的解决方案。最后,我得到了带有透明背景的WebView,它放在Android TextureView上,显示来自摄像头的视频。