我正在尝试在页面中嵌入一个html5音频标签,以便播放来自Icecast服务器的实时AAC +流。
根据media formats developer's guide,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直播流(据我所知,使用ADTS通过Icecast输出)。我尝试设置不同的类型(例如,“音频/ aac”,播放器说它可能“可能”播放)以及流URL的不同文件扩展名。什么都行不通。顺便说一下,播放器初始化就好像一切正常,然后当你按下播放按钮时没有任何反应(除了播放按钮改为暂停图标)。
我能够播放实时AAC流的唯一方法是使用指向.sdp清单的URL,该清单包含指向流的RTSP版本的链接。然后,浏览器将流传递给原生音频播放器或另一个音频应用程序,该应用程序在短暂的缓冲期后播放。这不是我们的选择,因为我们希望为我们的流使用简单的Icecast服务器。
是否无法通过HTTP在Android上播放实时AAC流?似乎iOS支持它,但不支持Android。
答案 0 :(得分:0)
由于缺乏相反的反应,我必须得出结论,原始问题的答案是“不,不可能使用HTML5音频标签播放来自Icecast服务器的实时AAC +流”。
我发布了一个回答来分享我最终做的事情。
我的第一个倾向是使用MP3而不是AAC设置第二个Icecast流。这将有效,但您必须愿意接受Android的音频播放器通过MP3流引入的缓冲延迟。不幸的是,在64 kpbs的Android上,你会等待超过40秒,然后才会开始播放MP3流。不可否认,64 kpbs对于MP3来说质量不是很好,但即使在128 kbps时,缓冲也需要20秒以上,足以让听众得出结论流已经关闭。所以MP3不是我们的选择。
我最终的解决方案是要求我们的CDN添加一个从AAC + Icecast流中提取的Wowza应用程序,并使用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)会处理你扔的所有内容而不会眨眼。