2013-05-14 7 views
7

Ho una configurazione jPlayer di base che riproduce un file audio (150 MB) da AWS S3. Il mio setup è fondamentalmente simile a questo.Quale evento jPlayer indica la possibilità di iniziare a giocare?

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

mia comprensione dal HTML5 audio spec e this SO question è che l'evento canplay designa il punto in cui l'audio dovrebbe iniziare a giocare.

Tuttavia, quando eseguo il codice sopra (con una cache del browser vuota), ottengo il seguente registro.

player ready 
progress 1 
progress 2 
progress 3 
progress 4 
canplay 
seeking 
playing 
progress 5 
... 
progress 888 
seeked 
progress 889 
... 
progress 896 

sento solo di riprodurre file audio dopo l'evento seeked. Questo evento si verifica a lungo (minuti) dopo l'evento canplay.

È questo comportamento previsto o sto facendo qualcosa di sbagliato? Inoltre, jPlayer segue fedelmente le specifiche del tag HTML5 <audio>?

Modifica: In caso ti stavi chiedendo, AWS S3 accetta le richieste di intervallo di byte.

+0

non viene "cercato" per quando l'utente utilizza il widget di scrubber? forse si spara una volta alla fine del download o della riproduzione? – tim

+0

Non sono sicuro di cosa sia il "widget di scrubber"? –

+0

puoi provare a registrare anche 'canplaythrough'? sembra che stia aspettando l'intero caricamento del file – chickpeas

risposta

1

Credo che questo sia il problema potrebbe essere: return $player.jPlayer('play', 1234); si sta chiedendo al giocatore di iniziare a giocare una volta che la media è ricercabile a quel punto cercare solo

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

più dettagli qui http://www.jplayer.org/latest/developer-guide/#jPlayer-play la piccola nota sotto il parametro, non è stato facile trovarla

+0

Ma '1234' è l'ora selezionata dall'utente. Se non riesco a giocare a quel punto, non è un bene per me. –

+0

controlla se aws supporta Accept-Ranges, in firebug vedi se la risposta del tuo server include gli Accept-Ranges nella sua intestazione. – chickpeas

+0

Lo fa. L'ho controllato prima. Lo aggiungerò alla domanda ora che ci penso. –

0

Un esempio che sto usando in dorsale:

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