Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用html5音频元素在Android上播放实时AAC流_Android_Html_Audio_Http Live Streaming_Aac - Fatal编程技术网

如何使用html5音频元素在Android上播放实时AAC流

如何使用html5音频元素在Android上播放实时AAC流,android,html,audio,http-live-streaming,aac,Android,Html,Audio,Http Live Streaming,Aac,我正在尝试在页面中嵌入一个html5音频标签,以允许播放来自Icecast服务器的实时AAC+流 据介绍,Android支持在MPEG-4容器或ADT中播放多种AAC风格的视频 我已在MPEG-4容器中成功播放AAC编码的音频文件,因此: <audio controls="controls"> <source src="http://www.example.com/audio/program1.mp4" type="audio/mp4"/> </audio>

我正在尝试在页面中嵌入一个html5音频标签,以允许播放来自Icecast服务器的实时AAC+流

据介绍,Android支持在MPEG-4容器或ADT中播放多种AAC风格的视频

我已在MPEG-4容器中成功播放AAC编码的音频文件,因此:

<audio controls="controls">
  <source src="http://www.example.com/audio/program1.mp4" type="audio/mp4"/>
</audio>

但是,我无法播放任何带有音频标签的AAC直播流(据我所知,它是由Icecast使用ADT输出的)。我尝试过为流URL设置不同的类型(例如,播放器说它“可能”可以播放的“音频/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流并尝试播放它,但它不能(你可能认为它知道得足够多,不会这样做)


因此,只要通过HLS而不是直接从Icecast交付,Android最终会毫不延迟地播放实时AAC+流。我必须说,我对Android非常失望,它既缺乏对direct Icecast AAC+的支持,又对实时MP3流处理不善,特别是在竞争(iOS)之后处理你扔给它的所有东西,不眨眼。

你能检查并确保AAC Icecast的输出格式吗?开发者指南适用于使用Android SDK时(它有自己的媒体播放器功能),并且不会应用于HTML视频标签。如果您使用Android,您自己的AAC链接(带有ADT)是否在Android上工作?还有关于播放按钮更改。。。您是否需要等待下载缓冲区填满一点?而且没有互联网数据限制(比如没有大型媒体流?@Danijel:以下是ffprobe针对AAC流的报告:
Duration:N/A,比特率:63 kb/s;Stream#0:0:Audio:aac(HE-AACv2),44100 Hz,立体声,fltp,63 kb/s
@VC.One:当我在中加载流的URL时,我的流在桌面上可以正常播放,但在Android上单击播放后,日志显示“播放,播放,暂停”。原始演示链接中的流也会发生同样的情况。我知道开发者指南是指Android SDK;我只是希望html5音频标签和媒体API都能调用相同的本地播放器库。@VC.One:播放器在缓冲时会说“stalled”(比如mp3流,在这种情况下,播放最终开始)。在我尝试过的AAC流的例子中,它会保持这种方式几分钟,并且播放永远不会开始。我不认为有任何带宽限制(例如,流媒体直播视频可以很好地与此连接)。为什么不使用HLS服务器而不是icecast?有意地说,HLS服务器是一个简单的野兽,而HLS客户端则是所有奇迹发生的地方。Icecast实际上是我们的一些流消费者(通过其网站和/或应用程序重新分发流的服务)的需求/偏好。与此同时,我最近对此进行了测试,Android现在似乎可以毫无问题地播放AAC+和MP3直播流。当我有机会证实这一点时,我会更新这个问题。关于我之前的评论:Android上的Chrome浏览器似乎可以播放AAC+和MP3直播流,没有问题。本机安卓浏览器仍不会播放AAC+,长时间缓冲后才会播放MP3;因此,在这方面没有任何变化。