HTML5_音视频标签 <audio> 和 <video>
HTML5_音视频标签 <audio> 和 <video>
audio 和 video 都是 inline行内元素
如果浏览器支持,则不显示标签文本
IE8 不支持 audio video 标签
http://s8.qhimg.com/share/audio/piano1/a4.mp3
http://pic.ibaotu.com/00/60/75/01J888piCPNw.mp4
http://img.ksbbs.com/asset/Mon_1703/eb048d7839442d0.mp4
- 浏览器对于资源的格式,支持不一
- 做以下兼容,浏览器会选择最优格式运行
<audio controls>
<source src="./audio/IDon'tWannaLiveForever.mp3" type="audio/mpeg"/>
<source src="./audio/IDon'tWannaLiveForever.ogg" type="audio/ogg" codecs="vorbis"/>
<source src="./audio/IDon'tWannaLiveForever.acc" type="audio/acc" codecs="aac"/>
您的浏览器不支持音视频,建议下载<a href="./audio/IDon'tWannaLiveForever.mp3">手动下载</a>
</audio> <video id="my_video" controls>
<source src="./video/CapitalCities-KangarooCourt.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"'/>
<source src="./video/CapitalCities-KangarooCourt.ogg" type='video/ogg; codecs="theora, vorbis"'/>
<source src="./video/CapitalCities-KangarooCourt.webm" type='video/webm; codecs="vp8, vorbis"'/>
您的浏览器不支持音视频,建议下载<a href="./video/CapitalCities-KangarooCourt.mp4">手动下载</a>
</video>- video 的属性
- width: 320;
单位 px 可写可不写
- height: 480px;
音视频 即使设置的是正方形,也会按照宽高比例进行显示
- poster: "./img/1.jpg";
海报帧,在播放前或者跳帧前显示
- autoplay
有些高版本浏览器为了节约内存,已经禁止
- loop: "loop";
开启循环播放
- muted: "muted";
- preload: ;
none; 提示该资源不需要缓存
metadata; 提示用户不需要查看该视频
auto; 不管用户是否需要,都会加载整个视频
""; 等同于 auto;
- 常用 js 事件
onloadedmetadata 当音频元数据加载完毕时触发。
ontimeupdate 播放过程中实时触发。
onvolumechange 音量改变时触发
- 视频:
onabort 在播放被终止时触发,例如, 当播放中的视频重新开始播放时会触发这个事件。
oncanplay 在媒体数据已经有足够的数据(至少播放数帧)可供播放时触发。这个事件对应 CAN_PLAY的readyState。
oncanplaythrough 在媒体的 readyState 变为 CAN_PLAY_THROUGH 时触发,表明媒体可以在保持当前的下载速度的情况下不被中断地播放完毕。注意:手动设置 currentTime 会使得 firefox 触发一次 canplaythrough 事件,其他浏览器或许不会如此。
ondurationchange 元信息已载入或已改变,表明媒体的长度发生了改变。例如,在媒体已被加载足够的长度从而得知总长度时会触发这个事件。
onemptied 媒体被清空(初始化)时触发。
onended 播放结束时触发。
onerror 在发生错误时触发。元素的error属性会包含更多信息。参阅 Error handling 获得详细信息。
onloadeddata 媒体的第一帧已经加载完毕。
onloadedmetadata 媒体的元数据已经加载完毕,现在所有的属性包含了它们应有的有效信息。
onloadstart 在媒体开始加载时触发。
onmozaudioavailable 当音频数据缓存并交给音频层处理时
onpause 播放暂停时触发。
onplay 在媒体回放被暂停后再次开始时触发。即,在一次暂停事件后恢复媒体回放。
onplaying 在媒体开始播放时触发(不论是初次播放、在暂停后恢复、或是在结束后重新开始)。
onprogress 告知媒体相关部分的下载进度时周期性地触发。有关媒体当前已下载总计的信息可以在元素的buffered属性中获取到。
onratechange 在回放速率变化时触发。
onseeked 在跳跃操作完成时触发。
onseeking 在跳跃操作开始时触发。
onstalled 在尝试获取媒体数据,但数据不可用时触发。
onsuspend 在媒体资源加载终止时触发,这可能是因为下载已完成或因为其他原因暂停。
ontimeupdate 元素的currentTime属性表示的时间已经改变。
onvolumechange 在音频音量改变时触发(既可以是 volume 属性改变,也可以是 muted 属性改变).。
onwaiting 在一个待执行的操作(如回放)因等待另一个操作(如跳跃或下载)被延迟时触发
- 音频:
onabort 在播放被终止时触发,例如, 当播放中的视频重新开始播放时会触发这个事件。
oncanplay 在媒体数据已经有足够的数据(至少播放数帧)可供播放时触发。这个事件对应 CAN_PLAY 的 readyState。
oncanplaythrough 在媒体的 readyState 变为 CAN_PLAY_THROUGH 时触发,表明媒体可以在保持当前的下载速度的情况下不被中断地播放完毕。注意:手动设置 currentTime 会使得firefox触发一次 canplaythrough 事件,其他浏览器或许不会如此。
ondurationchange 元信息已载入或已改变,表明媒体的长度发生了改变。例如,在媒体已被加载足够的长度从而得知总长度时会触发这个事件。
onemptied 媒体被清空(初始化)时触发。
onended 播放结束时触发。
onerror 在发生错误时触发。元素的 error 属性会包含更多信息。参阅 Error handling 获得详细信息。
onloadeddata 媒体的第一帧已经加载完毕。
onloadedmetadata 媒体的元数据已经加载完毕,现在所有的属性包含了它们应有的有效信息。
onloadstart 在媒体开始加载时触发。
onmozaudioavailable 当音频数据缓存并交给音频层处理时
onpause 播放暂停时触发。
onplay 在媒体回放被暂停后再次开始时触发。即,在一次暂停事件后恢复媒体回放。
onplaying 在媒体开始播放时触发(不论是初次播放、在暂停后恢复、或是在结束后重新开始)。
onprogress 告知媒体相关部分的下载进度时周期性地触发。有关媒体当前已下载总计的信息可以在元素的 buffered 属性中获取到。
ratechange 在回放速率变化时触发。
onseeked 在跳跃操作完成时触发。
onseeking 在跳跃操作开始时触发。
onstalled 在尝试获取媒体数据,但数据不可用时触发。
onsuspend 在媒体资源加载终止时触发,这可能是因为下载已完成或因为其他原因暂停。
ontimeupdate 元素的 currentTime 属性表示的时间已经改变。
onvolumechange 在音频音量改变时触发(既可以是 volume 属性改变,也可以是 muted 属性改变).。
onwaiting 在一个待执行的操作(如回放)因等待另一个操作(如跳跃或下载)被延迟时触发
- 常用 js 控制函数
myVideo.play() 媒体播放
myVideo.pause() 媒体暂停
myVideo.load() 重新加载媒体
- 常用的 js 属性
myVideo.duration;
myVideo.currentTime; 可读可写
myVideo.volume; /* 0-1 的值,静音的时候为 0,音量满格时为 1 */
myVideo.muted; /* 返回当前音量状态,true 表示静音 */
myVideo.paused; /* true 表示视频暂停了 */
myVideo.ended; /* true 表示视频播放到最后了 */
myVideo.error 媒体发生错误的时候,返回错误代码 (只读)
myVideo.currentSrc 以字符串的形式返回媒体地址(只读)
- 视频多的部分:
myVideo.poster : 视频播放前的预览图片(读写)
myVideo.width、myVideo.height : 设置视频的尺寸(读写)
myVideo.videoWidth、 videoHeight : 视频的实际尺寸(只读)
- 主流视频格式文件格式 (容器格式)
MPEG-4 通常以 .mp4 为扩展名
Flash视频 通常以 .flv 为扩展名
Ogg 通常以 .ogv 为扩展名
WebM 通常以 .webm 为扩展名
频视频交错 通常以 .avi 为扩展名
- 主流音频格式文件格式 (容器格式)
MPEG-3 .mp3
Acc 音频 .acc
Ogg 音频 .ogg
- .avi 和 .mp4
仅仅是容器的格式
只是决定怎么将视频存储起来,
而不关心存储的内容
包含了音频轨道,视频轨道和其他一些元数据
- 元数据
包含了视频的封面,标题,子标题,字幕等相关信息
编解码器
一组算法,用来对一段特定的音频/视频进行编码和解码
原始媒体文件体积巨大,
如果不进行编码,那么数据量非常惊人
如果不进行解码,就无法将编码后的数据重组为原始的媒体数据
- 视频编解码器
H.264
VP8
Ogg Theora
- 音频编解码器
AAC
MPEG-3
Ogg Vorbis
- 浏览器对于容器和编解码器支持的情况
Browser MP4(H.264 + AAC) WebM(VP8 + Vorbis ) Ogg(Theora + Vorbis)
Internet Explorer 9 YES NO NO
Firefox 4.0 NO YES YES
Google Chrome YES YES YES
Apple Safari 5 YES NO NO
Opera 10.6 NO YES YES
http://www.html5videoplayer.net/html5video/html5-video-browser-compatibility/
目前还没有一种编解码和容器的组合能应用于所有的浏览器中!!!
- H.264: 别名 MPEG-4 的第十部分,由 MPEG 研发并于 2003 年标准化
它的目的支持一切设备,无论是低带宽低 cpu ,还是高带宽高 cpu 或者是两者之间。
要做到这一点,H.264 标准被分成不同的几种配置。高配置使用了更多特性,
这会导致在解码过程中更加消耗 CPU ,但视频文件本身会更小,视频效果也更好
苹果 iphone 手机 基本配置 (BaseLine)
正常的电视机支持 基本配置 (BaseLine) 和 主配置 (Main) 两种
正常的电脑支持 基本配置 (BaseLine) 和 主配置 (Main) 高级配置 (high) 三种
- 处理视频的一个流程: (tools_resource)
把压缩文件 ffmpeg.zip 放到 software 文件夹中,解压到当前文件夹,进入 bin,逐次双击运行
将 bin 加入系统环境变量
在命令行中进入 .mp4 文件所在的文件夹
- 格式转化
用 FFmpeg 制作MP4 视频
ffmpeg -i test.mp4 -c:v libx264 -s 1280x720 -b:v 1500k -profile:v high -level 3.1 -c:a aac -ac 2 -b:a 160k -movflags faststart OUTPUT.mp4
用 FFmpeg 制作 WebM 视频
ffmpeg -i test.mp4 -c:v libvpx -s 1280x720 -b:v 1500k -c:a libvorbis -ac 2 -b:a 160k OUTPUT.webm
FFmpeg 制作 Ogg 视频
ffmpeg -i test.mp4 -c:v libtheora -s 1280x720 -b:v 1500k -c:a libvorbis -ac 2 -b:a 160k OUTPUT.ogv
FFmpeg 制作Mp3音频
ffmpeg -i test.mp3 -c:a libmp3lame -ac 2 -b:a 160k OUTPUT.mp3
FFmpeg 制作Ogg音频
ffmpeg -i test.mp3 -c:a libvorbis -ac 2 -b:a 160k OUTPUT.ogg
ffmpeg -i IDon'tWannaLiveForever.mp3 -c:a libvorbis -ac 2 -b:a 160k IDon'tWannaLiveForever.ogg
FFmpeg 制作ACC音频
ffmpeg -i test.mp3 -c:a aac -ac 2 -b:a 160k OUTPUT.aac
- 1. 制作一个 Ogg 容器中使用 Theora 视频和 Vorbis 音频的版本
2. 制作另外一个版本,使用 WebM 视频容器(VP8 + Vorbis)
3. 再制作一个版本,使用 MP4 视频容器,并使用 H.264 基本配置的视频和 ACC 低配的音频
4. 链接上面 3 个文件到同一个 video 元素,并向后兼容基于 Flash 的视频播放器
- 自定义播放器
- 行内元素底部缝隙
- 调整基线 vertical-align: ;
- 元素的 width、height,随着屏幕窗口大小改变
- window.onresize = function(){};
- 元素设置宽高
1. 设置 width、height
2. 定位
#process_box {
position: absolute;
top: 0px;
bottom: 0px;
left: 55px;
right: 230px;
}
3. 浮动,让子元素撑开
- 功能函数 ----addClass(),removeClass()
- addClass()
function addClass(ele, className){
var reg = new RegExp("\\b"+className+"\\b");
if(!reg.test(ele.className)){
/* 如果元素 ele 不包含 className */
ele.className += " "+className;
};
};- removeClass()
function removeClass(ele, className){
if(ele.className){
var reg = new RegExp("\\b"+className+"\\b");
var classes = ele.className;
ele.className = classes.replace(reg, "");
if(/^\s*$/g.test(ele.className)){
ele.removeAttribute("class");
};
}else{
ele.removeAttribute("class");
}
};- toggleClass()
function toggleClass(ele, className){
if(ele.className){
var reg = new RegExp("\\b"+className+"\\b");
if(!reg.test(ele.className)){
/* 如果元素 ele 不包含 className */
ele.className += " "+className;
}else{
var classes = ele.className;
ele.className = classes.replace(reg, ""); if(/^\s*$/g.test(ele.className)){
/* 如果元素的 class 为空, 则清除 class 属性 */
ele.removeAttribute("class");
};
};
}else{
/* 如果元素的 className 属性不存在, 则清除 class 属性 */
ele.removeAttribute("class");
};
};
- 将视频的 currentTime 设置为 0
- 封装功能函数
- 模仿 jQuery 源码
(function(w){
w.$ = {};
// callBack 将内部组件的 move 状态暴露在了外部的业务逻辑
w.$.drag = function(ele, callBack){
ele.onmousedown = function(e){
e = e || window.event;
};
};
})(window);
- 对象.属性()
var callBack = {
move:function(){
console.log("Runing!");
}
}; callBack.move();
callBack["move"](); // 调用,推荐使用 callBack.stop = "Stop Now!"; // 动态添加属性,推荐使用
callBack["stop"] = "Stop Now!";
- 功能函数 ----将 秒 转为 时:分:秒
funtion str2HMS(seconds){
seconds = parseInt(seconds); var s = toZero( Math.floor(seconds%60) );
var m = toZero( Math.floor(seconds%3600/60) );
var h = toZero( Math.floor(seconds/3600) ); return h+":"+m+":"+s;
}; function toZero(num){
if(num<10){
num = "0"+num;
}else{
num = ""+num;
};
};
HTML5_音视频标签 <audio> 和 <video>的更多相关文章
- HTML5笔记2——HTML5音/视频标签详解
音视频的发展史 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Quick ...
- HTML5音/视频标签详解
一.发展历: 早期:<embed>+<object>+文件 问题:不是所有浏览器都支持,而且embed不是标准. 现状:Realplay.window media.Qu ...
- html5 音频和视频(audio And video)
1.音频和视频 Web 上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如 Flash)来显示的.然而,并非所有浏览器都拥有同样的插件. HTML5 规定 ...
- HTML插入音频和视频:audio和video标签及其属性
一.上传到第三方网站,然后引入例如视频上传到优酷网,然后得到代码 <iframe height=498 width=510 src='http://player.youku.com/embed/ ...
- html音视频标签
音视频标签是html5标签,分别为<audio></audio>和<video></video>,这两个标签用法大致相同,且都仅在IE9及以上版本和其他 ...
- HTML5 Audio and Video 的新属性简介
前言:HTML5 中 Audio and Video的使用方法比较简单,但就是比较复杂,方法属性多.如果不常用的几乎难以记住,甚至有些人难以区分不同属性和方法的作用,更别说应用了.以下对Audio a ...
- HTML5_布局and音视频
HTML5_布局and音视频 I.HTML5标签的改变1.文档声明HTML语法是不区分大小写的HTML5的DTD声明为:<!doctype html>确保浏览器能在HTML5的标准模式下进 ...
- HTML5 audio与video标签实现视频播放,音频播放
随着互联网的飞速发展以及HTML5的应用,越来越多的项目中用到video,audio当常用标签. <audio> 标签属性 <audio src="song.mp3&quo ...
- HTML video 视频标签全属性详解
HTML 5 video 视频标签全属性详解 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(Opera.Mozilla.C ...
随机推荐
- checkbox,三种状态设置
多选按钮的 选中.未选中.半选中(常用于子项有选中,未全选) <input id="ckeckbox" type="checkbox"> $('# ...
- DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制
前言 到现在为止,所有的教程项目都没有使用Effects11框架类来管理资源.因为在D3DCompile API (#47)版本中,如果你尝试编译fx_5_0的效果文件,会收到这样的警告: X4717 ...
- LFYZ-OJ ID: 1008 求A/B高精度值
思路 小数点前的部分可以通过m/n直接计算得出 小数点后的20位可通过循环进行快速计算,计算方法如下: m%=n m*=10 小数点后第i位为m/n,回到第1步 第3步后,如果m%n为0,说明已经除净 ...
- sqlalchemy查询结果类型简析
Sqlalchemy的查询方式有很多种,例如可以查询全部,可以查询符合条件的,可以查询指定字段的.那么这么多种查询,返回的结果是不是一样的呢?作本文记录分析结果. Sql_forengin.py #c ...
- day 17 - 2 递归函数练习
1.斐波那契 问第n个斐波那契数是多少 #这个效率是低的,最好不要使用双递归 def fib(n): if n == 1 or n == 2: return 1 return fib(n-1) + ...
- 第四节,目标检测---YOLO系列
1.R-CNN回顾 适应全卷积化CNN结构,提出全卷积化设计 共享ResNet的所有卷积层 引入变换敏感性(Translation variance) 位置敏感分值图(Position-sensiti ...
- 一、cryptsetup文件系统加密
cryptsetup文件系统加密 今天做了SYC攻防题的文件系统挂载部分,在找到挂载最内层的final文件时发现mount无法识别,这也许就是一个加密的文件系统吧,还好-在龟速的 网络环境下查阅到 ...
- python-argparse使用
官方文档:https://docs.python.org/zh-cn/3.7/library/argparse.html?highlight=argparse#module-argparse argp ...
- SSH 架构
这几天学习了 ssh 架构,中间出了好多错误,现在终于整理好了,就记录下来 ssh机构的框架构成,以及它们的作用 struts2 :这个框架主要用做控制处理的,其核心是 Contraller ,即 A ...
- C++\CLI语法 在项目中的使用
通常情况下,对一个标准的com组件进行集成,网上普遍使用的方式有: 1.#import *.dll 或 #import *.ocx的方式,VS编译器重新编译后,就会自动生成组件对应的*.tlh文件,该 ...