Возможно ли завершение буфера на Youtube - PullRequest
7 голосов
/ 21 июля 2011

Можно ли определить завершение буферизации YouTube через JavaScript? Здесь http://code.google.com/intl/de-DE/apis/youtube/js_api_reference.html много методов, но ни у кого нет события, которое говорит «закончено с буферизацией».

Ответы [ 2 ]

1 голос
/ 25 апреля 2013
var ytplayer;

function onYouTubePlayerReady(playerId) {
    ytplayer = document.getElementById("myytplayer");
    checkBuffer();
}

function checkBuffer(){
    if(ytplayer.getVideoBytesLoaded() == ytplayer.getVideoBytesTotal()){
        alert('Buffer Complete!');
    }else{
        var t = setTimeout(function(){
            Editor.split();
        },1000);
    }
}
0 голосов
/ 13 августа 2018

Я знаю, что этот вопрос устарел, но для некоторых он все еще может помочь:

Видео YouTube может находиться в одном из 6 состояний:

  • -1 - не начато
  • 0 - закончено
  • 1 - воспроизведение
  • 2 - приостановлено
  • 3 - буферизация
  • 5 - просмотр видео

Когда это состояние изменяется (то есть когда видео прекращает буферизацию и входит в состояние «приостановлено» или «воспроизводится»), запускается событие «onStateChange».Итак, следите за предыдущим состоянием и новым состоянием.Если предыдущее состояние «буферизация», а новое состояние «завершено», «воспроизводится» или «приостановлено», это означает, что видео завершило буферизацию.

Вот пример:

<html>
<body>
  <div id="player"></div>
  <script>
    var player;
    var lastState;

    var tag = document.createElement('script');

    tag.src = "https://www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    var player;
    function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
            height: '390',
            width: '640',
            videoId: 'M7lc1UVf-VE',
            events: {
                'onStateChange': onPlayerStateChange
            }
        });
    }


    function onPlayerStateChange(event) {
        if (lastState == YT.PlayerState.BUFFERING &&
            (event.data == YT.PlayerState.PLAYING || event.data == YT.PlayerState.PAUSED)) {
            alert('Buffering has completed!');
        }
        lastState = event.data;
    }
  </script>
</body>
</html>
...