7

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 リクエストを受け入れます。

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 に答える