0

我要制作网络广播播放器程序,但要做到这一点,我需要知道声音是如何流式传输的。我在 Wikipedia 上发现 UDP 协议可用于流式传输。我还发现可以使用 http,但我不确定这是否正确。

流式传输音频的常用方法/协议有哪些?我在哪里可以查看互联网广播电台是如何流式传输音频的?( http://radio17.pl/sluchaj )

4

1 回答 1

0

我在 Wikipedia 上发现 UDP 协议可用于流式传输。我还发现可以使用 http

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

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

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

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

流式传输音频的常用方法/协议有哪些?

最常见的是 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 破解。

我在哪里可以查看互联网广播电台是如何流式传输音频的?

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

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

于 2016-04-17T00:09:04.297 回答