在我实际旋转Nexus 7之前,HTML5音频无法播放

时间:2014-03-10 10:40:14

标签: html5 html5-audio nexus-7

我正在尝试使用Android Chrome浏览器让HTML5音频精灵在Nexus 7上运行。要更改正在播放的音频,我会更改音频播放器的来源,然后重新加载音频播放器。

然后我必须检测两个'timeupdate'事件以确保音频实际播放,因为HTML5 audio on Android can be a bit unreliable

它是大页面的一部分,所以我无法发布所有内容,但设置归结为基本:

<body>
    <audio id="myAudioPlayer" src="audio_1.wav">

<script type=javascript>
    function changeAudio() {
        var audioplayer = document.getElementByID("myAudioPlayer");
        audioplayer.currentSrc = getNextAudioClip();
        audioplayer.load();  
        audioplayer.play();
        audioplayer.addEventListener('timeupdate', firstTimeUpdate, false);
    }

    function firstTimeUpdate() {
        this.removeEventListener('timeupdate', firstTimeUpdate, false);
        this.addEventListener('timeupdate', secondTimeUpdate, false);
        this.play();
    }

   function secondTimeUpdate() {
        this.removeEventListener('timeupdate', secondTimeUpdate, false);
        this.addEventListener('timeupdate', timeSliderUpdate, false);
    }
</script>
</body>

所以,前几次这个工作正常。音频被更改,'timeupdate'触发以使我们进入firstTimeUpdate(),然后音频开始播放,'timeupdate'再次触发以进入secondTimeUpdate()。

但是第6或第7次更改音频时,第二次'timeupdate'事件不会触发,因此永远不会触及secondTimeUpdate(),除非我将Nexus 7旋转90度然后再次将其旋转回来,随后音频开始播放,第二个'timeupdate'被触发,一切都开始重新开始。

这一直持续到我改变第12或第13次的音频,其中观察到同样的事情。 getNextAudioClip()函数工作正常(即它返回一个有效的音频文件)。

我很难过。任何人都可以猜测这里可能会发生什么,或者为什么旋转Nexus 7“修复”它?

编辑:好的,所以在花了更多时间玩这个之后,似乎问题与垃圾收集有关。旋转Nexus 7似乎会触发先前加载的音频精灵的垃圾收集,这允许新的精灵加载和播放。更改为其他选项卡然后再返回也可以执行此操作。因此,如果我能以某种方式自动获取此音频GC,我可以有一个解决方法。

0 个答案:

没有答案