tcp - Icecast 传输层协议(protocol) - TCP 还是 UDP?

标签 tcp udp network-protocols icecast internet-radio

我好像找不到答案,所以我问你。 股票 Icecast2 服务器是否使用 TCP 或 UDP 来广播流数据?我知道它使用自定义的基于 HTTP 的应用层协议(protocol),所以有人可能认为它是 TCP,但另一方面它是一个广播应用程序,所以 UDP 对我来说更合乎逻辑。如果它仍然使用 TCP,为什么要这样做?

最佳答案

Icecast 和 SHOUTcast 都将 TCP 用于源流和到终端客户端的流。这有很多好处:

  • 大多数互联网广播电台使用的编解码器不适合丢失大块数据。如果流损坏,无论是丢失的还是乱序的数据包,解码器有时能够重新同步并继续,但很多只会失败。

  • 大多数互联网广播电台没有真正的延迟要求。没有人知道或关心他们是否将音频延迟了几秒钟。实际上通常会增加缓冲区大小以允许客户端快速开始播放,这会导致 10-30 秒的延迟。

  • 与 HTTP 兼容很重要。我怀疑当 Nullsoft 最初构建 SHOUTcast 时,他们的目标是尽可能简单地启动和运行它,因此他们模仿 HTTP 是有道理的。我怀疑 Icecast 和 SHOUTcast 如此受欢迎的原因是为它们编写客户端很容易,因为它本质上是 HTTP。现在基于 Web 的播放器已成为现实(使用 Flash 甚至 HTML5),协议(protocol)与 HTTP 兼容至关重要,因为许多浏览器不支持其他流媒体协议(protocol)。 (Flash 有自己的协议(protocol),但实现起来远不如 HTTP 简单。)如果客户端可以播放从 HTTP 服务器流式传输的文件,它可以从 Icecast 流式传输(如果它在 HTTP 实现中宽松,则可以从 SHOUTcast 流式传输) .

  • 您提到了广播...我不知道您的意思是不是 UDP 广播数据包,但这些在互联网上的实践中效果不佳。因此,使用 UDP 的唯一好处是减少开销,但我想您会看到,由于上述原因,几个字节的开销不会超过 TCP 对此类应用程序的好处。

简而言之,这不是延迟很重要且可以使用自定义客户端的电话应用程序。

关于tcp - Icecast 传输层协议(protocol) - TCP 还是 UDP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639674/

相关文章:

mysql --protocol=tcp 更改登录行为

java - 用 Java 广播 UDP 数据包的正确方法是什么?

networking - 是否可以在没有操作系统集成的情况下将数据从服务器推送到客户端(电话、计算机)

c - netinet/tcp.h 中的有效负载偏移值?

c# - 选择简单、安全、轻量级的网络协议(protocol)

c - 在 Linux 上使用 TCP 进行文件传输

c++ - 当通过原始套接字接收到 "syn ack"数据包时,如何使用 "syn"数据包进行响应?

C++ TCP 套接字插件

python - 在python中断开UDP套接字?

android - chromecast 如何连接到其他设备?