エンコーディングでサポートされているオーディオとビデオのコーデックを Android デバイスに問い合わせる方法はありますか?
http://developer.android.com/guide/appendix/media-formats.htmlに必須としてリストされているコーデックの一部をサポートしていないデバイスを見つけました 。そこにリストされていない追加のコーデックをサポートするデバイスがあるようです。
エンコーディングでサポートされているオーディオとビデオのコーデックを Android デバイスに問い合わせる方法はありますか?
http://developer.android.com/guide/appendix/media-formats.htmlに必須としてリストされているコーデックの一部をサポートしていないデバイスを見つけました 。そこにリストされていない追加のコーデックをサポートするデバイスがあるようです。
それはあなたにとって興味深いかもしれません:
private static MediaCodecInfo selectCodec(String mimeType) {
int numCodecs = MediaCodecList.getCodecCount();
for (int i = 0; i < numCodecs; i++) {
MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
if (!codecInfo.isEncoder()) {
continue;
}
String[] types = codecInfo.getSupportedTypes();
for (int j = 0; j < types.length; j++) {
if (types[j].equalsIgnoreCase(mimeType)) {
return codecInfo;
}
}
}
return null;
}
ここで見つけました。ご覧のとおり、インストールされているコーデックの数は で取得できますMediaCodecList.getCodecCount();
。MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
リストから特定のコーデックに関する情報を取得します。codecInfo.getName()
たとえば、コーデックのタイトル/名前がわかります。
エンコーディングでサポートされているオーディオとビデオのコーデックを Android デバイスに問い合わせる方法はありますか?
本当にあったらいいのですが、少なくとも ICS を通じてはありません。
Jelly Bean はMediaCodec
クラスを提供しています。「サポートされているコーデックのリストを教えてください」はありませんがcreateEncoderByType()
、MIME タイプを渡す があります。おそらく、目的の MIME タイプがサポートされていない場合は、RuntimeException
またはが返されます。null
そしてMediaCodec
、エンコーダーが利用可能であると報告されたからといって、それが動作することが保証されていると約束することはできませんMediaRecorder
。
これは、非推奨のメソッドを使用せずに Kotlin で記述された、Jonson の回答に基づく更新されたコードです。
fun getCodecForMimeType(mimeType: String): MediaCodecInfo? {
val mediaCodecList = MediaCodecList(MediaCodecList.REGULAR_CODECS)
val codecInfos = mediaCodecList.codecInfos
for (i in codecInfos.indices) {
val codecInfo = codecInfos[i]
if (!codecInfo.isEncoder) {
continue
}
val types = codecInfo.supportedTypes
for (j in types.indices) {
if (types[j].equals(mimeType, ignoreCase = true)) {
return codecInfo
}
}
}
return null
}
最も簡単な方法は使用することです
MediaCodecList(MediaCodecList.ALL_CODECS).codecInfos
この画像のように、デバイスで使用可能なすべてのエンコーダーとデコーダーの配列を返します。
次に、filter
探している特定のエンコーダーとデコーダーを照会するために使用できます。例えば:
MediaCodecList(MediaCodecList.ALL_CODECS).codecInfos.filter {
it.isEncoder && it.supportedTypes[0].startsWith("video")
}
これにより、使用可能なすべてのビデオ エンコーダーが返されます。