【问题标题】:Java voice chatJava语音聊天
【发布时间】:2025-11-30 04:35:01
【问题描述】:

我想用纯 Java 套接字编程创建一个语音聊天应用程序。 我使用 UDP 协议将录制的语音从一个客户端传输到另一个客户端,但是当我通过 Internet 对其进行测试时,语音不会连续发出。 由于我是这个语音聊天应用程序的新手,有人可能会建议我应该怎么做才能获得连续语音。

场景是这样的。

语音聊天的流程,因为这仅显示了一种通信方式-

数据流

Client1----------------->> 服务器 ------------- ----------------------->>客户端2

客户端1: 从 TargateDataLine 读取 1KB 语音缓冲区,然后创建语音包并发送到服务器。

服务器:从client1接收,然后发送到client2。

Client2:接收UDP数据包并获取语音数据然后播放。


同样面临带宽上下的问题。 使用语音聊天的最小带宽应该是多少。 Ex-skype 需要 30KBPS 的 udload/downloading 速度。

提前致谢。

【问题讨论】:

  • 我认为这不是从头开始的好方法,有数百个开源库可用。
  • 由于 JavaSound API 的延迟,在 Java 中实现具有合理性能的语音聊天也是相当困难的(如果不是不可能的话)。
  • 先生。 @chariesX 你能否参考这些库来实现互联网(WAN)上的语音传输。

标签: java udp chat voice


【解决方案1】:

为了在两个或多个用户之间建立对等通信的连接,您需要一个信令服务器以及 STUN/TURN 服务器。

您可以编写自己的代码或使用现成的后端解决方案(如 ConnectyCube)并专注于客户端实施。这里也有一些 WebRTC 视频聊天code samples 供您参考。

【讨论】:

    【解决方案2】:

    您应该直接在客户端之间发送数据包。通过服务器中继数据包会增加更多延迟。只需将其从客户端 1 发送到客户端 2。

    【讨论】:

    • 你能给我一个例子吗 - 如何在没有任何服务器的情况下在 java 中连接 client1 和 client2(用于语音聊天)。
    • 您将需要服务器来启动客户端之间的连接。有关概念和一小段代码,请参阅此链接-*.com/questions/19087036/…
    【解决方案3】:

    答案很简单,你应该使用 tcp 协议。 Coz udp 发送数据包,但不确保目标接收到数据包。但是 tcp 协议可以确保它,您将获得稳定的连接,同时降低数据传输速度。tcp vs udp

    【讨论】: