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