html5 音频和视频(audio And video)-程序员宅基地

1、音频和视频

 Web 上的视频
直到现在,仍然不存在一项旨在网页上显示视频的标准。
今天,大多数视频是通过插件(比如 Flash)来显示的。然而,并非所有浏览器都拥有同样的插件。
HTML5 规定了一种通过 video 元素来包含视频的标准方法。

视频格式
当前,video 元素支持三种视频格式:
格式       IE    Firefox    Opera   Chrome   Safari
Ogg       No    3.5+    10.5+     5.0+     No
MPEG4   9.0+   No           No      5.0+     3.0+
WebM    No      4.0+    10.6+    6.0+     No
Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg 文件
MPEG4 = 带有 H.264 视频编码和 AAC 音频编码的 MPEG 4 文件
WebM = 带有 VP8 视频编码和 Vorbis 音频编码的 WebM 文件

补充:在火狐最新版本下发现其是支持MP4视频格式的,感谢楼主@正在缓冲的补充!

Web 上的音频
直到现在,仍然不存在一项旨在网页上播放音频的标准。
今天,大多数音频是通过插件(比如 Flash)来播放的。然而,并非所有浏览器都拥有同样的插件。
HTML5 规定了一种通过 audio 元素来包含音频的标准方法。
audio 元素能够播放声音文件或者音频流。

音频格式
当前,audio 元素支持三种音频格式:
        IE 9   Firefox 3.5    Opera 10.5    Chrome 3.0    Safari 3.0
Ogg Vorbis           √          √        √
MP3       √                        √          √
Wav               √          √                √

 

简单的video元素创建

<video src="http://www.w3school.com.cn/example/html5/mov_bbb.ogg" controls>
        您的浏览器不支持video元素
</video> 

视频默认的大小是300*150
controls:显示视频的默认的控件

video标签的使用(带字幕文件)

<video src="http://www.w3school.com.cn/example/html5/mov_bbb.ogg"> 
        <!--此处添加字幕文件-->
        <track label="English" kind="subtitles" srclang="en" src="./test.vtt" default>
        您的浏览器不支持html5 video
    </video> 
<!--字幕文件的格式如下:-->
    <pre>
        WEBVTT
        1
        00:00:00.240 --> 00:00:04.130
        大家好 最近 Visual Studio 2013 做了一些更新

        2
        00:00:04.140 --> 00:00:08.110
        那我们今天请到 twMVC 的 Dino
        来为我们介绍这个更新里面关于 SASS Editor 的部分

        3
        00:00:18.120 --> 00:00:19.280
    </pre>

audio元素创建

<audio controls src="http://www.w3school.com.cn/i/song.mp3">
</audio> 

controls:显示通用的用户控件,包括开始,停止,跳播,以及音量控制

audio source元素

<audio controls>
        <source src="http://www.w3school.com.cn/i/song.mp3">
        <source src="http://www.w3school.com.cn/i/song.ogg">
    </audio>
    

source提供多个音频元素,供浏览器自身播放能力自动选择,如果支持的不知一种,浏览器会选择第一个来源。

媒体的控制 自动播放

<audio autoplay controls>
        <source src="http://www.w3school.com.cn/i/song.mp3">
        您的浏览器不支持audio
    </audio>

autoplay:设置音频自动播放

2、可脚本话的视频和音频

判断浏览器支持情况
  //    判断浏览器是否支持audio或者video元素最简单的办法是用脚本动态创建它,然后检测特定的函数是否存在
        var hasVideo = !!(document.createElement('video').canPlayType);
    
js中控制音频或者视频的内置的方法
      load()        加载音频或者视频文件,为播放做准备。通常情况下不需要调用,除非是动态创建的的元素,用来在在播放前加载
         play()        加载(如果还未加载完成)并播放音频或视频文件,除非音频或视频已经暂停在其他位置了,否则从头开始
         pause()        暂停处于播放的视频或者音频文件
         canPlayType(type)  试video元素是否支持给定MIME类型的文件
js中控制音频或者视频的内置只读属性
     duration    整个媒体文件的播放时长,以s为单位,如果无法获取时长返回NaN
        paused        如果媒体文件当前被暂停,则返回true,如果还未开始播放也返回true
        ended        如果媒体文件已经播放完毕。返回true
        startTime    返回最早的播放起始时间,一般是0.0,除非是从缓冲过的文件,并且一部分已经不在缓冲区了!
        error        在发生错误的时候返回的错误代码
        currentSrc    以字符串的形式返回当前正在播放的或已经加载的文件,对应于浏览器就是source选择的文件
js中可被脚本修改并影响播放的部分媒体元素的特性
     autoplay        将媒体文件设置为创建后自动播放,或者查询是否已经设置autoplay
        loop            如果媒体文件已经播放完毕后能重新播放则返回true,或者媒体将媒体文件设置为循环播放
        currentTime        以s为单位返回从开始播放到现在所用的时间,在播放过程中,设置currentTime来进行搜索,并定位到媒体文件特定的位置
        controls        显示或隐藏用户控制界面,或者查询用户控制界面当前是否可见
        volume            在0.0到1.0之前设置音频音量的值,或者查询当前音量的相对值
        muted            为音频文件设置静音或者消除静音,或者检测当前是否为静音
        autobuffer        通知播放器在媒体文件开始播放前是否进行缓冲加载,如果媒体文件设置autoplay,则忽略该属性
video元素的额外特性
    poster                    在视频加载完成之前,代表视频内容的图片的url地址,该属性可读可写,可以随意修改
        width,height             取或设置显示的尺寸。如果设置的宽度与视频本身大小不匹配,可能导致四周会出现黑色区域
        videoWidth,videoHeight   返回视频固有的宽度和高度,只读

3、html5通过canvas抓取视频(实例演示)

<!doctype html>
<meta charset="utf-8">
<html>
    <title></title>
    <body>
        <video id="movies" src="test.mp4" controls="controls" autobuffer="true" οncanplay="startVideo()" οnended="stopTimeLine()" width="1920px" height="758px">
        </video>
        <canvas id="timeLine" width="1920px" height="758px">
        </canvas>
    </body>
    <script>    
        var updataInterval = 100;//抓取帧的时间间隔
        var frameWidth = 1920;//时序中帧的尺寸
        var frameHeight = 758;
        //时序中总的帧数
        var frameRows = 4;
        var frameColumns = 4;
        var frameGrid = frameRows*frameColumns;
//当前帧 var frameCount = 0; //播放完取消计时器 var intervalid; var videoStart = false; //添加updateFrame函数 function updateFrame(){ var video = document.getElementById('movies'); console.log(video.videoWidth); console.log(video.videoHeight); var timeline = document.getElementById('timeLine'); var cxt = timeline.getContext('2d'); //根据帧数计算出当前播放的播放的位置 //然后以视频为输入参数绘制图像 var framePos = frameCount%frameGrid; var frameX = (framePos%frameColumns)*frameWidth; var frameY = (framePos%frameRows)*frameHeight; cxt.drawImage(video,0,0,1920,758,frameX,frameY,frameWidth,frameHeight); frameCount++; } function startVideo(){ if(videoStart){ return; } videoStart = true; updateFrame(); intervalId = setInterval(updateFrame,updataInterval); } //处理用户输入 var timeLine = document.getElementById('timeLine'); timeLine.onclick = function(evt){ var offX = evt.layerX - timeLine.offsetLeft; var offY = evt.layerY - timeLine.offsetTop; var clickedFrame = Math.floor(offY/frameHeight)*frameRows; clickedFrame += Math.floor(offX/frameWidth); var seekedFramed = (((Math.floor(frameCount/frameGrid)*frameGrid)) + clickedFrame); if(clickedFrame > (frameCount%16)){ seekedFramed = frameGrid; } if(seekedFramed < 0){ return; } var video = document.getElementById('movies'); video.currentTime = seekedFramed*updataInterval/1000; frameCount = seekedFramed; } function stopTimeLine(){ clearInterval(intervalId); } </script> </html>

html5的audio和video元素的引入,让html5在媒体选择上可以不需要通过引入插件的形式来播放音频和视频文件,此外音频和视频的集成API方法也可以方便我们控制音频和视频!

 

转载于:https://www.cnblogs.com/shizhouyu/p/4845989.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30920513/article/details/97103214

智能推荐

使用 matplotlib 绘制简单图表(折线图、柱形图、条形图、堆积面积图、直方图、饼图、散点图、箱形图、雷达图、误差棒图)_用matplotlib绘制图-程序员宅基地

文章浏览阅读2.1k次,点赞4次,收藏23次。X轴代表日期,y轴代表温度,由图可以清晰的看出北京市未来15天的最高气温和最低气温都呈现逐步下降后反弹的趋势。————2013-2019财年某电商平台的GMV。中的pyplot模块、numpy模块并设置中文。中的pyplot模块、numpy模块并设置中文。中的pyplot模块、numpy模块并设置中文。中的pyplot模块、numpy模块并设置中文。中的pyplot模块、numpy模块。中的pyplot模块、numpy模块。中的pyplot模块、numpy模块。中的pyplot模块、numpy模块。_用matplotlib绘制图

WebView内存泄漏解决方法_web-view memory access out-程序员宅基地

文章浏览阅读292次。##1.新开进程在WebView所在的activity新开辟一个进程,在onDestroy中杀死WebView所在的进程@Overridepublic void onDestroy() { android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy();}清单文..._web-view memory access out

Springboot整合PageHelper分页插件,java分布式开发面试题-程序员宅基地

文章浏览阅读227次,点赞3次,收藏7次。可能有人会问我为什么愿意去花时间帮助大家实现求职梦想,因为我一直坚信时间是可以复制的。我牺牲了自己的大概十个小时写了这片文章,换来的是成千上万的求职者节约几天甚至几周时间浪费在无用的资源上。上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源6072290)][外链图片转存中…(img-S0YU0wqO-1711156072290)]上面的这些(算法与数据结构)+(Java多线程学习手册)+(计算机网络顶级教程)等学习资源本文已被。

linux报错Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&inf_linux 安装vsftpd couldnot retrieve mirrorlist-程序员宅基地

文章浏览阅读1.6k次。解决方法:服务器未联网,联网即可解决_linux 安装vsftpd couldnot retrieve mirrorlist

matlab rx算法,精通MATLAB智能算法(2015代码)-程序员宅基地

文章浏览阅读363次。文件名大小更新时间Intelligent algorithm\10\s10_1\1.jpg535472014-04-26Intelligent algorithm\10\s10_1\s10_1.m87752014-04-26Intelligent algorithm\10\s10_2\1.jpg535472014-04-26Intelligent algorithm\10\s10_2\bys.m1..._rx-algorithm及其变体代码实现

Vue使用AntV/G2例子_vue2中使用antv中的水波图基础用法-程序员宅基地

文章浏览阅读780次。Vue项目中使用AntV/G2图表_vue2中使用antv中的水波图基础用法

随便推点

大数问题——26进制_z-26进制数是一个每位都是大写字母的数字。 a、b、c、…、x、y、z 分别依次代表一-程序员宅基地

文章浏览阅读4.3k次。杭电2100LovekeyProblem Description XYZ-26进制数是一个每位都是大写字母的数字。 A、B、C、…、X、Y、Z 分别依次代表一个0 ~ 25 的数字,一个 n 位的26进制数转化成是10进制的规则如下 A0A1A2A3…An-1 的每一位代表的数字为a0a1a2a3…an-1 ,则该XYZ-26进制数的10进制值就为 m = a0 * 26^(n-1) + a_z-26进制数是一个每位都是大写字母的数字。 a、b、c、…、x、y、z 分别依次代表一

程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)_直接插入排序34,65,12,56,78,10-程序员宅基地

文章浏览阅读129次。程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)原创 2012年05月12日 11:18:05标签:java /数据结构 /算法50847前几天,看到一篇前辈的博文“程序员必知的8大排序”,不禁的手痒起来,重新翻开严蔚敏老师的《数据结构》复习了一遍,然后一一的用java去实现,其中有不足之处,还望各位道友指正_直接插入排序34,65,12,56,78,10

Android:Json数据转换成Map_android json to hashmap-程序员宅基地

文章浏览阅读1.6k次。本文利用Gson来做实现,先导入:implementation 'com.google.code.gson:gson:2.8.6'主要利用的是JsonObject里的entrySet()方法,相关Demo代码如下:import com.google.gson.Gson;import com.google.gson.JsonElement;import com.google.gson.JsonObject;import java.util.HashMap;import java.ut_android json to hashmap

R语言 quantmod下载股票代码无法访问Yahoo的唯一解决方法_r语言下载不了雅虎数据-程序员宅基地

文章浏览阅读394次。总结而言,当无法访问Yahoo时,使用quantmod包下载股票代码的一个可行解决方法是选择替代数据源,例如Alpha Vantage,并使用其提供的API密钥来获取数据。值得注意的是,使用Alpha Vantage作为替代数据源可能会有一些限制,例如每分钟请求的次数有限制,并且可能无法提供与Yahoo相同的数据范围和质量。getSymbols函数用于从指定的数据源获取股票数据,参数src用于指定数据源,api.key用于传递API密钥。在获得API密钥后,我们可以使用以下代码来获取股票代码。_r语言下载不了雅虎数据

Matlab函数句柄调用图像K均值分类_function varargout = classification_outputfcn(hobj-程序员宅基地

文章浏览阅读1.2k次。function varargout = guideTemp2(varargin)% GUIDETEMP2 MATLAB code for guideTemp2.fig% GUIDETEMP2, by itself, creates a new GUIDETEMP2 or raises the existing% singleton*.%% H = GUID_function varargout = classification_outputfcn(hobject, eventdata, handles)

1688API获得店铺详情_1688获得店铺详情-程序员宅基地

文章浏览阅读271次。seller_info - 获得店铺详情测试网址:http://console.open.onebound.cn/console/?i=eidiResult Object:---------------------------------------{ "user": { "nick": "yylsmould", "city": "浙江 宁波", "good_num": "", "level": "11", "user_num_id": null, "company_i_1688获得店铺详情