获取Android设备支持的编解码器
有没有办法询问Android设备支持哪些音频和视频编解码器进行编码 我发现一些设备不支持中列出的强制性编解码器 而且似乎有一些支持额外编解码器的设备没有在这里列出 有没有办法询问Android设备支持哪些音频和视频编解码器进行编码 我真希望有,但至少通过ICS没有获取Android设备支持的编解码器,android,codec,mediarecorder,Android,Codec,Mediarecorder,有没有办法询问Android设备支持哪些音频和视频编解码器进行编码 我发现一些设备不支持中列出的强制性编解码器 而且似乎有一些支持额外编解码器的设备没有在这里列出 有没有办法询问Android设备支持哪些音频和视频编解码器进行编码 我真希望有,但至少通过ICS没有 Jelly Bean提供了一个MediaCodec类。虽然它没有“给我一个支持的编解码器列表”,但它有createEncoderByType(),您可以在其中传入MIME类型。如果您想要的MIME类型不受支持,那么可能会抛出Runti
Jelly Bean提供了一个
MediaCodec
类。虽然它没有“给我一个支持的编解码器列表”,但它有createEncoderByType()
,您可以在其中传入MIME类型。如果您想要的MIME类型不受支持,那么可能会抛出RuntimeException
或返回null
。我不能保证,仅仅因为MediaCodec
报告编码器可用,它就可以保证从您感兴趣的MediaRecorder
工作:
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;
}
private static MediaCodecInfo selectCodec(字符串mimeType){
int numCodecs=mediacodelist.getCodecCount();
对于(int i=0;i
找到了。如您所见,您可以通过
MediaCodecList.getCodecCount()获得已安装的编解码器的数量代码>。使用mediacodeinfo codecInfo=MediaCodecList.getCodecInfoAt(i)代码>从列表中获取有关特定编解码器的信息<例如,code>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
}
MediaCodec与MediaRecorder有一组不同的编解码器常量。请查找此帖子