视频
在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>