Android MediaCodec не запускается - PullRequest
0 голосов
/ 28 октября 2019

Я пытаюсь использовать MediaCodec для создания файла mp4 из набора растровых изображений, которые у меня есть.
После большого количества кодирования и тестирования я заметил, что в Интернете не существует ни одного примера или какой-либо другой работы эмулятора Android Studio,но они работают в обоих моих реальных телефонах (Android 7 и 9) ... Так что я продолжал развивать только тестирование на реальных телефонах.

после большого количества кодирования и тестирования я получил работающее кодирование (работает дляоба моих телефона, но сбоев для эмулятора Android) и развернут в производство.

Мой был в сети в течение нескольких месяцев, и у меня есть около 150 пользователей в день, но около 30% из них получают тот же сбойя заметил на эмуляторе андроида. так что это не является ограничением эмулятора.

E / ACodec: [OMX.google.h264.encoder] configureCodec возвращает ошибку -38 signalError (omxError 0x80001001, internalError -2147483648) E / MediaCodec: сообщен кодекошибка 0x80001001, код действия 0, в то время как в состоянии 3 E / MediaCodec: настройка не удалась с ошибкой 0x80001001, сброс ...

private static MediaCodecInfo selectCodec(String mimeType) {
        int numCodecs = MediaCodecList.getCodecCount();
        for (int i = 0; i < numCodecs; i++) {
            MediaCodecInfo codecInfo = MediaCodecList.getCodecInfoAt(i);
            if (!codecInfo.isEncoder()) {
                continue;
            }
            String[] types = codecInfo.getSupportedTypes();
            for (String type : types) {
                if (type.equalsIgnoreCase(mimeType)) {
                    return codecInfo;
                }
            }
        }
        return null;
    }


MediaCodecInfo codecInfo = EncoderUtils.selectCodec("video/avc");
MediaCodec.createByCodecName(codecInfo.getName()).encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);

format имеет следующие ключи

"color-format" -> {Integer@17131} 21
"i-frame-interval" -> {Integer@17133} 3
"mime" -> "video/avc"
"profile" -> {Integer@17136} 8
"width" -> {Integer@17138} 928
"bitrate-mode" -> {Integer@17140} 0
"bitrate" -> {Integer@17142} 3500000
"language" -> "eng"
"frame-rate" -> {Integer@17146} 12
"max-input-size" -> {Integer@17140} 0
"height" -> {Integer@17149} 1152

затемя получаю следующее исключение:

Non-fatal Exception: android.media.MediaCodec$CodecException: Error 0x80001001
       at android.media.MediaCodec.native_configure(MediaCodec.java)
       at android.media.MediaCodec.configure(MediaCodec.java:1960)
       at android.media.MediaCodec.configure(MediaCodec.java:1889)
       at com.tomatedigital.lottogram.util.EncoderUtils.start(EncoderUtils.java:98)
       at com.tomatedigital.lottogram.service.LottogramService$3.run(LottogramService.java:329)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
       at java.lang.Thread.run(Thread.java:764)

пока печатает logcat:

I/OMXClient: IOmx service obtained
E/ACodec: [OMX.google.h264.encoder] configureCodec returning error -38
    signalError(omxError 0x80001001, internalError -2147483648)
E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 3
E/MediaCodec: configure failed with err 0x80001001, resetting...
I/OMXClient: IOmx service obtained
W/AMessage: failed to deliver message as target handler 7 is gone.
E/ACodec: [OMX.google.h264.encoder] configureCodec returning error -38
    signalError(omxError 0x80001001, internalError -2147483648)
E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 3
E/MediaCodec: configure failed with err 0x80001001, resetting...
I/OMXClient: IOmx service obtained

нет такой ссылки на ошибку 0x80001001, где бы я ни находил. что это значит? как это решить? У кого-нибудь есть подсказка?

...