哪个jPlayer事件指定了开始播放的能力?

时间:2013-05-14 13:01:32

标签: javascript html5 audio jplayer

我有一个基本的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 specthis 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确实接受了字节范围请求。

2 个答案:

答案 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();
});