YouTube IFrame API loadVideoById 与 startSeconds 失败

问题描述 投票:0回答:1

我最近检测到 loadVideoById 的 startSeconds 不起作用。我看到它移动到 startSeconds 的时间,但它立即移动到之前播放过的剪辑的时间,但我测试了之前未播放的另一个剪辑 B,播放器寻求 startSeconds,如果我寻找剪辑的滑块时间B 使用 startSeconds 运行脚本时也会出现同样的失败。似乎优先移动到视频的当前位置。 我举个例子:如果剪辑在 01:48:27 停止或播放,则脚本以 startSeconds (03:46:58) 运行 播放器移动到 03:46:58,然后返回到 01:48:04 或之后不到几秒。 我认为 IFrame API 的一个新错误。

希望您尽快修复该错误,并支持将带有开始时间的剪辑添加到 YouTube 网站的播放列表中。

youtube-iframe-api
1个回答
0
投票

我刚刚遇到这个问题。我有一个页面,其中包含许多视频卡和一个“空”播放器,在用户单击卡之前一直隐藏。播放器加载单击的卡片的视频。

loadVideo
cueVideo
都有这个问题。我发现唯一有效的是
seekTo
,但视频必须已经在播放了。
cueVideo
>
seekTo
>
playVideo
忽略了
seekTo
命令。这并不理想,如果视频已经开始播放,那么在
seekTo
开始之前,它会持续一小会儿。通过将
seekTo
括起来并暂停/播放,可以将其最小化。

我使用

onStateChange
事件来监听
PLAYING
,但它还需要一个首次运行变量,否则每次脱离缓冲状态时它都会不断地寻找。为此,我向
videoLoaded 添加了一个 
player
 变量
物体。

我的空玩家对象:

function onYouTubeIframeAPIReady() {
    player = new YT.Player('video-player-iframe', {
        playerVars: {
            'playsinline': 1
        },
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        }
    });
}

选择视频时运行的我的自定义

playVideo
函数:

const playVideo = (videoID) => {
    player.videoLoaded = false;
    player.loadVideoById(videoID, startSeconds = 0);
    ....
}

和我的

onStateChange
管理员:

function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING && !player.videoLoaded) {
        player.videoLoaded = true;
        player.pauseVideo();
        player.seekTo(0);
        player.playVideo();
    }
}

搜了一下这个问题,好像已经存在很久了。

© www.soinside.com 2019 - 2024. All rights reserved.