Domanda

Sto cercando di aggirare il seguente problema in opensles Android.

Le specifiche OpenSles dice quanto segue:

.

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

Quando il giocatore è nello stato SL_PlayState_Playing, che è Controllato dall'interfaccia SlGritF [vedere la sezione 8.32], aggiungendo I buffer avviano implicitamente la riproduzione. Nel caso della fame dovuta A buffer insufficienti nella coda, la riproduzione dei dati audio si arresta. Il giocatore rimane nello stato SL_PlayState_Playing. Accodante di tamponi aggiuntivi, la riproduzione dei dati audio riprende. Notare che La fame dei buffer in coda causa lacune udibili nei dati audio stream. Nel caso in cui il giocatore non è nello stato di gioco, L'aggiunta di buffer non avvia la riproduzione audio.

Ahimè Una volta arriviamo ad Android:

.

http://mobilepearls.com/labs/ Native-Android-API / NDK / Docs / OpenSles / index.html - Decode Audio to PCM

A seconda dell'implementazione della piattaforma, la decodifica potrebbe richiedere risorse che non possono essere lasciate inattive. Pertanto non è raccomandato morire di fame il decodificatore non mantenendo un numero sufficiente di vuoto Buffer PCM, ad es. Ritornando dalla coda del buffer semplice Android Richiamata senza enquequee un altro buffer vuoto. Il risultato di La fame decodificatore non è specificata; L'implementazione può scegliere di Obba rilasciare i dati PCM decodificati, metti in pausa il processo di decodifica o in Casi gravi termini il decodificatore.

Questo comportamento non specifico ha completamente interrotto i progressi sul mio progetto e sono perso come il modo migliore per lavorarci intorno ad esso. La decodifica dell'intero file a PCM in memoria o sul disco non è un'opzione, ho davvero bisogno che questa sia una soluzione di streaming. Qualsiasi aiuto su questo sarebbe molto apprezzato

È stato utile?

Soluzione

Non sembra essere un modo per aggirare questo problema.Altri progetti sembrano usare API a livello inferiore (come libstagefright) per fare la loro decodifica.Quel metodo ti consente di ottenere ai dati

[modifica] Non c'è un modo attorno al problema della fame.Android non aderisce solo alla specifica.Fondamentalmente è necessario effettuare il buffer in memoria e assicurarsi di utilizzare la pausa e riprendere alla decodifica quando è necessario controllare il flusso dei dati.

Questa è una discussione sull'argomento nel gruppo Google NDK

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top