【问题标题】:Android MediaCodec.createEncoderByType - Multiple encoders available, which one should/will be used?Android MediaCodec.createEncoderByType - 多个编码器可用,应该/将使用哪一个?
【发布时间】:2016-10-19 05:11:35
【问题描述】:

我的问题与Mime type video/avc supported by multiple encoders on my Android device 类似,但不完全相同。

在我拥有的所有三星设备中,我发现有多个编码器可用于 MIME 类型“audio/mp4a-latm”:

OMX.google.aac.encoder
OMX.SEC.aac.enc (Android < 5)
OMX.SEC.naac.enc (Android >= 5)

MediaCodec.createEncoderByType 会返回优化的,我想。但在我拥有的所有三星设备上,这种方法总是创建谷歌编码器。问题是当我比较创建两个编码器所花费的时间时,创建谷歌编码器比创建三星编码器慢得多。

那么为什么 MediaCodec.createEncoderByType 会返回较慢的编码器?如果速度慢得多,我还应该使用谷歌编码器吗? (大约需要几百毫秒)。还是应该迭代所有可用的编码器并选择三星的?

谢谢!

【问题讨论】:

    标签: android encoding samsung-mobile android-mediacodec


    【解决方案1】:

    在实践中,MediaCodec.createEncoderByType(和MediaCodec.createDecoderByType)方法只返回第一个匹配的编解码器,按照它们列出的顺序。供应商可以确保订购列表(实际上是在设备上的/etc/media_codecs.xml)以首先列出首选的列表,或者覆盖方法的实现以使用与仅选择第一个匹配项不同的逻辑。

    在这种情况下,三星似乎没有考虑到这一点,或者他们自己的硬件 AAC 编码器的功能不如 google SW 编码器,比如支持的配置文件/选项更少。

    我想他们已经确保至少首先列出了视频的硬件编解码器,因为那里的速度差异要大得多。

    如果您关心速度,您确实可以尝试选择三星的。或者相反,您可以确定以OMX.google. 开头的任何编解码器都是软件编解码器,而不是明确寻找三星的编解码器。因此,首先您可以查找第一个不以OMX.google. 开头的匹配项。如果没有找到这样的编码器,您可以迭代另一轮,选择第一个匹配的编码器(或使用MediaCodec.createEncoderByType)。

    【讨论】:

    • 谢谢!我不知道 google 编码器是 SW 编码器。我将实施您建议的方法来排除 OMX.google 编码器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多