UDP客户端未从服务器接收语音数据

时间:2019-09-12 22:17:26

标签: java android udp voip

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

0 个答案:

没有答案