我有一个基本的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 audio spec和this SO question的理解是,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确实接受了字节范围请求。
答案 0 :(得分:1)
我认为这可能是问题所在:return $player.jPlayer('play', 1234);
你要求玩家在媒体可以寻找到这一点后开始播放试试
return $player.jPlayer('play');
要么
return $player.jPlayer('play', 5);
这里有更多细节http://www.jplayer.org/latest/developer-guide/#jPlayer-play参数下的小注,找不到它
答案 1 :(得分:0)
我在骨干中使用的一个例子:
$(this.$el.jPlayer()).bind($.jPlayer.event.canplay, _.bind(function (event) {
that.doCanPlay();
});