2015-04-16 118 views
1

我現在遇到的困難是拍攝SurfaceView的屏幕截圖。任何人都可以請幫忙?從SurfaceView獲取框架

我的團隊正在做一個Android項目,我們使用MediaCodec來解碼視頻供稿並將供稿呈現到Surface上。 活動實現

SurfaceHolder.Callback 

然後,我們創建了一個SurfaceView,並添加回調:

mySurfaveView.getHolder().addCallback(this); 

然後我們開始進行解碼的視頻輸入(我們有確實的解碼方法)

surfaceChanged(SurfaceHolder holder, int format, int width, int height) 

視頻工作正常,現在我想截取渲染到SurfaceView上的內容。我嘗試了幾種方法來做到這一點,但我沒有成功。以下是我曾嘗試過的:

  1. 我已經厭倦了獲取rootView的drawingcache。
  2. 試圖直接從MediaCodec獲取幀。
  3. 嘗試draw()方法在畫布上繪製。

截至目前我正在創建一個自定義的SurfaceView並覆蓋那裏的onDraw方法。但是,我從未創建過自定義SurfaceView。我在正確的方向嗎?

請幫忙。謝謝!

+0

你想要做的是在這裏解釋得非常好:http://stackoverflow.com/questions/27817577/android-take-screenshot-of-surface-view-shows-black-screen – Willis

回答

1

您無法捕獲SurfaceView,如other question中所述。

SurfaceViews很少想要覆蓋onDraw()。通常SurfaceView的View部分是一個透明的洞。

對於MediaCodec輸出的具體情況,您有幾個選擇。您可以將輸出定向到SurfaceTexture,然後使用OpenGL ES渲染視頻幀兩次。一旦進入SurfaceView進行顯示,一旦到了可以捕獲像素的離屏緩衝區。

另一種方法是將SurfaceView替換爲TextureView,然後使用getBitmap()調用來抓取視頻幀。

不同的例子可以在Grafika中找到。

+0

感謝您的幫助。我用了一個TextureView,它工作。 – Chen