播放器启动后,Youtube API调用播放器功能

时间:2012-07-02 01:34:19

标签: javascript youtube youtube-api

这是我第一次使用youtube api,我发现很难理解文档。基本上我在页面上有多个视频,当你点击它时,它会弹出一个灯箱并播放正确的视频。所有这一切都很好。

客户现在希望所有视频在开始时自动静音,一旦完成视频,他们希望框架跳到正确的位置。

如果我使用youtube iframe api,我似乎根本无法更新videoId。以下是我的代码:

var player;
function onYouTubePlayerAPIReady() {
    player = new YT.Player('player', {
        height: '323',
        width: '576',
        videoId: 'Fy7Li0dMRSY',
        events: {
            'onReady': onPlayerReady,
            'onStateChange': onPlayerStateChange
        }
    });
}

function onPlayerReady(event) {
    event.target.mute(); // this does not do anything
    event.target.playVideo();
}

var done = false;
function onPlayerStateChange(event) {
    if (event.data == YT.PlayerState.PLAYING && !done) {
        //setTimeout(stopVideo, 6000);
        done = true;
    }
}
function stopVideo() {
    player.stopVideo();
}


function loadVid(vidID, title){
    // loads youtube video with video title & youtube video ID
    $('.lightbox .title').html(title);
    $('.lightbox iframe').prop('src','https://www.youtube.com/embed/'+vidID+'?rel=0&wmode=transparent&enablejsapi=1');  
    //player.mute() does not work here  
    showLightbox(); 
}

我的问题是尝试调用播放器函数在loadVid函数内部静音,它会抛出一个错误(任何函数抛出相同的错误),我无法弄清楚如何使用播放器等函数。

错误是player.stopVideo不是函数

那么我怎样才能在开始时静音视频?将它添加到onPlayerReady也不起作用。

2 个答案:

答案 0 :(得分:1)

移动event.target.mute();像这样的onPlayerStateChange函数:

var done = false;
function onPlayerStateChange(event) {
    event.target.mute();
    if (event.data == YT.PlayerState.PLAYING && !done) {
        //setTimeout(stopVideo, 6000);
        done = true;
    }
}

答案 1 :(得分:0)

当您在页面上有多个视频时,您仍然需要为每个视频调用YouTubePlayerAPIReady。您可以同时将所有玩家处理程序包装在那里,但根据您的操作方式,这是不可能的。相反,你必须想办法欺骗API。在这里查看我的答案loading multiple video players with youtube api