2016-10-18 8 views
0

私の質問はこの1つに似ていますMime type video/avc supported by multiple encoders on my Android deviceしかし全く同じではありません。最適化されたものを返しますAndroid MediaCodec.createEncoderByType - 複数のエンコーダを使用できますか、どちらを使用する必要がありますか?

OMX.google.aac.encoder 
OMX.SEC.aac.enc (Android < 5) 
OMX.SEC.naac.enc (Android >= 5) 

MediaCodec.createEncoderByType、私が思うだろう:私が持っているすべてのSamsungデバイスで

、私は、MIMEタイプ「オーディオ/ MP4A-LATM」で使用可能な複数のエンコーダをそこにいることがわかり。しかし、私が持っているすべてのサムスンのデバイスで、この方法は常にGoogleのエンコーダを作成します。問題は、2つのエンコーダの作成に費やした時間を比較して、Googleエンコーダを作成するとサムスンエンコーダを作成するよりもはるかに遅くなることです。

次に、MediaCodec.createEncoderByTypeが低速エンコーダを返すのはなぜですか?それがはるかに遅い場合私はまだGoogleのエンコーダを使用する必要がありますか? (数百ミリ秒かかる)。または、使用可能なすべてのエンコーダを繰り返して、代わりにsamsungを選択する必要がありますか?

ありがとうございます!

答えて

2

実際には、方法MediaCodec.createEncoderByType(およびMediaCodec.createDecoderByType)は、リストされている順序で、最初に一致するコーデックのみを返します。ベンダーはリストを注文することができます(実際にはデバイスの/etc/media_codecs.xmlです)。最初に優先するものをリストするか、最初のマッチングだけを選択するのとは異なるロジックを使用するようにメソッドの実装をオーバーライドします。

この場合、サムスンはこれについて考えていないか、独自のハードウェアAACエンコーダは、より少ないプロファイル/オプションのサポートなど、Google SWエンコーダよりも機能が劣るようです。

ビデオのHWコーデックが最初にリストされているようですが、スピードの違いがはるかに大きいためです。

スピードに懸念がある場合は、実際にはサムスンのものを選択することができます。逆に、サムスンのものを明示的に探すのではなく、OMX.google.で始まるコーデックがSWコーデックであることを確かめることができます。まず最初に一致するものを探して、OMX.google.で始まらないものを探すことができます。そのようなエンコーダが見つからない場合は、最初に一致するものを選択して(またはMediaCodec.createEncoderByTypeを使用して)別のラウンドを反復することができます。

+0

ありがとうございました!私はGoogleエンコーダがSWエンコーダであることを知らなかった。 OMX.googleエンコーダを除外するための推奨方法を実装します。 – HeyThere

関連する問題