2013-01-18 2 views
5

は、私は多くの類似の質問を見てきましたが、誰もが100%の答えは与えない:AndroidでLIVEカメラのデータに正しくアクセスするには? Skypeはどうしていますか?

  1. Camera.PreviewCallbackはそれが前
  2. MediaRecorderは(一部のデバイス上でオーディオ/ビデオをバッファリングする可能性のあるすべてのデバイスに必要なフレームレートを保証するものではありませんがファイル/ローカルソケットに書き込まれる)
  3. ネイティブC/C++ APIは公開されておらず、誰もがそれを使用することを強く嫌う。

Skypeはどうしますか? Androidでライブビデオフレームにアクセスする正しい方法は何ですか?

答えて

3

Androidバージョン3.0より前では、プレビューコールバックが唯一のオプションです。はるかに効率的なsetPreviewCallbackWithBufferメソッドを使用してください。

Honeycomb以降では、setPreviewTextureまでのGPUパスを使用することもできます。これにより、プレビューストリームをGPUテクスチャに直接取り込むことができます。これは、一部のアプリケーションに適しています。

内部C/C++ APIを使用しようとすると、パフォーマンスが大幅に向上することはなく、将来のリリースでは変更される可能性があるため、使用することはお勧めしません。

サポートされているフレームレートのリストからプレビューフレームレートをできるだけ高く設定していることを確認してください。

安定したフレームレートが必要な場合は、新しいデバイスでrecording hintをtrueに設定することもできます。

残念なことに、これらの方法のいずれも、シーン条件およびデバイスの自動露出アルゴリズムの詳細に非常に依存する安定した出力フレームレートを保証するものではありません。これは将来的に改善されることを願っています。

しかし、上記の2つのオプションのいずれかがSkypeなどが使用しているものでない場合、私は非常に驚くでしょう。

+0

私は、MediaRecorder /ローカルソケットアプローチを使用している人が多く、オーディオを別々にキャプチャして同期させる必要がなくなりました。しかし、危険を緩衝し、結果ファイルを "オープン"する必要があります。 あなたの意見は? – badbadboy

+0

オーバヘッドが多い(デバイスのビデオエンコーダとデコーダを常に実行しています)。一般的に、そのルートのレイテンシは保証されていません(確かに最小限の数フレームになるでしょう)。しかし、私はそのアプローチについては見たことがないので、私はそれについて権威をもって話すことができません –

関連する問題