js之音频和视频:audio和video

HTML5引入了audio和video标签来嵌入音频和视频,而不再像以前一样需要使用插件(如FLASH)才能使用音视频。用法:

//因为各个浏览器未能在对标准音频和视频编解码器支持上达成一致,因此通常需要是有source元素来为指定不同格式的媒体源,浏览器会依次使用source里的资源,直到找到适合自己的
<audio>
    <source src="test.mp3" type="audio/mpeg">
    <source src="test.ogg" type="audio/ogg;codec='vorbis'"
</audio>

//简单的写法
<audio src="test.mp3"></audio>
<video src="test.mov" width=300 height=300></video>

1、canPlayType():判断媒体元素能否播放某一种类型的媒体文件

将媒体的MIME类型传递给canPlayType(),如果不能播放则返回空字符串,反之返回一个字符串“maybe”或者“probably”。

var a = new Audio();        //audio可以通过Audio构造函数创建,到vedio不能
if(a.canPlayType('audio/wav')){
    a.src = "test.wav";
    a.play();
}

2、控制媒体播放

play()播放媒体资源
pause()暂停媒体资源
currentTime指定播放器应该跳过播放的时间,单位秒,取值区间为initialTime和duration之间
volume设置音量,0~1
muted为true进入静音模式
playbackRate指定媒体播放速度,0~1表示慢放,1正常,大于1快进,为负表示回退
controls为true时表示显示播放控件
loop为true时表示循环播放
proload

指定用户在开始播放媒体之前,是否或者多少媒体内容需要预加载:其值有以下几种:

1、none:不需要预加载

2、metadata:加载诸如时长、比特率、帧大小这样的元数据,而非媒体数据

3、auto:预加载浏览器认为适量的媒体内容(默认值)

autoplay为true时自动播放媒体,此属性为true相当于高度浏览器需要预加载媒体内容

3、查询媒体状态

audio和vedio元素有一些只读属性,可以供我们查询媒体状态

paused如果是暂停状态,返回true
seeking如果播放器正跳到一个新的播放点,返回true
ended播放完毕并且停下来了返回true
duration

媒体时长,单位秒,如果在元数据未加载之前查询此属性,返回NaN

initialTime已经缓存的数据的最早时间以及能够回退到的最早时间
played返回已经播放的时间段

buffered

返回当前已经缓冲的时间段
seekable返回当前播放器需要跳到的时间段
TIPS:以上上个字段返回的都是TimeRanges对象,包含length属性和start()/end()方法,length指当前的一个时间段,start()和end()指当前时间段的起始时间点和结束时间点
readyState

指定当前已经加载了多少媒体内容

常量描述
HAVE_NOTHING0没有加载任何媒体内容和元数据
HAVE_METADATA1元素据已加载完毕,媒体内容未加载
HAVE_CURRENT_DATA2currentTime的媒体内容已经加载完毕,但还未加载足够的内容播放媒体
HAVE_FUTUER_DATA3已经加载一些媒体内容,但还未到可以流畅播放的地步
HAVE_ENOUGH_DATA4所有媒体内容已加载完毕
NetworkState

指定媒体元素是否使用网络或者为什么媒体文件不能使用网络

常量描述
NETWORK_EMPTY0还没有开始使用网络,比如还未设置src属性
NETWORK_IDLE1没有通过网络来加载内容,如使用的缓存,或preload设置为none
NETWORK_LOADING2通过网络来获取的媒体内容
NETWORK_NO_SOURCE3无法获取媒体源
error

当加载或播放媒体出错时,浏览器会设置audio和vedio的error属性,未出错为null,error是一个json对象,包含描述错误数值的code属性,另外还定义了一些描述可能的错误代码的常量

常量描述
MEDIA_ERR_ABORTED1用户要求浏览器停止加载媒体内容
MEDIA_ERR_NETWORK2发生网络错误,无法加载
MEDIA_ERR_DECODE3媒体类型正确,但由于编码导致无法正常解码或播放
MEAID_ERR_SRC_NOT_SUPPORTED4浏览器不支持媒体文件
if(a.error.code === a.error.MEDIA_ERR_EDCODE){        //a为audio或vedio对象
    alert('因编码原因导致无法正常解码和播放');
}

 

4、媒体相关事件

audio和vedio只能通过addEventListener()来注册处理函数,相关事件类型如下:

事件类型描述
loadstart当媒体元素开始请求媒体资源的时候触发
progress正在通过网络加载媒体资源的时候触发,此事件一般每秒触发2-8次
loadedmetadata元数据加载完毕时触发
loadeddata当前播放位置的媒体内容首次加载完毕
canplay已经加载一些媒体内容,可以开始播放,但需要缓冲更多数据,此时readyState为HAVE_CURRENT_DATA
canplaythrough所有媒体内容已加载完毕,可以流畅播放
suspend已经缓冲大量数据,可以暂停下载,此时NetworkState为NETWORK_IDLE
stalled尝试加载数据,但无法获取到数据,此时NetworkState为NETWORK_LOADING
play调用play()方法或设置相应的autoplay属性为true时触发,如果已经加载了足够多的缓存,紧接着会触发palying事件,否则触发waiting事件
waiting由于未缓存足够的数据,导致播放未能开始或者播放停止
playing已经开始播放媒体文件
timeupdatecurrentTime属性发生改变时触发,此事件每秒会触发4-60次
pause调用pause()方法时触发
seeking通过脚本或用户通过播放控件将当前播放时间调至一个还未缓冲的时间点,导致在内容没有加载完时,停止播放。此时seeking属性值为true
seekedseeking值又变为false
ended播放完毕时,播放停止时触发
durationchangeduration属性发生变化时触发
volumechange声音发生变化时触发
ratechangeplaybackRate或defaultPlaybakcRate发生改变时触发
abort用户要求停止加载媒体内容时触发,此时error.code为MEDIA_ERR_ABORTED
error

由于发生网络错误或者其它错误阻止媒体内容的加载时触发,此时error.code不会是MEDIA_ERR_ABORTED

emptied发生了错误或者中止,导致networkState属性值又变回了NETWORK_EMPTY

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值