13

録画したビデオにフィルターを追加できるアプリを作成しようとしています。基本的に、私は Instagram ビデオや Viddy に存在する機能を複製したいと考えています。

私は調査を行いましたが、すべてをまとめることはできません。GLSurfaceView を使用して記録されたビデオを再生することを検討しましたが、NDK を使用してピクセル操作を行い、SurfaceView に送り返すか、何らかの方法で保存できることを知っています。問題は、ピクセルデータにアクセスする機能がないように見えるため、ピクセルデータの送信方法がわからないことです。このアイデアは、カメラ機能「onPreviewFrame」から生まれました。この関数はバイト配列を返し、ピクセルを操作して表示できるようにします。

もう 1 つのアイデアは、GLSurfaceView を使用し、OpenGL を使用してフィルターをレンダリングすることです。GLSurfaceView には設定可能なレンダラーがありますが、私は OpenGL にあまり詳しくありません。しかし、これは実際に各ビデオ フレームのピクセルを取得することに戻ります。また、各フレームをテクスチャとしてリッピングし、OpenGL でテクスチャを操作することについても読みましたが、私が遭遇した答えはあまり詳細ではありません。

最後に、JavaCV について調べました。FFmpegFrameGrabber を使用しようとしていますが、あまり使用していません。1 つのフレームだけを取得したかったのですが、フレームの ByteBuffer を ImageView に書き込もうとすると、「バッファーがピクセルに対して十分な大きさではありません」というエラーが発生します。

どんなガイダンスも素晴らしいでしょう。

4

2 に答える 2

7

SurfaceAndroid 4.3から、エンコーダーへの入力としてa を使用できます。http://developer.android.com/about/versions/android-4.3.html#マルチメディア

したがって、GLSurfaceView を使用し、フラグメント シェーダーを使用してフィルターを適用できます。

ここでいくつかの良い例を見つけることができます。http://bigflake.com/mediacodec/

于 2013-12-20T07:12:00.763 に答える