2012-10-03 394 views
3

有什麼辦法可以讓歌曲緩衝?HTML5音頻IsBuffering?

事件是我第一次玩,當歌曲開始播放時,我收到了這些事件,但是一旦歌曲播放完畢,如果數據傳入的速度不夠快,則會「暫停」,但沒有事件觸發。

我已經試過:

audioElement.addEventListener('suspend',function(){ 
    console.log('suspended'); //Fires the first time song is being "buffered" 
}); 

audioElement.addEventListener('playing',function(){ 
    console.log('playing'); //Fires the first time the song is played. 
}); 

我怎麼去,如果被緩衝的數據,這樣我可以表明與一些指示,以等待用戶檢查?

回答

2

它取決於您的目標瀏覽器及其當前W3C工作草案HTML5規範Media Element部分的實現。

您可以隨時檢查,如果你的目標瀏覽器支持這裏的某些事件:http://www.w3.org/2010/05/video/mediaevents.html

否則,如果數據不來通過,那麼,我相信,音頻不會被緩衝和stalled事件將觸發。

如果數據正在通過,那麼您應該能夠檢查suspendprogress事件,無論數據何時被緩衝(但不一定是暫停/播放),都應該觸發這兩個事件。

如果這些事件不燒,因爲瀏覽器不支持他們,你總是可以使用一個計時器,它實際上告訴你,如果音頻緩衝或不檢查音頻元素的networkState屬性HTML:

<!DOCTYPE html> 
<html> 
    <body> 
     <audio controls="controls" id="myAudio"> 
      <source src="http://www.w3schools.com/html5/horse.ogg" type="audio/ogg"> 
      Your browser does not support the audio element. 
     </audio> 
    </body> 
</html> 

的Javascript:

var audioElement = document.getElementById('myAudio'); 

var checkNetworkStateTimer = setInterval(function() { 
    console.log(audioElement.networkState); //2 indicates NETWORK_LOADING state 
}, 250); 

也談的jsfiddle:http://jsfiddle.net/3sdhj/2/

你可能將無法重現2一個networkState作爲音頻上的jsfiddle太短樣品,不過你的想法。

如果它仍然失敗,我會去一個流行的HTML5音頻庫,如SoundJS,Buzzsoundmanager2(我絕不隸屬於這些庫)。

+0

請注意,本網站特別有用:http://www.longtailvideo.com/html5/buffering 圖書館無法提供幫助。 –

+0

@Omar Mir我沒有發現那個網站,很好找到跨瀏覽器的支持。 –

+0

謝謝。不幸的是,不同的供應商設置它的方式我不能使用任何東西來顯示我的用戶音頻緩衝。我會向他們展示一個進度條,其中緩衝量爲百分比。我所能做的 –