Android客户端可以将语音数据流式传输到Java UDp服务器,但是当数据发送到另一个客户端时,则不会接收到数据
要检查服务器是否确实在接收,我在PC上实时播放了数据流,并且工作正常。当我尝试将数据发送到android客户端时,客户端根本没有收到任何数据。如果接收线程位于流传输线程的内部,则第一个客户端不会接收或发送数据,而第二个客户端会接收自己的语音数据。请帮助我确定我的错误。
public void startStreaming() {
status=true;
new Thread(new Runnable() {
@Override
public void run() {
try {
socket.setSoTimeout(1000);
byte[] buffer = new byte[4092];
// Log.d("VS", "Buffer created of size " + minBufSize);
DatagramPacket packet;
final InetAddress destination = InetAddress.getByName(ip);
recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, s_sampleRate, s_channelConfig, s_audioFormat, 4092);
recorder.startRecording();
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, r_sampleRate, r_channelConfig, r_audioFormat, 4092, AudioTrack.MODE_STREAM);
track.play();
while (status == true) {
minBufSize = recorder.read(buffer, 0, buffer.length);
packet = new DatagramPacket(buffer, buffer.length, destination, port);
socket.send(packet);
//Log.d("MainActivity", Integer.toString(packet.getLength()));
}
} catch (UnknownHostException e) {
Log.e("VS", "UnknownHostException");
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
public void startReceiving() {
r_status=true;
Thread receiveThread = new Thread(new Runnable() {
@Override
public void run() {
track.play();
try {
// Define a socket to receive the audio
byte[] buf = new byte[4092];
while(r_status) {
// Play back the audio received from packets
DatagramPacket packet = new DatagramPacket(buf, 4092);
//Log.i("receiver", "Packet made");
socket.receive(packet);
//Log.i("receiver", "Packet received: " + packet.getLength());
track.write(packet.getData(),0,4092);
}
// Stop playing back and release resources
socket.disconnect();
socket.close();
track.stop();
track.flush();
track.release();
r_status = false;
return;
}
catch(SocketException e) {
status = false;
}
catch(IOException e) {
status = false;
}
}
});
receiveThread.start();