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 音轨未重置的主要内容,如果未能解决你的问题,请参考以下文章

从 Xcode 重置 iPad 应用程序内容和设置

IPAD忘记密码重置恢复出厂设置

Html5 视频。暂停 20 秒后重置播放器

css HTML5重置CSS

css 重置css html5

css 重置css html5