HTML5无插件多媒体Media——音频audio与视频video
文件日志地址 http://blog.csdn.net/q1056843325/article/details/60336226
音频与视频现在已经变得越来越流行
各个网站为了保证跨浏览器的兼容性
仍然选择使用flash
(源码截自优酷)
多媒体标签
使用
HTML5增加了audio与video两个多媒体标签
兼容性还不错,低版本IE不支持
可以使我们不需要使用任何浏览器插件就能够插入音频与视频控件
而且非常的简单
(源码截自Bilibili)
元素用法如下
- 1
<audio src="media/xi-Halcyon.mp3" id="demoAudio">不支持H5-audio</audio>
- 2
<video src="media/Animation.mp4" id="demoVideo">不支持H5-video</video>
标签中内容如果浏览器不支持该标签就会显示
当然使用这两个元素的时候
最起码要添加src属性,属性值就是资源的url
但是每个浏览器由于版权问题支持的媒体格式也不同
所以就可以使用下面的方式
<audio id="demoAudio">
<source src="media/xi-Halcyon.mp3">
<source src="media/xi-Halcyon.ogg">
...
不支持H5-audio
</audio>
<video id="demoVideo">
<source src="media/Animation.mp4">
<source src="media/Animation.webm">
...
不支持H5-video
</video>
这样指定不同的资源格式
也保证了各个浏览器的兼容性
属性
audio和video标签除了src外
还有一些公有的属性
属性 | 描述 |
---|---|
autoplay | 设置该属性后,音/视频资源就绪后立即播放 |
controls | 设置该属性后,则显示浏览器播放控制控件 |
loop | 设置该属性后,则音/视频结束后重新循环开始播放 |
preload | 设置该属性后,则音/视频在页面加载时进行加载,并预备播放(使用autoplay会忽略该属性) |
前三个属性属性名与属性值相同,直接添加属性名即可
preload有如下属性值
- none 不加载数据
- metedata 仅加载元数据(时长、比特率、帧大小等)
- auto 浏览器加载它认为适量的媒体内容
比如想要在浏览器添加一段音乐
并且加载后立即播放,循环播放
使用浏览器的播放控件
- 1
<audio src="media/xi-Halcyon.mp3" id="demoVideo" autoplay controls loop></audio>
控件的样式各个浏览器都不一样
随着浏览器版本的更新,可能还会更新样式
video元素还有独有的属性poster
属性值是图片资源的url
用来设置视频播放前的一张占位图片
<video src="media/Animation.mp4" id="demoVideo" width="500" height="400" poster="images/preimg.jpg" controls></video>
- 1
- 1
点击播放后,视频正常播放
脚本化音视频
元素
使用js获取dom节点就很简单了
- 1
var a = document.getElementById('demoAudio');
- 2
var v = document.getElementById('demoVideo');
类似于image的Image构造函数
Audio也可以通过类似的方式创建(Video不可以)
区别在于Image创建的图片是要插入文档的
但是Audio不需要
- 1
var a = new Audio('song.mp3');
然后可以为它添加autoplay、loop等属性
然后添加到页面
接口
在获取的DOM节点上可以使用浏览器提供的接口属性和方法
常用的属性、方法如下
- currentSrc 媒体数据的URL地址
- volume 播放音量
- 介于0~1(注意超范围会报错),默认1最大音量
- muted 是否静音
- 设置true进入静音模式
- playbackRate 媒体播放速度
- 默认1.0常速,>1快进,<1慢放(负值表回放但无浏览器实现此功能)
- defaultPlaybackRate 媒体默认的播放速度
- currentTime 当前播放时间(单位s)
- duration 媒体时长(单位s)
- play() 播放音/视频
- pause() 暂停音/视频
- load() 重新加载音/视频(通常用于修改元素属性后)
除此之外还有
- played 已经播放的时间段
- buffered 已经缓冲的时间段
- seekable 用户可以跳转的时间段
它们都是TimeRanges对象
每个对象都有一个length属性(表示当前时间段)
以及start()和end()方法(返回当前时间段的起始时间点和结束时间点,单位s)
start()和end()都有一个数字参数,表示第一个时间段
确定当前缓存内容百分比:
- 1
var percentLoaded = Math.floor(song.buffered.end(0)/song.duration*100)
下面三个布尔属性表示媒体播放器的状态
- paused 是否暂停
- seeking 是否正调到一个新的播放点
- ended 是否播放结束并停止
并不是所有浏览器都支持video和audio的所有编解码器
canPlayType()方法就是用来鉴定时候支持某一格式的媒体资源
返回字符串maybe、probably或空字符串
如果只传入MIME类型,则返回maybe
如果同时传入MIME类型和编解码器,则返回probably(可能性增加了)
只是因为媒体文件只不过是音/视频的容器
真正决定文件能否播放的还得是编码格式
- 1
console.log(a.canPlayType('audio/mp4')); //maybe
2 console.log(a.canPlayType('audio/mp4;codecs="mp4a.40.2"')); //probably
下面的状态位属性也了解一下
- readyState 就绪状态
- 0 = HAVE_NOTHING - 没有关于音/视频是否就绪的信息
- 1 = HAVE_METADATA - 关于音频/视频就绪的元数据
- 2 = HAVE_CURRENT_DATA - 关于当前播放位置的数据是可用的,但没有足够的数据来播放下一帧/ms
- 3 = HAVE_FUTURE_DATA - 当前及至少下一帧的数据可用
- 4 = HAVE_ENOUGH_DATA - 可用数据足以开始播放
- netWorkState 网络状态
- 0 = NETWORK_EMPTY - 音/视频尚未初始化
- 1 = NETWORK_IDLE - 音/视频是活动的且已选取资源,但并未使用网络
- 2 = NETWORK_LOADING - 浏览器正在下载数据
- 3 = NETWORK_NO_SOURCE - 未找到音/视频来源
- error.code 错误状态
- 1 = MEDIA_ERR_ABORTED - 取回过程被用户中止
- 2 = MEDIA_ERR_NETWORK - 当下载时发生错误
- 3 = MEDIA_ERR_DECODE - 当解码时发生错误
- 4 = MEDIA_ERR_SRC_NOT_SUPPORTED - 不支持音频/视频
事件
除了接口属性方法以外
还有必不可少的事件模型
如果我们不想使用浏览器的控件而是定义自己的播放控制组件
就要使用这套事件了
- play 播放时触发
- pause 暂停时触发
- loadedmetadata 浏览器获取完媒体元数据时触发
- loadeddata 浏览器加载完当前帧媒体数据时触发
- ended 播放结束后停止时触发
初次之外还有很多事件
很多不常用
在w3c截了一张图
通过接口与事件
也可以简单的实现自己简陋的音乐播放器
- 1
<button id="btn">播放</button>
2 <span id="cur">0s</span>/<span id="dur">0s</span><br>
3 音量:<input type="range" id="vol">
var audio = new Audio('media/xi-Halcyon.mp3');
var btn = document.getElementById('btn');
var vol = document.getElementById('vol');
var cur = document.getElementById('cur');
var dur = document.getElementById('dur');
var state = 'pause';
vol.value = 100;
audio.onloadeddata = function(){
dur.textContent = Math.floor(audio.duration) + 's';
}
setInterval(function(){
cur.textContent = Math.floor(audio.currentTime) + 's';
}, 200);
btn.onclick = function(){
if(state === 'play'){
state = 'pause';
btn.textContent = '播放';
audio.pause();
}else{
state = 'play';
btn.textContent = '暂停';
audio.play();
}
}
vol.oninput = function(){
audio.volume = vol.value/100;
}
HTML5无插件多媒体Media——音频audio与视频video的更多相关文章
- html5学习(二)音频audio
音频格式 当前,audio 元素支持三种音频格式: IE 9 Firefox 3.5 Opera 10.5 Chrome 3.0 Safari 3.0 Ogg Vorbis √ √ √ M ...
- HTML5视频Video 音频Audio
视频协议 视频格式 Flash HTML5 HTTP flv HTTP f4v HTTP mp4 HTTP m3u8 HTTP webm HTTP ogg RTMP flv RTMP f4v RTMP ...
- HTML5 音频 <audio>
HTML5 提供了播放音频的标准. 一.Web 上的音频 直到现在,仍然不存在一项旨在网页上播放音频的标准. 今天,大多数音频是通过插件(比如 Flash)来播放的.然而,并非所有浏览器都拥有同样的插 ...
- html5之音频、视频(video&audio)
音频&视频 本篇为本人的学习笔记. 在Html5之前,浏览器对于视频和音频的处理并没有一个标准.因此在网页中看到的视频,都是通过第三插件的方式嵌入的,如:QuickTime.RealPlaye ...
- HTML5 CSS3 经典案例:无插件拖拽上传图片 (支持预览与批量) (二)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/31513065 上一篇已经实现了这个项目的整体的HTML和CSS: HTML5 C ...
- 无插件纯Web HTML5 3D机房 进阶篇(新增设备、线缆、巡查等功能)
前情提要 前阵子写了一篇无插件纯Web 3D机房,介绍了如何用html5在网页上创建无插件的精美3d机房场景.这两个月以来,陆续收到很多朋友的鼓(膝)励(盖),受宠若惊之余,对索要源代码的朋友都已经尽 ...
- 网站开发中很实用的 HTML5 & jQuery 插件
这篇文章挑选了15款在网站开发中很实用的 HTML5 & jQuery 插件,如果你正在寻找能优化网站,使其更具创造力和视觉冲击,那么本文正是你需要的.这些优秀的 jQuery 插件能为你的网 ...
- HTML5项目笔记4:使用Audio API设计绚丽的HTML5音乐播放器
HTML5 有两个很炫的元素,就是Audio和 Video,可以用他们在页面上创建音频播放器和视频播放器,制作一些效果很不错的应用. 无论是视屏还是音频,都是一个容器文件,包含了一些音频轨道,视频轨道 ...
- HTML5视频播放插件 video.js介绍
video.js是一款很流行的html5视频播放插件.很适合在移动端播放视频(比如微信网页),功能强大,且支持降级到flash,兼容ie8.官网:http://videojs.com/ git& ...
随机推荐
- nyoj_83:迷宫寻宝(二)(计算几何)
题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...
- HDU - 3697 Selecting courses
题目链接:https://vjudge.net/problem/HDU-3697 题目大意:选课,给出每门课可以的选课时间.自开始选课开始每过五分钟可以选一门课,开始 时间必须小于等于四,问最多可以选 ...
- 【JAVASCRIPT】React入门学习-文本渲染
摘要 react 学习包括几个部分: 文本渲染 JSX 语法 组件化思想 数据流 文本渲染 1. 纯文本渲染 <!DOCTYPE html> <html> <head&g ...
- Social Network Analysis的Centrality总结,以及networkx实现EigenCentrality,PageRank和KatzCentrality的对比
本文主要总结近期学习的Social Network Analysis(SNA)中的各种Centrality度量,我暂且翻译为中心度.本文主要是实战,理论方面几乎没有,因为对于庞大的SNA,我可能连门都 ...
- CRM权限管理
CRM权限管理 一.概念 权限管理就是管理用户对于资源的操作.本 CRM 系统的权限(也称作资源)是基于角色操作权限来实现的,即RBAC(Role-Based Access Control,基于角色的 ...
- [补档][HZOI 2016]简单的Treap
[HZOI 2016]简单的Treap 题目 Treap是一种平衡二叉搜索树,除二叉搜索树的基本性质外,Treap还满足一个性质: 每个节点都有一个确定的优先级,且每个节点的优先级都比它的两个儿子小( ...
- C++ STL list详解
一.解释: list是一种序列式容器.list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,list不仅是一个双向链表,而其还是一 ...
- ASP.NET程序运行出现WebDev.WebServer40.exe已停止工作解决方法(netsh winsock reset)
问题描述:在开发系统时候运行程序突然报出"WebDev.WebServer40.exe已停止工作"的错误,程序调试运行,发现程序在打开数据库时候报错,也就是Connection.O ...
- Fancytree Javascript Tree的入门使用
Fancytree Javascript Tree的入门使用 一.概念----是做什么的能干什么 Fancytree是一个Javascript控件,它依赖于: <script src=" ...
- Log4Net .NET log处理
1.NuGet 安装Log4Net. 2.新建一个Common的project,并且添加一个LogWriter的类: public class LogWriter { //Error log publ ...