HTML 5 视频或音频播放列表

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

我可以使用

<video>
<audio>
标签来播放播放列表并控制它们吗?

我的目标是知道视频/歌曲何时播放完毕,然后播放下一个视频/歌曲并更改其音量。

javascript html audio video
13个回答
70
投票

您可以像这样在 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 />

更多信息这里


14
投票

我为此创建了一个 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;
}​

8
投票

我稍微优化了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 + 1){         
         Player.src = nextsrc[elm-1]; Player.play();
    } 
}
</script>

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 个音轨对其进行了测试,它可以工作。根据 caniuse 的说法,检测

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

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

嗯,事实证明,播放列表 m3u 文件 在 iPhone 上受支持,但在其他很多平台上不支持,包括 Safari 5,这有点令人难过。我不确定 Android 手机是否支持,但我怀疑它们是否支持它,因为 Chrome 不支持。抱歉造成错误信息。


0
投票

<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
投票

<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>



0
投票

像这样:

https://stackoverflow.com/a/2880950/6839331


0
投票

我想做类似的事情,但不是 mp3 曲目,而是将其作为音乐广播流(因为它们是流,所以没有持续时间,因为它们不会结束)

流将播放 30 分钟,然后转到下一个流并播放 30 分钟,依此类推

你们中的一位聪明人可以告诉我如何修改代码来做到这一点(或者在适当的情况下提出新代码)

我确实了解 javascript 编码,但也许(这是可能)有足够的知识来遵循它并从工作示例中弄清楚它是如何工作的

非常感谢任何帮助

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>



-1
投票
http://www.jezra.net/projects/pageplayer

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