我正在開發一個Android應用程序,我正在使用ImageReader從Surface獲取圖像。當我在Lollipop版本中錄製屏幕時,表面的數據是從VirtualDisplay實現的。問題是圖像速率非常低(1 fps)(調用OnImageAvailableListener.onImageAvailable()函數)。當我試圖使用MediaEncoder作爲輸入表面時,輸出視頻在30fps下看起來很平滑。 有沒有什麼建議讓我讀取高fps表面的圖像數據?Android中的ImageReader需要太長的時間才能使用一幀
ImageReader imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2);
mImageReader.setOnImageAvailableListener(onImageListener, null);
mVirtualDisplay = mMediaProjection.createVirtualDisplay("VideoCap",
mDisplayWidth, mDisplayHeight, mScreenDensity,
DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
imageReader.getSurface(), null /*Callbacks*/, null /*Handler*/);
//
//
OnImageAvailableListener onImageListener = new OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
// TODO Auto-generated method stub
if(reader != mImageReader)
return;
Image image = reader.acquireLatestImage();
if(image == null)
return;
// do some stuff
image.close();
}
};
當我使用這個(ImageFormat.YUV_420_888)格式的 reader.acquireNextImage() https://code.google.com/p/chromium/issues/detail?id=459914 但是,我的PixelFormat得到了以下錯誤.RGBA_8888沒有任何問題。 有什麼想法? –