HTML5调用摄像头+视频特效+录制视频+录音+截图+变声+滤波+音频可视化

本文介绍了如何使用HTML5原生API调用摄像头、实现视频特效、截图、录音、变声和滤波处理。通过navigator.mediaDevices.getUserMedia()获取视频流,利用AudioContext进行音频处理,包括音频可视化、滤波和变声。MediaRecorder用于录制视频和音频,实现简单的多媒体交互功能。
摘要由CSDN通过智能技术生成

1.写在前面

根据最近的学习,写了一个demo,
可以通过navigator.mediaDevices.getUserMedia()方法调用电脑摄像头,并实现了录制音频,录制视频,对摄像头的内容进行截图下载;通过AudioContext使用web audio api处理音频信息,实现滤波以及简单变声处理。录制使用的api是MediaRecorder。整个demo没有使用其他的库,全部是原生api. 本项目代码我会上传。

2.实现过程

(1)调用摄像头
pc端大部分浏览器支持getUserMedia()方法,安卓端除了chrome for android支持的很少;同时,要注意,在本地调用这个方法被禁止,只能在在线网页使用,我的测试使用了nodejs方法,写一个简单的后台,构建一个http服务器,localhost方式访问。使用navigator.mediaDevices.getUserMedia()获取视频,返回值是一个promise类型;调用代码如下:

var video = document.querySelector('video');
var option = {
  audio:false,video:{
  width:640,height:480}};
var media = navigator.mediaDevices.getUserMedia(option);
  media.then(show).catch((error)=>{
    console.log(error)});
  function show(mediaStream){
    video.src = window.URL.createObjectURL(mediaStream);
    //将meida流转为url
    video.onloadedmetadata = function(e) {
        video.play();
  };

这段代码是调用核心,会请求用户是否打开摄像头。方法参数是设置,具体参见MDN网站接口指导。其中,URL.createObjectURL(blob)这个方法会把blob格式数据转为url,然后通过提供给audio,video等标签就可以显示,这个方法在我们的应用中很常用。
(2)视频特效
实现了简单的特效,grayscale/sepia/blur 分别是灰色画面/黄色画面特效/模糊效果等等,核心是使用css的filter去完成,<filter属性不止可以使用在图片上,也可以用在video标签上!> filter特效有很多.参考MDN.

css:
video{
      background: rgba(255,255,255,0.5);
    }
    .grayscale{
      filter: grayscale(1);
    }
    .sepia{
      filter:sepia(1);
    }
    .blur{
      filter: blur(3px);
    }
//js:
video.onclick = ()=>{
      count++;
      switch(count){
        case 1:video.className = 'grayscale';break;
        case 2:video.className = 'sepia';break;
        case 3:video.className = 'blur';break;
        case 4:video.className = '';count=0;break;
      }
    }

然后设定每次点击让video具有上面其中一个className,就可以具有不同特效了,很简单。同时要明白这只是css特效,视频本身并没有改变。截图等得到的画面不会有这些css特效,如果需要视频本身就有特效,可以被截图捕捉,可以使用canvas播放视频并处理:(我的简单尝试)

  //    var canvas = document.querySelector('canvas');
  //    var ctx = canvas.getContext('2d');
  //    setInterval(function(){
   
  //        ctx.drawImage(video,0,0,640,480);
  //        var imgdata = ctx.getImageData(0,0,640,480);
  //        //反相处理
  //        for(var i = 0; i < imgdata.height; ++i){
   
  //     for(var j = 0; j < imgdata.width; ++j){
   
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值