java python - Android: Streaming von Audio über TCP-Sockets




1 Answers

Ich habe das mit einiger Hilfe und nur teilweise funktioniert.

Ich begann mit dem Code unter http://emeadev.blogspot.com/2009/09/raw-audio-manipulation-in-android.html , änderte die Streams von File in die Streams von Socket und änderte das isAvailable () in if (inputStream .read (byteArray)! = -1).

Live-Streaming von Audio über TCP findet jetzt statt.

Jedoch,

Alles, was ich am anderen Ende höre, ist Rauschen, und ich suche jetzt nach dem richtigen Parametersatz für AudioRecorder und AudioTrack - Frequenz, Kanalkonfiguration und -codierung, Audioquelle usw.

Wenn Sie eine Idee dazu haben, lassen Sie es mich bitte wissen.

Vielen Dank,

EDIT: Es war ein dummer Fehler von meiner Seite. Zusätzlich zu all dem, was ich oben gesagt habe, benutze inputStream auf der Playerseite und outputStream auf der Rekorderseite und Byte-Arrays anstelle von Kurzschlüssen und es wird funktionieren. :)

application framework

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,




Related

java android sockets dataoutputstream