Pregunta

Estoy tratando de solucionar el siguiente problema en los opanses de Android.

Las especificaciones de OpenSles dice lo siguiente:

http://www.khronos.org/registry/sles/ Especificaciones / opensl_es_specification_1.0.1.pdf - 8.12

Cuando el jugador está en el estado SL_Playstate_Playing, que es controlado por la interfaz Slplayitf [ver Sección 8.32], Agregando Los buffers comenzarán implícitamente la reproducción. En el caso de la inanición debida. A insuficientes buffers en la cola, el juego de los datos de audio se detiene. El jugador permanece en el estado SL_Playstate_Playing. Al hacer cola de Buffers adicionales, se reanuda el juego de los datos de audio. Tenga en cuenta que La inanición de los tampones en cola provoca las brechas audibles en los datos de audio. Arroyo. En el caso donde el jugador no está en el estado de juego, La adición de buffers no inicia la reproducción de audio.

ALAS una vez que lleguemos a Android:

http://mobilepearls.com/labs/ Nativo-Android-API / NDK / DOCS / OpenSles / index.html - Decodificar audio a PCM

Dependiendo de la implementación de la plataforma, la decodificación puede requerir Recursos que no pueden dejarse inactivos. Por lo tanto no se recomienda Hambre el decodificador al no proporcionar un número suficiente de vacío Buffers PCM, por ejemplo. Al regresar de la cola de amortiguamiento simple de Android devolución de llamada sin enquear otro búfer vacío. El resultado de La inanición del decodificador no está especificada; La implementación puede optar por Coloque los datos de PCM decodificados, pausar el proceso de decodificación, o en Los casos severos terminan el decodificador.

Este comportamiento que no sea de especificación ha dejado de progreso completamente en mi proyecto y estoy perdido como lo mejor para solucionarlo. Decodificación El archivo completo a PCM en la memoria o en el disco no es una opción, realmente necesito que esto sea una solución de transmisión. Cualquier ayuda sobre esto sería apreciada masivamente

¿Fue útil?

Solución

No parece haber un camino alrededor de este problema.Otros proyectos parecen usar API de nivel inferior (como LibstageFright) para hacer su decodificación.Ese método le permite obtener en los datos

[editar] No hay una manera de evitar el problema de la inanición.Android simplemente no se adhiere a la especificación.Básicamente, necesita en memoria en la memoria y asegúrese de usar la pausa y reanudar para decodificar cuando necesita controlar el flujo de los datos.

Esta es una discusión sobre el tema en el Grupo de Google NDK

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top