3

曲がバッファリングされていることを確認する方法はありますか?

初めて再生を押して曲が再生されるとイベントが発生しますが、イベントが発生しますが、データが十分に速く入らない場合は曲が再生されると「一時停止」しますが、イベントは発生しません。

私はもう試した:

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

データがバッファリングされているかどうかを確認して、待機するようにユーザーに指示できるようにするにはどうすればよいですか?

4

1 に答える 1

2

これは、対象のブラウザと、現在のW3C WorkingDraftHTML5仕様のMediaElementsセクションの実装によって異なります。

ターゲットにしているブラウザが特定のイベントをサポートしているかどうかは、 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>

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/

jsFiddleのサンプルではオーディオが短すぎるため、おそらくを再現することはできませんが、アイデアは得られnetworkStateます。2

それでも失敗する場合は、、などの人気のあるHTML5オーディオライブラリを使用しますSoundJSBuzzsoundmanager2はこれらのライブラリとは一切関係ありません)。

于 2012-10-04T11:54:23.040 に答える