跳转至

HTML 音视频 API 参考

audio 和 video 都实现 HTMLMediaElement,共享播放、时间、音量和轨道 API。 实际能力还取决于容器、编解码器、浏览器策略、网络和设备。

基本标记

<video id="lesson" controls preload="metadata" width="720" poster="poster.jpg">
  <source src="lesson.webm" type="video/webm">
  <source src="lesson.mp4" type="video/mp4">
  <track kind="captions" src="lesson.zh-CN.vtt"
         srclang="zh-CN" label="中文字幕" default>
  <p><a href="lesson.mp4">下载视频</a>或阅读文字稿。</p>
</video>

保留原生 controls 通常最可靠;自定义播放器必须完整处理键盘、焦点、名称和状态。

常用属性

属性 类型或值 含义与注意
src URL 单一媒体地址;多个候选通常使用 source
currentSrc 只读 URL 浏览器最终选择的媒体资源
crossOrigin 字符串 跨源请求模式;需服务端 CORS 配合
preload none、metadata、auto 加载提示,不是强制要求
autoplay 布尔 受自动播放策略限制,不要默认播放声音
controls 布尔 显示浏览器原生控件
loop 布尔 播放结束后循环
muted 布尔 当前是否静音
defaultMuted 布尔 标记中的默认静音状态
volume 0 到 1 音量;部分平台不允许脚本修改
playbackRate 数值 当前播放速度
defaultPlaybackRate 数值 默认播放速度
currentTime 秒 当前播放位置;设置时触发跳转
duration 只读秒数 未知时可为 NaN,直播可为 Infinity
paused 只读布尔 是否暂停
ended 只读布尔 是否播放结束
seeking 只读布尔 是否正在跳转
readyState 只读枚举值 当前已有多少可播放数据
networkState 只读枚举值 网络加载状态
buffered 只读 TimeRanges 已缓冲时间区间,不一定连续
seekable 只读 TimeRanges 当前可跳转区间
played 只读 TimeRanges 已播放区间
error 只读对象或 null MediaError,不要向用户暴露内部细节
poster video URL 播放前海报,不是内容替代
videoWidth / videoHeight video 只读数值 视频固有像素尺寸
playsInline video 布尔 提示移动端行内播放

常用方法

方法 返回或作用 注意
play() 返回 Promise 可能因策略、权限或格式失败,必须处理拒绝
pause() 暂停播放 无返回值;状态由事件确认
load() 重新选择并加载资源 会重置当前播放流程
canPlayType(type) ""、maybe 或 probably 只是能力提示,不能保证资源成功
fastSeek(time) 快速跳转 支持有限,关键功能使用 currentTime 回退
requestPictureInPicture() 进入画中画 Promise 仅 video,受用户激活和策略限制

轨道与资源

成员或元素 用途 注意
source 提供多个格式或媒体查询候选 按顺序选择,写准确 MIME 类型
track 字幕、说明、章节或元数据 常用 WebVTT,跨源轨道需 CORS
textTracks 文本轨道列表 可控制 disabled、hidden、showing
audioTracks 音轨列表 浏览器支持不一致
videoTracks 视频轨道列表 浏览器支持不一致

关键事件

事件 含义 常见用途
loadstart 开始查找资源 显示初始加载状态
loadedmetadata 元数据可用 初始化时长、尺寸和进度
loadeddata 当前帧数据可用 准备预览画面
canplay / canplaythrough 可播放或估计可连续播放 后者只是浏览器估计
play / playing 请求播放或实际播放 同步按钮和状态文字
pause 播放暂停 同步按钮
waiting / stalled 等待数据或加载停滞 提示缓冲,不要阻塞其他操作
seeking / seeked 跳转开始或完成 更新进度控件
timeupdate 播放位置周期更新 频率不固定,不用于精密同步
durationchange 时长变化 直播或元数据更新时处理
ratechange 播放速度变化 同步速度选择器
volumechange 音量或静音变化 同步音量控件
ended 播放结束 提供重播或下一项,但不强制跳转
error 加载或解码失败 显示替代链接和可理解错误

自动播放与状态同步

const media = document.querySelector('#lesson');

try {
  await media.play();
} catch {
  // 保持原生控件可用,让用户主动开始播放。
}
  • 带声音自动播放通常会被阻止,也会干扰读屏和用户环境。
  • play() 成功解析后仍应根据媒体事件同步界面,不要只维护一份自定义状态。
  • 静音背景视频也应提供暂停方式,并尊重 prefers-reduced-motion。

安全、隐私与无障碍

  • 媒体 URL、字幕和海报可能产生跨源请求;不要在长期 URL 中暴露访问令牌。
  • 服务端负责授权、MIME 类型、范围请求、缓存和文件内容验证。
  • 视频提供校对后的字幕;必要时提供音频描述;音频提供完整文字稿。
  • 自定义进度、音量和速度控件必须支持键盘、触屏、可见焦点和状态播报。
  • 不依赖文件扩展名判断编码支持,在目标浏览器和真实网络条件下测试。

另见:事件参考、MDN HTMLMediaElement。