前段时间写了一个基于 html5 video 的视频播放器,从起初的对其不了解,然后到能够写一个基本完善的自定义播放器。在这个过程中,对 video 标签的属性,方法,事件有了个全面的认识。下面分类列出来一下。

# <video> 标签的属性

  • src :视频的属性
  • poster:视频封面,没有播放时显示的图片
  • preload:预加载
  • autoplay:自动播放
  • loop:循环播放
  • controls:浏览器自带的控制条
  • width:视频宽度
  • height:视频高度

# html 代码

<video id="media" src="http://www.sundxs.com/test.mp4" controls width="400px" heigt="400px"></video>  
  //audio和video都可以通过JS获取对象,JS通过id获取video和audio的对象

# 获取 video 对象

Media = document.getElementById("media");

# Media 方法和属性:

HTMLVideoElement 和 HTMLAudioElement 均继承自 HTMLMediaElement

  • Media.error; //null: 正常
  • Media.error.code; //1. 用户终止 2. 网络错误 3. 解码错误 4.URL 无效

***// 网络状态 ***

  • Media.currentSrc; // 返回当前资源的 URL
  • Media.src = value; // 返回或设置当前资源的 URL
  • Media.canPlayType (type); // 是否能播放某种格式的资源
  • Media.networkState; //0. 此元素未初始化 1. 正常但没有使用网络 2. 正在下载数据 3. 没有找到资源
  • Media.load (); // 重新加载 src 指定的资源
  • Media.buffered; // 返回已缓冲区域,TimeRanges
  • Media.preload; //none: 不预载 metadata: 预载资源信息 auto:

***// 准备状态 ***

  • Media.readyState;//1:HAVE_NOTHING 2:HAVE_METADATA 3.HAVE_CURRENT_DATA 4.HAVE_FUTURE_DATA 5.HAVE_ENOUGH_DATA
  • Media.seeking; // 是否正在 seeking

***// 回放状态 ***

  • Media.currentTime = value; // 当前播放的位置,赋值可改变位置
  • Media.startTime; // 一般为 0,如果为流媒体或者不从 0 开始的资源,则不为 0
  • Media.duration; // 当前资源长度 流返回无限
  • Media.paused; // 是否暂停
  • Media.defaultPlaybackRate = value;// 默认的回放速度,可以设置
  • Media.playbackRate = value;// 当前播放速度,设置后马上改变
  • Media.played; // 返回已经播放的区域,TimeRanges,关于此对象见下文
  • Media.seekable; // 返回可以 seek 的区域 TimeRanges
  • Media.ended; // 是否结束
  • Media.autoPlay; // 是否自动播放
  • Media.loop; // 是否循环播放
  • Media.play (); // 播放
  • Media.pause (); // 暂停

*** // 视频控制 ***

  • Media.controls;// 是否有默认控制条
  • Media.volume = value; // 音量
  • Media.muted = value; // 静音

***TimeRanges (区域) 对象 ***

  • TimeRanges.length; // 区域段数
  • TimeRanges.start (index) // 第 index 段区域的开始位置
  • TimeRanges.end (index) // 第 index 段区域的结束位置

// 相关事件

var eventTester = function(e){
     Media.addEventListener(e,function(){
         console.log((new Date()).getTime(),e)
     },false);
 }
  • eventTester ("loadstart"); // 客户端开始请求数据
  • eventTester ("progress"); // 客户端正在请求数据
  • eventTester ("suspend"); // 延迟下载
  • eventTester ("abort"); // 客户端主动终止下载(不是因为错误引起)
  • eventTester ("loadstart"); // 客户端开始请求数据
  • eventTester ("progress"); // 客户端正在请求数据
  • eventTester ("suspend"); // 延迟下载
  • eventTester ("abort"); // 客户端主动终止下载(不是因为错误引起),
  • eventTester ("error"); // 请求数据时遇到错误
  • eventTester ("stalled"); // 网速失速
  • eventTester ("play"); //play () 和 autoplay 开始播放时触发
  • eventTester ("pause"); //pause () 触发
  • eventTester ("loadedmetadata"); // 成功获取资源长度
  • eventTester("loadeddata"); //
  • eventTester ("waiting"); // 等待数据,并非错误
  • eventTester ("playing"); // 开始回放
  • eventTester ("canplay"); // 可以播放,但中途可能因为加载而暂停
  • eventTester ("canplaythrough"); // 可以播放,歌曲全部加载完毕
  • eventTester ("seeking"); // 寻找中
  • eventTester ("seeked"); // 寻找完毕
  • eventTester ("timeupdate"); // 播放时间改变
  • eventTester ("ended"); // 播放结束
  • eventTester ("ratechange"); // 播放速率改变
  • eventTester ("durationchange"); // 资源长度改变
  • eventTester ("volumechange"); // 音量改变

Github 视频播放器项目:videoplayer

extend read:
video object
使用 HTML5 视频事件