有没有一种方法可以询问 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()
将告诉您该编解码器的标题/名称。
这是一份基于Jonson答案的更新代码,使用Kotlin编写,不使用已被弃用的方法:
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
}