[Java] Android: Streaming von Audio über TCP-Sockets


Answers

Ohne die genaue Ausnahme zu kennen, die Sie bekommen, ist es schwer zu wissen, was genau falsch ist. Es würde auch helfen, den Code zu sehen, den du benutzt, um out1 zu erstellen (das ist dein Socket-Code).

Etwas, auf das Sie achten sollten, ist die Menge der von recordInstance.read() gelesenen Daten; Es kann sein, dass Sie nicht einen ganzen bufferSize Datenblock daraus erhalten, Sie müssen also nur darauf achten, die Bytes 0 bis bufferRead-1 in Ihren Ausgangs-Socket zu schreiben.

Question

Für meine App muss ich Audio von MIC auf einem Android-Telefon aufnehmen und über TCP an das andere Android-Telefon senden, wo es abgespielt werden muss.

Ich benutze AudioRecord und AudioTrack Klasse. Dies funktioniert gut mit einer Datei - schreiben Sie Audio mit DataOutputStream in die Datei und lesen Sie mit DataInputStream .

Wenn ich jedoch denselben Stream von einem Socket anstelle einer Datei erhalte und versuche, dorthin zu schreiben, erhalte ich eine Ausnahme.

Ich kann nicht verstehen, was möglicherweise schief gehen könnte. Jede Hilfe würde sehr geschätzt werden.

EDIT: Das Problem ist gleich, auch wenn ich mit größeren Puffergrößen (65535 Bytes, 160000 Bytes) versuche.

Dies ist der Code:

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

Der obige DataOutputStream wird erhalten als:

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

Könntest du bitte einen Blick darauf werfen und mich wissen lassen, was ich hier falsch machen könnte?

Vielen Dank,