Cómo evitar java.lang.IllegalStateException generado por MediaCodec.dequeueInputBuffer
El siguiente código genera java.lang.IllegalStateException de vez en cuando:
int iInputBufIndex = _mcDecoder.dequeueInputBuffer(TIMEOUT_USEC);
Donde _mcDecoder es una instancia de MediaCodec. El flujo decodificado es el vídeo H.264. El código funciona bien la mayor parte del tiempo. ¿Existe una manera de comprobar el estado de MediaCodec de forma proactiva para evitar esta excepción?
- Cómo establecer media + tasa de bits máxima para MediaCodec para codificar vídeo H.264?
- Causa del codificador en Adreno GPU mientras se codifica desde Surface
- ¿Cómo usar MediaMuxer / MediaCodec InputSurface con GLSurfaceView?
- Conversión de imágenes en vídeo
- Crear video de series de imágenes android
El seguimiento de la pila:
java.lang.IllegalStateException at android.media.MediaCodec.dequeueInputBuffer(Native Method) at net.mydomain.android.MYNAMESPACE.MYCLASS.MyMethod0(Unknown Source) at net.mydomain.android.MYNAMESPACE.MYCLASS.ProcessH264(Unknown Source) at net.mydomain.android.MYNAMESPACE.MYCLASS.MyMethod1(Unknown Source) at net.mydomain.android.MYNAMESPACE.MYCLASS.MyMethod2(Unknown Source) at net.mydomain.android.MYNAMESPACE.MYCLASS.MyMethod3(Unknown Source) at net.mydomain.android.MYNAMESPACE.MYCLASS.access$5(Unknown Source) at net.mydomain.android.MYNAMESPACE.MYCLASS$1.run(Unknown Source) at java.lang.Thread.run(Thread.java:841)
- Visualización de vídeo h264 desde un flujo de mpegts sobre upd: // en android
- dequeueOutputBuffer eleva IllegalStateException cuando se utiliza COLOR_FormatYUV420Codec compatible con Planar
- Archivo de video no streamable creado con MediaMuxer
- ¿Cómo usar MediaCodec para decodificar datos del servidor RTSP?
- Uso de MediaCodec para guardar series de imágenes como Video
- Muxing vista previa de la cámara h264 codificado flujo elemental con MediaMuxer
- Codificador AAC de Android MediaCodec
- Utilice MediaCodec y MediaExtractor para decodificar y codificar vídeo
Esta excepción se activa si el códec internamente ha devuelto un error. Esto puede, por ejemplo, ser causado por un flujo de bits erróneo (aunque los decodificadores en su mayoría debe manejar que creo) o tal vez por pasar los paquetes de forma incorrecta. (Tratar de decodificar vídeo H.264 entrelazado a través de MediaCodec en chipsets modernos Qualcomm también hace que el objeto entre en el estado de error, consulte, por ejemplo, https://code.google.com/p/android/issues/detail?id=72336 – Y éste es particularmente desagradable porque bloquea todo el proceso al intentar apagar el códec.)
No hay manera de saber que esto ha sucedido (aparte de tal vez leer el registro del sistema) aparte de darse cuenta de las excepciones. (Tal vez eso sería una buena adición como una nueva API?) No estoy muy seguro si alguna vez funciona para seguir tratando de alimentar el decodificador si se logran recuperar, o si es una causa perdida y el conjunto Descodificador debe estar cerrado.
- ¿Cómo utilizar Android Studio con Java 32 bits?
- Conectar con un emulador de Android a la localhost webservice