H5 调用摄像头

WebRTC(Web Real-Time Communication,网页实时通信),是一个支持网页浏览器进行实时语音对话或视频对话的API。

1、getUserMedia

要播放摄像头的影像,首先需要一个video标签:

<video id="video"></video>

获取摄像头影像主要是通过navigator.getUserMedia这个接口,这个接口的支持情况已经逐渐变好了:点这里

不过,使用的时候还是要加上前缀的,兼容代码:

navigator.getUserMedia =  navigator.getUserMedia
                         || navigator.webkitGetUserMedia
                         || navigator.mozGetUserMedia;
语法: navigator.getUserMedia(constraints, successCallback, errorCallback);

 参数说明:

  • constraints:Object类型,指定了请求使用媒体的类型
  • succeCallback:启用成功时的函数,它传入一个参数,为视频流对象,可以进一步通过window.URL.createObjectURL()接口把视频流转换为对象URL。
  • errorCallback:启动失败时的函数。它传入一个参数,为错误对象(chrome)或错误信息字符串(Firefox),可能值:

 PERMISSION_DENIED:用户拒绝提供信息。

NOT_SUPPORTED_ERROR:浏览器不支持硬件设备。

MANDATORY_UNSATISFIED_ERROR:无法发现指定的硬件设备。

 例如:要启用视频设备(摄像头),可这样:

navigator.getUserMedia({
  video: true
});

 如果要同时启用视频设备和音频设备,可这样:

navigator.getUserMedia({
  video: true,
  audio: true
});

  2、 获取摄像头

 

var URL = window.URL || window.webkitURL; // 获取到window.URL对象
navigator.getUserMedia({
  video: true
}, function(stream) {
  video.src = URL.createObjectURL(stream);// 将获取到的视频流对象转换为地址
  video.play();
}, function(error) {
  console.log(error.name || error);
});

  

3、 截图

除了实时直播外,我们还可以做实时截图效果,这时我们需要利用<canvas>元素来画图,代码如下:

<canvas id="canvas"></canvas>

var canvas = document.getElementById(‘canvas‘);
var ctx = canvas.getContext(‘2d‘);
var width = video.width;
var height = video.height;
canvas.width = width;
canvas.height = height;

ctx.drawImage(video, 0, 0, width, height);

  

 

4、 保存图片

当然,截图后,你也可以保存下来:

  

<a download=‘snap.png‘ id="download">下载图片</a>   

var url = canvas.toDataURL(‘image/png‘);
document.getElementById(‘download‘).src = url;

  5、 完整实例

实例代码(由于安全限制问题,请将代码复制到本地运行):

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title></title>
    <style>
      #canvas,#video {
        float: left;
        margin-right: 10px;
        background: #fff;
      }
      .box {
        overflow: hidden;
        margin-bottom: 10px;
      }
    </style>
  </head>
  <body>
    <div class="box">
      <video id="video" width="400" height="300"></video>
      <canvas id="canvas"></canvas>
    </div>
    <button id="live">直播</button>
    <button id="snap">截图</button>
    <script>
      var video = document.getElementById(‘video‘);
      var canvas = document.getElementById(‘canvas‘);
      var ctx = canvas.getContext(‘2d‘);
      var width = video.width;
      var height = video.height;
      canvas.width = width;
      canvas.height = height;
      function liveVideo(){
        var URL = window.URL || window.webkitURL;   // 获取到window.URL对象
        navigator.getUserMedia({
          video: true
        }, function(stream){
          video.src = URL.createObjectURL(stream);   // 将获取到的视频流对象转换为地址
          video.play();   // 播放
          //点击截图
          document.getElementById("snap").addEventListener(‘click‘, function() {
            ctx.drawImage(video, 0, 0, width, height);
            var url = canvas.toDataURL(‘image/png‘);
            document.getElementById(‘download‘).href = url;
          });
        }, function(error){
          console.log(error.name || error);
        });
      }
      document.getElementById("live").addEventListener(‘click‘,function(){
        liveVideo();
      });
    </script>
  </body>
</html>

  

时间: 2024-10-13 12:57:19

H5 调用摄像头的相关文章

h5调用摄像头

<!DOCTYPE html> <html> <head> <title>摄像头测试</title> </head> <body> <!--video用于显示媒体设备的视频流,自动播放--> <video id="video" autoplay style="width: 480px;height: 320px"></video> <!--拍

H5调用摄像头拍照

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <title>摄像头拍照</title> <meta name="viewport" content="widt

H5调用设备摄像头和系统相册

1.调用设备摄像头 <input type="file" accept="image/*" capture="camera"> 2.调用系统相册 <input type="file" capture="camera"> 3.调用摄像头和系统相册 <input type="file" accept="image/*">

h5调用底层接口知识总结

本文标签: h5调用底层接口 h5 h5调用本地摄像头 前端时间使用HTML5做了一个WEB端APP,其中用到了H5页面调用手机摄像头的功能,当时也是花了不少时间去研究.最终是采用了HTML5plus(HTML5+)的方式完成了该功能,现将具体方法简单介绍下,并讲解下使用的注意事项.放在服务器上然后浏览就可以了,只支持Chrome和Safari核的浏览器,QQ浏览器,Chrome,Safari浏览器都可以.在不同的手机和浏览器上面展现的方式不一样.这是html5官方文档地址,里面有关于h5或js

h5调用底层接口的一些知识

本文作者祈澈姑娘,转载请标记转载出处,谢谢. 之前接触过这方面的知识,一直想写一些关于代码的文字,但考虑到浪费时间,又不具备大神的实力,也不想去把别人的代码照搬过来,所以一直都是空白着的,今天敲代码的时候,有了一个比较好的想法,第一,定位在学习这一块,去学习一些领域的新知识,并分享自己每天的学习成果,第二,总结工作中遇到的代码,解决的问题,拿出自己的demo截图,做出一些文字说明解释,相信通过这两个途径,能够让自己取得更大的发展空间. h5调用本地摄像头 前端时间使用HTML5做了一个WEB端A

谷歌使用navigator.mediaDevices.getUserMedia 调用摄像头拍照功能,不兼容IE

<template> <div> <!--canvas截取流--> <canvas ref="canvas" width="320" height="260"></canvas> <!--图片展示--> <video ref="video" width="340" height="280" autoplay&g

麦子学院Android实战调用摄像头代码分享

Android如何实现调用摄像头?在安卓APP开发的过程中,经常会需要调用手机自身摄像头拍照的代码,那么android调用摄像头的代码是什么呢?现在麦子学院android开发老师告诉大家,android调用摄像头这个方法十分的简单实用,有需要的小伙伴可以参考下. 应用场景: 在Android开发过程中,有时需要调用手机自身设备的功能,本文侧重摄像头拍照功能的调用. 知识点介绍: 使用权限:调用手机自身设备功能(摄像头拍照功能),应该确保已经在AndroidManifest.xml中正确声明了对摄

win8 metro 调用摄像头拍摄照片并将照片保存在相应的位置

刚刚做过这类开发,所以就先献丑了,当然所贴上的源码都是经过验证过的,已经运行成功了,希望可以给大家一些借鉴: 下面是metro UI代码: <Page x:Class="Camera.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

android调用摄像头拍照

调用手机摄像头拍照,获取拍照后的图片数据.以下代码是在activity中:     // 调用摄像头         Button b = (Button) findViewById(R.id.btn1);     b.setOnClickListener(new View.OnClickListener() {         @Override         public void onClick(View v) {             // Here we fire the inte