如何在最后一帧暂停嵌入的youtube视频?

如何在最后一帧暂停嵌入的youtube视频?,youtube,youtube-api,youtube-javascript-api,Youtube,Youtube Api,Youtube Javascript Api,在播放嵌入式youtube视频时,我不希望在播放完成后显示分辨率较差的缩略图。相反,我想要最后一帧的高分辨率图像。这可能吗 我可以在最后一帧暂停,或者有办法创建最后一帧的高分辨率缩略图?您可以使用YouTube播放器API检测播放何时结束,并在此时执行一些DOM操作,以调出播放器并调出指向某个视频缩略图的img标记。不过,视频中最后一帧通常不会有缩略图,因此您必须选择其他缩略图 如果您只想禁用视频结束时显示的相关视频,可以使用player参数,但这样会留下一个黑屏。视频播放器在调用状态为YT.P

在播放嵌入式youtube视频时,我不希望在播放完成后显示分辨率较差的缩略图。相反,我想要最后一帧的高分辨率图像。这可能吗


我可以在最后一帧暂停,或者有办法创建最后一帧的高分辨率缩略图?

您可以使用YouTube播放器API检测播放何时结束,并在此时执行一些DOM操作,以调出播放器并调出指向某个视频缩略图的
img
标记。不过,视频中最后一帧通常不会有缩略图,因此您必须选择其他缩略图


如果您只想禁用视频结束时显示的相关视频,可以使用player参数,但这样会留下一个黑屏。

视频播放器在调用状态为YT.PlayerState.end的回调之前,会发出状态为YT.PlayerState.end的回调“onStateChange”,你可以在这里试试


我也在做同样的事情。我只是显示一个覆盖层,用“回放”按钮覆盖视频,但它仍然出现在视频的末尾,然后覆盖层出现(观察到一些小故障)

我遇到了同样的问题,在花了很多时间玩它之后,对我来说最好的解决方案是在视频结束前暂停几秒钟,因此,将其保持在该框架上。大概是这样的:

var player;

      function onYouTubePlayerAPIReady() {
        player = new YT.Player('player', {
          playerVars: { 'autoplay': 1, 'controls': 0,'loop': 1, 'showinfo': 0, 'disablekb': 1, 'version': 3, 'vq': 'large', 'wmode':'opaque','rel': 0 },
          videoId: 'YOURVIDEOID',
          events: {
            'onReady': onPlayerReady,
            'onStateChange': onStateChange,
            'onytplayerStateChange': onStateChange }

        });

      }

    var done = false;
    function onStateChange(event){
        var videoDuration = player.getDuration();
        if (event.data == YT.PlayerState.PLAYING && !done) {
            // pause 0.1 seconds before the end
            setTimeout(pauseVideo, (videoDuration-0.1)*1000);
            done = true;
        }
    }

    function pauseVideo() {
        player.pauseVideo();
    }

视频开始后(我们使用onStateChange捕获),我们可以从YouTube播放器API(使用Player.getDuration)获取视频持续时间,然后使用setInterval将暂停视频的函数计时到结束前0.1秒(或我们选择的任何值)。

在遇到这个问题后,我也以这个结束,到目前为止,这对我来说一直都很有效:

var player;
var curTimer;
function onYouTubeIframeAPIReady() {
    player = new YT.Player('player', {
                    videoId: 'The Video ID',
                    playerVars: { 'rel':0, 'enablejsapi':1, 'autohide':1, 'wmode':'opaque'}
                });
    player.addEventListener('onReady', 'onPlayerReady');
    player.addEventListener('onStateChange', 'onPlayerStateChange');
}
function onPlayerStateChange(event) {
    var videoDuration = event.target.getDuration();
    var curTime = event.target.getCurrentTime();
    if ( curTime ) {
        /**  Video Already Started  */

        /**  Get video time remaining. */
        videoDuration = videoDuration-curTime;

        /**  Remove old 'setTimeout' function */
        removeTimeout(curTimer);
    }
    /**
        Note: The '.25' is time subtracted to stop video on last frame.
        Adjust this as needed.
    */
    /**  Add/Re-Add 'setTimeout' function with video time remaining. */
    curTimer = setTimeout(pauseVideo, (videoDuration-.25)*1000);
}
function removeTimeout(elTimer){
    /** Remove old timer */
    clearTimeout(elTimer);
}
function stopVideo() {
    player.stopVideo();
}
注释中包含解释和/或注释。

var thumb=true;
函数onStateChange(事件){
if(thumb&&event.data==YT.PlayerState.PLAYING){
拇指=假;
player.pauseVideo();
返回;
}
如果(event.data!=YT.PlayerState.end){
返回;
}
player.setPlaybackQuality('highres');
player.seekTo(player.getDuration()-1,true);
player.playVideo();
拇指=真;
}

我喜欢这种解决方案——如果有人以低分辨率观看,最后一帧可能看起来很脏。在<<代码> IMG标签中交换可以让你选择一个高质量的缩略图。这将是棘手的,但这并不考虑视频是否停止,即在播放过程中加载。