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á. :)