检测 Android 上支持的音频编码器以防止崩溃“未找到给定的音频编码器 2”

Mar*_*hon 5 media android amr stagefright mediarecorder

当 Android 设备不支持强制音频编码器时,您会得到:(X=编码器的数字索引)

E/MediaProfiles(4048): 未找到给定的音频编码器 X A/AudioSource(4048): frameworks/base/media/libstagefright/AudioSource.cpp:58 CHECK(channels == 1 || channels == 2) failed。A/libc(4048):本机代码中 0xdeadbaad 处的致命信号 11 (SIGSEGV)(代码 = 1)。没有例外反应。应用程序只是强制关闭。

如果实际支持 AAC AMR-NB 和 AMR-WB,是否有任何方法可以查询 Android > 3.x 设备?文档 ( http://developer.android.com/guide/appendix/media-formats.html ) 说这些是核心媒体格式,因此始终受支持。一些实际和常见的手机(主要品牌)没有。

MediaCodec.createByCodecName(String name)Get supported Codec for Android device 仅适用于 API16=Android 4.1 但有问题的设备是 4.0.x 。它也没有列出 AMR-NB 和 AAC。

小智 2

在您的 Android 设备上,媒体配置文件/功能存储在名为 media_profiles.xml(在 ICS/4.0 上)的配置文件中。

通常,该文件位于设备上的 /etc 文件夹中。

所以你可以做的是

  1. 将您的设备连接到电脑并使用 adb pull 命令拉取 /etc/media_profiles.xml 文件
  2. 检查 AudioEncoderCap 属性。所公布的每项功能都会有多个条目。例如:

    AudioEncoderCap name =“aac”启用=“true”minBitRate =“8192”maxBitRate =“96000”minSampleRate =“8000”maxSampleRate =“16000”minChannels =“1”maxChannels =“1”

  3. 如果如上所述将“启用”标志设置为“真”,则设备应支持该功能。如果不支持,“启用”标志将设置为“假”。

AFAIK,jb (4.1) 上引入的媒体编解码器框架读取此/类似的配置文件以向应用程序层公开设备功能。

希望这可以帮助。

谢谢!