2015-05-26 56 views
1

我正在嘗試將過濾器(如Instagram的過濾器)應用於現有視頻。使用GLSurfaceView呈現視頻

我使用GLSurfaceView來顯示視頻幀,並希望通過對傳入幀應用特定的過濾器來渲染每個幀的onDrawFrame()。

但在裏面onDrawFrame()我怎麼能得到傳入的幀?

謝謝。

回答

1

這取決於您希望過濾器如何工作。

如果您希望OpenGL ES修改像素,可以使用片段着色器like this進行過濾。

如果您只是想將靜態圖像疊加在視頻幀的頂部,您可以將幀播放到SurfaceTexture中,然後渲染與位圖混合的幀(再次使用GLES)。

Grafika有各種例子; 「來自相機的紋理」活動可能是一個很好的起點。 Grafika中的其他活動如果要保存輸出(儘管在Android 5.x中,您可以使用MediaRecorder代替),它將演示如何使用MediaCodec記錄GLES渲染。

FWIW,我會推薦使用普通的SurfaceView,而不是GLSurfaceView,因爲EGL管理可能會有點痛苦。

+0

謝謝。我將改變即將到來的幀的像素。我會看看你指出的。至於GLSurfaceView,我聽說它提供了更簡單的方法來使用OpenGL ES,但SurfaceView很難使用。真的嗎? – user2326258

+0

GLSurfaceView是SurfaceView的包裝。它處理EGL設置並管理渲染器線程。對於一個簡單的GLES應用程序,很高興爲您完成這些工作,但如果您操縱圖像並錄製它們,它有時會妨礙您的工作。 – fadden

+0

感謝您的回答。 – user2326258