【问题标题】:How to know Android decoder MediaCodec.createDecoderByType(type) is Hardware or software decoder?如何知道 Android 解码器 MediaCodec.createDecoderByType(type) 是硬件解码器还是软件解码器?
【发布时间】:2016-10-09 11:46:46
【问题描述】:

有没有办法判断使用 MediaCodec.createDecoderByType(type) 接收到的解码器是硬件解码器还是软件解码器?

【问题讨论】:

  • @fadden 你能帮我解决这个问题吗?
  • @mstorsjo 你能帮我解决这个问题吗?
  • FWIW,你不能@-召唤人们来讨论。只有当人们已经参与讨论时,他们才会被 ping 通。

标签: android android-mediaplayer android-mediacodec hardware-acceleration


【解决方案1】:

没有真正的正式标志来指示编解码器是硬件编解码器还是软件编解码器。但实际上,您可以这样做:

MediaCodec codec = MediaCodec.createDecoderByType(type);
if (codec.getName().startsWith("OMX.google.")) {
    // Is a software codec
}

MediaCodec.getName() 方法自 API 级别 18 起可用。对于较低的 API 级别,您需要遍历 MediaCodecList 中的条目并手动选择适合您需要的正确编解码器。)

【讨论】:

  • 谢谢。我在 Galaxy S6 上试过,type='video/avc' 时的返回值为 'OMX.Exynos.avc.dec',所以我猜是硬件解码器?!
  • 是的,这是一个硬件解码器 - Exynos 是一些三星设备使用的 SoC 的名称。
  • 另外,在实践中,如果硬件解码器存在,它很可能会被createDecoderByType返回,而不是软件解码器。也就是说,如果你得到一个软件解码器,那可能是因为你请求的格式没有硬件解码器。
  • 我遇到的问题是,即使解码器是硬件加速的,但在某些设备(例如 Sony Android TV)上,CPU 使用率几乎是 100%。但我看到 EXO-player 在每种情况下都表现得更好。
  • mstorsjo,你能看看a media decoder related question
【解决方案2】:

把它放在这里给任何可能有帮助的人。根据 libstagefright 的代码,任何以OMX.google.c2.android. 开头或不以(OMX.c2.)开头的编解码器都是软件编解码器。
来源:
https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/MediaCodecList.cpp#320

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2011-04-23
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多