2016-04-16 36 views
0

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

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

+0

你很清楚在发布之前没有在这里搜索,或者你会发现[这个问题](http://stackoverflow.com/q/13624048/62576 ),我通过简单地查看问题右侧(招聘广告下方)的* Related *问题列表,以及在您输入问题时显示给您的可能重复内容。 –

+0

@KenWhite除了标题外,我认为这里提出的具体问题与链接的内容有很大不同,以保证新帖子。 – Brad

回答

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,则这不一定准确。提琴手将拦截HTTP和HLS请求。

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