HTML的`视频`标签

211 阅读3分钟

video 标签允许你在你的HTML页面中嵌入视频内容。

这个元素可以使用网络摄像头,通过 getUserMedia()WebRTC,或者它可以播放一个你用src 属性引用的视频源。

默认情况下,浏览器不显示这个元素的任何控制,只是显示视频。

这意味着只有在设置为自动播放的情况下才会播放音频(后面会详细介绍),而用户看不到如何停止、暂停、控制音量或在视频的特定位置跳过。

为了显示内置控件,你可以添加controls 属性。

<video src="file.mp4" controls />

这是在Chrome浏览器中的样子。

Video tag appearance

最初显示的图像是视频的第一帧。

你可以使用poster 属性显示另一张图片,这是相当普遍的需求。

<video src="video.mp4" poster="image.png" controls />

如果不存在,一旦有视频,浏览器就会显示视频的第一帧。

你可以使用type 属性来指定视频文件的MIME类型。如果没有设置,浏览器将尝试自动确定。

<video src="file.mp4" controls type="video/mp4" />

默认情况下,一个视频文件不会自动播放。添加autoplay 属性可以自动播放音频。

<video src="file.mp4" controls autoplay />

一些浏览器也需要muted 属性来自动播放。视频只有在静音的情况下才会自动播放。

<audio src="file.mp3" controls autoplay muted />

如果设置了loop 属性,就会在0:00时重新启动视频播放,否则如果不存在,视频就会在文件的末尾停止。

<video src="file.mp4" controls autoplay loop />

你可以设置widthheight 属性来设置元素所占的空间,这样浏览器就可以把它算进去,最后加载时就不会改变布局。它需要一个数字值,以像素表示。

CORS

视频受制于CORS,除非你在服务器端允许它,否则视频不能跨源播放。

如果你把这个标签放在一个网页中,什么也不会发生。没有办法启动视频,它也不能自主播放。要使视频播放,你必须添加autoplay 属性。

<video src="video.mp4" autoplay />

改变视频显示属性

你可以使用widthheight 属性为视频区域设置一个宽度和高度,以像素表示。

<video src="video.mp4" poster="image.png" controls
height="600"
width="800" />

如果不支持video ,则显示内容

video 标签被很好地支持,直到IE9,所以现在应该不需要有一个占位文本,但我们有这个选择。你只需添加一个关闭标签,并在开头和结尾标签之间插入文本。

<video src="video.mp4">Video tag not supported</video>

添加多个来源

浏览器可以实现一种视频编解码器,但不能实现另一种。也许你想使用一个较新的标准,将文件大小减半,但你仍然想支持旧的浏览器。

你可以用source 标签来做。

<video controls>
 <source src="video.mp4" type="video/mp4" />
 <source src="video.avi" type="video/avi"/>
</audio>

你可以使用CSS对控件进行样式设计,尽管这不在本介绍的范围之内。

预加载视频

如果你不设置autoplay ,规范说浏览器将只下载视频元数据(例如,找出长度),但不会下载视频本身。

你可以使用以下方法强制预加载视频

<video src="video.mp4" preload="auto" />

使用视频事件工作

我们可以使用JavaScript监听每个video 元素的事件,以创建有趣的项目和界面。有很多不同的事件可以玩。

play 事件是在视频播放开始时触发的。

document.querySelector('video').addEventListener('play', () => {
  alert('Video is playing!!!')
})

你也可以直接使用HTML元素上的on<event> 属性直接添加这个事件(和其他事件一样)。

<video src="video.mp4" controls onplay="playing()" />
const playing = () => {
  alert('Video is playing!!!')
})

这些是你可以监听的几个事件。

  • play 视频开始播放
  • pause 视频暂停了
  • ended 视频播放完毕
  • timeupdate 用户与播放的时间线进行互动,并向前/向后移动
  • volumechange 用户改变了音量

还有很多与视频加载相关的事件,你可以在MDN上找到完整的列表