我有一个基本的 jPlayer 设置,可以播放来自 AWS S3 的 (150MB) 音频文件。我的设置基本上是这样的。
jQuery(function() {
var $player, jPlayerDefaults, progressCount;
$player = $('<div>');
progressCount = 0;
jPlayerDefaults = {
ready: function(e) {
console.log("player ready");
$player.jPlayer('setMedia', {
mp3: 'http://s3-eu-west-1.amazonaws.com/some/file.mp3'
});
return $player.jPlayer('play', 1234);
},
seeking: function(e) {
return console.log("seeking");
},
seeked: function(e) {
return console.log("seeked");
},
canplay: function(e) {
console.log('canplay');
},
progress: function(e) {
return console.log("progress", progressCount += 1);
},
playing: function(e) {
return console.log("playing");
},
error: function(e) {
return console.log("Error loading audio.", e);
},
supplied: 'mp3',
preload: 'auto'
};
$player.jPlayer(jPlayerDefaults);
});
我对HTML5 音频规范和这个 SO 问题的理解是,canplay
事件指定了音频应该开始播放的点。
但是,当我运行上面的代码(使用空的浏览器缓存)时,我得到以下日志。
player ready
progress 1
progress 2
progress 3
progress 4
canplay
seeking
playing
progress 5
...
progress 888
seeked
progress 889
...
progress 896
我只听到活动结束后播放的音频seeked
。此事件在事件发生后很长时间(分钟)canplay
发生。
这是预期的行为还是我做错了什么?另外,jPlayer 是否忠实地遵循 HTML5<audio>
标签规范?
编辑:如果您想知道,AWS S3 确实接受字节范围请求。