视频
在HTML5 Web中我们可以很方便的使用原生API来操作视频文件。
示例
播放视频
首先来看一下视频的例子
<video width="640" height="480" poster="video.jpg" controls autoplay preload loop tabindex="0">
<source src="video.webm" type="video/webm">
<source src="video.ogv" type="video/ogg">
<source src="video.mp4" type="video/mp4">
<track src="video.vtt" kind="subtitles" srclang="en"
label="English" default>
</video>
<video>标签的属性:
- width:视频的宽度
- height: 视频的高度
- poster:视频的替代图片,指定在视频加载完之前显示的图片
- controls:是否适用原生的视频控制UI
- preload:是否预加载视频
- autoplay:是否自动播放视频
- loop:是否循环播放
- tabindex:是否适用键盘控制播放
<video>标签的嵌套标签:
- <source>:视频文件地址描述标签,指明地址与格式
- <track>:视频信息描述标签
使用CSS与JavaScript增强视频的展现
<video>标签和其它HTML元素一样,可以通过为其附加事件,如拖动、鼠标、焦点事件等,来处理相关操作。同时也能使用常规的css规则来定制视频的样式
比如下面的代码为video附加一个canplay的事件
video.addEventListener("canplay", function(e) {
this.volume = 0.6;
this.currentTime = 1;
this.play();
}, false);
视频的属性,方法以及事件: 属性: * currentTime:当前播放的时间 * volume:当前的音量 * muted:返回视频是否应该被静音 * playbackRate: 播放速度 * currentSrc:当前播放视频的地址 * videoWidth & videoHeight:视频的宽和高
方法:
- load:重新加载视频
- play:播放
- pause: 暂停
- canPlayType:判断所给类型的视频格式是否支持
- addTextTrack:向视频添加新的文本轨道。
其他属性参照http://techbrood.com/jsref?p=dom-obj-video 事件:
- canPlaythrough:当浏览器认为可以完全播放当前视频时触发
- ended:视频结束时触发
- error:视频播放出错时触发
- playing:视频播放时触发(刚开始播放或者暂停后再播放)
- progress:加载视频时触发
- waiting:一个操作在等另一个操作时触发
- loadedmetadata:当浏览器加载完元数据时触发
其他具体事件可参看https://developer.mozilla.org/zh-CN/docs/Web/Guide/Events/Media_events
与其他标签配合增强功能
canvas
使用canvas可以很方便的在视频里导出导入图片。比如截屏功能可以这样实现:
function grabScreenshot() {
var canvas = document.createElement("canvas"),
ctx = canvas.getContext("2d");
ctx.drawImage(video, 0, 0, videoWidth, videoHeight);
var img = new Image();
img.src = canvas.toDataURL("image/png");
img.width = video.width;
container.appendChild(img);
}
SVG
使用SVG为视频添加蒙层,比如:
<svg id='image' version="1.1" xmlns="http://www.w3.org/2000/svg">
<defs>
<filter id="myblur">
<feGaussianBlur stdDeviation="1" />
</filter>
</defs>
</svg>
<style>
video { filter:url(#myblur); border: 2px solid red; }
</style>