2013-05-14 1 views
7

J'ai une configuration jPlayer de base qui lit un fichier audio (150MB) à partir d'AWS S3. Ma configuration ressemble à ceci.Quel événement jPlayer désigne la possibilité de commencer à jouer?

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); 
    }); 

Ma compréhension de la HTML5 audio spec et this SO question est que l'événement canplay désigne le point auquel l'audio doit commencer à jouer.

Toutefois, lorsque j'exécute le code ci-dessus (avec un cache de navigateur vide), j'obtiens le journal suivant. Je n'entends la lecture audio qu'après l'événement seeked. Cet événement se produit longtemps (minutes) après l'événement canplay.

Est-ce que ce comportement est attendu ou est-ce que je fais quelque chose de mal? De plus, est-ce que jPlayer suit fidèlement la spécification de tag HTML5 <audio> ici?

Modifier: Incase vous vous demandiez, AWS S3 accepte les demandes de plage d'octets.

+0

n'est pas "cherché" pour quand l'utilisateur utilise le widget scrubber? peut-être qu'il se déclenche une fois à la fin du téléchargement ou de la récréation? – tim

+0

Je ne suis pas sûr de ce qu'est le "widget scrubber"? –

+0

pouvez-vous essayer de vous connecter aussi 'canplaythrough'? il semble que l'on attende que le fichier entier se charge – chickpeas

Répondre

1

Je pense que c'est le problème pourrait être: return $player.jPlayer('play', 1234); vous demandez au joueur de commencer à jouer une fois les médias est adressable à ce moment-là juste essayer

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

plus de détails ici http://www.jplayer.org/latest/developer-guide/#jPlayer-play la petite note sous le paramètre, il n'a pas été facile de le trouver

+0

Mais «1234» est l'heure que l'utilisateur a sélectionnée. Si je ne peux pas jouer sur ce point, ce n'est pas bon pour moi. –

+0

vérifiez si aws supporte Accept-Ranges, dans firebug voir si la réponse de votre serveur inclut les Accept-Ranges dans son en-tête. – chickpeas

+0

C'est le cas. J'ai vérifié ça avant. Je vais l'ajouter à la question maintenant que j'y pense. –

0

Un exemple que j'utilise dans backbone:

$(this.$el.jPlayer()).bind($.jPlayer.event.canplay, _.bind(function (event) { 
    that.doCanPlay(); 
}); 
Questions connexes