2014-07-10 155 views
0

當前,我正在使用OpenGL ES 2.0在GLSurfaceView上播放視頻。現在,我正在尋找一種方法,將使用MediaCodec將表面視圖上播放的視頻編碼成MP4視頻。使用Android上的MediaCodec編碼視頻

因此,我找到了一個大案例,它似乎完美地解決了我的問題(http://bigflake.com/mediacodec/EncodeAndMuxTest.java.txt)。

但是,我似乎太愚蠢,無法設置輸入源。這個例子使用mEncoder.createInputSurface()創建輸入源,但是我有一個GLSurfaceView實際播放視頻。那麼如何將我自己的曲面設置爲編碼器的輸入源?

+0

可以在Grafika(https://github.com/google/grafika)中找到一些其他示例。有了GLSurfaceView,你不能控制EGL上下文,所以你可以共享它(很笨拙;例如參見「show + capture camera」)或者只是使用普通的SurfaceView並自己管理EGL(這是大多數例子Grafika做)。 – fadden

回答

3

由於您使用的是GLSurfaceView,因此您需要在onDrawFrame()中插入截取代碼,同時在onSurfaceCreated()中分配曲面。 設置編碼器參數後,可以照常創建輸入表面。 攔截器可以通過複製着色器將egl場景複製到幀緩衝區中。然後做swapbuffer來編碼幀。 試試看教程中的任意elg場景截圖 https://software.intel.com/en-us/articles/intel-inde-media-pack-for-android-tutorials-video-capturing-for-opengl-applications

+0

好的,謝謝。這是一種可能性。我也想到了一些不同的東西。我想要做的基本事情如下:我有一個現有的MP4文件,我想編輯(通過剪裁等來更改幀尺寸),然後再次保存編輯的文件。我也看看https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java事情是,我我不確定如何從MP4中獲取視頻塊數據,而不是創建視頻。 – Florian

+0

所以,如果你需要說視覺上設置作物,然後將其應用於整個流,我會建議,2個階段。 1st - 檢測用戶想要的裁切設置,然後運行應用視頻裁剪效果的轉碼方案。因此,在這些鏈接中,我還提供了一個端到端轉碼過程中應用的效果示例,稱爲「視頻效果」https://software.intel.com/zh-cn/articles/intel-inde-media-pack-for-android -tutorials運行樣本 – ugene

相關問題