--- title: slug: Web/HTML/Element/video tags: - HTML - HTML 视频播放器 - HTML5 - Web - 多媒体 - 媒体 - 播放视频 - 视频 translation_of: Web/HTML/Element/video --- {{HTMLRef}} HTML <video> 元素 用于在 HTML 或者 XHTML 文档中嵌入媒体播放器,用于支持文档内的视频播放。你也可以将 <video> 标签用于音频内容,但是 {{HTMLElement("audio")}} 元素可能在用户体验上更合适。 {{EmbedInteractiveExample("pages/tabbed/video.html", "tabbed-standard")}} 这个交互式例子的源码储存在 GitHub 仓库上,如果你想要参与到这个交互式例子的项目中来 并做出自己的一份贡献,请克隆 https://github.com/mdn/interactive-examples并发送给我们一个拉取请求 上面的例子展示了 <video> 元素的用法。和 {{htmlelement("img")}} 元素的使用类似,在 src 属性里加入一个我们需要展示的视频地址,同时也可以用其他属性来定义视频的宽度高度、是否自动或者循环播放、是否展示浏览器默认的视频控件等信息。 在 <video></video> 标签中间的内容,是针对浏览器不支持此元素时候的降级处理。 浏览器并不是都支持相同的视频格式,所以你可以在 {{htmlelement("source")}} 元素里提供多个视频源,然后浏览器将会使用它所支持的第一个源。 <video controls> <source src="myVideo.mp4" type="video/mp4"> <source src="myVideo.webm" type="video/webm"> <p>Your browser doesn't support HTML5 video. Here is a <a href="myVideo.mp4">link to the video</a> instead.</p> </video> 其他的使用注意事项: 如果你没有指定 controls 属性,那么视频不会展示浏览器自带的控件,你也可以用 JavaScript 和 {{domxref("HTMLMediaElement")}} API 来创建你自己的控件。详情请见Creating a cross-browser video player。 HTMLMediaElement 会激活许多不同的事件,以便于让你可以控制视频(和音频)内容。 你可以用 CSS 属性 {{cssxref("object-position")}} 来调整视频在元素内部的位置,它可以控制视频尺寸适应于元素外框的方式。 如果想在视频里展示字幕或者标题,你可以在 {{htmlelement("track")}} 元素和 WebVTT 格式的基础上使用 JavaScript 来实现。详情请见 Adding captions and subtitles to HTML5 video。 此外这里还有一份很棒的关于“视频和音频内容”的初学者材料,收集了很多的基本知识。 属性 就像其他的 HTML 元素一样,这个元素也同样支持全局属性。 {{htmlattrdef("autoplay")}} 如果这个 bool 数值被指定了 autoplay,视频就会开始自动播放,而且无需停止加载任何数据。 允许内容 流式内容, 包含任一 src 属性或是一个或多个 {{HTMLElement("source")}} 元素,其后紧跟流式内容 或 段落内容 , 不包括<video> 或者 {{HTMLElement("audio")}} 元素。 标记省略 无,开始标签和结束标签都必须有 允许的父级元素 任何接受流式内容,或者段落内容的元素。 规范文档 HTML5, 4.8.6 节 属性 类似于所有其它 HTML 元素,video 元素支持 全局属性。 {{htmlattrdef("autoplay")}} 布尔属性;指定后,视频会马上自动开始播放,不会停下来等着数据载入结束。 {{htmlattrdef("autobuffer")}} {{Non-standard_inline}} {{obsolete_inline}} 布尔属性;指定后,视频会自动开始缓存,即使没有设置自动播放。该属性适用于视频被认为可能会播放(比如,用户导航到专门播放视频的页面,而不是那种嵌入视频还有其它内容的页面)。视频会一直缓存到媒体缓存满。 实现备注: 虽然是 HTML5 规范的早期草案的一部分, autobuffer 属性在稍晚的版本被去掉了。 Gecko 2.0 和其它浏览器中已经移除了这个属性,而且有些浏览器中从未实现。规范定义了一个新的枚举属性, preload, 用不同的语法来取代 autobuffer 属性。 {{bug(548523)}} {{htmlattrdef("buffered")}} 这个属性可以读取到哪段时间范围内的媒体被缓存了。该属性包含了一个 {{domxref("TimeRanges")}} 对象。 {{htmlattrdef("controls")}} 加上这个属性,Gecko 会提供用户控制,允许用户控制视频的播放,包括音量,跨帧,暂停/恢复播放。 {{htmlattrdef("controlslist")}} {{experimental_inline}} 当浏览器显示自己的控件集 (例如,当指定了 Controls 属性时),Controlslist 属性将帮助浏览器选择在媒体元素上显示的控件。 允许接受的 value 有nodownload,nofullscreen和noremoteplayback 如果要禁用图片模式 (和控件),请使用disablePictureInPicture属性。 {{htmlattrdef("crossorigin")}} 该枚举属性指明抓取相关图片是否必须用到 CORS(跨域资源共享)。 支持 CORS 的资源 可在 {{HTMLElement("canvas")}} 元素中被重用,而不会被污染。允许的值如下: anonymous 跨域请求(即,使用 Origin: 的 HTTP 头)会被执行。但是不发送凭证(即,不发送 cookie, X.509 证书或者 HTTP Basic 授权)。如果服务器不提供证书给源站点 (不设置 Access-Control-Allow-Origin: HTTP 头),图片会被 污染 并且它的使用会受限。 use-credentials 跨域请求 A cross-origin request (i.e. with Origin: HTTP header) 会被执行,且凭证会被发送 (即, 发送一个 cookie,一个证书和 HTTP Basic 授权会被执行)。如果服务器不提供证书给源站点 (通过Access-Control-Allow-Credentials: HTTP 头),图像会被 污染 且它的使用会受限。 不加这个属性时,抓取资源不会走 CORS 请求 (即,不会发送 Origin: HTTP 头),保证其在 {{HTMLElement('canvas')}} 元素中使用时不会被污染。如果指定非法值,会被当作指定了枚举关键字 anonymous 一样使用。 查看 CORS 设置属性 获取更多信息。 {{htmlattrdef("currentTime")}} 读取CurentTime返回一个双精度浮点值,指示以秒为单位的媒体的当前播放位置。如果 video 尚未开始播放,则会在开始播放后返回偏移量。通过CurentTime将当前播放位置设置为给定时间,会在加载媒体时将媒体查找到该位置(从指定的位置开始播放)。 媒体正在播放的情况下,如果媒体缓冲区的数据已经过期(视频已经播放完),则 {{Glossary("user agent")}}有可能无法正常拿到数据。有些媒体可能有一个不以 0 秒开始的媒体时间线(不是从头开始播放的),因此应该将currentTime的时间设置在其数据失效之前。{{domxref("HTMLMediaElement.getStartDate", "getStartDate()")}} 这个方法可以用来确定媒体时间线起始的坐标。 disablePictureInPicture {{experimental_inline}} 防止浏览器建议图片中的上下文菜单或在某些情况下自动请求图片中的图片。该属性可以禁用 video 元素的画中画特性,右键菜单中的 “画中画” 选项会被禁用 {{htmlattrdef("disableRemotePlayback")}} {{experimental_inline}} 一个布尔属性,用于禁用使用有线连接的设备 (HDMI、DVI 等) 的远程播放功能。无线技术 (Miracast、Chromecast、DLNA、AirPlay 等)。 在 Safari 中,您可以使用 x-webkit-airplay=“deny” 作为后盾。 {{htmlattrdef("duration")}} {{ReadOnlyInline}} 一个双精度浮点值,它指示媒体的持续时间 (总长度),以秒为单位,在媒体的时间线上。如果元素上没有媒体,或者媒体无效,则返回的值为 NaN。如果媒体没有已知终点 (例如时间未知的实时流、网络广播、来自 WebRTC 的媒体等等),那么这个值就是 Infinity。 {{htmlattrdef("height")}} 视频展示区域的高度,单位是 CSS 像素。 {{htmlattrdef("intrinsicsize")}} {{experimental_inline}} 这个属性告诉浏览器忽略图像的实际内在大小,并假装它是属性中指定的大小。具体来说,图像将在这些维度上展开,图像上的naturalWidth/naturalHeight 将返回此属性中指定的值。Explainer,examples {{htmlattrdef("loop")}} 布尔属性;指定后,会在视频结尾的地方,自动返回视频开始的地方。 {{htmlattrdef("muted")}} 布尔属性,指明了视频里的音频的默认设置。设置后,音频会初始化为静音。默认值是 false,意味着视频播放的时候音频也会播放 。 {{htmlattrdef("playsinline")}} 一个布尔属性,标志视频将被 “inline” 播放,即在元素的播放区域内。请注意,没有此属性并不意味着视频始终是全屏播放的。 {{htmlattrdef("played")}} 一个 {{domxref("TimeRanges")}} 对象,指明了视频已经播放的所有范围。 {{htmlattrdef("preload")}} 该枚举属性旨在告诉浏览器作者认为达到最佳的用户体验的方式是什么。可能是下列值之一: none: 提示作者认为用户不需要查看该视频,服务器也想要最小化访问流量;换句话说就是提示浏览器该视频不需要缓存。 metadata: 提示尽管作者认为用户不需要查看该视频,不过抓取元数据(比如:长度)还是很合理的。 auto: 用户需要这个视频优先加载;换句话说就是提示:如果需要的话,可以下载整个视频,即使用户并不一定会用它。 空字符串:也就代指 auto 值。 假如不设置,默认值就是浏览器定义的了(即,不同浏览器会选择自己的默认值),即使规范建议设置为 metadata。 使用备注: autoplay 属性优先于 preload 假如用户想自动播放视频,那么很明显浏览器需要下载视频。同时设置autoplay 和 preload属性在规范里是允许的。 规范没有强制浏览器去遵循该属性的值;这仅仅只是个提示。 {{htmlattrdef("poster")}} 一个海报帧的 URL,用于在用户播放或者跳帧之前展示。如果属性未指定,那么在第一帧可用之前什么都不会展示;之后第一帧就像海报帧一样展示。 {{htmlattrdef("src")}} 要嵌到页面的视频的 URL。可选;你也可以使用 video 块内的 {{HTMLElement("source")}} 元素来指定需要嵌到页面的视频。 {{htmlattrdef("width")}} 视频显示区域的宽度,单位是 CSS 像素。 时间偏移量目前是指定为 float 类型的值,表示偏移的秒数。 备注: HTML 5 规范中,时间偏移量值的定义还没有完成,有可能会变更。 事件 <video>元素可以触发许多不同的事件。 事件名 触发时机 {{domxref("ScriptProcessorNode.audioprocess_event","audioprocess")}}{{Deprecated_Inline}} The input buffer of a {{DOMxRef("ScriptProcessorNode")}} is ready to be processed. {{domxref("HTMLMediaElement.canplay_event", 'canplay')}} 浏览器可以播放媒体文件了,但估计没有足够的数据来支撑播放到结束,不需要停止缓存更多的内容。 {{domxref("HTMLMediaElement.canplaythrough_event", 'canplaythrough')}} 浏览器估算可以播放到结束,不需要停止缓存更多的内容。 {{domxref("OfflineAudioContext.complete_event", "complete")}} {{DOMxRef("OfflineAudioContext")}}渲染完成。 {{domxref("HTMLMediaElement.durationchange_event", 'durationchange')}} duration 属性的值改变时触发。 {{domxref("HTMLMediaElement.emptied_event", 'emptied')}} 媒体内容为空;例如,当这个 media 已经加载完成(或者部分加载完成), load() 被用来进行重新加载。 {{domxref("HTMLMediaElement.ended_event", 'ended')}} 视频停止,因为 media 已经到达结束点。 {{domxref("HTMLMediaElement.loadeddata_event", 'loadeddata')}} media 中的首帧已经加载。 例子 <!-- Simple video example --> <video src="videofile.ogg" autoplay poster="posterimage.jpg"> 抱歉,您的浏览器不支持内嵌视频,不过不用担心,你可以 <a href="videofile.ogg">下载</a> 并用你喜欢的播放器观看! </video> <!-- Video with subtitles --> <video src="foo.ogg"> <track kind="subtitles" src="foo.en.vtt" srclang="en" label="English"> <track kind="subtitles" src="foo.sv.vtt" srclang="sv" label="Svenska"> </video> 第一个例子播放一个视频,视频一收到,允许播放的时候就会立马开始播放,而不会停下来直到下载更多内容。 图片 "posterimage.jpg" 会一直展示在视频区域,直到开始播放。 第二个例子允许用户选择不同的字幕。 服务器支持 如果视频的 MIME 类型设置不正确,视频可能不会显示,或者显示包含一个 X 的灰色盒子(如果启用了 JavaScript 的话)。 如果你提供的视频是 Ogg Theora 格式的,在 Apache Web 服务器上, 你可以通过 "/etc/apache" 中的 "mime.types" 文件 或者通过在 httpd.conf 中的 “AddType 的” 配置指令,把视频文件的扩展名 (最常见的是".ogm", ".ogv", or ".ogg") 添加到 MIME 类型 "video/ogg", 来解决这个问题。 AddType video/ogg .ogm AddType video/ogg .ogv AddType video/ogg .ogg 如果你以 WebM 格式提供视频,在 Apache Web 服务器上,你可以通过 "/etc/apache" 中的 "mime.types" 文件 或者通过在 httpd.conf 中的 “AddType 的” 配置指令,把视频文件的扩展名 (最常见的是".webm") 添加到 MIME 类型 "video/webm", 来解决这个问题。 AddType video/webm .webm 你的 web 主机可能会提供一个简单的接口来修改 MIME 类型配置,直到服务器全面升级。 DOM 接口 该元素实现了 HTMLVideoElement 接口。 浏览器兼容性 {{Compat("html.elements.video")}} 另请参阅 audio 和 video 元素支持的媒体格式 {{htmlelement("audio")}} 使用 HTML5 audio 和 video 用 canvas 操作 video nsIDOMHTMLMediaElement TinyVid - 在 HTML5 中使用 ogg 文件的例子。 video 元素 (HTML5 规范) Ogg 格式媒体文件的服务器配置 {{HTMLRef}}
HTML <video> 元素 用于在 HTML 或者 XHTML 文档中嵌入媒体播放器,用于支持文档内的视频播放。你也可以将 <video> 标签用于音频内容,但是 {{HTMLElement("audio")}} 元素可能在用户体验上更合适。
<video>
上面的例子展示了 <video> 元素的用法。和 {{htmlelement("img")}} 元素的使用类似,在 src 属性里加入一个我们需要展示的视频地址,同时也可以用其他属性来定义视频的宽度高度、是否自动或者循环播放、是否展示浏览器默认的视频控件等信息。
src
在 <video></video> 标签中间的内容,是针对浏览器不支持此元素时候的降级处理。
<video></video>
浏览器并不是都支持相同的视频格式,所以你可以在 {{htmlelement("source")}} 元素里提供多个视频源,然后浏览器将会使用它所支持的第一个源。
<video controls> <source src="myVideo.mp4" type="video/mp4"> <source src="myVideo.webm" type="video/webm"> <p>Your browser doesn't support HTML5 video. Here is a <a href="myVideo.mp4">link to the video</a> instead.</p> </video>
其他的使用注意事项:
controls
HTMLMediaElement
此外这里还有一份很棒的关于“视频和音频内容”的初学者材料,收集了很多的基本知识。
就像其他的 HTML 元素一样,这个元素也同样支持全局属性。
{{htmlattrdef("autoplay")}}
如果这个 bool 数值被指定了 autoplay,视频就会开始自动播放,而且无需停止加载任何数据。
类似于所有其它 HTML 元素,video 元素支持 全局属性。
autobuffer
preload
当浏览器显示自己的控件集 (例如,当指定了 Controls 属性时),Controlslist 属性将帮助浏览器选择在媒体元素上显示的控件。
允许接受的 value 有nodownload,nofullscreen和noremoteplayback
nodownload
nofullscreen
noremoteplayback
如果要禁用图片模式 (和控件),请使用disablePictureInPicture属性。
disablePictureInPicture
Origin:
Access-Control-Allow-Origin:
Access-Control-Allow-Credentials:
读取CurentTime返回一个双精度浮点值,指示以秒为单位的媒体的当前播放位置。如果 video 尚未开始播放,则会在开始播放后返回偏移量。通过CurentTime将当前播放位置设置为给定时间,会在加载媒体时将媒体查找到该位置(从指定的位置开始播放)。
CurentTime
媒体正在播放的情况下,如果媒体缓冲区的数据已经过期(视频已经播放完),则 {{Glossary("user agent")}}有可能无法正常拿到数据。有些媒体可能有一个不以 0 秒开始的媒体时间线(不是从头开始播放的),因此应该将currentTime的时间设置在其数据失效之前。{{domxref("HTMLMediaElement.getStartDate", "getStartDate()")}} 这个方法可以用来确定媒体时间线起始的坐标。
currentTime
防止浏览器建议图片中的上下文菜单或在某些情况下自动请求图片中的图片。该属性可以禁用 video 元素的画中画特性,右键菜单中的 “画中画” 选项会被禁用
video
在 Safari 中,您可以使用 x-webkit-airplay=“deny” 作为后盾。
这个属性告诉浏览器忽略图像的实际内在大小,并假装它是属性中指定的大小。具体来说,图像将在这些维度上展开,图像上的naturalWidth/naturalHeight 将返回此属性中指定的值。Explainer,examples
naturalWidth
naturalHeight
一个布尔属性,标志视频将被 “inline” 播放,即在元素的播放区域内。请注意,没有此属性并不意味着视频始终是全屏播放的。
假如不设置,默认值就是浏览器定义的了(即,不同浏览器会选择自己的默认值),即使规范建议设置为 metadata。
autoplay
时间偏移量目前是指定为 float 类型的值,表示偏移的秒数。
<video>元素可以触发许多不同的事件。
{{domxref("ScriptProcessorNode.audioprocess_event","audioprocess")}}{{Deprecated_Inline}}
浏览器可以播放媒体文件了,但估计没有足够的数据来支撑播放到结束,不需要停止缓存更多的内容。
duration 属性的值改变时触发。
duration
load()
<!-- Simple video example --> <video src="videofile.ogg" autoplay poster="posterimage.jpg"> 抱歉,您的浏览器不支持内嵌视频,不过不用担心,你可以 <a href="videofile.ogg">下载</a> 并用你喜欢的播放器观看! </video> <!-- Video with subtitles --> <video src="foo.ogg"> <track kind="subtitles" src="foo.en.vtt" srclang="en" label="English"> <track kind="subtitles" src="foo.sv.vtt" srclang="sv" label="Svenska"> </video>
第一个例子播放一个视频,视频一收到,允许播放的时候就会立马开始播放,而不会停下来直到下载更多内容。 图片 "posterimage.jpg" 会一直展示在视频区域,直到开始播放。
第二个例子允许用户选择不同的字幕。
如果视频的 MIME 类型设置不正确,视频可能不会显示,或者显示包含一个 X 的灰色盒子(如果启用了 JavaScript 的话)。
如果你提供的视频是 Ogg Theora 格式的,在 Apache Web 服务器上, 你可以通过 "/etc/apache" 中的 "mime.types" 文件 或者通过在 httpd.conf 中的 “AddType 的” 配置指令,把视频文件的扩展名 (最常见的是".ogm", ".ogv", or ".ogg") 添加到 MIME 类型 "video/ogg", 来解决这个问题。
AddType video/ogg .ogm AddType video/ogg .ogv AddType video/ogg .ogg
如果你以 WebM 格式提供视频,在 Apache Web 服务器上,你可以通过 "/etc/apache" 中的 "mime.types" 文件 或者通过在 httpd.conf 中的 “AddType 的” 配置指令,把视频文件的扩展名 (最常见的是".webm") 添加到 MIME 类型 "video/webm", 来解决这个问题。
AddType video/webm .webm
你的 web 主机可能会提供一个简单的接口来修改 MIME 类型配置,直到服务器全面升级。
该元素实现了 HTMLVideoElement 接口。
HTMLVideoElement
{{Compat("html.elements.video")}}
nsIDOMHTMLMediaElement
{{HTMLRef}}