繁体   English   中英

Android MediaCodec.createEncoderByType-多个编码器可用,应该/将使用哪个编码器?

[英]Android MediaCodec.createEncoderByType - Multiple encoders available, which one should/will be used?

我的问题与我的Android设备上的多个编码器支持的这一Mime类型视频/ avc类似,但并不完全相同。

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

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

我认为,MediaCodec.createEncoderByType将返回经过优化的代码。 但是在我拥有的所有三星设备上,此方法始终会创建Google编码器。 问题是当我比较创建两个编码器的时间时,创建Google编码器比创建三星编码器要慢得多。

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

谢谢!

实际上,方法MediaCodec.createEncoderByType (和MediaCodec.createDecoderByType )仅按列出的顺序返回第一个匹配的编解码器。 供应商可以确保对列表进行排序(实际上是在设备上的/etc/media_codecs.xml )以列出首选列表,或者重写方法的实现以使用不同的逻辑,而不仅仅是选择第一个匹配项。 。

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

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

如果您担心速度,则可以尝试选择三星。 或者相反,您可以肯定地确定任何以OMX.google.开头的编解码器都可以,而不必明确地寻找三星的编解码器OMX.google. 是SW编解码器。 因此,首先您可以查找第一个不以OMX.google.开头的匹配OMX.google. 如果找不到此类编码器,则可以迭代另一轮,选择第一个匹配的编码器(或使用MediaCodec.createEncoderByType )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM