AWS S3 から (150MB) オーディオ ファイルを再生する基本的な jPlayer をセットアップしました。私のセットアップは基本的にこのように見えます。
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 は Byte-Range リクエストを受け入れます。