2012-10-03 2 views
3

노래가 버퍼링 중임을 알리는 방법이 있습니까?HTML5 Audio 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 Elements 섹션의 구현에 따라 다릅니다.

타겟팅하는 브라우저가 여기에 특정 이벤트를 지원하는 경우 당신은 항상 확인할 수 있습니다 데이터를 통해 오는되지 않은 경우 http://www.w3.org/2010/05/video/mediaevents.html

그렇지 않으면, 다음, 나는 오디오 버퍼링되지 않습니다 믿고 stalled 이벤트가 발생합니다 .

데이터가 전송되는 경우 데이터가 버퍼링 될 때마다 (항상 일시 중지/재생되는 것은 아님) 실행되는 suspend 또는 progress 이벤트를 확인할 수 있어야합니다.

: 브라우저를 지원하지 않기 때문에 이러한 이벤트가 발사되지 않는 경우

, 당신은 항상 오디오 버퍼링인지 여부를 본질적으로 당신을 알려주는 타이머를 사용하여 오디오 요소의 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> 

자바 스크립트 :

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

var checkNetworkStateTimer = setInterval(function() { 
    console.log(audioElement.networkState); //2 indicates NETWORK_LOADING state 
}, 250); 
jsFiddle에 또한 17,451,515,

: 오디오가 jsFiddle에 너무 짧은 샘플입니다하지만 당신은 아이디어를 얻을로 http://jsfiddle.net/3sdhj/2/

당신은 아마 2networkState를 재현 할 수 없습니다.

이 계속 실패하면, 내가 같은 SoundJS, Buzz 또는 soundmanager2 (나는 이러한 라이브러리와 제휴 어떠한 방식으로 오전) 인기 HTML5 오디오 라이브러리와 함께 갈 것입니다.

+0

참고로이 웹 사이트는 특히 유용합니다. http://www.longtailvideo.com/html5/buffering 도서관에서 도움을 줄 수 없습니다. –

+0

@Omar Mir 나는 그 웹 사이트를 발견하지 못했습니다. 크로스 브라우저 지원을위한 좋은 발견입니다. –

+0

감사. 유감스럽게도 여러 공급 업체가 설정 한 방식으로 오디오를 버퍼링하는 사용자를 보여줄 수는 없습니다. 백분율로 버퍼링 된 양의 진행률 막대를 표시합니다. 내가 할 수있는 모든 것. –