use*_*859 4 html audio audio-streaming webradio
我试图弄清楚基于 Web 的音频流网站是否使用 Web Audio API 进行播放,或者它们是否依赖于音频元素或其他元素。
由于音频流服务的用户通常不需要除了启动和停止音频之外的更多功能,因此我认为音频元素就足够了。如果需要 VU 计,那么我猜会使用 Web Audio API,因为它有一个内置的分析器节点。但由于 IE 不支持 API,所以我想您宁愿使用音频元素并接触 IE 用户,而不是使用 VU 计等花哨的附加功能。
我一直在查看 Spotify 网络播放器、Grooveshark、BBC 广播电台和波兰公共广播电台的源代码,但我没有找到音频元素或 Web 音频 API 的使用。我确实发现瑞典公共广播电台 (sr.se) 使用了音频元素。
我并不是要求任何人为我浏览 JavaScript 源代码,而是要求熟悉该主题的人可以为我指出正确的方向。
目前我不知道有任何互联网广播服务可以使用 Web Audio API 播放其流,但如果找到这样的服务我也不会感到惊讶。我自己一直在使用Audiocog 优秀的 Aurora.js 库开发一个项目,该库通过使用 JavaScript 解码音频来启用通常不可用的浏览器内编解码器。然而,正如您所指出的,出于兼容性原因,这在今天被认为是有点实验性的。
大多数互联网广播电台使用渐进式 HTTP 流(SHOUTcast/Icecast 风格),可以在元素或 Flash 中播放<audio>。这很有效,但可能很难做到正确,特别是如果您使用 SHOUTcast 服务器,因为它们与 HTTP 不完全 100% 兼容,从而损害了某些版本的 Firefox 和许多移动浏览器的浏览器支持。我最终编写了自己的服务器,称为AudioPump Server,以通过 HTTP 渐进式获得更好的浏览器和移动浏览器支持。
根据可用的 Flash 代码和 ActionScript 版本,您可能还必须以创造性的方式处理内存泄漏,因为默认情况下 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 上,您只需链接到流 URL即可。它将检测Content-Type响应标头、断开连接并打开其配置的媒体播放器进行播放。如今,您必须寻找这些直接链接,但它们就在那里。
如果您想知道某个电台正在使用什么,而不需要深入研究其编译和缩小的源代码,只需使用Fiddler或Wireshark等工具并观察流量即可。您会发现它在幕后非常简单。