HTML-Audio/Video
简介:
- 容器:不论是音频还是视频文件,实际上都是容器文件;
- 视频文件包含了音频轨道、视频轨道和其他一些元数据;
- 视频文件播放时,音频轨道和视频轨道是绑定在一起;元数据包含了该视频的封面、子标题、字幕等信息;
- 主流视频容器支持格式:
- Audio Video Interleave(.avi)
- Flash Video(.flv)
- MPGE4(.mp4)
- Mattroska(.mkv)
- Ogg(.ogv)
- 编/解码器:
- 一组算法,用来对一段特定视频或音频进行解码和编码;
- 由于一些原因,当前没有任意一种编解码器可以被所有浏览器厂商支持;
- 目前HTML5规范中并没有对编解码器做要求;
浏览器支持:
- <video src='../test.webm' controls>
- <object data='videoplayer.swf' type='application/x-shockwave-flash'>
- <param name="movie" value="video.swf">
- </object>
- </video>
以插件方式播放视频的代码为备选内容;不过考虑到各种浏览器,可能需要多种视频格式;
WebVTT文件: 一个WebVTT(.vtt)文件是一个简单的纯文本,里面包含了几种类型的视频信息:
- 字幕:关于对话的转译或者翻译。
- 标题:类似于标题,但是还包括音响效果和其他音频信息。
- 说明:预期为一个单独的文本文件,通过屏幕阅读器描述视频。
- 章节:旨在帮助用户浏览整个视频。
- 元数据:默认不打算展示给观众的、和视频有关的信息和内容。但是你可以使用Javascript来访问。
- test.vtt
- ---------
- 1
- 00:00:01.000 --> 00:00:18.000
- At the left we can see...
- test.html
- ------------
- <video src='../test.webm' controls>
- <track src="test.vtt" kind="subtitles" srclang="en" label="English" />
- </video>
理解媒体元素:
- 声明媒体元素:audio/video ; controls //如果不指定controls,浏览器将无法显示通用的控件,可用在如背景音乐;
- source元素:用于备用声明包含来源
- <audio controls>
- <source src = 'test.ogg'>
- <source src = 'test.mp3'>
- </audio>
来源列表的顺序,最好按照用户由高到低或者服务器消耗由低到高;
- <audio controls>
- 媒体的控制:
- autoplay:自动播放,在不设置controls的情况下设置,如广告。//注意不是每种设备都支持自动播放,IOS就不支持;
- 常用控制函数:load()、play()、pause()、canPlayType();
- 只读媒体特性:durationo、paused、ended、startTime、error......
- 可用脚本控制的特性值:autoplay、 loop、 muted...............
使用audio
- 设置背景音乐:
- <body>
- <audio id='musci'>
- <source src='test.ogg'>
- <source src='test.mp3'>
- </audio>
- <button id='toggle' onclick='toggleSound()'>Play</button>
- </body>
- <script type="text/javascript">
- function toggleSound() {
- var music = document.getElementById('musci');
- var toggle = document.getElementById('toggle');
- if(music.paused) {
- music.play();
- toggle.innerHTML = 'Pause';
- } else {
- music.pause();
- toggle.innerHTML = 'Play';
- }
- }
- </script>
- <body>
使用video
- 额外特征
- poster:视频加载前的内容图片url地址
- width/height:设置尺寸或读取设置的尺寸;
- videoWidth/videoHeight:返回视频固有宽高;只读
- 创建一个视频时序查看器:
- <body>
- <video src='./test.webm' controls id='movies' autoplay oncanplay='startVideo()' onended='stopTimeline()'>
- <object data='videoplayer.swf' type='application/x-shockwave-flash'>
- <param name="movie" value="video.swf">
- </object>
- </video>
- <canvas id='timeline' width='400px' height='300px'>
- </canvas>
- </body>
- <script type="text/javascript">
- //设置帧更新的间隔
- var updateInterval = 5000;
- //时序中帧的尺寸
- var frameWidth = 100;
- var frameHeight = 75;
- //时序的总帧数
- var frameRows = 4;
- var frameColumns = 4;
- var frameGrid = frameRows * frameColumns;
- //当前帧
- var frameCount = 0;
- //播放完后取消计时器
- var intervalId;
- var videoStarted = false;
- function startVideo() {
- //确保第一次播放才触发
- if(videoStarted) {
- return
- }
- videoStarted = true;
- updateFrame();
- intervalId = setInterval(updateFrame, updateInterval);
- var timeline = document.getElementById('timeline');
- timeline.onclick = function(evt) {
- var video = document.getElementById('movies');
- //计算出第几个,0开始计算
- var offX = evt.layerX;
- var offY = evt.layerY;
- var clickedFrame = Math.floor(offY / frameHeight) * frameRows;
- clickedFrame += Math.floor(offX / frameWidth) ;
- var totalTimes = Math.floor(frameCount / 16) * 16 + clickedFrame;
- if(clickedFrame > (frameCount % 16)) {
- totalTimes -= 16;
- }
- video.currentTime = totalTimes * updateInterval / 1000;
- }
- }
- //把帧绘制到画布上
- function updateFrame() {
- var video = document.getElementById('movies');
- var timeline = document.getElementById('timeline');
- var ctx = timeline.getContext('2d');
- //当前播放位置
- var framePosition = frameCount % frameGrid;
- var frameX = (framePosition % frameColumns) * frameWidth;
- var frameY = (Math.floor(framePosition / frameRows)) * frameHeight;
- //canvas的绘制程序可以将视频源当作图像绘制
- ctx.drawImage(video, 0, 0, 400, 300, frameX, frameY, frameWidth, frameHeight);
- frameCount++;
- }
- function stopTimeline() {
- clearInterval(intervalId);
- }
- </script>
- 获取当前时间video.currentTime;
- 当前加载可播放事件:oncanplay;
- 当前播放结束事件:onended;
- <body>
- 一些其他设置例子:
- <video src='./test.webm' controls id='movies' autoplay onmouseover='this.play()'onmouseout='this,pause()'>
- <object data='videoplayer.swf' type='application/x-shockwave-flash'>
- <param name="movie" value="video.swf">
- </object>
- </video>
HTML-Audio/Video的更多相关文章
- HTML5 Audio/Video 标签,属性,方法,事件汇总
HTML5 Audio/Video 标签,属性,方法,事件汇总 (转) 2011-06-28 13:16:48 <audio> 标签属性:src:音乐的URLpreload:预加载au ...
- Capturing Audio & Video in HTML5
使用HTML5抓取 Audio & Video 原文地址: http://www.html5rocks.com/en/tutorials/getusermedia/intro/ 本地化的文章: ...
- [jPlayer] HTML5 Audio & Video for jQuery
---------------------------------------------------------------------------------------------------- ...
- [转载]HTML5 Audio/Video 标签,属性,方法,事件汇总
<audio> 标签属性: src:音乐的URL preload:预加载 autoplay:自动播放 loop:循环播放 controls:浏览器自带的控制条 <audio id=& ...
- 如何让windows版Safari支持H5 audio/video?
今天在windows版Safari上看效果的时候惊奇地发现它竟然不支持HTML5的audio/video, 这样的话就无法复现不少ios上出现的问题. 在同事提醒下, 发现Safari HTML5 A ...
- HTML 5 Audio/Video DOM buffered 属性
1.实例1获取视频第一段缓冲范围部分,以秒计: myVid=document.getElementById("video1"); alert("Start: " ...
- js 多媒体audio video
本文主要简单的介绍一下audio 和 video两个标签的用法 <audio src="music.mp3"></audio> <video src= ...
- audio,video标签
<html><head lang="en"> <meta charset="UTF-8"> <title>< ...
- HTML5 Audio/Video 标签,属性,方法,事件汇总 (转)
HTML5 Audio/Video 标签,属性,方法,事件 <audio> 标签属性:src:音乐的URLpreload:预加载autoplay:自动播放loop:循环播放contro ...
- 使用HTML5抓取 Audio & Video
原文地址: http://www.html5rocks.com/en/tutorials/getusermedia/intro/ 本地化的文章: http://www.html5rocks.com/z ...
随机推荐
- ReactJS入门学习一
ReactJS入门学习一 阅读目录 React是什么? React如何制作组件? 理解组件属性props 理解页面中如何渲染数据的 理解从服务器端获取数据及理解state的 回到顶部 React是什么 ...
- matlab之round any size rat isscalar ismatrix mean find max
1.round : 四舍五入 例子:a = [-1.9, -0.2, 3.4, 5.6, 7.0, 2.4+3.6i] round(a): [-2 0 3 6 7 2 4] 2.butte ...
- cf.295.C.DNA Alignment(数学推导)
DNA Alignment time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- IOS 入门开发之创建标题栏UINavigationBar的使用(二)
IOS 入门开发之创建标题栏UINavigationBar的使用 http://xys289187120.blog.51cto.com/3361352/685746 IOS 开发有关界面的东西 ...
- MySQL sql语句总结
1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 d ...
- 秀尔算法:破解RSA加密的“不灭神话”
RSA加密 VS 秀尔算法 作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分 ...
- Nmap备忘单:从探索到漏洞利用(Part3)
众所周知NMAP是经常用来进行端口发现.端口识别.除此之外我们还可以通过NMAP的NSE脚本做很多事情,比如邮件指纹识别,检索WHOIS记录,使用UDP服务等. 发现地理位置 Gorjan Petro ...
- javascript动态添加一组input
2013年12月18日 20:56:29 场景: 批量添加 友情链接 功能 每个友情链接记录有3个字段:名字(name),超链接(url),排序(order) 要求每次点击"添加" ...
- Linux下配置Hadoop 1.2.1
首先要下载hadoop的包,版本选择1.2.1的,下载地址为:http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-1.2.1/ 这里可以下载hado ...
- 2.python基础深入(元组、字符串、列表、字典)
一,对象与类 对象: python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,玩的手机就是对象. 我们通过描述属性(特征)和行为来描述一个对象的. 在python中,一个对象的特 ...