2013-05-14 13 views
7

Tôi có một thiết lập jPlayer cơ bản để phát một tệp âm thanh (150MB) từ AWS S3. Thiết lập của tôi về cơ bản trông như thế này.Sự kiện jPlayer nào chỉ định khả năng bắt đầu chơi?

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

hiểu biết của tôi từ HTML5 audio specthis SO question là sự kiện canplay chỉ rõ những điểm mà tại đó các âm thanh nên bắt đầu chơi.

Tuy nhiên, khi tôi chạy mã ở trên (với bộ nhớ cache của trình duyệt trống), tôi nhận được nhật ký sau.

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

Tôi chỉ nghe thấy âm thanh phát sau sự kiện seeked. Sự kiện này diễn ra trong một thời gian dài (phút) sau sự kiện canplay.

Hành vi mong đợi này hay tôi đang làm điều gì đó sai? Ngoài ra, jPlayer có tuân thủ thông số thẻ HTML5 <audio> trung thực ở đây không?

Chỉnh sửa: Trong trường hợp bạn đang băn khoăn, AWS S3 không chấp nhận yêu cầu Byte-Range.

+0

không phải là 'đã tìm kiếm' khi người dùng sử dụng tiện ích con lừa? có lẽ nó cháy một lần ở phần cuối của tải xuống hoặc giờ chơi? – tim

+0

Tôi không chắc chắn "tiện ích lọc" là gì? –

+0

bạn có thể thử đăng nhập 'canplaythrough' không? có vẻ như nó chờ đợi toàn bộ tập tin để tải – chickpeas

Trả lời

1

Tôi nghĩ rằng đây là vấn đề có thể là: return $player.jPlayer('play', 1234); bạn đang yêu cầu các cầu thủ để bắt đầu chơi một lần giới truyền thông là seekable đến thời điểm mà cố gắng chỉ

return $player.jPlayer('play'); hoặc return $player.jPlayer('play', 5);

biết thêm chi tiết ở đây http://www.jplayer.org/latest/developer-guide/#jPlayer-play sự ghi chú nhỏ theo thông số, không dễ dàng tìm thấy nó

+0

Nhưng '1234' là thời gian mà người dùng đã chọn. Nếu tôi không thể chơi điểm đó hơn là không tốt với tôi. –

+0

kiểm tra xem aws có hỗ trợ Accept-Ranges hay không, trong firebug xem phản hồi của máy chủ của bạn có bao gồm Accept-Ranges trong tiêu đề của nó hay không. – chickpeas

+0

. Tôi đã kiểm tra điều đó trước đây. Tôi sẽ thêm nó vào câu hỏi bây giờ mà tôi nghĩ về nó. –

0

Ví dụ tôi đang sử dụng trong xương sống:

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