我试图弄清楚基于网络的音频流网站是否使用网络音频API进行播放,或者是否依赖音频元素或其他内容。
由于音频流服务的用户通常不需要比启动和停止音频更多的功能,因此我猜音频元素就足够了。如果需要VU表,那么我猜测将使用Web Audio API,因为它有一个内置的分析器节点。但由于IE不支持API,因此我认为您宁愿使用音频元素并使用IE用户,而不是使用VU-meter等花哨的附加功能。
我一直在查看Spotifys网络播放器,Grooveshark,BBC广播和波兰公共广播的源代码,但我找不到音频元素或使用Web Audio API。我确实发现瑞典公共广播电台(sr.se)使用了音频元素。
我并没有要求任何人为我查看JavaScript源代码,而是如果熟悉该主题的人可以指出我正确的方向。
答案 0 :(得分:4)
我不知道目前有任何互联网广播服务使用网络音频API回放他们的流,但我不会惊讶地找到一个。我一直在使用Audiocog's excellent Aurora.js library自己开发一个,它通过JavaScript解码音频,使浏览器中的编解码器通常不可用。但是,出于兼容性原因,正如您所指出的那样,今天这将被视为一种实验性的。
大多数互联网广播电台使用渐进式HTTP流媒体(SHOUTcast / Icecast风格),可以在<audio>
元素或Flash中播放。这很好但很难做到,特别是如果你使用SHOUTcast服务器not quite 100% compatible with HTTP,会损害某些版本的Firefox和许多移动浏览器中的浏览器支持。我最终编写了自己的名为AudioPump Server的服务器,以便通过HTTP渐进式获得更好的浏览器和移动浏览器支持。
根据您的Flash代码和可用的ActionScript版本,您可能还需要deal with memory leaks in creative ways,因为默认情况下,Flash会将所有流数据无限期地保留在内存中,因为它从未构建为通过HTTP流式传输。许多人使用RTMP与Flash(在服务器上使用Wowza或类似内容),Flash 构建为流式传输以解决此问题。
iOS支持HLS,它基本上是HTTP服务器提供的静态文件的集合。当编码发生时,编码器将流的一大块写入每个文件,客户端只需下载它们并无缝地播放它们。这样做的好处是客户端可以选择比特率来流式传输,并在网络状况发生变化时上下提高质量。这也意味着您可以完全切换网络(例如从WiFi到3G)并仍然维护流,因为块是独立下载和无状态下载的。 Android“支持”HLS,但它是错误的。 Safari是目前唯一支持HLS的浏览器。
兼容性检测不是您需要自己解决的问题。有许多播放器,例如jPlayer和JW Player,它们支持HTML5音频支持检测,编解码器支持检测,并在HTML5音频和Flash的播放之间提供通用API。如果您想快速启动并运行,它们还提供可选的UI。
最后,大多数电台确实提供了一个链接,允许您在自己的媒体播放器中播放流。这是通过链接到播放列表文件(通常是M3U或PLS)来完成的,该文件被下载并且经常立即打开(由用户及其浏览器配置)。播放器软件加载此播放列表,然后直接连接到流媒体服务器以开始播放。在Android上,您只需link to the stream URL。它将检测Content-Type
响应标头,断开连接并打开其配置的媒体播放器以进行播放。这些天你必须寻找这些直接链接,但它们就在那里。
如果您想知道某个电台正在使用什么而不在其编译和缩小的源代码中进行挖掘,只需使用Fiddler或Wireshark等工具并观察流量即可。你会发现它非常简单。
答案 1 :(得分:1)
我们使用Web Audio通过Aurora.js使用非常类似于HTTP Live Streaming的协议进行流式传输。我们这样做是因为我们想要相同的流后端来为iPhone,Android和网络提供服务。
这是一个漫长而痛苦的过程,经过了6个多月的努力,但现在已经完成了,一切都很好。
查看http://radioflote.com并随时提出有关任何事情的问题或说明。如果您愿意,请继续并反汇编代码。不是问题。