相关属性

src属性

该属性指定媒体数据的URL地址。

autoplay属性

在该属性中指定是否在页面加载后自动播放,使用方法:

  1. <video src="test.mov" autoplay></video>

preload属性

在该属性中指定视频或音频数据是否预加载。如果使用预加载的话,浏览器会预先将视频或音频进行缓冲,这样可
以加快播放的速度,因为播放时数据已经预先缓冲完毕。

该性情有三个可选值:none,metadata与auto,默认值为auto.

  • none表示不进行预加载。
  • metadata表示只预加载媒体的元数据(媒体字节数、第一帧、播放列表、持续时间等)。
  • auto表示预加载全部视频或音频。

该属性的使用方法

  1. <video src="test.mov" preload="auto"></video>

poster (video元素独有属性)

当视频的不可用时,可以使用该元素向用户展示一幅替代用的图片,使用方法:

  1. <video src="test.mov" poster="CannotUse.jpg"></video>

loop属性

在该属性中指定是否循环播放视频或音频,使用方法:

  1. <video src="test.mov" autuplay loop></video>

controls属性

该属性中指定是否为视频或音频添加浏览器自带的播放用的控制条。控制条中具有播放、暂停等按钮。

  1. <video src="test.mov" controls></video>

开发者也可以在脚本中自定义控制条,而不使用浏览器默认的控制条。

with与height(video独有属性)

在该属性中指定视频的宽度与高度(以像素为单位)使用方法:

  1. <video src="test.mov" width="500" height="300"></video>

error属性

在读取、使用媒体数据的过程中中,正常情况下,video元素或audio元素的error属性为null,但是任何时候只要出
现错误,error属性将返回一个MediaError对象,该对象的code返回对应的错误状态,错误状态共有4个可能值,如
下所示。

  • MEDIA_ERR_ABORTED(数字值为1):媒体数据的下载过程由于用户的操作原因而被中止。
  • MEDIA_ERR_NETWORK(数字值为2):确认媒体资源可用,但是在下载时出现网络错误,媒体数据下载过程被中止。
  • MEDIA_ERR_DECODE(数字值为3):确认媒体资源可能,但是解码时发生错误。
  • MEDIA_ERR_SRC_NOT_SUPPORTED(数字值为4):媒体格式不被支持。
  • error为只读属性。

读取错误状态的代码如下:

  1. <video id="videoElement" src="test.mov">
  2. <script>
  3. var video = document.getElementById("videoElement");
  4. video.addEventListener("error", function()
  5. {
  6. var error=video.error;
  7. switch(error.code)
  8. {
  9. case 1:
  10. alert("视频的下载过程被中止。");
  11. break;
  12. case 2:
  13. alert("网络发生故障,视频的下载过程被中止。");
  14. break;
  15. case 3:
  16. alert("解码失败。");
  17. break;
  18. case 4:
  19. alert("不支持播放的视频格式。");
  20. break;
  21. }
  22. },false);
  23. </script>

networkState属性

在媒体数据加载过程中可以使用networkState属性读取当前的网络状态,共有如下所示的4个可能值:

  • NETWORK_EMPTY(数字值为0):元素牌初始状态。
  • NETWORK_IDLE(数字值为1):浏览器已选择好用什么编码格式来播放媒体,但尚未建立网络连接。
  • NETWORK_LOADING(数字值为2):媒体数据加载中。
  • NETWORK_NO_SOURCE(数字值为3):没有支持的编码格式,不执行加载。
  • error为只读属性。

读取错误状态的代码如下:

  1. <video id="videoElement" src="test.mov">
  2. <script>
  3. var video = document.getElementById("videoElement");
  4. video.addEventListener("progess", function(e)
  5. {
  6. var networkStateDisplay = document.getElementById("networkState");
  7. //根据networkState属性的值来执行处理
  8. if(video.networkState == 2)
  9. {
  10. //计算已加载的字节数与总字节数。
  11. networkStateDisplay.innerHTML = "加载中...[" + e.loaded + "/" + e.total + "bype]";
  12. }
  13. else if(video.networkState == 3)
  14. {
  15. networkStateDisplay.innerHTML = "加载失败";
  16. }
  17. },false);
  18. </script>

currentSrc属性

可以使用currentSrc属性来读取播放中媒体数据的URL地。
currentSrc属性为只读属性。

buffered属性

可以使用video元素或audio元素的buffered属性来返回一个对象,该对象实现TimeRanges接口,以确认浏览器是否已缓存媒体数据。TimeRanges对象表示一段时间范围,在大多数情况下,TimeRanges对象表示的时间范围是一个单一的以0开始的范围,但是如果浏览器发出Range Requests请求,这时TimeRanges对象表示的时间范围是多个时间范围。

TimeRanges对象对象具有一个length属性,表示有多少个时间范围,大多数情况下存在时间范围是,该值为1;不存在时间范围是,该值为0。TimeRanges对象还具体两个方法,TimeRanges.start(index)与TimeRanges.end(index),大多数情况下将index值设为0就可以了。当用videoElement.buffered语句来实现TimeRanges接口时,TimeRanges.start(0)表示当前缓存区内从媒体数据的什么时间开始进行缓存,TimeRanges.end(0)表示当前缓存区内的结束时间。

readyState属性

可以使用video元素或audio元素的readyState属性返回媒体当前播放位置的就绪状态,共有5个可能的值。

  • HAVE_NOTHING(数字值为0):没有获取到媒体的任何信息,当前播放位置没有可播放数据。
  • HAVE_METADATA(数字值为1):已经获取到足够的媒体数据,但是当前播放位置没有有效的媒体数据(也就是说,获取到的媒体数据无效,不能播放)。
  • HAVE_CURRENT_DATA(数字值为2):当前播放位置已经有数据可以播放,但没有获致到可以让播放器前进的数据。当媒体为视频时,意思是当前帖的数据已获取,但没有获取到下一帧的数据,或者当前帧已经是播放的最重一帧。
  • HAVE_FUTURE_DATA(数字值为3):当前播放位置已经有数据可以播放,而且也获取到了可以让播放器前进的数据。当媒体为视频时,意思是当前帧的数据已获取,而且也获取到了下刺目贩数据,当前帧是播放的最后一帧时,readyState属性不可能为HAVE_FUTURE_DTAT。
  • HAVE_ENOUGH)DATA(数字值为4):当前播放位置已经有数据可以播放,同时也获取到了可以让播放器前进的数据,而且浏览器确认媒体以某一种速度进行加载,可以保证有足够的后续数据进行播放。

readyState属性为只读属性。

seeking属性与seekable属性

可以使用video元素或audio元素的seeking属性返回一个布尔值,表示浏览器是否正在请求某一特定播放位置的数
据,true表示浏览器正在请求数据,false表示浏览器已停止请求。

可以使用video元素或audio元素的seekable属性来返回一个TimeRanges对象,该对象表示请求到的数据时间范围。

当媒体为视频时,开始时间为请求到视频数据的第一帧的时间,结束时间为请求到视频数据的最后一帧的时间。

seeking属性与seekable属性只读属性

currentTime属性、startTime属性与duration属性

可以使用video元素或audio元素的currentTime属性来读取媒体的当前播放位置,也可以通过修改currentTime性情
为修改当前的播放位置。如果修改的位置上没有可用的媒体数据时,将抛出INVALID_STATE_ERR异常;如果修改的
位置超出了浏览器在一次请求中可以请求的数据范围,将抛出INDEX_SIZE_ERR异常。

可以使用video元素或audio元素的startTime属性来读取媒体播放的开始时间,通常为0。

可以使用video元素或audio元素的dutation属性来读取媒体文件总的播放时间。

三者的时间、单位均为秒,currentTime为可读与属性,其余两个均为只读属性。

played属性、paused属性、ended属性

可以使用video元素或audio元素的played属性来返回一个TimeRanges对象,该对象中可以读取媒体文件的已播放部份的时间段。开始时间为已播放部份的开始时间,结束时间为已播放部份的结束时间。

可以使用video元素或audio元素的paused属性来返回一个布尔值检测是否处于暂停状态,true表示暂停播放,
false表示正在播放。

可以使用video元素或audio元素的end属性来返回一个布尔值检测是否播放完毕,true表示已播放完毕,false表示
还未播放完毕。

三者均为只读属性。

defaultPlayRate属性与playbackRate属性

defaultPlayRate属性读取或修改媒体的播放速率。

playbackRate属性读取或修改媒体当前的播放速率。

volume属性和muted属性

volume属性读取或修改媒体的的播放音量,范围从0到1,0为表单,1为最大音量。

muted属性读取或修改媒体的表单状态,该值为布尔值,true表示静音状态,false表示非静音状态。

相关事件

在利用video元素或audio元素读取或播放媒体数据的时候,会触发一系的事件,如果使用JavaScript脚本来捕捉这些事件,就可以对这些事件进行处理了。对这些事件的捕捉及处理,可以按两种方式来进行。

第一种是监听的方式,使用video元素或audio元素的addEventListener方法来对事件的发生进行监听,该方法的定义如下所示。

videoElement.addEventListener ( type,listener,useCapture);

videoElement表示页面上的video元素或audio元素。type为事件名称,listener表示绑定的函数,useCapture是一个布尔值,表示该事件的响应顺序,该值如果为true,则浏览器采用Capture(捕获)响应方式,如果为false,浏览器采用bubbing(冒泡)响应方式,一般采用fase,默认情况下也为false,如下使用方法。

  1. video.addEventListener("error",function(){
  2. /******代码段******/
  3. },false);

第二种事件处理方式为JavaScript脚本常见的获取事件句柄的方式,如下例所示。

  1. <video id="video1" src="test.mov" onplay="begin_playing();"></video>
  2. function begin_playing(){
  3. /******代码段******/
  4. }

事件介绍

事件 描述
loadstart 浏览器开始在网上寻找媒体数据
progress 浏览器正在获取媒体数据
suspend 浏览器暂停获取媒体数据,但是下载过程并滑正常结束
abort 浏览器在下载完全部媒体数据之前中止获取媒体数据,但是并不是由错误引起的
error 获取媒体数据过程中出错
emptied video元素或audio元素所在网络突然变为未初始化状态可能原因有两个:1.载入媒体过程中突然发生一个致命错误

2.在浏览器正在选择支持的播放格式时,又调用 了load方法重新载入媒体

stalled 浏览器尝试获取媒体数据失败
play 即将开始播放,当执行了play方法时触发,或数据下载后元素被设为autoplay属性
pause 播放暂停,当执行了pause方式时触发
loadedmetadata 浏览器获取完毕媒体的时间长和字节数
waiting 播放过程由于得不到下一帧而暂停播放(例如下一帧尚未加载完毕),但很快就能够得到下一帧
canplay 浏览器能够播放媒体,但估计以当前的播放速率不能直接播放完毕,播放期间需要缓冲
canplaythrough 浏览器能够播放媒体,而且以当前播放速率能够将媒体播放完毕,不再需要进行缓冲
seeking seeking属性变为true,浏览器正在请求数据
seeked seeking属性变为false,浏览器停止请求数据
timeupdate 由于播放位置被改变,可能是播放过程中的自然改变,也可能是被人为的改变,或由于播放不能连续而发生的跳变
ended 播放结束后停止播放
ratechange defaultplaybackRate属性(默认播放速率)或playbackRate属性(当前播放速率)被改变
druationchange 播放时长被改变
volumechange volume属性(音量)被改变或muted属性(静音状态)被改变

事件捕捉示例

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>事件捕捉</title>
  6. <script type="text/javascript">
  7. function playOrPauseVideo(){
  8. var videoUrl = document.getElementById("videoUrl").value;
  9. var video = document.getElementById("video");
  10. //使用事件监听方式捕捉事件
  11. video.addEventListener("timeupdate",function(){
  12. var timeDisplay = document.getElementById("time");
  13. //用秒数来显示当前播放进度
  14. timeDisplay.innerHTML = Math.floor(video.currentTime) + "/" + Math.floor(video.duration) + " 秒";
  15. },false);
  16. if(video.paused){
  17. if(videoUrl != video.src){
  18. video.src = videoUrl;
  19. video.load();
  20. }else{
  21. video.play();
  22. }
  23. document.getElementById("playButton").value= "暂停";
  24. }else{
  25. video.pause();
  26. document.getElementById("playButton").value = "播放";
  27. }
  28. }
  29. </script>
  30. </head>
  31. <body>
  32. <video id="video" width="400" height="300" autoplay loop="loop"></video>
  33. <br/>
  34. 视频地址:<input type="text" id="videoUrl"/>
  35. <input type="button" id="playButton" onClick="playOrPauseVideo()" value="播放"/>
  36. <span id="time"></span>
  37. </body>
  38. </html>

我们看一个事件捕捉示例,在播放过程中会经常触发timeupdat事件来通知当前的播放位置的改变,在该示例中,我们捕捉这个timeupdate事件来显示当前的播放进度。

相关方法

play方法

使用play方法来播放媒体,自动将元素的paused属性变为false。

pause方法

使用pause方法来暂停播放,自动将元素的paused属性变为true。

load方法

使用load方法来重新载入媒体进行播放,自动将元素的playbackRate属性值变为defaultPlaybackRate属性的值,自动将元素的error的值变为null.

下面先来看一个媒体播放的示例。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>video test</title>
  6. <script type="text/javascript">
  7. var video;
  8. function init(){
  9. video = document.getElementById("video1");
  10. //监听视频播放结束事件
  11. video.addEventListener("ended",function(){
  12. alert("播放结束。");
  13. },true);
  14. //发生错误
  15. video.addEventListener("error",function(){
  16. switch(video.error.code){
  17. case MediaError.Media_ERROR_ABORTED:
  18. alert("视频的下载过程被中止。");
  19. break;
  20. case MediaError.MEDIA_ERR_NETWORK:
  21. alert("网络发生故障,视频的下载过程被中止。");
  22. break;
  23. case MediaError.MEDIA_ERR_DECODE:
  24. alert("解码失败。");
  25. break;
  26. case MediaError.MEDIA_ERR_SRC_NOT_SUPPORTED:
  27. alert("不支持播放的视频格式。");
  28. break;
  29. }
  30. },false);
  31. }
  32. function play(){
  33. //播放视频
  34. video.play();
  35. }
  36. function pause(){
  37. //暂停视频
  38. video.pause();
  39. }
  40. </script>
  41. </head>
  42. <body onLoad="init()">
  43. <!--可以添加controls属性来显示浏览器自带的播放控制条-->
  44. <video id="video1" src="test.gov"></video>
  45. <br/>
  46. <button onClick="play()">播放</button>
  47. <button onClick="pause()">暂停</button>
  48. </body>
  49. </html>

canPlayType方法

使用canPlayType方法来测试浏览器是否支持指定的媒体类型,该方法定义如下所示。

  1. var support = vodeElement.canPlayType(type);

videoElement表示页面上的video元素或者audio元素,该方法使用一个参数type,该参数的指定方法与soruce元素的type参数相同,都用播放文件的MIME类型来指定,可以在指定的字符串中加上表示媒体编码格式的codes参数。

该方法返回3个可能值:

  • 空字符串:表示浏览器不支持此种媒体类型。
  • maybe:表示浏览器可能支持此种媒体类型。
  • probably:表示浏览器确定支持此种媒体类型。

HTML5中Video和Audio的更多相关文章

  1. 解决html5中video标签无法播放mp4问题的办法

    这篇文章主要给大家介绍了关于解决html5中video标签无法播放mp4问题的办法,文中介绍的非常详细,相信会对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧. 最近发现了一个 ...

  2. HTML5视频Video 音频Audio

    视频协议 视频格式 Flash HTML5 HTTP flv HTTP f4v HTTP mp4 HTTP m3u8 HTTP webm HTTP ogg RTMP flv RTMP f4v RTMP ...

  3. HTML5中video标签与canvas绘图的使用

    video标签的使用 video标签定义视频, 它是html5中的新标签, 它的属性如下(参考自文档): domo01 <!DOCTYPE html> <html lang=&quo ...

  4. HTML5中video 和 ogg

    HTML5中 的ogg 从网上学习HTML5之video时看到了下面的代码,不太清楚ogg是什么,于是搜索了一些知识点供了解.

  5. 关于HTML5中video标签的奇怪现象

    很多人刚开始学习html5 的时候在使用video标签时会出现这样的情况: 发现video标签在网页中播放时只有声音但是没有图像,如: <!DOCTYPE html> <html&g ...

  6. 【HTML5】HTML5中video元素事件详解(实时监测当前播放时间)

    html 代码..video后边几个元素,可处理ios 系统的兼容性 <video id="myVideo" controls="controls" po ...

  7. 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍

    一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...

  8. HTML5中video的使用一

    <!DOCTYPE html> <html> <head> <title>HTML5 </title> <meta http-equi ...

  9. 关于HTML5中Video标签无法播放mp4的解决办法

    1.首先先排除掉代码问题.路径问题.浏览器不支持问题等常规问题,这些问题另行百度. <video width="500px" height="300px" ...

随机推荐

  1. 如何修改织梦官方flash幻灯片的方法

    源代码: <!-- size: 280px * 192px --> <script language='javascript'> linkarr = new Array(); ...

  2. annexb模式

    h264有两种封装,一种是annexb模式,传统模式,有startcode,SPS和PPS是在ES中一种是mp4模式,一般mp4 mkv会有,没有startcode,SPS和PPS以及其它信息被封装在 ...

  3. web 前端 转盘界面

    http://www.cnblogs.com/arfeizhang/p/turntable.html "如果有个做转盘的需求,你准备怎么做?设计师只会提供一个转盘的图片,其余都需要你完成,不 ...

  4. 【cf492】D. Vanya and Computer Game(二分)

    http://codeforces.com/contest/492/problem/D 有时候感觉人sb还是sb,为什么题目都看不清楚? x per second, y per second... 于 ...

  5. 编程之美 set 9 字符串移位包含问题

    题目 给定字符串 s1 和 s2, 要求判定 s2能否能够被通过 s1 做循环移位得到的字符包含. s1 = AABCD, s2 = CDAA 返回 true. 给定 s1 = ABCD 和 s2 = ...

  6. poj_1125 Floyd最短路

    题目大意 N个股票经纪人,每个股票经纪人都会将得到的消息传播给另外一些股票经纪人,传播的速度均不固定,且从A传到B的速度和B传到A的速度不一定相等.给定一个消息,并不一定能够传遍所有的股票经纪人,因为 ...

  7. c++与js脚本交互,C++调用JS函数/JS调用C++函数

    <!DOCTYPE html> <html> <body> <h1>我的第一段 JavaScript</h1> <p> Java ...

  8. 通过AnimationSet 同步或一部播放多个动画 Android 属性动画(Property Animation) 完全解析 (下)

    AnimationSet提供了一个把多个动画组合成一个组合的机制,并可设置组中动画的时序关系,如同时播放,顺序播放等. 以下例子同时应用5个动画: 播放anim1: 同时播放anim2,anim3,a ...

  9. 区分兼容IE6/IE7/IE8/IE9/FF的CSS HACK写法

    HACK原理:不同浏览器对各中字符的识别不同 在 CSS中常用特殊字符识别表: (1)*:  IE6+IE7都能识别*,而标准浏览器FF+IE8是不能识别*的; (2)!important: 除IE6 ...

  10. Spring MVC静态资源访问

    最近在学习servlet的时候发现自己不能访问到css和js, 于是google一番学到不少方法加载,总结如下: 1.对于Spring MVC, 由于我们截获了所有请求<url-pattern& ...