硬编码失败问题Codec reported err 0x80000000, actionCode 0, while in state 5

在某台小米11手机上创建MediaCodec编码器出现如下问题,看日志好像是状态不对

2023-02-08 10:53:32.174 20710-21231/com.demoD/CCodec: ISConfig timeOffset 0us (=> INVALID_OPERATION) start at 0us
2023-02-08 10:53:32.176 20710-21230/com.demo E/MediaCodec: Codec reported err 0x80000000, actionCode 0, while in state 5
2023-02-08 10:53:32.178 20710-21229/com.demo E/demo: android.media.MediaCodec$CodecException: start failed
        at android.media.MediaCodec.native_start(Native Method)
        at android.media.MediaCodec.start(MediaCodec.java:2235)

查看MediaCodec状态有如下几种

enum State {
        UNINITIALIZED,
        INITIALIZING,
        INITIALIZED,
        CONFIGURING,
        CONFIGURED,
        STARTING,
        STARTED,
        FLUSHING,
        FLUSHED,
        STOPPING,
        RELEASING,
    };

state 5是STARTING状态,查看代码确定只启动了一次。

查看手机支持的编码器信息

//获取手机硬编码器信息
MediaCodecList list = new MediaCodecList(MediaCodecList.REGULAR_CODECS);
MediaCodecInfo[] supportCodes = list.getCodecInfos();
for (MediaCodecInfo codec : supportCodes) {
    if (codec.isEncoder()) {
        String name = codec.getName();
        if (!name.startsWith("OMX.google")) {
            Log.i(TAG, "硬编->" + name);
        }
    }
}

结果如下

c2.android.aac.encoder
c2.android.amrnb.encoder
c2.android.amrwb.encoder
c2.android.flac.encoder
c2.android.opus.encoder
c2.qti.avc.encoder
OMX.qcom.video.encoder.avc
c2.qti.hevc.encoder
OMX.qcom.video.encoder.hevc
c2.qti.hevc.encoder.cq
OMX.qcom.video.encoder.hevc.cq
c2.qti.heic.encoder
OMX.qcom.video.encoder.heic
c2.android.avc.encoder
c2.android.h263.encoder
c2.android.hevc.encoder
c2.android.mpeg4.encoder
c2.android.vp8.encoder
c2.android.vp9.encoder

默认使用的c2.qti.avc.encoder 编码器切换成OMX.qcom.video.encoder.avc还是用的c2.qti.avc.encoder

切换成c2.android.avc.encoder则是正常的,具体原因暂时不详

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/dc19c12c33.html