socket programming geeks for java android sockets dataoutputstream

programming - java socket connection



Android: transmisión de audio a través de sockets TCP (2)

Sin conocer la excepción específica que está recibiendo, es difícil saber exactamente qué es lo que está mal. También ayudaría a ver el código que está utilizando para crear out1 (es decir, su código de socket).

Es posible que desee prestarle atención a la cantidad de datos leídos desde recordInstance.read() ; es posible que no obtenga una gran cantidad de datos de bufferSize buffer, por lo que debe tener cuidado únicamente de escribir los bytes 0 través de bufferRead-1 en su socket de salida.

Para mi aplicación, necesito grabar audio de MIC en un teléfono Android y enviarlo a través de TCP al otro teléfono Android, donde debe reproducirse.

Estoy usando la clase AudioRecord y AudioTrack . Esto funciona muy bien con un archivo: escriba audio en el archivo utilizando DataOutputStream y DataOutputStream desde DataInputStream .

Sin embargo, si obtengo la misma transmisión de un socket en lugar de File, y intento escribir en ella, obtengo una excepción.

No entiendo qué podría estar yendo mal. Cualquier ayuda sería muy apreciada.

EDITAR: El problema es el mismo incluso si lo intento con tamaños de búfer más grandes (65535 bytes, 160000 bytes).

Este es el código:

Grabadora:

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); }

El DataOutputStream anterior se obtiene como:

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

¿Podría echar un vistazo y decirme qué es lo que podría estar haciendo mal aquí?

Gracias,


Lo hice trabajando, con algo de ayuda, y solo parcialmente.

Empecé con el código en http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html , cambié las transmisiones de File a las transmisiones de Socket, y cambié el isAvailable () a if (inputStream .read (byteArray)! = -1).

Transmisión en vivo de audio a través de TCP está sucediendo ahora.

Sin embargo,

Todo lo que escucho en el otro extremo es ruido, y ahora estoy buscando el conjunto correcto de parámetros para AudioRecorder y AudioTrack: la frecuencia, configuración de canal y codificación, fuente de audio, etc.

Si tienes alguna idea al respecto, házmelo saber.

Gracias,

EDITAR: Fue un error estúpido de mi parte. Además de todo lo que dije antes, use inputStream en el lado del reproductor y outputStream en el lado de la grabadora, y arrays de bytes en lugar de cortos, y funcionará. :)