Icecast传输层协议 - TCP还是UDP?

3

我似乎找不到答案,所以来问问你。 一个普通的Icecast2服务器使用TCP还是UDP广播流媒体数据?我知道它使用自定义的基于HTTP的应用层协议,因此可能会认为它使用TCP,但另一方面它是一个广播应用程序,因此对我来说更合理的是使用UDP。如果它仍然使用TCP,为什么要这样做?

1个回答

6
Icecast和SHOUTcast都使用TCP协议来传输源流和向终端客户端进行流媒体传输。这样做有很多好处:
- 大多数互联网电台使用的编解码器不适合丢失数据块。如果流媒体被损坏,无论是由于丢失或乱序的分组,解码器有时可以重新同步并继续进行,但许多解码器会直接失败。 - 大多数互联网电台没有实际的延迟要求。没有人知道或关心他们是否会延迟几秒钟收到音频。实际上,通常会增加缓冲区大小以允许客户端快速开始播放,导致10-30秒的延迟。 - 与HTTP兼容非常重要。我怀疑当Nullsoft最初构建SHOUTcast时,他们的目标是尽可能简单地运行它,因此模仿HTTP是有意义的。我认为Icecast和SHOUTcast如此受欢迎的原因是因为很容易为它们编写客户端,因为它们本质上就是HTTP。现在基于Web的播放器已成为现实(使用Flash甚至HTML5),因此协议与HTTP兼容非常重要,因为许多浏览器不支持其他流媒体协议。 (Flash有自己的协议,但实施起来不像HTTP那样简单)。如果客户端可以从HTTP服务器流式传输文件,则可以从Icecast(和SHOUTcast,如果其HTTP实现宽松)进行流式传输。 - 您提到了广播...我不知道您是否指的是UDP广播数据包,但在互联网上实际上并不起作用。因此,使用UDP的唯一好处是减少开销,但出于上述原因,少量开销的字节不足以抵消这种应用程序类型中使用TCP的好处。
简而言之,这不是一个延迟很重要且可以使用自定义客户端的电话应用程序。

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