13

エンコーディングでサポートされているオーディオとビデオのコーデックを Android デバイスに問い合わせる方法はありますか?

http://developer.android.com/guide/appendix/media-formats.htmlに必須としてリストされているコーデックの一部をサポートしていないデバイスを見つけました 。そこにリストされていない追加のコーデックをサポートするデバイスがあるようです。

4

4 に答える 4

9

それはあなたにとって興味深いかもしれません:

 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()たとえば、コーデックのタイトル/名前がわかります。

于 2014-10-27T14:08:27.673 に答える
4

エンコーディングでサポートされているオーディオとビデオのコーデックを Android デバイスに問い合わせる方法はありますか?

本当にあったらいいのですが、少なくとも ICS を通じてはありません。

Jelly Bean はMediaCodecクラスを提供しています。「サポートされているコーデックのリストを教えてください」はありませんがcreateEncoderByType()、MIME タイプを渡す があります。おそらく、目的の MIME タイプがサポートされていない場合は、RuntimeException またはが返されます。nullそしてMediaCodec、エンコーダーが利用可能であると報告されたからといって、それが動作することが保証されていると約束することはできませんMediaRecorder

于 2012-08-03T10:53:34.897 に答える
1

これは、非推奨のメソッドを使用せずに 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
}
于 2020-12-07T04:34:54.070 に答える
1

最も簡単な方法は使用することです

MediaCodecList(MediaCodecList.ALL_CODECS).codecInfos

この画像のように、デバイスで使用可能なすべてのエンコーダーとデコーダーの配列を返します。

次に、filter探している特定のエンコーダーとデコーダーを照会するために使用できます。例えば:

MediaCodecList(MediaCodecList.ALL_CODECS).codecInfos.filter {
    it.isEncoder && it.supportedTypes[0].startsWith("video")
}

これにより、使用可能なすべてのビデオ エンコーダーが返されます。

于 2021-07-30T13:16:50.120 に答える