我们使用 Media Projection API 的实现工作正常。但是我们在尝试将捕获的图像写入文件时经常会丢失帧。即使所有 io 代码都在单独的线程中执行。
我们想对捕获的帧进行一些在线图像分析,因此我们不能使用 screenrecord 或类似的工具。
有没有办法从本机代码调用 Android Media Projection 方法?以获得更好的性能?
我们甚至尝试在捕获过程中不调用任何 io 操作。直到最后,我们都在记忆中。但是在 30fps 时我们仍然存在丢失帧的问题。我们怎样才能避免呢?
try {
image = mImageReader.acquireLatestImage();
if (image != null) {
Image.Plane[] planes = image.getPlanes();
ByteBuffer buffer = planes[0].getBuffer();
int pixelStride = planes[0].getPixelStride();
int rowStride = planes[0].getRowStride();
int rowPadding = rowStride - pixelStride * mWidth;
String.valueOf(pixelStride) + " -- rowStride: " + String.valueOf(rowStride) + " rowPadding: " + String.valueOf(rowPadding));
// create bitmap
if(mBitmap==null || rowPadding != mRowPadding || pixelStride != mPixelStride) {
mRowPadding = rowPadding; mPixelStride = pixelStride;
mBitmap = Bitmap.createBitmap(mWidth + rowPadding / pixelStride, mHeight, Bitmap.Config.ARGB_8888);
}
mBitmap.copyPixelsFromBuffer(buffer);
Bitmap myBitmap = Bitmap.createScaledBitmap(mBitmap, (mWidth + rowPadding / pixelStride) / 16, mHeight / 16, false);
ramStorage.add(myBitmap);