在移动浏览器上播放 HTML5 音频文件时出现延迟
Delay in playing HTML5 audio file on mobile browsers
我正在制作一个网络应用程序,我需要在单击按钮时添加简短的声音。
该文件是 mp3 格式,大小约为 24kb,我不想使用 JavaScript 来创建元素,所以我将其添加到 DOM 并使用 CSS 隐藏它,我还添加了 preload="auto",所以它与 DOM 一起加载
<audio id="click" preload style="display:none;">
<source src="sound/click.mp3" type="audio/mp3">
</audio>
在 JavaScript 中,我有类似的东西:
var clickSound = $('#click')[0];
然后在一个监听甚至单击我拥有的按钮的函数中:
function(){
clickSound.play();
}
这在我的电脑(Firefox、Chrome(上工作正常,但在移动设备上单击触发按钮后,它会等待大约 3 秒才能第一次播放,现在会在第一次延迟播放后立即播放。
更新:
我注意到即使我像这样 http://example.com/sound/click.mp3 导航到手机上的 MP3 文件并单击播放,它仍然会延迟,似乎必须缓冲。
无论如何,围绕这个问题?
完整示例:
这是一个用于移动测试的jsFiddle。
var clickSound = document.getElementById('click');
var play = document.getElementById('play');
play.addEventListener('click', function() {
clickSound.play();
}, false);
<audio id="click" preload>
<source src="http://scriveit.com/sound/click.mp3" type="audio/mp3">
</audio>
<input id="play" type="button" value="play sound">
对于较小的音频文件,一种方法是将文件预加载为 blob:
<button>play</button>
<audio></audio>
<script>
var xhr = new XMLHttpRequest();
xhr.open('GET', 'click.mp3', true);
xhr.responseType = 'blob';
var audio = document.querySelector('audio');
xhr.onload = function () {
audio.src = URL.createObjectURL(xhr.response);
};
xhr.send();
document.querySelector('button').onclick = function () {
audio.play();
};
</script>
请注意,这需要 XHR2 (http://caniuse.com/#feat=xhr2( 和 Blob URL (http://caniuse.com/#feat=bloburls(,并且此处适用相同的源策略。此外,应确保文件与一些强缓存标头一起发送,以防止客户端在每个请求时重新加载文件。
编辑:另一种方法是使用数据URL(见 http://jsfiddle.net/apo299od/(:
<button>play</button>
<audio></audio>
<script>
var audio = document.querySelector('audio');
audio.src = 'data:audio/mp3;base64,SUQzBAAAAAA...';
document.querySelector('button').onclick = function () {
audio.play();
};
</script>
这里的缺点是它更难维护,并且会使您的响应大小膨胀 33%。
相关文章:
- 在webView上加载本地存储的文件时延迟
- 如何使用谷歌页面速度CSS加载脚本延迟多个CSS文件
- 色盒延迟打开;锁定“;当加载外部javascript文件时
- 如何包含多个JS文件-延迟加载javascript
- 在JS文件中设置延迟以调用JS文件
- angularjs ng-include中html文件的延迟包含
- 延迟加载 jquest 和客户.js文件(使用谷歌片段)
- 使用 jQuery 延迟 .net 文件上传
- 在移动浏览器上播放 HTML5 音频文件时出现延迟
- 对文件的时间/延迟进行基准测试
- 如何延迟上传文件以进行本地开发的速度
- 如何延迟播放HTML5音频,但忽略加载音频文件的延迟
- 远程文件上传延迟器测试
- 延迟加载css文件
- 在javascript for html文件中触发具有可接受延迟的事件
- 延迟javascript函数,直到文件上传到asp页面之后
- 如何编制文档.在延迟文件之后再写.再写
- 如何避免延迟播放wav文件在JS
- 延迟解析JavaScript文件
- 如何读取一行与node.js或javascript的文件延迟,而不是在非阻塞行为