2010-05-01 8 views
16

Per la mia app, ho bisogno di registrare l'audio da MIC su un telefono Android e inviarlo tramite TCP all'altro telefono Android, dove deve essere riprodotto.Android: streaming audio tramite socket TCP

Sto usando AudioRecord e AudioTrack classe. Funziona perfettamente con un file: consente di scrivere audio nel file utilizzando DataOutputStream e di leggerlo utilizzando DataInputStream.

Tuttavia, se ottengo lo stesso flusso da un socket anziché da un file e provo a scriverlo, ottengo un'eccezione.

Non riesco a capire cosa potrebbe andare storto. Qualsiasi aiuto sarebbe molto apprezzato.

MODIFICA: il problema è lo stesso anche se provo con dimensioni di buffer più grandi (65535 byte, 160000 byte).

Questo è il codice:

Recorder:

int bufferSize = AudioRecord.getMinBufferSize(11025, , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 

AudioRecord recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); 

byte[] tempBuffer = new byte[bufferSize]; 

recordInstance.startRecording(); 

while (/*isRecording*/) { 
     bufferRead = recordInstance.read(tempBuffer, 0, bufferSize); 
     dataOutputStreamInstance.write(tempBuffer); 
} 

Il DataOutputStream sopra è ottenuto come:

BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream 
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff); 

La prego di dare un'occhiata e fatemi sapere cosa si tratta che potrei fare di sbagliato qui?

Grazie,

+0

Sei riuscito a inviare il file audio ad altri dispositivi? – B770

risposta

8

Ho ottenuto questo lavoro, con un po 'di aiuto, e solo parzialmente.

Ho iniziato con il codice su http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html, ho modificato gli stream di File sui flussi di Socket e ho modificato isAvailable() su if (inputStream.read (byteArray)! = -1).

Lo streaming live di audio su TCP sta accadendo ora.

Tuttavia,

Tutto quello che sento dall'altra parte è il rumore, e sono ora a caccia per il corretto set di parametri per AudioRecorder e AudioTrack - la frequenza, canale di configurazione e la codifica, sorgente audio ecc

Se avete qualche idea su questo, per favore fatemelo sapere.

Grazie,

EDIT: E 'stato un errore di stupido da parte mia. Oltre a tutto ciò che ho detto sopra, usa inputStream sul lato del lettore e outputStream sul lato del registratore, e array di byte invece di cortometraggi e funzionerà.:)

+0

Anche se sto scavando un vecchio thread .. Puoi inserire il tuo codice (modifiche apportate) ?? –

+0

Ciao Chaitanya, come hai fatto con lo stesso codice? Non riesco a fare streaming live di audio su TCP. Puoi guidarmi? – iMOBDEV

1

senza conoscere l'eccezione specifica che stai ricevendo, è difficile sapere esattamente che cosa c'è che non va. Sarebbe anche utile vedere il codice che stai utilizzando per creare out1 (ovvero il tuo codice socket).

Qualcosa che si potrebbe voler prestare attenzione è la quantità di dati letti da recordInstance.read(); potresti non ottenere un'intera porzione di dati, ad esempio bufferSize, quindi è necessario fare attenzione solo a scrivere byte 0 tramite bufferRead-1 nel socket di output.

+0

Grazie mille per la risposta. – Chaitanya