2013-09-27 39 views
3

好的我已閱讀實現Android MediaMux的Fadden's example。我不知道如何讓我的場景進入MP4複合編解碼器的表面輸入。我正在研究音頻處理器,它消耗了音頻和視頻I/O,因此MediaRecord失敗,但MediaMux聽起來像是一個可行的解決方案。Android MediaMuxer將曲面附加到編解碼器輸入

從編解碼器創建inputSurface:

videoInputSurface = codec.createInputSurface(); 

我已經有一個實現openGLSurfaceView。我可以簡單地通過調用:

myGLSurface = myGLView.getHolder().getSurface(); 

但這不會設置曲面。它只是抓住它。有沒有一種簡單的方法讓myGLSurface寫入videoInputSurface。

要的東西我有一個cameraPreview被添加到同一個ViewGroup中進一步複雜化,VG,myGLView寫到:

vg.addView(mCameraPreview); 

,並且使得OpenGL場景的重疊ontop的的cameraPreview的myGLView設置爲透明。

myGLView.getHolder().setFormat(PixelFormat.TRANSLUCENT); 

是否有一種簡單的方法可以獲得vg的表面元素?要簡單地將編碼器的videoInputSurface上的vg幀寫入什麼內容?

感謝,

+1

要清楚的是:你想從相機取幀,用OpenGL在它們上面繪製,然後將結果發送給視頻編碼器?這是否也需要在屏幕上顯示? (這可能有助於按照你想要做的事情重新提出問題,而不是描述你目前已經實現的內容。) – fadden

+1

是的,這是正確的,從相機取幀,通過OpenGL繪製頂部,併發送到視頻編碼器...顯然需要預覽或顯示。我可以寫出我正在嘗試做的事情,但我相信這會讓它變得更糟,所以堅持基礎知識。 – HPP

回答

2

嘗試看看this。第一個example顯示瞭如何通過OpenGL ES命令在編解碼器輸入面上繪製,以便MediaMuxer將其記錄到MP4文件中。

+1

好吧,讓我看看我是否有這個正確的。在創建編解碼器表面之後,我使用它在我的openGL內創建一個eglsurface,然後每當我想要繪製的編解碼器渲染時就交換緩衝區?這會拿起我的cameraPreview,或者我需要將它推到openGL紋理? – HPP

+1

當你看看例子,你可以看到_testEncodeVideoToMp4_函數。如果您有Open GL渲染器,則在main _for_ loop之前需要執行_onSurfaceCreated_和_onSurfaceChanged_命令,並將onDrawFrame中的命令移至_generateSurfaceFrame_函數。 –

相關問題