出于某种奇怪的原因,HTML5 Audio API不能让我在iOS 4和5中访问iPads和iPods的currentTime。每当播放音频元素时,我都需要调整currentTime,但它的行为就像当前时间不可访问一样。我到处寻找这个问题的答案,但我找不到答案。我下面的代码在所有现代浏览器中都运行得很好,所以我有点困惑。
我的HTML标记
<p>
<a class="audio" href="assets/audio/ambient-sounds-1.mp3" data-flash="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/niftyplayer.swf" data-mp3="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.mp3" data-ogg="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.ogg">
Ambient Sounds
<span class="audio-play">Play</span>
<audio preload="">
<source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.mp3" type="audio/mpeg">
<source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/ambient-sounds-1.ogg" type="audio/ogg">
</audio>
</a>
</p>
<p>
<a class="audio" href="assets/audio/city_street.mp3" data-flash="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/niftyplayer.swf" data-mp3="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.mp3" data-ogg="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.ogg">
City Street Sounds
<span class="audio-play">Play</span>
<audio preload="">
<source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.mp3" type="audio/mpeg">
<source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/city_street.ogg" type="audio/ogg">
</audio>
</a>
</p>
<p>
<a class="audio" href="#" data-flash="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/niftyplayer.swf" data-mp3="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.mp3" data-ogg="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.ogg">
Loud Crash
<span class="audio-play">Play</span>
<audio preload="">
<source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.mp3" type="audio/mpeg">
<source preload="" src="http://athens.sierrabravo.net/~ablue/plato/videoplayer/assets/audio/crash.ogg" type="audio/ogg">
</audio>
</a>
</p>我的JavaScript
AudioPlayer = {
init: function () {
var player = this;
this.audio = $('.audio'); // Save and cache all audio elements so they can be targeted by mass stop()
player.audio.each( function() {
// Bind each audio element
player.bind($(this));
});
},
bind: function (object) {
var player = this;
object.bind('touchstart click', function() {
// get the real DOM element, not the jQuery array
var audio = $(this).find('audio').get(0);
if(audio.paused) { // Check if its playing
player.play(audio);
}
else {
player.stop(audio);
}
return false;
});
},
play: function(audio) {
// Stop all existing audio elements and set them to 0
this.audio.each( function() {
var audioOther = $(this).find('audio').get(0);
audioOther.pause();
});
// Play the audio element
if(audio.currentTime) audio.currentTime = 0;
audio.play();
},
stop: function(audio) {
if(audio.currentTime) audio.currentTime = 0;
audio.play();
}
};发布于 2012-04-04 03:07:15
为什么我的代码不能工作,有一个答案,iOS 4和5需要完全销毁整个音频元素(很糟糕的解决方案,但它是有效的)。如果你遇到我的问题,这里有一个快速的概要,告诉你如何解决它。
发布于 2012-04-16 18:58:51
我也有同样的问题,然后谷歌然后找到这个页面和下面的页面
http://remysharp.com/2010/12/23/audio-sprites/
这家伙可能找到了更详细的答案。
发布于 2012-10-24 23:54:58
我遇到了这些类型的问题,我也开始使用这种绝望的方法来解决问题,包括重新创建音频组件,重新加载源,等等。
一两天前,我发现媒体内容的来源必须是“纯”的,才能在ipad上成功使用。
我想用“纯”的方式表达所有内容,这些内容不会被之前的代码“变形”,这些代码可能会在元数据到达ipad客户端之前对其进行更改或删除。
在我目前从事的项目中,我发现使用ipad我无法重放或遍历到mm:ss "documents“文件夹中的任何内容,但如果我获得该文件并移动到其他地方,它工作得很好,我可以在我的Ipad上重放它,转到分钟:秒我希望,等等。
在我的例子中,一个.htaccess强制我的apache服务器通过一个" download.php“发送"get”查询,这个“download.php”检查权限并做一些奇怪的事情,然后这个download.php将文件分派到客户端,但方式不是很好,也不是ipad喜欢的方式。
我去掉了.htaccess的绑定,ipad的音频处理效果又不错了。(无论如何,download.php并没有太好的用处……)
https://stackoverflow.com/questions/9979932
复制相似问题