Media Projection API を使用した実装は問題なく動作します。しかし、キャプチャした画像をファイルに書き込もうとすると、フレームが失われることがよくあります。すべての io コードが別々のスレッドで実行されている場合でも。
キャプチャしたフレームに対してオンライン画像分析を行いたかったため、スクリーンレコードや同様のツールを使用できません。
ネイティブ コードから 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);