html5音频播放器,简要介绍html5中视频和音频的一些常见格式

  html5音频播放器,简要介绍html5中视频和音频的一些常见格式

  本文概述

  长期以来,音视频信息的获取一直是Web开发中的一个难点。多年来,我们一直依赖浏览器插件来满足这一需求。

  在HTML 5中,有很多API可以访问硬件设备,比如GPS设备的地理定位API,加速度计设备的方位API,GPU设备的WebGL API,音频播放设备的Web Audio API等等。这些API非常强大,因为开发人员可以通过编写JavaSccript脚本代码直接访问底层硬件设备。

  本文介绍了一个新的API,它使Web应用程序能够通过使用navigatior.getUserMedia()方法来访问用户的摄像头和麦克风设备。捕捉媒体数据的技术发展历史

  在过去的几年中,在Web应用中访问客户端的本地设备的需求开始出现。因此,W3C决定组织一个DAP(Device API POLICY)工作组,为这一需求的实现制定统一的标准。

  让我们来看看2011年发生了什么:

  在HTML页面文件中捕获媒体数据

  DAP工作组制定的第一个标准是如何在Web应用程序的HTML页面中捕获媒体数据。他们决定重载file类型的input元素(input type=file ),并向accept属性添加一个新的属性值。

  如果开发者想实现用户通过摄像头拍照的功能,可以编写如下所示的代码。复制代码如下:

  输入类型= file accept= image/*;“捕捉=相机”

  录制视频数据和音频数据的代码类似:复制代码如下:

  输入类型= file accept= video/*;“拍摄=摄像机”

  输入类型= file accept= audio/*;“捕捉=麦克风”

  在这些代码中,你只需要使用文件控件(file类型的input元素)就可以完成拍照或者记录媒体数据的功能。然而,这些代码并没有被开发人员广泛使用,因为它们仍然缺乏满足相关要求的能力(例如在canvas元素中渲染捕获的视频数据,或者对捕获的视频数据应用WEBGL过滤器)。

  浏览器支持:

  安卓3.0浏览器

  安卓版Chrome浏览器(0.16)

  火狐移动版10.0

  元件设备

  如果使用文件控制,捕获媒体数据和处理媒体数据的能力非常有限,因此出现了一种可以支持任何设备的新标准。该标准使用设备元素。

  Opera browser是第一个通过设备元素捕获视频数据的浏览器。几乎在同一天,WhatWG组织决定使用navigator.getUserMedia()方法来捕获媒体数据。一周后,Opera推出了支持navigator.getUserMedia()方法的新浏览器。后来微软工具推出了支持这种方式的IE 9浏览器。

  设备元素的用法如下。复制代码如下:

  device type= media onchange= update(this . data)/device

  视频自动播放/视频

  脚本

  功能更新(流){

  document.querySelector(video )。src=stream.url

  }

  /script支持浏览器:

  遗憾的是,到目前为止,还没有官方浏览器支持device元素。

  实时通信

  近年来,由于WebRTC(Web Real Time Communication)API的出现,媒体数据采集技术取得了很大的发展。谷歌、Opera、Mozilla和其他公司正试图在其浏览器中实现这一功能。

  WebRTC API是一个与getUserMedia方法紧密相关的API,它提供了访问客户端本地摄像头或麦克风设备的能力。

  浏览器支持:

  到目前为止,在Chrome 18版浏览器中,在chrome://flags页面中设置后就可以使用WebRTC,而在Chrome 21版浏览器中,默认使用这个API,不需要设置。Opera 12和Firefox 17的浏览器默认支持WebRTC API。

  使用getUserMedia方法

  通过使用getUserMedia方法,我们可以直接访问客户端中的摄像头设备和麦克风设备,而不依赖于插件。检测浏览器支持

  可以通过以下方法检查浏览器是否支持getUserMedia方法。复制代码如下:

  函数hasGetUserMedia() {

  //请注意:Opera浏览器中不使用前缀

  回归!(navigator . getuser media navigator . WebKit getuser media

  navigator . mozgetusermedia navigator . msgetusermedia);

  }

  if (hasGetUserMedia()) {

  Alert(“您的浏览器支持getUserMedia方法”);

  }

  否则{

  Alert(“您的浏览器不支持getUserMedia方法”);

  }获取访问设备的权限 为了访问客户端摄像头设备和麦克风设备,我们首先需要获得许可。getUserMedia方法的第一个参数是用于指定媒体类型的对象。例如,当您要访问摄像设备时,第一个参数应该是{video:true}。为了同时访问摄像头设备和麦克风设备,您需要使用{video:true,audio:true}参数。代码如下:复制代码如下:

  视频自动播放id=视频/视频

  脚本

  var onFailSoHard=function() {

  警报(“设备拒绝访问”);

  };

  //不要使用供应商前缀

  navigator . get user media({ video:true,audio: true},function(localMediaStream) {

  var video=document . getelementbyid( video );

  video.src=window。URL . createobjecturl(local media stream);

  //请注意:使用getUserMedia方法时,Chrome浏览器中不会触发onloadedmetadata事件。

  video . onloadedmetadata=function(e){

  //后面的代码省略。

  };

  },onFailSoHard);

  /脚本

  在这段代码中,使用了视频元素。请注意,我们没有使用video元素的src属性值,而是为video元素指定了引用媒体文件的URL地址,并将表示从摄像机获取的视频数据的LocalMediaStream对象转换为Blob URL。

  在这段代码中,autoplay属性同时用于video元素。如果不使用该属性,视频元素将停留在获取的第一帧。

  请注意:在Chrome浏览器中,如果只使用{audio:true}会引发BUG。在Opera浏览器中,音频元素也不能使用。

  如果希望多个浏览器同时支持getUserMedia方法,请使用如下所示的代码:复制代码如下:

  窗户。URL=窗口。URL window.webkitURL

  navigator . getuser media=navigator . getuser media navigator . WebKit getuser media

  navigator . mozgetusermedia navigator . msgetusermedia;

  var video=document . getelementbyid( video );

  if (navigator.getUserMedia) {

  navigator . getuser media({ audio:true,video: true},function(stream) {

  video.src=window。URL.createObjectURL(流);

  },onFailSoHard);

  }

  否则{

  Alert(“您的浏览器不支持getUserMedia方法”);

  }安全性

  在某些浏览器中,当调用getUserMedia方法时,会显示一个提示窗口,询问用户是允许还是拒绝访问他们的摄像头或麦克风。拍照

  在Canvas API中,可以使用方法ctx.drawImage(video,0,0)将video元素中的一帧输出到Canvas元素中。当然,由于我们已经将用户摄像头拍摄的图像信息导出到了video元素中,我们也可以通过video元素将图像信息导出到canvas元素中,即实现实时拍照功能。代码如下所示。复制代码如下:

  视频自动播放/视频

  img src= id=img /img

  canvas style= display:none;id=画布/canvas

  var video=document . getelementbyid( video );

  var canvas=document . getelementbyid( canvas );

  var CTX=canvas . get context( 2d );

  var localMediaStream=null

  函数快照(){

  if (localMediaStream) {

  ctx.drawImage(视频,0,0);

  document.getElementById(img )。src=canvas . toda taurl( image/png );

  }

  }

  video.addEventListener(click ,snapshot,false);

  //不要使用供应商前缀

  navigator . get user media({ video:true },function(stream) {

  video.src=window。URL.createObjectURL(流);

  localMediaStream=stream

  },onFailSoHard);应用CSS滤镜

  目前为止,Chrome 18及以上版本的浏览器都可以使用CSS滤镜。

  通过使用CSS滤镜,我们可以向video元素中捕获的视频添加各种图像滤镜效果。复制代码如下:

  风格

  #视频3 {

  宽度:307px

  高度:250px

  背景:rgba(255,255,255,0.5);

  边框:1px纯色# ccc

  }。灰度{

  -WebKit-滤镜:灰度(1);

  }。棕褐色

  -网络工具包-滤镜:棕褐色(1);

  }。模糊

  -WebKit-filter:blur(3px);

  }

  .

  /风格

  视频id=视频自动播放/视频

  脚本

  var idx=0;

  var过滤器=[灰度,棕褐色,模糊,亮度,对比度,色调-旋转,

  hue-rotate2 , hue-rotate3 , saturate , invert , ];

  功能改变过滤器(e) {

  var el=e.target

  埃尔。类名=" ";

  var effect=过滤器[idx %过滤器。长度];//循环通过过滤器。

  如果(效果){

  el.classList.add(效果);

  }

  }

  document.getElementById(video )。addEventListener(click ,changeFilter,false);

  /脚本

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: