iPad HTML5 音轨未重置
Posted
技术标签:
【中文标题】iPad HTML5 音轨未重置【英文标题】:iPad HTML5 Audio Tracks Not Resetting 【发布时间】:2012-04-02 16:16:32 【问题描述】:由于某些奇怪的原因,html5 音频 API 不允许我访问 ios 4 和 5 中的 iPad 和 iPod 中的 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();
;
【问题讨论】:
返回什么错误? 实际上它并没有因为 if (audio.currentTime) 而引发错误。但是,如果我尝试强制设置 currentTime,它会显示“尝试使用不可用或不再可用的对象。” O 并且此错误会在您未单击的所有元素上触发,而不是在单击的元素上触发,因为它似乎已成功加载到内存中。 看起来iOS的答案可能只是使用一个音频元素并在您需要播放新文件时替换源。现在进行测试,当我完成实验后会发布更多信息,除非在那之前有人提出更好的解决方案。 【参考方案1】:关于为什么我的代码不起作用有一个答案,iOS 4 和 5 需要完全销毁整个音频元素(糟糕的解决方案,但它有效)。如果您遇到了我的问题,下面是如何解决我的问题的简要说明。
-
只在页面中插入 1 个元素(我在结束标记之前插入了我的元素)。
点击播放新的音频元素时,完全破坏现有的并使用您要播放的新曲目从头开始重建它。
在音频元素上调用 .play,一切顺利。
【讨论】:
【参考方案2】:我也有同样的问题,google了一下,找到了这个页面和下面的页面
http://remysharp.com/2010/12/23/audio-sprites/
这家伙可能找到了更详细的答案。
【讨论】:
我花了很多时间试图让他的解决方案发挥作用。出于某种原因,iOS 4 拒绝合作。【参考方案3】:我遇到了这些类型的问题,我也开始使用这种绝望的方法来解决问题,包括重新创建音频组件、重新加载源等等。
一两天前我发现媒体内容的来源必须是“纯”的才能从ipad上成功使用。
我想用“纯”表达所有未被先前代码“转换”的内容,这些内容可能会在它到达 ipad 客户端之前更改或删除它的元数据。
在我正在处理的当前项目中,我发现使用 Ipad 我无法重播或遍历 mm:ss 位于“文档”文件夹中的任何内容,但如果我得到该文件并移动到其他地方,它工作得很好,我可以在我的 ipad 上重播,转到我希望的分:秒,等等。
在我的例子中,.htaccess 迫使我的 apache 服务器通过“download.php”发送“get”查询,该“download.php”正在检查权限并做类似的奇怪事情,然后这个 download.php 正在调度向客户提交文件,但不是以一种好的方式或更多 ipad 喜欢的方式。
我删除了 .htaccess 绑定,ipad 再次获得了不错的音频处理。 (无论如何,那个download.php并没有太大用处......)
【讨论】:
问题不在于数据传输,而在于 iPad 内存缓冲。谢谢分享,之前没听说过这个问题。以上是关于iPad HTML5 音轨未重置的主要内容,如果未能解决你的问题,请参考以下文章