Folks,
我正在Android上开发屏幕捕捉应用程序,使用MediaProjection API。
我正在使用ImageReader来实现它,但Image.getPlanes((太重了,无法捕获实时屏幕。
由于Image.getPlanes((阻塞了主线程,它丢失了太多帧,无法看到平滑渲染的屏幕。当我对它进行评论时,ImageReader获得了比以前更多的图像。
我无法在后台执行Image.getPlanes((,因为在调用Image.close((之后调用了onImageAvailable。
所以,我的问题是:
- 为什么Image.getPlanes((这么重
- 有什么方法可以实现流畅的屏幕捕捉吗
代码如下。
public void onImageAvailable(ImageReader reader) {
try {
Image img = reader.acquireLatestImage();
//Too heavy!!
Image.Plane[] planes = img.getPlanes();
/* Do something */
img.close();
}catch (Exception e){
setImageReader();
}
}
谢谢你的帮助!
问题更新
//Background process example
@Override
public void onImageAvailable(ImageReader reader) {
try {
final Image img = reader.acquireLatestImage();
new Thread(new Runnable() {
@Override
public void run() {
Image.Plane[] planes = img.getPlanes();
/* Do something */
img.close();
//onImageAvailable is no called Until here.
//Because ImageReader is locked from ImageReader.acquireLatestImage() to Image.close()
}
}).start();
}catch(Exception e){}
}
好的,我知道模拟器不擅长这个操作。
我的真实设备运行良好。
我会尝试找到优化它的选项。
谢谢你的帮助。