Ogg文件无法在手机上多次播放

Posted

技术标签:

【中文标题】Ogg文件无法在手机上多次播放【英文标题】:Ogg file not playing multiple times on mobile 【发布时间】:2016-07-27 11:46:43 【问题描述】:

我在一个 html 文件中有多个音频标签:

<audio src="/sound/file1.ogg" id="sound" class="file1"></audio>
<a href="#" data-audio="file1" class="play">
 <i class="fa fa-volume-up"></i>
</a>

<audio src="/sound/file2.ogg" id="sound" class="file2"></audio>
<a href="#" data-audio="file2" class="play">
 <i class="fa fa-volume-up"></i>
</a>

and so on ...

播放由以下函数触发:

$('.play').on('click', function(e)
        e.preventDefault();
        audioCls = $( this ).data('audio');
        $('.'+audioCls).trigger('play');
    );

在桌面浏览器上,一切都像魅力一样。如果单击播放按钮,则每次单击它都会播放音频。然而,在移动设备上,它只播放一次声音,我不知道为什么。有什么想法吗?

附带说明:音频文件非常小(最大 100 kb),只有几秒钟长。

更新

播放一次后,android 似乎会暂停该文件。您需要从 OS UI(屏幕上方的通知区域)取消暂停才能重播。

这是某种安全功能吗?我可以从我的响应式网站绕过它吗?

【问题讨论】:

【参考方案1】:

最终完全放弃了&lt;audio&gt; 标签,转而寻求更优雅的 JS 解决方案。

<a href="#" data-audio="file1" class="play">
 <i class="fa fa-volume-up"></i>
</a>

<a href="#" data-audio="file2" class="play">
 <i class="fa fa-volume-up"></i>
</a>

<script>
 function cassettePlay(cassette)
     var cassettePlayer = new Audio("");
     cassettePlayer.src=cassette;
     cassettePlayer.pause();
     cassettePlayer.load();
     cassettePlayer.play();
 

 $('.play').on('click', function(e)
     e.preventDefault();
     var cassette = "/audio/" + $( this ).data('audio') + ".ogg";
     cassettePlay(cassette);
 );
</script>

有效!

【讨论】:

以上是关于Ogg文件无法在手机上多次播放的主要内容,如果未能解决你的问题,请参考以下文章

如何将exe格式文件当中的视频在手机上播放出来

.ogg 视频无法在 Firefox 中播放

无法运行播放通过 cx_Freeze 编译的 OGG 文件的 Pygame 脚本

audio元素和video元素在ios和andriod中无法自动播放的情况下,怎么应对?

MediaPlayerElement 不在 PC 上播放声音,但在手机上播放

无法在 Android 上播放音频(ffpyplayer) - buildozer