如何通过互联网收音机播放声音?

How the sound can be streamed by Internet radio?

我打算制作网络广播播放器程序,但为此,我需要知道声音是如何传输的。我在维基百科上发现 UDP 协议可以用于流式传输。我还发现可以使用 http,但我不确定这是否正确。

常用的methods/protocols流式音频有哪些?我在哪里可以查看互联网广播电台如何播放音频? ( http://radio17.pl/sluchaj )

I found on Wikipedia that UDP protocol can be used for streaming. I've also discovered that it's possible to use http

是的,没错。传统的电话应用程序使用 UDP,因为它通过避免确保可靠连接的开销来减少网络开销。电话需要低延迟和高效使用带宽,但不要求通过线路发送的每一位都准确无误。 (如果语音中断了一秒钟,我们仍然可以理解某人所说的话,因为单词散布在许多音频帧中。对于较长的损坏或丢失,我们仍然可以根据上下文线索进行交流。最好是降低延迟以确保 100% 准确地再现声音。)

但是,互联网广播式流式传输 不需要 需要极低的延迟。事实上,在编码器和最终用户播放之间有 20 秒或更长时间的延迟而听众没有注意到的情况并不少见。这不是双向对话,因此延迟无关紧要。音频质量确实如此。

像 MP3 这样的普通音乐编解码器不能很好地容忍流损坏。此外,我们不希望我们的音乐经常掉线或出现小故障。在这种情况下,TCP 连接是最好的,它确保所有数据包将按顺序传送,并合理保证数据不会在传输过程中发生损坏。

HTTP 是在 TCP 上运行的非常常见的协议。它足够通用,非常适合传输流数据……就像任何其他单向数据一样。在 20 世纪 90 年代末,Nullsoft 的开发人员通过一个被黑客攻击在一起的有点 HTTP 兼容的服务器(称为 SHOUTcast)实现了流式传输。这与开源替代品 Icecast 一起变得非常流行。开发人员发现这比当时的专有替代品(例如 RealPlayer)更容易处理。我怀疑这是 SHOUTcast/Icecast 如此流行的原因之一。现在有很多兼容 HTTP 的服务器。

What are the commonly used methods/protocols to stream audio?

最常见的是 HTTP、RTMP 和 HLS。我们在上面讨论了 HTTP。

RTMP 是为 Flash 开发的协议,但现在已被许多服务器实现。 RTMP 为流媒体提供更多功能,例如自适应比特率。这些功能是以复杂性为代价的。此外,浏览器本身不支持 RTMP。要在浏览器中播放 RTMP 流,您需要基于 Flash 的播放器或 MediaSourceExtensions 支持,您可以在 JavaScript 中从 RTMP 解复用音频流。 (这在您可以购买的许多现成 JavaScript 播放器中实现,但与 HTTP 相比,它限制了浏览器兼容性。)

HLS(HTTP Live Streaming)实际上并不是一种网络协议,而是一种使用 HTTP 的模式。 HLS 没有使用特殊的流式 HTTP 服务器,而是通过记录块(比如一次 3 秒)并通过任何常规方式(例如 SFTP)将它们上传到普通 Web 服务器来工作。除了这些块之外,还有一个指向最新块的播放列表文件(标准 M3U8 格式,注释中有一些额外信息)。播放器就像下载任何其他文件一样下载这些块,然后端到端地播放它们。 HLS 的优点是您可以使用任何 HTTP CDN,并且在流式传输时自动记录您的流。此外,客户端可以选择不同的码率中流来适应不断变化的网络条件,类似于RTMP的自适应码率。最大的缺点是开销。 HTTP 请求中有很多浪费的数据。此外,与 RTMP 一样,HLS 不能被大多数浏览器原生播放,必须使用 Flash 或 MediasourceExtensions 进行破解。

And where can I check how the audio is streamed by internet radio station?

最简单的方法是启动像 Fiddler 这样的工具来拦截浏览器和服务器之间的所有请求。您可以使用您的浏览器开发工具,但如果站点使用 Flash,这不一定准确。 Fiddler 将拦截 HTTP 和 HLS 请求。

要查看所有请求数据,请使用 Wireshark 等工具。这将向您显示通过线路发送的所有流量。缺点是解码 HTTPS 很困难,所以你可能会错过一些东西。 (幸运的是,目前大多数流媒体不使用 HTTPS。)