2015-04-30 54 views
1

我正在開發一個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(); 
     } 
    }; 

回答

1

FPS極度增大,當我切換到另一種格式:

mImageReader = ImageReader.newInstance(mVideoSize.getWidth(), mVideoSize.getHeight(), ImageFormat.YUV_420_888, 2); 

希望這會幫助你。

+0

當我使用這個(ImageFormat.YUV_420_888)格式的 reader.acquireNextImage() https://code.google.com/p/chromium/issues/detail?id=459914 但是,我的PixelFormat得到了以下錯誤.RGBA_8888沒有任何問題。 有什麼想法? –

0

我發現除了選擇YUV格式之外,我還必須選擇可用於設備的最小圖像大小,以便顯着提高速度。

相關問題