7

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

4

2 回答 2

1

我认为这可能是问题所在:return $player.jPlayer('play', 1234);您要求播放器在媒体可搜索到那时开始播放

return $player.jPlayer('play'); 或者 return $player.jPlayer('play', 5);

更多细节在这里http://www.jplayer.org/latest/developer-guide/#jPlayer-play参数下的小笔记,好不容易找到

于 2013-05-21T09:03:55.307 回答
0

我在骨干网中使用的一个例子:

$(this.$el.jPlayer()).bind($.jPlayer.event.canplay, _.bind(function (event) {
    that.doCanPlay();
});
于 2013-10-09T22:58:13.623 回答