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>来源列表的顺序,最好按照用户由高到低或者服务器消耗由低到高;
- 媒体的控制:
- 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>
使用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;
- 一些其他设置例子:
<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 ...
随机推荐
- WebRequest中的工厂方法模式
- NGUI 粒子显示在上级
http://bbs.taikr.com/thread-2272-1-1.html [NGUI]3.0+版本,粒子在UI后面显示 -- : 48人阅读 评论() 收藏 举报 [Unity3D][NGU ...
- C语言课程1——Hello World
相信大家看了第一篇文章后,都信心满满,后边咱来点实际吧,上代码,经典之作:Hello World. 首先,不知道大家用的什么工具,VC6.0(太老了,强烈建议不用),VS,或是其他~ Hello Wo ...
- 【Django】Django 如何支持 分组查询、统计?
代码: from django.db.models import Sum alarm_sum_group_items = models.FILE_PROTECT_ALARM.objects.filte ...
- Java 7 的7个新特性
1.对集合类的语言支持:(??) 2.自动资源管理: 3.改进的通用实例创建类型推断:(??) 4.数字字面量下划线支持:(√) 5.switch中使用string:(√) 6.二进制字面量:(√) ...
- maven项目 Java compiler level does not match the version of the installed Java project facet
因工作的关系,Eclipse开发的Java项目拷来拷去,有时候会报一个很奇怪的错误.明明源码一模一样,为什么项目复制到另一台机器上,就会报“java compiler level does not m ...
- Python yield 使用浅析(转)
Python yield 使用浅析 初学 Python 的开发者经常会发现很多 Python 函数中用到了 yield 关键字,然而,带有 yield 的函数执行流程却和普通函数不一样,yield 到 ...
- scrapy爬虫成长日记之将抓取内容写入mysql数据库
前面小试了一下scrapy抓取博客园的博客(您可在此查看scrapy爬虫成长日记之创建工程-抽取数据-保存为json格式的数据),但是前面抓取的数据时保存为json格式的文本文件中的.这很显然不满足我 ...
- WPF 将PPT,Word转成图片
在Office下,PowerPoint可以直接把每张幻灯片转成图片,而Word不能直接保存图片.所以只能通过先转换成xps文件,然后再转成图片. 一.PPT 保存为图片 /// <summary ...
- 8.python笔记之面向对象基础
title: 8.Python笔记之面向对象基础 date: 2016-02-21 15:10:35 tags: Python categories: Python --- 面向对象思维导图 (来自1 ...