我正在尝试在页面中嵌入html5音频标签,以允许播放来自Icecast服务器的实时AAC+流。
根据媒体格式开发人员指南,Android 支持在 MPEG-4 容器内或 ADTS 中播放多种 AAC 风格。
我已经在 MPEG-4 容器中成功播放了 AAC 编码的音频文件,因此:
<audio controls="controls">
<source src="http://www.example.com/audio/program1.mp4" type="audio/mp4"/>
</audio>
但是,我无法使用音频标签播放任何 AAC 直播(据我了解,这是由 Icecast 使用 ADTS 输出的(。 我尝试为流 URL 设置不同的类型(例如,"audio/aac",播放器说它"可能"可以播放(以及不同的文件扩展名。 什么都没用。 顺便说一下,播放器初始化好像一切正常,然后当您按下播放按钮时没有任何反应(除了播放按钮更改为暂停图标(。
我能够播放实时 AAC 流的唯一方法是使用指向 .sdp 清单的 URL,其中包含指向流的 RTSP 版本的链接。 然后,浏览器将流移交给本机音频播放器或其他音频应用程序,后者在短暂的缓冲时间后播放它。 这对我们来说不是一个选择,因为我们想为我们的流使用一个简单的 Icecast 服务器。
有没有办法通过HTTP在Android上播放实时AAC流? 似乎iOS支持它,但不支持Android。
由于缺乏相反的回应,我不得不得出结论,原始问题的答案是,"不,无法使用HTML5音频标签播放来自Icecast服务器的实时AAC+流"。
我正在发布一个答案来分享我最终做的事情。
我的第一个倾向是简单地使用MP3而不是AAC设置第二个Icecast流。 这将起作用,但您必须愿意接受 Android 音频播放器在 MP3 流中引入的缓冲延迟。 不幸的是,在 64 kpbs 的 Android 下,您会等待 40 多秒才能开始播放 MP3 流。 诚然,64 kpbs 对于 MP3 来说质量不是很好,但即使在 128 kbps 时,缓冲也需要 20 秒以上,足以让听众得出结论,流已关闭。 所以MP3对我们来说不是一个选择。
我最终的解决方案是要求我们的 CDN 添加一个 Wowza 应用程序,该应用程序从 AAC+ Icecast 流中提取并使用 HLS 进行复用。
现在我的音频标签如下所示:
<audio controls="controls">
<source src="http://www.example.com/wowza/stream.m3u8"/>
<source src="http://www.example.com/audio/aac"/>
</audio>
请注意,我必须首先列出HLS源,否则Android设备实际上会选择Icecast流并尝试播放它,但它不能(你会认为它会知道足够多的
不这样做(。因此,最终Android确实可以毫无延迟地播放实时AAC+流,只要它是通过HLS提供的,而不是直接从Icecast提供的。 我必须说我对Android感到非常失望,它缺乏对直接Icecast AAC+的支持以及对实时MP3流的糟糕处理,特别是因为竞争对手(iOS(可以处理您扔给它的所有内容而不会眨眼。