HTML 5视频或音频播放列表


Answers:


67

您可以像这样在onend事件中加载下一个剪辑

<script type="text/javascript">
var nextVideo = "path/of/next/video.mp4";
var videoPlayer = document.getElementById('videoPlayer');
videoPlayer.onended = function(){
    videoPlayer.src = nextVideo;
}
</script>
<video id="videoPlayer" src="path/of/current/video.mp4" autoplay autobuffer controls />

更多信息在这里


这不仅会播放2个文件,还会播放10个音频文件
defau1t 2012年

2
我认为您要做的就是创建一个URL数组(将其称为myArray),创建一个var i = 1,最初将nextVideo设置为myArray [0],然后在videoPlayer.src = nextVideo下;把nextVideo = myArray [i]; i ++; 这样,每次当前视频结束时,将加载下一个视频,并准备好下一个网址。PS。很抱歉完全缺乏格式,我在工作,只是想快速回答一下
DanTheMan 2014年

2
对于那些希望在第二个视频结束后循环播放第一个视频的人,可以对上述答案进行非常简单的修改:<script> var nextVideo = [“ path / of / current / video.mp4”,“ path / of / next / video.mp4“]; var curVideo = 0; var videoPlayer = document.getElementById('videoPlayer'); videoPlayer.onended = function(){if(curVideo == 0){videoPlayer.src = nextVideo [1]; curVideo = 1; } else if(curVideo == 1){videoPlayer.src = nextVideo [0]; curVideo = 0; }} </ script>小提琴:jsfiddle.net/P38aV
cameronjonesweb 2014年

13

我在这里为此创建了一个JS小提琴:

http://jsfiddle.net/Barzi/Jzs6B/9/

首先,您的HTML标记如下所示:

<video id="videoarea" controls="controls" poster="" src=""></video>

<ul id="playlist">
    <li movieurl="VideoURL1.webm" moviesposter="VideoPoster1.jpg">First video</li>
    <li movieurl="VideoURL2.webm">Second video</li>
    ...
    ...
</ul>

其次,通过JQuery库的JavaScript代码如下所示:

$(function() {
    $("#playlist li").on("click", function() {
        $("#videoarea").attr({
            "src": $(this).attr("movieurl"),
            "poster": "",
            "autoplay": "autoplay"
        })
    })
    $("#videoarea").attr({
        "src": $("#playlist li").eq(0).attr("movieurl"),
        "poster": $("#playlist li").eq(0).attr("moviesposter")
    })
})​

最后但并非最不重要的是,您的CSS:

#playlist {
    display:table;
}
#playlist li{
    cursor:pointer;
    padding:8px;
}
#playlist li:hover{
    color:blue;                        
}
#videoarea {
    float:left;
    width:640px;
    height:480px;
    margin:10px;    
    border:1px solid silver;
}​

好吧,这不是播放列表,而是手动选择曲目
Josef Vancura

6

我优化了cameronjonesweb的javascript代码。现在,您可以将片段添加到数组中。其他一切都是自动完成的。

<video autoplay controls id="Player" src="http://www.w3schools.com/html/movie.mp4" onclick="this.paused ? this.play() : this.pause();">Your browser does not support the video tag.</video>

<script>
var nextsrc = ["http://www.w3schools.com/html/movie.mp4","http://www.w3schools.com/html/mov_bbb.mp4"];
var elm = 0; var Player = document.getElementById('Player');
Player.onended = function(){
    if(++elm < nextsrc.length){         
         Player.src = nextsrc[elm]; Player.play();
    } 
}
</script>

如果U添加以下,U可以简单地列出你的阵列中的所有多媒体文件(VS具有第一个在编码为元素的一个src ATTR。if(!audioPlayer.src){ audioPlayer.src = nextSong[currentSong]; }
罗尼罗伊斯顿

此外,您还必须添加videoPlayer.play()下一首歌才能在Microsoft Edge中自动播放。
罗尼·罗斯顿

不幸的是,无法在视频元素中使用“循环”属性。
杰伊,

3

您应该看一下Popcorn.js-与Html5进行交互的JavaScript框架:http ://popcornjs.org/documentation


2

jPlayer是一个免费的开源HTML5音频和视频库,您可能会发现它很有用。它支持内置的播放列表:http : //jplayer.org/


2

尝试此解决方案,它需要一系列音轨并以播放列表样式播放所有这些音轨甚至循环播放列表。以下使用一些Jquery来缩短获取音频元素的时间。如果您不希望使用Jquery,则将javascript的第一行替换为var audio = document.getElementById("audio");,它的工作原理相同。

Javascript:

var audio = $("#audio")[0];
var tracks = {
    list: ["track_01.mp3", "track_02.mp3", "track_03.mp3"], //Put any tracks you want in this array
    index: 0,
    next: function() {
        if (this.index == this.list.length - 1) this.index = 0;
        else {
            this.index += 1;
        }
    },
    play: function() {
        return this.list[this.index];
    }
}

audio.onended = function() {
    tracks.next();
    audio.src = tracks.play();
    audio.load();
    audio.play();
}

audio.src = tracks.play();

HTML:

<audio id="audio" controls>
    <source src="" />
</audio>

这样一来,您就可以播放列表形式播放任意数量的歌曲。每首歌曲将在上一首歌曲播放完毕后立即开始播放。我不认为这在Internet Explorer中会起作用,但是现在该是从古老的东西继续前进的时候了!

只需将想要的任何歌曲放入阵列tracks.list,它就会依次播放所有歌曲。完成最后一首歌后,它还会循环回到第一首歌。

它比许多答案都要短,它可以根据需要分配任意数量的音轨,易于理解,并且在播放音频之前先加载音频(这样它才可以正常工作),所以我想在这里包括它。我找不到正在运行的代码段中使用的任何声音文件,但是我在Chrome上用自己的3条音轨对其进行了测试,并且可以正常运行。该onended方法可以检测ended事件,根据犬的情况,该方法也适用于除Internet Explorer之外的所有浏览器。

注意:请注意,此功能适用于音频和视频


1

无法仅使用<video><audio>标记来定义播放列表,但是可以通过多种方式对其进行控制,因此您可以使用JavaScript模拟播放列表。查看HTML5规范的4.8.7、4.8.9节(尤其是4.8.9.12)。希望大多数方法和事件都是在现代浏览器(例如Chrome和Firefox,当然是最新版本)上实现的。


1

是的,您只需将src标记指向.m3u播放列表文件即可。.m3u文件易于构建-

#hosted mp3's need absolute paths but file system links can use relative paths
http://servername.com/path/to/mp3.mp3
http://servername.com/path/to/anothermp3.mp3
/path/to/local-mp3.mp3

-----更新-----

好吧,事实证明,iPhone支持播放列表m3u文件,但包括Safari 5在内的许多其他版本都不支持。我对Android手机不确定,但我怀疑它们是否支持它,因为Chrome不支持。很抱歉提供错误信息。


3
这实际上是不正确的。HTML5规范不支持m3u播放列表文件,但是该支持中添加了一个jquery插件plugins.jquery.com/plugin-tags/m3u
huntaub,2010年

0

我对所提供的内容不满意,因此这是我使用jQuery的建议:

            <div id="playlist">
                <audio id="player" controls preload="metadata" volume="1">
                  <source src="" type="audio/mpeg">
                  Sorry, this browser doesn't support HTML 5.0
                </audio>
                <ul></ul>
            </div>

            <script>
                var folder = "audio";
                var playlist = [
                    "example1.mp3",
                    "example2.mp3"
                ];
                for (var i in playlist) {
                    jQuery('#playlist ul').append('<li>'+playlist[i]+'</li>');
                }

                var player = document.getElementById('player');
                var playing = playlist[0];
                player.src = folder + '/' + playing;

                function display(id) {
                    var list = jQuery('#playlist ul').children();
                    list.removeClass('playing');
                    jQuery(list[id]).addClass('playing');
                }

                display(0);

                player.onended = function(){
                    var ind_next = playlist.indexOf(playing) + 1;

                    if (ind_next !== 0) {
                        player.src = folder + '/' + playlist[ind_next];
                        playing = player.src;
                        display(ind_next)
                        player.play();
                    }
                }
            </script>

您只需要编辑playlist数组,就可以完成


0

要添加到当前答案中,以下是可与单独的字幕文件配合使用的视频播放列表。在播放列表的末尾,它将转到endPage

<video id="video" controls autoplay preload="metadata">
   <source src="vid1.mp4" type="mp4">
   <track id="subs" label="English" kind="subtitles" srclang="en" src="sub1.vtt" default>
</video>

<script type="text/javascript">
var endPage = "duckduckgo.com";
var playlist = [
    { 
        'file': 'vid2.mp4',
        'subtitle': 'sub2.vtt'
    },{
        'file': 'vid3.mp4',
        'subtitle': 'sub3.vtt'
    }
]
var i = 0;
var videoPlayer = document.getElementById('video');
var subtitles = document.getElementById('subs');
videoPlayer.onended = function(){
    if(i < playlist.length){
        videoPlayer.src = playlist[i].file;
        subtitles.src = playlist[i].subtitle;
        i++;
    } else {
        console.log("We are leaving")
        document.location.href = endPage;
    }
}
</script>


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.