我可以使用<video>
或<audio>
代码播放播放列表并控制它们吗?
我的目标是知道视频/歌曲何时播放完毕,然后拍摄下一部分并更改其音量。
答案 0 :(得分:62)
您可以在第一个事件中加载下一个剪辑
<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 />
更多信息here
答案 1 :(得分:11)
我在这里创建了一个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;
}
答案 2 :(得分:4)
我从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>
答案 3 :(得分:3)
你应该看一下Popcorn.js - 一个用于与Html5交互的javascript框架:http://popcornjs.org/documentation
答案 4 :(得分:3)
jPlayer是一个免费的开源HTML5音频和视频库,您可能会发现它很有用。它支持内置的播放列表: http://jplayer.org/
答案 5 :(得分:1)
无法仅使用<video>
或<audio>
标记定义播放列表,但有一些方法可以控制它们,因此您可以使用JavaScript模拟播放列表。查看HTML5 spec的4.8.7,4.8.9(特别是4.8.9.12)。希望大多数方法和事件都在现代浏览器上实现,例如Chrome和Firefox(当然是最新版本)。
答案 6 :(得分: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没有。对于错误的信息感到抱歉。
答案 7 :(得分:0)
答案 8 :(得分: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
数组,即可完成
答案 9 :(得分:0)
尝试此解决方案,它获取一系列音轨,并以播放列表形式播放所有曲目,甚至循环播放列表。下面使用一些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以外的所有浏览器。
注意:请明确说明,这同时适用于音频和视频。
答案 10 :(得分: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>
答案 11 :(得分:0)