Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取Android设备支持的编解码器_Android_Codec_Mediarecorder - Fatal编程技术网

获取Android设备支持的编解码器

获取Android设备支持的编解码器,android,codec,mediarecorder,Android,Codec,Mediarecorder,有没有办法询问Android设备支持哪些音频和视频编解码器进行编码 我发现一些设备不支持中列出的强制性编解码器 而且似乎有一些支持额外编解码器的设备没有在这里列出 有没有办法询问Android设备支持哪些音频和视频编解码器进行编码 我真希望有,但至少通过ICS没有 Jelly Bean提供了一个MediaCodec类。虽然它没有“给我一个支持的编解码器列表”,但它有createEncoderByType(),您可以在其中传入MIME类型。如果您想要的MIME类型不受支持,那么可能会抛出Runti

有没有办法询问Android设备支持哪些音频和视频编解码器进行编码

我发现一些设备不支持中列出的强制性编解码器 而且似乎有一些支持额外编解码器的设备没有在这里列出

有没有办法询问Android设备支持哪些音频和视频编解码器进行编码

我真希望有,但至少通过ICS没有


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有一组不同的编解码器常量。请查找此帖子