2016-05-24 1 views
2

J'essaie de décoder un flux de données audio MP3 avec Android Media Codec. Avec un taux d'échantillonnage de 44100, le décodage fonctionne correctement, mais la latence est trop importante. J'ai donc réglé le taux d'échantillonnage à 16000, mais maintenant le décodeur ne fonctionne plus. Je reçois une exception d'état illégal à dequeueOutputBuffer.Media Codec dequeueOutputBuffer IllegalStateException

Ceci est la partie du code où le problème pourrait être: J'ai aussi essayé

     bufferInfo = new MediaCodec.BufferInfo(); 
         outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, -1); 


         while (outputBufferIndex >= 0) { 



          outputBuffer = decoder.getOutputBuffer(outputBufferIndex); 

          outputBuffer.position(bufferInfo.offset); 
          outputBuffer.limit(bufferInfo.offset + bufferInfo.size); 

          outData = new byte[bufferInfo.size]; 
          outputBuffer.get(outData); 

          track.write(outData, 0, outData.length); 

          decoder.releaseOutputBuffer(outputBufferIndex, false); 
          outputBufferIndex = decoder.dequeueOutputBuffer(bufferInfo, -1); 


         } 

pour définir le délai d'attente de dequeueOutputBuffer à 0, mais cela ne change rien.

C'est l'erreur que je reçois:

E/SoftMP3: mp3 decoder returned error 1 
E/ACodec: [OMX.google.mp3.decoder] ERROR(0x80001001) 
E/ACodec: signalError(omxError 0x80001001, internalError -2147483648) 
E/MediaCodec: Codec reported err 0x80001001, actionCode 0, while in state 6 
E/AndroidRuntime: FATAL EXCEPTION: Thread-79054 
    Process: com.example.jonas.audio_client, PID: 26394 
    java.lang.IllegalStateException 
     at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method) 
     at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:1107) 

Si j'imprimer le format audio que l'extracteur obtient, je vois que l'échantillon-Rate est réglé sur 16000.

D/Format:: {bitrate=32000, mime=audio/mpeg, durationUs=6509000, channel-count=1, sample-rate=16000, bit-rate=32000} 

Merci pour de l'aide!

Répondre

0

J'ai eu un problème similaire à ceci mais avec un encodeur vidéo. J'ai résolu mon problème en jouant avec le débit binaire de ma vidéo jusqu'à ce que cela fonctionne. Pour l'instant, j'ai réglé mon problème avec un débit de 32 * width * height * frameRate/100. Donc, je vous recommande d'essayer de jouer avec votre débit binaire. J'ai été influencé par this answer pour arriver à cette solution.

+0

J'ai essayé de changer 'int bitrate = 450000;' à 'int bitrate = 32 * resultHeight * resultWidth * 25/100;' mais cela ne fonctionnait toujours pas du tout. Je reçois la même erreur [this] (https://github.com/Tourenathan-G5organisation/SiliCompressor/issues/16). – NarendraJi

0

Si vous utilisez ce sur un émulateur assurez-vous que vous avez sélectionné Graphics comme Matériel: GLES 2.0 dans les paramètres de l'émulateur. Il y a un problème avec la version du logiciel, il semble.