1

Android カメラから640x480 (私には十分) のカメラ プレビュー フレームを取得し、それらにいくつかの変更を加えます。しかし今、それらを新しいMP4ファイルにエンコードする必要があります(オーディオ付き)。

これはどのように可能ですか?ffmpegライセンスが良くないので使えませんStagefrightが、おそらくそれができるはずのフレームワークを見つけました。しかし、私がしなければならないことを行うための公式ドキュメントやチュートリアルは見つかりませんでした。

このフレームワークでそれを行う方法はありますか? コードは必要ありません。正しい方向を示してくれるだけでとてもうれしいです。

4

2 に答える 2

2

説明したユースケースが実現されるシナリオが 1 つあります。記録する必要があるプレビュー フレームにいくつかの効果が適用されるライブラリにCamera出力が送られるシナリオを考えてみましょう。OpenGL

この場合、 の代わりに従来のMediaRecorderwith を使用できます。セットアップは次のようになります。GrallocSourceCameraSource

MediaRecorderで設定されていGrallocSourceます。記録用の入力面は、を実装するCamera+OpenGL結合操作によって提供されSurfaceTextureClientます。これの良い例はSurfaceMediaSource_testmodulesにあります。

于 2014-05-07T14:35:36.323 に答える
1

API 9 以降をサポートする必要がある場合、stagefrightは非常に優れています。しかし、ご覧のとおり、このフレームワークは公式ではありません。platform/frameworks/avのサンプル コードは、ご自身の責任で使用してください。

Google ソースには、カメラ フレームをエンコーダーに直接提供する CameraSource が含まれています。このアプローチははるかに効率的ですが (ピクセルはユーザー空間にまったくコピーされません)、操作はできません。C++ ソースを変更することは可能ですが、Java でカメラにアクセスし、プレビュー フレームを JNI 経由で stagefrght (OpenMAX) エンコーダーに渡すことを強くお勧めします。一部のデバイスでは、ソフトウェア エンコーダーの使用が必要になる場合があります。ビデオ フレームをエンコーダ用の YUV 平面形式に変換する必要があります。最適化されたコンバーターについてはlibyuvを参照してください。

サポートを API 16 以降に制限できる場合は、公式の Java MediaCdec APIを使用する方が安全です。

于 2014-05-04T07:13:58.510 に答える