2013-07-18 108 views
12

我正在嘗試創建一個應用程序,可以將過濾器添加到錄製的視頻中。基本上,我想複製Instagram視頻或Viddy中存在的功能。Android視頻過濾器

我已經完成了研究,但我無法將它們拼湊在一起。我已經研究過使用GLSurfaceView播放錄製的視頻,我知道我可以使用NDK進行像素操作並將其發送回SurfaceView或以某種方式保存。問題是,我不知道如何發送像素數據,因爲似乎沒有功能來訪問它。這個想法來自相機功能「onPreviewFrame」。該函數返回一個字節數組,允許我操作像素並顯示它。

另一個想法是使用GLSurfaceView並使用OpenGL渲染過濾器。 GLSurfaceView有一個你可以設置的渲染器,但我對OpenGL不是很熟悉。但是,這又回到實際獲得每個視頻幀的像素。我也讀過關於將每一幀翻譯爲紋理,然後在OpenGL中操縱紋理的問題,但我所遇到的答案並不十分詳細。

最後,我研究了JavaCV。試圖使用FFmpegFrameGrabber,但我還沒有太多。我只想抓住一幀,但是當我嘗試將幀的ByteBuffer寫入ImageView時,我得到一個「緩衝區不夠大」的錯誤。

任何指導都會很棒。

回答

5

從Android 4.3開始,您可以使用Surface作爲編碼器的輸入。 http://developer.android.com/about/versions/android-4.3.html#Multimedia

因此,您可以使用GLSurfaceView並使用片段着色器應用濾鏡。

你可以在這裏找到一些很好的例子。 http://bigflake.com/mediacodec/

+0

特別是,DecodeEditEncodeTest是一個CTS測試,它可以對視頻進行解碼,使用GLES着色器對其進行修改,然後對其進行重新編碼。 – fadden

0

這是很好的使用exoplayer過濾器庫,這一個會做你的工作,但爲了合併過濾分層與視頻你必須做一個額外的工作。

鏈接exoplayer過濾器是有你:ExoplayerFilter

你得瑟了這個exoplayer但按照他們的指示,你就可以做任務。如果出現問題,請給我打電話。