Pergunta

Estou tentando trabalhar em torno do seguinte problema no Android Opens.

O OPENSLE SPEC diz o seguinte:

.

http://www.khronos.org/registry/sles/ Especificações / opensl_es_specification_1.0.1.pdf - 8.12

Quando o player estiver no estado sl_playstate_playing, que é controlado pela interface SlPlayitf [ver seção 8.32], adicionando Os buffers começarão implicitamente a reprodução. No caso de fome devido Para buffers insuficientes na fila, o jogo de dados de áudio pára. O jogador permanece no estado sl_playstate_playing. Após a fila de. Buffers adicionais, o jogo de dados de áudio é retomado. Observe que A fome de buffers enfileirados causa lacunas audíveis nos dados de áudio Stream. No caso em que o jogador não está no estado de jogo, A adição de buffers não inicia a reprodução de áudio.

alas uma vez chegarmos ao Android:

.

http://mobilepearls.com/labs/ nativo-Android-api / ndk / docs / openles / index.html - decodificar áudio para pcm

Dependendo da implementação da plataforma, a decodificação pode exigir recursos que não podem ser ociosos. Portanto, não é recomendado fome o decodificador, deixando de fornecer um número suficiente de Buffers PCM, e. Ao retornar da fila de buffer simples Android retorno de chamada sem enqueuing outro buffer vazio. O resultado de A fome decodificadora não é especificada; A implementação pode optar por largar os dados do PCM decodificados, pause o processo de decodificação ou em Casos graves terminam o decodificador.

Este comportamento não específico parou completamente o progresso no meu projeto e estou perdido como melhor para contornar. Decodificação O arquivo inteiro para PCM na memória ou no disco não é uma opção, eu realmente preciso que isso seja uma solução de streaming. Qualquer ajuda disso seria massivamente apreciada

Foi útil?

Solução

Não parece ser uma maneira de contornar esse problema.Outros projetos parecem usar as APIs de nível inferior (como a libstagefright) para fazer sua decomposição.Esse método permite que você receba nos dados

[editar] Não há uma maneira de contornar a questão da fome.Android simplesmente não adere à especificação.Basicamente você precisa buffer na memória e certifique-se de usar pausa e retomar para decodificar quando você precisa controlar o fluxo dos dados.

Esta é uma discussão sobre o assunto no Grupo do Google NDK

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top