通过UDP进行Java语音聊天 - 如何获取端口?

时间:2016-12-06 02:28:09

标签: java audio udp voice datagram

目前我有一台服务器和一台客户端。客户端加入语音聊天室,麦克风产生的任何声音都会发送到服务器。一旦服务器收到它,它就会将其发送给所有连接的客户端。这就是我遇到问题的地方:

由于某种原因,此代码未播放音频。最终我希望它只播放其他客户端的音频,但是现在我只是想让它播放所有音频,但似乎无法做到。

以下是我的代码:

public class VoiceReceiveThread extends Thread{
    public DatagramSocket din;
    public SourceDataLine audio_out;
    public DatagramSocket dout;
    byte[] buffer = new byte[512];

    @Override
    public void run(){
        int i = 0;
        DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
        while (MainWindow.isVConnected) {            
            try {
                din.receive(incoming);
                buffer = incoming.getData();
                audio_out.write(buffer, 0, buffer.length);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        audio_out.close();
        audio_out.drain();
    }
}

当我将din设置为new DatagramSocket(null);时,代码会运行,但不会给我任何反馈。我需要在特定端口上运行吗?我在做什么?

提前感谢您的帮助!

**编辑:**这是我的服务器,它大致相同。如果我从服务器收听音频它工作正常,它只有当我尝试从服务器发送回客户端时才会收到数据包。我再次浏览了我的代码,似乎是客户端没有收到数据包。

public class VoiceTransferThread extends Thread{
    public DatagramSocket din;
    public SourceDataLine audio_out;
    public Socket s;
    byte[] buffer = new byte[512];
    public DatagramSocket dout;

    @Override
    public void run(){
        int i = 0;
        DatagramPacket incoming  = new DatagramPacket(buffer, buffer.length);
        try {
            dout = new DatagramSocket();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println(s.getInetAddress() + " " + s.getPort());
        while (RSVCServer.isVConnected) {            
            try {
                din.receive(incoming);
                buffer = incoming.getData();
                //audio_out.write(buffer, 0, buffer.length);
                DatagramPacket data = new DatagramPacket(buffer, buffer.length, s.getInetAddress(), s.getPort());
                dout.send(data);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        audio_out.close();
        audio_out.drain();
        System.out.println("stop");
    }
}

0 个答案:

没有答案