让多个嵌入的Youtube视频按顺序自动播放

8

有没有简单的方法来在一个页面上嵌入多个YouTube视频,让它们在页面打开时立即开始播放,并在第一个视频结束后开始播放第二个视频?

我希望像这样的方式可以运行:

<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/OdT9z-JjtJk&autoplay=1"></param><embed src="http://www.youtube.com/v/OdT9z-JjtJk&autoplay=1" type="application/x-shockwave-flash" width="425" height="350"></embed></object>
<br>
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/NlXTv5Ondgs&autoplay=2"></param><embed src="http://www.youtube.com/v/NlXTv5Ondgs&autoplay=2" type="application/x-shockwave-flash" width="425" height="350"></embed></object>

对于第一个问题,它起作用了,但对于第二个问题则不行。我想我可能需要深入了解API。有人有什么建议吗?


为什么不把所有这些视频添加到YouTube播放列表中,然后将该播放列表嵌入您的网站。当第一个视频结束时,下一个视频就会开始 :) - Patrick
7个回答

16

通过使用Youtube IFrame API,您可以轻松完成此操作。

您需要配置的唯一部分是Youtube ID数组。您可以从URL中/v/后的部分检索这些内容(如果需要,您可以修改javascript以加载URL而不是ID。我只是更喜欢这种方式)。

<div id="player"></div>
<script src="//www.youtube.com/iframe_api"></script>

<script>
    /**
     * Put your video IDs in this array
     */
    var videoIDs = [
        'OdT9z-JjtJk',
        'NlXTv5Ondgs'
    ];

    var player, currentVideoId = 0;

    function onYouTubeIframeAPIReady() {
        player = new YT.Player('player', {
            height: '350',
            width: '425',
            events: {
                'onReady': onPlayerReady,
                'onStateChange': onPlayerStateChange
            }
        });
    }

    function onPlayerReady(event) {
        event.target.loadVideoById(videoIDs[currentVideoId]);
    }

    function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.ENDED) {
            currentVideoId++;
            if (currentVideoId < videoIDs.length) {
                player.loadVideoById(videoIDs[currentVideoId]);
            }
        }
    }
</script>

好的,非常感谢您的帮助。现在有没有办法让它们显示在不同的播放器中并依次播放? - clifgray
也许我误解了确切的请求 - 你想让它们都显示在屏幕上吗?然后一个接一个地播放?这样你仍然可以看到每个缩略图/完成屏幕吗?如果是这样,那就略有不同 - 你只需要抓取所有的播放器ID作为videoIDs对象的键,并循环遍历它们。如果需要帮助,请明确你想要什么 - 我会帮忙的。 - Aaron Saray
谢谢,亚伦。是的,那正是我想做的。我想将所有玩家放在屏幕上,并循环他们。这样做的原因是让用户可以通过点击新的播放器来更改视频。 - clifgray
你对目标的表述还不够清晰。所以你想要在屏幕上有多个玩家,每个玩家在前一个停止后开始播放 - 同时你还想要点击行为。这个行为是指点击视频会停止其他视频的播放,然后进程从那里开始(即该视频之后的所有内容再次播放) - 还是说它会彻底停止自动播放? - Aaron Saray
嗨,亚伦..你能帮我一下吗?我添加了我的ID,但是一直收到错误信息。我甚至尝试上传一个单独的视频和一个单独的ID,只是为了看看我是否在错误地输入数组元素。但它仍然无法工作并显示错误。我喜欢你在这里提供的解决方案,如果我能让它工作,那就太棒了!这就是我网站上谈论的错误:floridashuttleservices.com - BlockchainDeveloper

5
这里是使用YouTube Iframe Player API的示例。
有两个单独的嵌入(player1和player2)。当player1加载完成时,视频会自动播放,并在完成后启动player2。 这里是jfiddle链接,如果您想尝试一下。 以下是代码:
<div id="player1"></div>
<div id="player2"></div>
<script>
    var tag = document.createElement('script');
    tag.src = "//www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    var player1;
    var player2;

    function onYouTubeIframeAPIReady() {
        player1 = new YT.Player('player1', {
            height: '350',
            width: '425',
            videoId: 'OdT9z-JjtJk',
            events: {
                'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
            }
        });
        player2 = new YT.Player('player2', {
            height: '350',
            width: '425',
            videoId: 'NlXTv5Ondgs'
        });
    }

    function onPlayerReady(event) {
        event.target.playVideo();
    }

    function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.ENDED) {
            player2.playVideo();
        }
    }
</script>

1

我不擅长JavaScript。但我以前有一些类似的问题。

你可以参考这里

判断第一个视频是否完成后再运行第二个。你可以设置两个函数。

<div id="player1"></div>
<br>
<object width="425" height="350"><param name="movie" id="player2-param" value="http://www.youtube.com/v/OdT9z-JjtJk"></param><embed src="http://www.youtube.com/v/OdT9z-JjtJk" type="application/x-shockwave-flash" width="425" height="350" id="player2-embed"></embed></object>

那么

function onPlayerStateChange(event) {        
            if(event.data === 0) {          
                $('#player2-param').attr('value','http://www.youtube.com/v/OdT9z-JjtJkautoplay=1');//jquery
                $('#player2-embed').attr('src','http://www.youtube.com/v/OdT9z-JjtJkautoplay=1');//jquery

            }
        }

希望这能帮到你,并写出更好的代码,谢谢。

0
<div id="player1"></div>
<div id="player2"></div>
<input type="button" value="Sustur" id="sus">
<script>
    var tag = document.createElement('script');
    tag.src = "//www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

    var player1;
    var player2;

    function onYouTubeIframeAPIReady() {
        player1 = new YT.Player('player1', {
            height: '330',
            width: '600',
            videoId: 'mbOuAKqETQY',
            events: {
                'onReady': onPlayerReady,
                    'onStateChange': onPlayerStateChange
            }
        });
        player2 = new YT.Player('player2', {
            height: '330',
            width: '600',
            videoId: 'e7mV8driAUQ'
        });
    }

    function onPlayerReady(event) {
        event.target.playVideo();
        document.getElementById("sus").onclick = function() {videoKapat()};
    }

    function onPlayerStateChange(event) {
        if (event.data == YT.PlayerState.ENDED) {
            player2.playVideo();
        }
    }
    

function videoKapat() {
  player2.stopVideo();
  player1.stopVideo();
  
}
</script>

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0

不要复杂化,简单使用 iframe

<iframe width="560" height="315" src="https://www.youtube.com/embed/nWHpU7H7Clc?playlist=b6KzNmLMW6o,qWE6g8puu98" frameborder="0" allow="autoplay; encrypted-media" style="width:900px;height:400px" autoplay="true"></iframe>  

0
使用YouTube API,并将autoplay设置为true;在YouTube上创建一个播放列表,并提供链接。

0

基于之前的示例代码,我创建了一个基本的纯JavaScript版Youtube播放器-带有播放列表。请查看Youtube Player- With playlist

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>Basic Vanilla  JavaScript Youtube Player- With playlist</title>
</head>
<body>
<div class="player" style="width: 480px;height:360px;max-width: 50%;margin: 0 auto;">
    <div id="youtube" style="width: 100%;height: 100%"></div>
    <div class="controls" style="text-align: center;margin: 0 auto;">
        <button style="padding: 10px;width: 100px;background-color: #167AC6;"
                onclick="YouTubePlayer.playPrevious()">Prev
        </button>
        <button style="padding: 10px;width: 100px;background-color: #167AC6;margin-left: 30px;"
                onclick="YouTubePlayer.playNext()">Next
        </button>
    </div>
</div>
<script src="//www.youtube.com/iframe_api"></script>
<script>
    var YouTubePlayer = {
        current: 0,
        player: null,
        /**
         * Tracks ids here...
         */
        videos: [
            'vQMnaDNw5FQ',
            'Dp6lbdoprZ0',
            'OulN7vTDq1I'
        ],
        currentlyPlaying:function(){
            console.info('Current Track id', YouTubePlayer.videos[YouTubePlayer.current]);
            return YouTubePlayer.videos[YouTubePlayer.current];
        },
        playNext: function () {
            YouTubePlayer.increaseTrack()
            if (YouTubePlayer.player) {
                YouTubePlayer.currentlyPlaying();
                YouTubePlayer.player.loadVideoById(YouTubePlayer.videos[YouTubePlayer.current]);
            } else {
                alert('Please Wait! Player is loading');
            }
        },
        playPrevious: function () {
            YouTubePlayer.decreaseTrack()
            if (YouTubePlayer.player) {
                YouTubePlayer.currentlyPlaying();
                YouTubePlayer.player.loadVideoById(YouTubePlayer.videos[YouTubePlayer.current]);
            } else {
                alert('Please Wait! Player is loading');
            }

        },
        increaseTrack: function () {
            YouTubePlayer.current = YouTubePlayer.current + 1;
            if (YouTubePlayer.current >= YouTubePlayer.videos.length) {
                YouTubePlayer.current = 0;
            }
        },
        decreaseTrack: function () {
            YouTubePlayer.current = Math.max(YouTubePlayer.current - 1, 0);
        },
        onReady: function (event) {
            event.target.loadVideoById(YouTubePlayer.videos[YouTubePlayer.current]);
        },
        onStateChange: function (event) {
            if (event.data == YT.PlayerState.ENDED) {
                YouTubePlayer.playNext();
            }
        }
    }
    function onYouTubeIframeAPIReady() {
        YouTubePlayer.player = new YT.Player('youtube', {
            height: '350',
            width: '425',
            events: {
                'onReady': YouTubePlayer.onReady,
                'onStateChange': YouTubePlayer.onStateChange
            }
        });
    }
</script>
</body>
</html>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接