我要制作互联网广播播放器节目,但要做到这一点,我需要知道声音是如何流式传输的。我在维基百科上发现UDP协议可以用于流媒体。我也发现可以使用http,但我不确定这是否正确。
流式传输音频的常用方法/协议有哪些?我在哪里可以查看互联网电台如何传输音频? (http://radio17.pl/sluchaj)
答案 0 :(得分:0)
我在维基百科上发现UDP协议可用于流媒体。我还发现可以使用http
是的,那是真的。传统的电话应用程序使用UDP,因为它通过避免确保可靠连接的开销来减少网络开销。电话需要低延迟和有效的带宽使用,但不要求通过线路发送的每一位都是准确的。 (如果说话的声音分解了一秒钟,我们仍然可以理解有人说的话,因为语音分布在许多音频帧上。对于更长时间的贪污或辍学,我们仍然可以通过上下文线索进行沟通。这要好得多。降低延迟比确保声音100%准确再现。)
然而,互联网广播式流媒体不需要极低的延迟。事实上,在没有听众注意到的情况下,最终用户在编码器和播放之间延迟20秒或更长时间并不罕见。这不是双向对话,因此延迟无关紧要。音质有。
像MP3这样的常见音乐编解码器不能很好地容忍流损坏。此外,我们不希望我们的音乐辍学或经常出现故障。在这种情况下,TCP连接是最好的,这可确保所有数据包按顺序传送,并合理保证数据损坏不会在此过程中发生。
HTTP是一种在TCP上运行的非常常见的协议。它足够通用,非常适合传输流数据......就像任何其他单向数据一样。在90年代末期,Nullsoft的开发人员通过一个名为SHOUTcast的有点HTTP兼容的服务器实现了流式传输。这与开源替代品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。)