效果图
文件目录的布局
webvtt.vtt 文件设置在各个时间段显示的详细文字,
html中通过在video中创建track元素引入字幕文件
css中可以通过伪元素设置字幕样式
html全部代码
<!DOCTYPE html>
<html>
<head>
<meta name='viewport' content='width=device-width,initial-scale=1'/>
<title>video_play</title>
<style>
video{
width:100%;
height:30vh;
}
video::cue{
background-color: transparent;
color:black;
text-shadow:1px 1px 2px red;
font-size:40px;
}
video::cue(b){
color:yellow;
}
div{
display: inline-block;
width:100%;
line-height:40px;
text-align:center;
background-color: green;
}
input[type='button']{
display: inline-block;
padding:10px 10px;
background-color: black;
color:white;
border:none;
}
</style>
</head>
<body>
<video width="100%" poster="./coverimg.jpg">
<!-- 指定视频格式和视频地址 -->
<source type="video/mp4" src="http://f6.c.hjfile.cn/qiniu/classzt/20160803/90614_video_2.mp4" />
<!-- 指定视频字幕 -->
<track kind="subtitles" src="webvtt.vtt" default />
</video>
<div>
<input type="button" class="playPause" value="play">
<input type="button" class="fast" value='fast(x1)'/>
<input type ='button' class='muted' value='muted'/>
</div>
<script type='text/javascript' src='./jquery.min.js'></script>
<script>
var vd = document.querySelector('video');
var play = document.querySelector('.playPause');
var fast = document.querySelector('.fast');
var muted = document.querySelector('.muted');
$('.playPause').on('click',function(){
if($('.playPause').val() =='play'){
vd.play();
$('.playPause').val('pause');
}else{
vd.pause();
$('.playPause').val('play');
}
});
$('.fast').on('click',function(){
if(vd.playbackRate>=8)vd.playbackRate=1;
else vd.playbackRate*=2;
$('.fast').val('fast(x'+vd.playbackRate+')');
});
$('.muted').on('click',function(){
vd.muted = !vd.muted;
$('.muted').val(vd.muted?'sound':'muted');
});
</script>
</body>
</html>
server.js
const path = require('path');
const fs = require('fs');
const http = require('http');
const app = http.createServer(function(req,res){
var types= {
'.html':"text/html",
'.css' :'text/css',
'.vtt' :'text/vtt'
}
var ext = path.extname(req.url);
var type =types[ext] || 'text/plain';
fs.readFile(path.resolve(__dirname,req.url),'binary',function(error,file){
if(error){
console.log(error);
res.writeHead(404);
}else{
res.writeHead(200,{'Content-Type':type});
res.write(file,'binary');
}
res.end();
});
}).listen(8080);