audio和video元素
前面的话
HTML5新增了两个与媒体相关的标签,让开发人员不必依赖任何插件就能在网页中嵌入跨浏览器的音频和视频内容,这两个标签是<audio>和<video>,且不被IE8-浏览器支持
以视频文件举例,它包含了音频轨道、视频轨道和其他一些元数据(封面、标题、子标题、字幕等)
HTML元素
使用这两个元素至少要在标签中包含src属性。位于开始和结束标签之间的任何内容都将作为后备内容,在浏览器不支持这两个媒体元素的情况下显示
<audio>
autoplay 自动播放
controls 显示控件
loop 循环播放
preload 音频在页面加载时进行加载,并预备播放(若使用autoplay,则忽略该属性)
src 要播放的音频的URL
<audio controls autoplay loop muted src="song.mp3">
<source src="song.mp3" type="audio/mp3" />
</audio>
[注意]<audio>元素不支持播放wma格式的文件
<演示框>点击下列相应属性值可进行演示
<video>
autoplay 自动播放
controls 显示控件
height 播放器高度
width 播放器宽度
loop 循环播放
preload 视频在页面加载时进行加载,并预备播放(若使用autoplay,则忽略该属性)
preload="none" //当页面加载后不载入视频
preload="auto" //当页面加载后载入整个视频
preload="meta" //当页面加载后只载入元数据
src 要播放的视频的URL
poster 规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像
<video id="test" src="movie.mp4" width="" height="" poster="diejia.jpg"></video>
<演示框>点击下列相应属性值可进行演示
<source>
为<video>和<audio>提供媒介资源
media 规定媒体资源的类型(没有浏览器支持)
src 规定媒体文件的URL
type 规定媒体资源的MIME类型
常用类型
视频 [1]video/ogg [2]video/mp4 [3]video/webm
音频 [1]audio/ogg [2]audio/mpeg
使用<audio>和<video>至少要在标签中包含src属性。位于开始和结束标签之间的任何内容都将作为后备内容,在浏览器不支持这两个媒体元素的情况下显示
<video src="#">
video player not available.
</video>
<audio src="#">
audio player not available.
</audio>
因为并非所有浏览器都支持所有媒体格式,所以可以指定多个不同的媒体来源。为此,不用在标签中指定src属性,而是使用一个或多个<source>元素
<video>
<source src="video.webm" type="video/webm; codecs='vp8,vorbis'">
<source src="video.ogg" type="video/ogg; codecs='theora,vorbis'">
<source src="video.mp4">
video player not available.
</video>
<audio>
<source src="audio.ogg" type="audio/ogg">
<source src="audio.mp3" type="audio/mp3">
audio player not available.
</audio>
因为并非所有浏览器都支持<audio>和<video>标签,所以更好的解决办法是有备选内容
<audio controls="controls" height="" width="">
<source src="song.mp3" type="audio/mp3" />
<embed height="" width="" src="song.mp3" />
</audio>
<video width="" height="" controls="controls">
<source src="movie.mp4" type="video/mp4" />
<object data="movie.mp4" width="" height="">
<embed src="movie.mp4" width="" height="" />
</object>
</video>
<track>
<track>
元素被当作媒体元素—<audio>
和<video>
的子元素来使用。它允许指定计时字幕(或者基于事件的数据),例如自动处理字幕
track
给媒体元素添加的数据的类型在kind
属性中设置,属性值可以是 subtitles
, captions
, descriptions
, chapters
或 metadata
。该元素指向当用户请求额外的数据时浏览器公开的包含定时文本的源文件。一个media
元素的任意两个track
子元素不能有相同的 kind、
srclang
和 label
属性
【default】
default属性规定该轨道是默认的,假如没有选择任何轨道
【kind】
kind属性表示轨道属于什么文本类型
captions 该轨道定义将在播放器中显示的简短说明
chapters 该轨道定义章节,用于导航媒介资源
descriptions 该轨道定义描述,用于通过音频描述媒介的内容,假如内容不可播放或不可见
metadata 该轨道定义脚本使用的内容
subtitles 该轨道定义字幕,用于在视频中显示字幕
【label】
label属性表示轨道的标签或标题
【url】
URL属性表示字幕文件的URL
【srclang】
srclang属性表示轨道的语言,若 kind 属性值是 "subtitles",则该属性必需的。中文为"zh",英文为"en"
字幕文件书写格式如下所示,注意,毫秒位的3个0不能省略
WEBVTT ::01.000 --> ::08.000
欢迎来到小火柴的个人网站
<video width="" height="" controls="controls">
<source src="mov.mp4" type="video/mp4" />
<track src="cn_track.vtt" srclang="zh" default kind="captions" label="欢迎你">
<object data="mov.mp4" width="" height="">
<embed src="mov.mp4" width="" height="" />
</object>
</video>
API
HTML5 DOM为<audio>和<video>元素提供了方法、属性和事件
方法
1、canPlayType()
检测浏览器是否能播放指定的音频或视频类型,返回值为下列之一:
'probable':浏览器最可能支持该类型
'maybe':浏览器也许支持该类型
'':浏览器不支持该类型
//常用值
video/ogg
video/mp4
video/webm
audio/mpeg
audio/ogg
audio/mp4
video/ogg;codecs="theora,vorbis"
video/mp4;codecs="avc1.4D401E,mp4a.40.2"
video/webm;codecs="vp8.0,vorbis"
audio/ogg;codecs="vorbis"
audio/mp4;codecs="mp4a.40.5"
<audio id="audio" src="song.mp3"></audio>
<script>
var audio = document.getElementById('audio');
//probably
console.log(audio.canPlayType('video/ogg;codecs="theora,vorbis"'));
</script>
2、load()
重新加载音频或视频元素,用于在更改src来源或其他设置后对音频或视频元素进行更新
<audio id="audio" src="song.mp3" autoplay controls></audio>
<script>
var audio = document.getElementById('audio');
audio.src = 'myocean.mp3';
audio.load();
</script>
3、play()
开始播放音频或视频
4、pause()
暂停当前播放的音频或视频
<button onclick = 'audio.play();'>播放</button>
<button onclick = 'audio.pause();'>暂停</button>
<audio id="audio" src="myocean.mp3" controls></audio>
<演示框>点击下列相应属性值可进行演示
属性
[注意]所有属性中,只有videoWidth和videoHeight是立即可用的,在音视频的元数据加载后,其他属性才可用
【只读】
1、buffered
buffered.length//获取已缓冲范围的数量
buffered.start(index)//获取某个已缓冲范围的开始位置
buffered.end(index)//获取某个已缓冲范围的结束位置
buffered.end()//获取当前已缓冲的秒数
<button>获取缓冲时间</button>
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
var oBtn = document.getElementsByTagName('button')[];
oBtn.onclick = function(){
alert(audio.buffered.end());
}
</script>
2、currentSrc
返回当前音频或视频的URL
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
var audio = document.getElementById('audio');
//http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3
setInterval(function(){
console.log(audio.currentSrc);
},);
</script>
3、ended
返回音频或视频是否已结束
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
document.onclick = function(){
console.log(audio.ended);
}
</script>
4、duration
返回当前音频或视频的长度(以秒计),如果未设置则返回NaN
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
//NaN
console.log(audio.duration);
//317.022041
setTimeout(function(){
console.log(audio.duration);
},1000);
5、networkState
返回音频或视频当前网络状态
networkState:(尚未初始化)
networkState:(已选取资源,但并未使用网络)
networkState:(正在下载数据)
networkState:(未找到资源来源)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
//
console.log(audio.networkState)
//
document.onclick = function(){
console.log(audio.networkState);
}
</script>
6、paused
返回音频或视频是否已暂停
paused:true;(已暂停)
paused:false;(未暂停)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
console.log(audio.paused)
document.onclick = function(){
console.log(audio.paused);
}
</script>
7、played
已播范围是指音频或视频的时间范围。如果用户在音频或视频中跳跃,会获得多个播放范围
played.length(获得音频或视频已播放范围的数量)
played.start(index)(获得某个已播范围的开始位置)
played.end(index)(获得某个已播范围的结束位置)
[注意]首段已播范围的下标是0
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
document.onclick = function(){
console.log(audio.played.end());
}
</script>
8、readyState
返回音频或视频的当前就绪状态
readyState:(没有关于音频或视频是否就绪的信息)
readyState:(关于音频或视频就绪的元数据)
readyState:(关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧)
readyState:(当前及至少下一帧的数据是可用的)
readyState:(可用数据足以开始播放)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
//
console.log(audio.readyState);
//
document.onclick = function(){
console.log(audio.readyState);
}
</script>
9、seekable
返回可寻址范围,可寻址范围是指用户在视频或音频中可寻址(移动播放位置)的时间范围。对于流视频,通常可以寻址到视频中的任何位置,即使其尚未完成缓冲
seekable.length(获得音频或视频中可寻址范围的数量)
seekable.start(index)(获得可寻址范围的开始位置)
seekable.end(index)(获得可寻址范围的结束位置)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
document.onclick = function(){
console.log(audio.seekable.end());
}
</script>
10、seeking
seeking:true(用户正在寻址)
seeking:false(用户没有在寻址)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
audio.onseeking = function(){
console.log(audio.seeking);
}
</script>
【可读写】
1、autoplay
autoplay:false(默认,不自动播放)
autoplay:true(自动播放)
2、controls
controls:false(默认,不显示控件)
controls:true(显示控件)
3、crossOrigin
设置或返回CORS设置
4、currentTime
设置或返回音频或视频的当前位置(以秒计)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
var audio = document.getElementById('audio');
document.onclick = function(){
console.log(audio.currentTime);
audio.currentTime = ;
console.log(audio.currentTime);
};
</script>
5、defaultMuted(只有chrome支持)
defaultMuted:true(初始静音)
defaultMuted:false(默认,初始不静音)
audio.defaultMuted = true;
6、muted
muted:true(静音)
muted:false(不静音)
<button onclick="audio.muted = !audio.muted">音量开关</button>
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
7、defaultPlaybackRate
defaultPlaybackRate:(正常速度)
defaultPlaybackRate:0.5(半速)
defaultPlaybackRate:(倍速)
defaultPlaybackRate:-(向后正常速度)
defaultPlaybackRate:-0.5(向后半速)
var audio = document.getElementById('audio');
setTimeout(function(){
audio.defaultPlaybackRate = 0.5;
audio.load();
},);
8、playbackRate
playbackRate:(正常速度)
playbackRate:0.5(半速)
playbackRate:(倍速)
playbackRate:-(向后正常速度)
playbackRate:-0.5(向后半速)
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
var array = [-,-0.5,0.5,,];
var i = ;
var audio = document.getElementById('audio');
document.onclick = function(){
audio.playbackRate = array[i];
console.log(audio.playbackRate);
i++;
i=i%;
}
9、loop
loop:true(循环播放)
loop:false(默认,不循环播放)
10、preload
设置或返回是否在页面加载后立即加载音频或视频
preload:auto;(一旦页面加载,则开始加载音频或视频)
preload:metadata;(当页面加载后仅加载音频或视频的元数据)
preload:none;(页面加载后不加载音频或视频)
[注意]当设置autoplay时,该属性无效
11、src
设置或返回音频或视频的当前来源
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
console.log(audio.src);
document.onclick = function(){
console.log(audio.src);
audio.src = 'http://7xpdkf.com1.z0.glb.clouddn.com/song.mp3';
audio.load();
console.log(audio.src);
}
</script>
12、volume
设置或返回音频或视频的当前音量
volume(取得为0-,0为静音,1为最大,默认为1)
<button onclick = "if(audio.volume<=0.9)audio.volume+=0.1;">增大音量</button>
<button onclick = "if(audio.volume>=0.1)audio.volume-=0.1;">减小音量</button>
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
事件
当音频或视频正在加载过程中,会依次发生以下事件:
loadstart:提示浏览器开始寻找指定的音频或视频
progress:提示浏览器正在下载指定的音频或视频
durationchange:提示音频或视频的时长已改变
loadedmetadata:提示音频或视频的元数据已加载
loadeddata:提示音频或视频的当前帧已加载,但没有足够数据播放下一帧
canplay:提示浏览器能够开始播放指定的音频或视频
canplaythrough:提示音频或视频能够不停顿地一直播放
progress:提示浏览器正在下载指定的音频或视频
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/myocean.mp3" controls></audio>
<script>
audio.onloadstart = function(){
console.log('loadstart');
}
audio.ondurationchange = function(){
console.log('durationchange');
}
audio.onloadedmetadata = function(){
console.log('loadedmetadata');
}
audio.onloadeddata = function(){
console.log('loadeddata');
}
audio.onprogress = function(){
console.log('progress');
}
audio.oncanplay = function(){
console.log('canplay');
}
audio.oncanplaythrough = function(){
console.log('canplaythrough');
}
</script>
影响音频或视频数据加载的事件有以下几个:
abort:在音频或视频终止加载时触发
error:在音频或视频加载发生错误时触发
stalled:在浏览器尝试获取媒体数据,但数据不可用时触发
suspend:在音频或视频数据被阻止加载时触发(可以是完成加载后触发,或者因为被暂停)
empted:在发生故障并且文件突然不可用时触发
<video id="video" src="http://7xpdkf.com1.z0.glb.clouddn.com/movie.mp4" controls></video>
<script>
setTimeout(function(){
video.src='';
},);
video.onabort = function(){
console.log('abort');
}
video.onerror = function(){
console.log('error');
}
video.onstalled = function(){
console.log('stalled');
}
video.onsuspend = function(){
console.log('suspend');
}
video.onemptied = function(){
console.log('emptied');
}
</script>
音频或视频控制按钮发生改变时触发以下事件:
play:音频或视频文件已经就绪可以开始播放时触发
playing:音频或视频已开始播放时触发
ended:音频或视频文件播放完毕后触发
pause:音频或视频文件暂停时触发
ratechange:播放速度改变进触发
seeked:指示定位已结束时触发
seeking:正在进行指示定位时触发
timeupdate:播放位置改变时触发[注意:播放和调整指示定位时都会触发]
volumechange:音量改变时触发
waiting:需要缓冲下一帧而停止时触发
<audio id="audio" src="http://7xpdkf.com1.z0.glb.clouddn.com/honey.mp3" controls></audio>
<script>
var i = ;
document.onclick = function(){
i+=0.1;
audio.playbackRate = i;
}
audio.onended = function(){
console.log('ended');
}
audio.onpause = function(){
console.log('pause');
}
audio.onplay = function(){
console.log('play');
}
audio.onplaying = function(){
console.log('playing');
}
audio.onratechange = function(){
console.log('ratechange');
}
audio.onseeked = function(){
console.log('seeked');
}
audio.onseeking = function(){
console.log('seeking');
}
audio.ontimeupdate = function(){
console.log('timeupdate');
}
audio.onvolumechange = function(){
console.log('volumechange');
}
audio.onwaiting = function(){
console.log('waiting');
}
</script>
audio专有
<audio>元素在一个原生的javascript构造函数Audio,可以在任何时候播放音频。Audio和Image很像,但Audio不用像Image那样必须插入到文档中,只要创建一个新实例,并传入音频源文件即可
var audio = new Audio('test.mp3');
<script>
var audio = new Audio('http://7xpdkf.com1.z0.glb.clouddn.com/honey.mp3');
audio.oncanplaythrough = function(){
audio.controls = true;
document.body.appendChild(audio);
}
// 为兼容IOS
audio.load()
</script>
特别注意的是,IOS不能直接使用oncanplaythrough事件,需要添加audio.load()方法,否则该事件不生效
audio和video元素的更多相关文章
- html5 音频和视频(audio And video)
1.音频和视频 Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定 ...
- video元素和audio元素
内容: 1.video元素 2.audio元素 注:这两个元素均是HTML5新增的元素 1.video元素 (1)用途 <video> 标签定义视频,比如电影片段或其他视频流 (2)标签属 ...
- video元素和audio元素相关事件
前言 在利用video元素或audio元素读取或播放媒体数据时,会触发一系列事件,如果用js脚本来捕抓这些事件,就可以对着这些事件进行处理了. 捕抓的方式有两种: 第一种是监听的方式.使用vedio或 ...
- HTML5 audio与video标签实现视频播放,音频播放
随着互联网的飞速发展以及HTML5的应用,越来越多的项目中用到video,audio当常用标签. <audio> 标签属性 <audio src="song.mp3&quo ...
- HTML5 Audio and Video 的新属性简介
前言:HTML5 中 Audio and Video的使用方法比较简单,但就是比较复杂,方法属性多.如果不常用的几乎难以记住,甚至有些人难以区分不同属性和方法的作用,更别说应用了.以下对Audio a ...
- HTML5之video元素
一.video元素支持的视频格式 HTML5中的video标签支持3种常用的视频格式: 1.Ogg = 带有Theora 视频编码和Vorbis 音频编码的 Ogg 文件: 2.MPEG4 = 带有H ...
- HTML5_音视频标签 <audio> 和 <video>
HTML5_音视频标签 <audio> 和 <video> audio 和 video 都是 inline行内元素 如果浏览器支持,则不显示标签文本 IE8 不支持 audio ...
- 【HTML5】HTML5中video元素事件详解(实时监测当前播放时间)
html 代码..video后边几个元素,可处理ios 系统的兼容性 <video id="myVideo" controls="controls" po ...
- html5--4-2 video元素的属性
html5--4-2 video元素的属性 学习要点 掌握video元素的基本用法 直到现在,在网页中的大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件.HTML ...
随机推荐
- selenium 富文本框处理
selenium 富文本框处理, 网上有用API的解决方法1:参见:http://blog.csdn.net/xc5683/article/details/8963621 群里1位群友的解决方法2:参 ...
- 01.WAMP搭建 [Win7+Apache2.4+MySQL5.7+PHP7
WAMP搭建[Win7+Apache2.4+MySQL5.7+PHP7 一.背景 将电脑光驱位拆换成固态硬盘(120g),专门装了一个系统用于工作.之前一直使用PHPstudy和WAMP这种集成环境, ...
- HTML + JS随机抽号。
[设置第三次抽取的号码为 (张三6)]<script language="javascript"> var k = 0 ; function star(){ k++ ; ...
- 《利用Python进行数据分析》第7章学习笔记
数据规整化:清理.转换.合并.重塑 合并数据集 pandas.merge pandas.concat combine_first 数据库风格的DataFrame合并 索引上的合并 join()实例方法 ...
- BI先特技软件 Analyzer安装时的部分问题
废话不多,先看第一个问题,我先运行了 Analyzer.3.0.2357b.64.exe 然后就是傻瓜式地下一步 好的,现在问题来了,当我运行安装完毕的Analyzer时,页面给了我这样的提示“ HT ...
- C++混合编程之idlcpp教程Lua篇(8)
上一篇在这 C++混合编程之idlcpp教程Lua篇(7) 第一篇在这 C++混合编程之idlcpp教程(一) 与前面的工程相似,工程LuaTutorial6中,同样加入了四个文件:LuaTutori ...
- javascript 设计模式-----外观模式
外观模式是为外部提供简单的接口一种方式,由于模块内部方法庞杂,不能一一对外公开,那么我们需要一个统一的和简单的对外方法(API)来调用这些内在的函数.这时候我们可以用到外观模式: var module ...
- 详解c#迭代器
迭代器模式是设计模式中行为模式(behavioral pattern)的一个例子,他是一种简化对象间通讯的模式,也是一种非常容易理解和使用的模式.简单来说,迭代器模式使得你能够获取到序列中的所有元素 ...
- WPF 窗口自适应
窗口自适应就是说,当主窗口缩放的时候,内部的控件位置自动的调整,而不是隐藏掉.这主要依赖于Grid布局. 1.比如这个groupbox 本身是在一个Grid的Row中的.缩放之后,左边的button不 ...
- HTML5触屏版多线程渲染模板技术分享
前言: 了解js编译原理的屌丝们都知道,js是单线程的,想当年各路神仙为了实现js的多线程,为了解决innerHTML输出大段HTML卡页面的顽疾,纷纷设计了诸如假冒的“多线程“实现,我自己也在写开源 ...