2015-11-21 33 views
1

我正在使用.mp3文件,当直接查看时,.mp3文件可以正常播放,也可以在使用HTML5音频标签嵌入时播放,但是在JS中创建HTML5音频标签时,它不会播放! (非常奇怪)HTML5音频标签在Android中不起作用 - 在JS中创建Chrome时?

我没有在任何其他浏览器/设备的这个问题,例如桌面 - 铬完美的作品。我已经测试了sound.canPlayType('audio/mpeg'),这产生了真实(因此它被支持)。

也许在Android中有一个错误 - Chrome? (它是最新版本)

+0

或者你应该让浏览器在播放之前加载源代码。如果可能,请提前创建'audio'元素。收听'audio'元素触发的'canplay'或'canplaythrough'事件,以了解它何时有足够的数据开始播放。 – Touffy

+0

你确定mp3文件路径正确吗? (/example/folder/sound.mp3) – magreenberg

+0

@magreenberg绝对正确,我甚至试图硬编码的网址等。 – Stone

回答

3

看起来这是预期的功能,跨越更多的则只是Chrome浏览器。需要用户交互才能播放媒体元素。

眨眼和WebKit有需要“用户手势”来播放或暂停音频或视频元素,这在Android版Opera,Chrome浏览器启用的Android,默认的Android浏览器,Safari浏览器适用于iOS的设置和可能还有其他浏览器。这是有道理的,因为移动设备在公共场所和床上使用,随机网站的不请自来的声音可能会造成滋扰。另外,自动播放视频广告会浪费带宽。 Block Quote from 'blog.foolip.org'

复制线程从其他用户

Autoplay audio on mobile safari

How can I autoplay media in ios 4.2.1

Autoplay audio with ios 5 workaround?

现状

开发人员已经要求删除已被审查和拒绝(现在)的'mediaPlaybackRequiresUserGesture'。 "We're going to gather some data about how users react to autoplaying videos in order to decide whether to keep this restriction."

经进一步检查,我发现这个...

“我误解了讨论(除去mediaPlaybackRequiresUserGesture),围绕这个话题的结果。我们需要保持这种代码,以不破google.com同时收集有关此功能的数据。“

Google.com依赖于功能被禁用,否则它打破(他们没有说什么它打破)。

Original Bug Report

+0

哦,我的天啊,好地方!痛苦的一点,但我明白为什么谷歌可能会增加这一限制。从消费者PoV来看,这是好事,但对于开发者来说,这意味着更多的工作。 – Stone

+0

@MrLister我更新了我的答案。这看起来够完整吗? – magreenberg

0

并非每个平台上的每个浏览器都可以播放mp3音频格式。一般来说,正如我建议的那样,您应该在音频元素中提供两个<source>元素,一个提供mp3格式,另一个提供ogg vorbis格式。

你可以在这里阅读更多:https://developer.mozilla.org/en-US/docs/Web/HTML/Supported_media_formats

+1

我很确定手机Chrome确实支持MP3,所以这可能不是当前的问题 –

+1

我很欣赏这个Simon,但是在Android上--Chrome,我可以直接查看.mp3文件,而且没有任何问题,我也可以使用HTML5音频标签嵌入.mp3文件,没有任何问题。sound.canPlayType('audio/mpeg')所以这一切都表明它应该工作:( – Stone

+0

@ AlexanderO'Mara同意你的观点与我的上述发现相吻合 – Stone

0

尝试追加到文档正文。

document.body.appendChild(sound); 

尽管移动设备可能不会自动播放音频或视频。如果您的目标是移动设备,自动播放会被视为不好的做法,因为它会消耗带宽。所以可能值得考虑添加控件。

sound.setAttribute('controls', 'true'); 
+0

试过没有成功,开始思考Android - Chrome不允许编程播放(如果有意义的话)。 – Stone

+0

可能是为了节省带宽。 –

+0

@Stone如果是这样的话,我预计可以加载和/或播放用户事件,如触摸。 –

0

OK,好了,现在我们知道它不会与audio一起工作,唯一留给你的路径是切换到Web Audio API。你需要将mp3加载到ArrayBuffer(例如使用XHR),然后将它传递给decodeAudioData方法,为您提供一个音频缓冲区,您可以从AudioBufferSourceNode中随时播放。

+0

请看看 - 谢谢,虽然初次检查的文档看起来非常令人难以置信! – Stone

相关问题