js之音频和视频:audio和video
程序员文章站
2022-05-12 10:34:14
...
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 |
指定当前已经加载了多少媒体内容
|
||||||||||||||||||
NetworkState |
指定媒体元素是否使用网络或者为什么媒体文件不能使用网络
|
||||||||||||||||||
error |
当加载或播放媒体出错时,浏览器会设置audio和vedio的error属性,未出错为null,error是一个json对象,包含描述错误数值的code属性,另外还定义了一些描述可能的错误代码的常量
|
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 | 已经开始播放媒体文件 |
timeupdate | currentTime属性发生改变时触发,此事件每秒会触发4-60次 |
pause | 调用pause()方法时触发 |
seeking | 通过脚本或用户通过播放控件将当前播放时间调至一个还未缓冲的时间点,导致在内容没有加载完时,停止播放。此时seeking属性值为true |
seeked | seeking值又变为false |
ended | 播放完毕时,播放停止时触发 |
durationchange | duration属性发生变化时触发 |
volumechange | 声音发生变化时触发 |
ratechange | playbackRate或defaultPlaybakcRate发生改变时触发 |
abort | 用户要求停止加载媒体内容时触发,此时error.code为MEDIA_ERR_ABORTED |
error |
由于发生网络错误或者其它错误阻止媒体内容的加载时触发,此时error.code不会是MEDIA_ERR_ABORTED |
emptied | 发生了错误或者中止,导致networkState属性值又变回了NETWORK_EMPTY |
上一篇: 视频(video)与音频(audio)
下一篇: 如何获取栈中最小的数?