2011-12-23 13 views
10

私はEclipseでAndroid 2.2を使用しています。Androidでのビデオ処理

私はビデオをキャプチャするアプリケーションを作るのが好き、そしてフレームごとに、そのそれをを処理して、新しいビットマップを返し、処理されたビットマップを示している方法に、ビットマップとして、それを送信します。

私はAndroidにはあまり慣れていないので、誰かが私にそのようなことをするために必要なリソースに私を送ることができますか?

答えて

20

Android SDKを使用して、次の手順を達成するために十分に簡単です:

  • からプレビューフレームをキャプチャカメラをビットマップデータとして表示します。 Camera.PreviewCallbackは、多数の可能な画像フォーマットのフレームを表すデータのbyte[]を返す。
  • ピクセルデータを変更します。データは生のバイトとして返されるので、データの調整は比較的簡単です...ここでの難しさは、実行したい特定の画像処理のアルゴリズムを適用することです。画像に単純に適用できるビルトインエフェクト(4.0より前)はありませんので、自分で作成する必要があります。
  • ピクセルで作業しやすくするために、データをBitmapオブジェクトにデコードすることもできます。 2.2では、NDKとjnigraphicsを使用してビットマップのピクセルをネイティブコードで処理するオプションがあります。これはJavaレイヤーよりもはるかに高速です。
  • Bitmapの内容を表示してください。データを高速に移動するには、SurfaceViewに表示することをお勧めします。そのビューに含まれるSurfaceHolderから入手可能なlockCanvas()およびunlockCanvasAndPost()メソッドを使用します。

これだけのことをしたいのであれば、これを少しでも難なく行うことができます。しかし、これはビデオのキャプチャと同じではありません。 Androidは現在、フレームをエンコードされたビデオコンテナ(MPEG4、3GPなど)にリアルタイムでストリーム配信するためのフックを提供していません。ビデオキャプチャ機能は、フレームキャプチャからエンコードされたビデオの書き込みまでのプロセスを制御するMediaRecorderにしっかりとラップされています。変更されたフレームのエンコード処理を支援するために、FFMPEG(ビルドされ、AndroidアプリケーションでNDKレイヤーを使用して実行されている)などの3番目の部分ライブラリが必要です。

私はあなたが2.2ターゲットを持っていることを知っていますが、Android 4.0は新しいバージョンのNDKをリリースしているので、ここから解放されています。プレゼンテーション層に送る。しかし、私はあなたの状況に適しているかどうかを知るために十分な時間を過ごしていません。

+0

私は本当にビデオをキャッチしたくない、プレビューを使用することは私にとって素晴らしいです。ありがとう! –

+0

こんにちは、どのようにビットマップ画像のシリーズを使用してビデオを作成できますか?どのように私はそれをレンダリングできますか? –

5

Camera.setPreviewCallbackCamera.PreviewCallback#onPreviewFrameとすると、カメラからのプレビューフレームを再生することができます。

コード2Dバーコードのためスキャナーが便利な出発点であるかもしれない: ZXing

7

さらに複雑なリアルタイムビデオ処理を行う場合は、OpenCV for Androidを強くお勧めします。

OpenCVは、ビデオをリアルタイムで処理できるコンピュータビジョンライブラリであり、エッジの検出や顔や一致する機能の検出などの複雑なタスクのような単純なタスクを実行するライブラリを備えています。

あなたのAndroid携帯電話では、特に広範なドキュメントや例が含まれているため、OpenCVを1日で使用できます。

関連する問題