如何知道Android解码器MediaCodec.createDecoderByType(类型)是硬件解码器还是软件解码器?

如何知道Android解码器MediaCodec.createDecoderByType(类型)是硬件解码器还是软件解码器?,android,android-mediaplayer,android-mediacodec,hardware-acceleration,Android,Android Mediaplayer,Android Mediacodec,Hardware Acceleration,是否有办法确定使用MediaCodec.createDecoderByType(类型)接收的解码器是硬件解码器还是软件解码器?没有真正的正式标志来指示编解码器是硬件还是软件编解码器。但实际上,您可以这样做: MediaCodec codec = MediaCodec.createDecoderByType(type); if (codec.getName().startsWith("OMX.google.")) { // Is a software codec } (自API级别18起

是否有办法确定使用MediaCodec.createDecoderByType(类型)接收的解码器是硬件解码器还是软件解码器?

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

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

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

@fadden您能帮我解决这个问题吗。@mstorsjo您能帮我解决这个问题吗。FWIW,你不能召集人来讨论。人们只有在已经参与讨论的情况下才会被ping。谢谢。我在Galaxy S6上试用过,当type='video/avc'为'OMX.Exynos.avc.dec'时返回值,所以我猜这是一个硬件解码器?!是的,这是一个硬件解码器-Exynos是一些三星设备使用的SoC的名称。此外,在实践中,如果存在硬件解码器,它很可能由
createDecoderByType
返回,而不是由软件解码器返回。也就是说,如果你有一个软件解码器,那可能是因为没有适合你要求的格式的硬件解码器。我遇到的问题是,即使解码器是硬件加速的,但在某些设备(例如索尼安卓电视)上CPU的使用率几乎是100%。但是我看到EXO player在每种情况下都表现得非常好。mstorsjo,你能看一下吗