2010-11-09 19 views
5

Sto sviluppando un'applicazione per Android che riprodurrà file mp3. Tuttavia i file mp3 sono crittografati sulla scheda SD o sqlite. In entrambi i casi, dopo la decrittazione, avrò un flusso di byte. Come li suono? MediaPlayer non accetta inputstream come parametro, quindi non posso prenderlo in considerazione.Come riprodurre un flusso audio di byte in Android?

+0

Possibilmente un duplicato di questo? Controlla la risposta accettata mentre parla della riproduzione di 'byte []': http://stackoverflow.com/questions/1972027/android-playing-mp3-from-byte – birryree

+0

lo stream non dovrebbe essere disponibile per l'utente. Quindi, se faccio un file, l'utente può accedere al file e questa non è una buona idea per questo particolare progetto. – Vikram

risposta

0

Non sarà facile. L'ho già fatto su BlackBerry, quindi scommetto che è fattibile anche su Android.

Se fossi in te, registrerei un nuovo provider per il protocollo personalizzato "encryptedmp3:". Poi vorrei specificare questo in una fonte di dati per il MediaPlayer:

mediaplayer.setDataSource(this, URI.parse("encryptedmp3://....yourfile")); 

Non sono sicuro di come creare un nuovo gestore di protocollo su Android.

Spero che questo aiuti un po '.

Emmanuel

2

Penso che è necessario memorizzare il flusso di file di sistema; allora si potrebbe provare a utilizzare setDataSource metodo MediaPlayer

FileInputStream rawmp3file= new FileInputStream(yourByteArrayAsMp3File); 
mediaPlayer.setDataSource(rawmp3file.getFD()); 

Se si potesse passare alla sorgente audio PCM, dare un'occhiata a AudioTrack classe.

La classe AudioTrack gestisce e riproduce una singola risorsa audio per Java applicazioni. Permette di trasmettere i buffer audio PCM all'hardware audio per la riproduzione. Ciò viene effettuato da "spingendo" i dati sull'oggetto AudioTrack utilizzando uno dei metodi write (byte [], int, int) e write (short [], int, int) .

-1

Dai uno sguardo allo BASS library (gratuito per uso non commerciale).
Ecco un link per Android: http://www.un4seen.com/forum/?topic=13225.0

C'è BASS_StreamCreateFile funzione:

HSTREAM BASS_StreamCreateFile(
    BOOL mem, 
    void *file, 
    QWORD offset, 
    QWORD length, 
    DWORD flags 
); 

Parametri:

mem  TRUE = stream the file from memory. 
file Filename (mem = FALSE) or a memory location (mem = TRUE). 
Problemi correlati