2012-10-28 15 views
6

Questa domanda è stata posta prima, ma ora con le versioni più recenti di Android (fino a Jelly Bean), mi chiedevo se ci sono stati dei progressi sul download e lo streaming di un file a lo stesso tempo. Dal API, non sembra come se fosse intrinsecamente possibile, in quanto questi sono i metodi setDataSource disponibili:Android MediaPlayer - download e streaming allo stesso tempo rivisitato

void setDataSource(String path) 
Sets the data source (file-path or http/rtsp URL) to use. 
void setDataSource(Context context, Uri uri, Map<String, String> headers) 
Sets the data source as a content Uri. 
void setDataSource(Context context, Uri uri) 
Sets the data source as a content Uri. 
void setDataSource(FileDescriptor fd, long offset, long length) 
Sets the data source (FileDescriptor) to use. 
void setDataSource(FileDescriptor fd) 
Sets the data source (FileDescriptor) to use. 

Purtroppo non accetta un InputStream di qualsiasi tipo. Esistono esempi che utilizzano il vecchio codice proxy NPR che apre un server Web locale nell'app Android, scarica il contenuto in remoto e trasmette i dati richiesti a qualsiasi socket di ascolto, tuttavia quel codice ha più di 2 anni ed è ancora utilizzato come standard per aver portato a termine questo compito (anche se molte persone riferiscono che ci sono problemi di balbuzie, ecc.).

Ho esaminato la classe MediaPlayer e ho voluto estenderlo per consentire questo comportamento, tuttavia molte implementazioni sono state eseguite tramite codice nativo e, da quello che ho letto, diversi produttori di dispositivi implementano la funzionalità audio nativa in modo diverso (e se è così, non voglio toccarlo! :)).

Quindi, qual è il metodo migliore per archiviare E contemporaneamente trasmettere in streaming dati audio in ingresso (MP3 o OGG) da un server remoto, senza scartare i dati? Preferibilmente con versioni di Android 2.2 e successive, ma l'input su qualsiasi API disponibile sarebbe apprezzato.

risposta

1

Costruire un proxy locale è la soluzione migliore. Non ho guardato all'esempio NPR, ma ho fatto un simile uso di Naga. Vedi la mia risposta here.

Problemi correlati