Android音频流使用UDP还是TCP?

3
我的最终目标是将用户的语音输入流传输到桌面应用程序中的安卓设备上。
对于安卓设备,它显然会运行基于Java的安卓应用程序。对于桌面应用程序,我考虑编写一个Java小程序来接受数据流。
这是由Wikipedia解释的TCP和UDP的优缺点:
传输控制协议是一种面向连接的协议,这意味着它需要握手来建立端到端通信。一旦建立连接,用户数据可以在连接上双向发送。
可靠性-TCP管理消息确认、重传和超时。它会尝试多次传递消息。如果消息在传递过程中丢失,服务器将重新请求丢失的部分。在TCP中,要么没有数据丢失,要么在多次超时的情况下,连接被断开。有序性-如果两个消息按顺序在连接上发送,第一个消息将先到达接收应用程序。当数据段以错误的顺序到达时,TCP缓冲区会延迟无序数据,直到所有数据可以被正确地重新排序并传递到应用程序。重量级-TCP需要三个数据包来设置套接字连接,然后才能发送任何用户数据。TCP处理可靠性和拥塞控制。流式传输-数据被读取为字节流,没有传输用于标记消息(段)边界的区分指示。用户数据报协议是一种更简单的基于消息的无连接协议。无连接协议不会建立专用的端到端连接。通过从源到目的地单向传输信息来实现通信,而不验证接收方的准备情况或状态。
不可靠性-当发送UDP消息时,无法知道它是否会到达目的地;它可能在途中丢失。没有确认、重传或超时的概念。无序性-如果将两个消息发送到同一接收者,则无法预测它们到达的顺序。轻量级-没有消息排序、没有跟踪连接等。它是在IP之上设计的小型传输层。数据报-数据包被单独发送,只有在到达时才检查其完整性。数据包具有明确的边界,如果在接收器套接字上进行读取操作,则会产生一个原始发送的完整消息。没有拥塞控制-UDP本身不能避免拥塞。必须在应用程序级别实施拥塞控制措施。广播-作为无连接协议,UDP可以广播-发送的数据包可以寻址以被子网上所有设备接收。
我希望在安卓将语音流传输到桌面应用程序时,用户的语音流是不间断和稳定的。
除了简单地考虑Wikipedia列出的两种不同技术的优缺点之外,选择技术时还应注意什么?
UDP和TCP哪个更好?
2个回答

2

我认为,这也取决于您的项目规范。信号丢失是否可接受。UDP比TCP快得多,适合流式传输用户的语音输入。它看起来像传统电话呼叫,有时会听到一些“噪音”,但通话仍然足够好用。此外,使用TCP会带来显着的延迟,而UDP是为流媒体而生。


我听说过这个,我一直习惯于认为UDP是为流媒体而生的。我认为这是正确的。 - UserOfStackOverFlow

0

UDP。由于您正在流式传输,因此无需像TCP那样每次丢失数据包时重新传输,这会导致更多的延迟。

https://www.onsip.com/blog/udp-versus-tcp-for-voip

但是,您可以通过网络缓冲区在TCP上实现它,因此起初会有一些延迟,然后用户将获得平稳的播放体验。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接