1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

IllegalStateException no MediaMetadataRetriever

Pessoal estou usando a classe MediaMetadataRetriever para verificar se um arquivo de vídeo possui áudio. Ao usar o método setDataSource(FileDescription) retorna um IllegalStateException. Este erro ocorreu em um cliente mas não consigo reproduzir.

O curioso é que na documentação do android esse método não dispara esse tipo de exceção. Segue código abaixo.

public class FileHandler {

    private FileInputStream fInputStream = null;

    public boolean hasAudio(final String fileName){
        MediaMetadataRetriever mmr = new MediaMetadataRetriever();
        FileDescriptor fd = readFD(fileName);

        if(!fd.valid())
            return false;

        mmr.setDataSource(fd);                        

        String hasAudio = mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_HAS_AUDIO);                    

        if(hasAudio == null)
            return false;
    }

    public final FileDescriptor readFD(final String fileName) {

        File file = new File(fileName)

        if (file.exist()) {

            try {
                fInputStream = new FileInputStream(file);
                FileDescriptor tmpFD = fInputStream.getFD();
                return tmpFD;
            } catch (FileNotFoundException e1) {
                Log.e(TAG, String.format("Arquivo %s não encontrado no FileSystem",    file.getAbsolutePath()), e1);
            } catch (IOException e) {
                Log.e(TAG,String.format("Erro ao ler arquivo %s",file.getAbsolutePath()), e);
            } catch (NullPointerException npe) {
                Log.e(TAG, "NullPointException no readFD", npe);
            }
        }

        return null;

    }

}

Acredito que em algum momento o método hasAudio pode estar sendo chamado duas vezes em lugares diferentes.

Nesse o caso o problema estaria no atributo fInputStream que é único na classe. No entanto imagino que a exceção disparada seria outra.

Alguém já passou por isso ?

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags android ou faça a sua própria pergunta.