最新消息:ocsen.wang域名正式启用了!

H5实现调用本地摄像头实现实时视频以及拍照功能

Html-Css ocsen 199浏览

getUserMedia API

HTML 5 的getUserMedia API提供了访问媒体的能力, 基于该特性, 开发者可以不依赖任何浏览器插件下去访问视频和音频等设备.

旧版API : navigator.getUserMedia
新版API : navigator.mediaDevices.getUserMedia

旧版语法:

  • getUserMedia(constraints, successCallback, errorCallback);

新版语法:

  • getUserMedia(constraints).then(successCallback).catch(errorCallback)
  • 参数 constraints, 请求的媒体类型, 主要包含video和audio, 例如请求不带任何参数的视频和音频: {video: true, audio: true}
    也可指定视频分辨率, 代码如下: {video: {width: 640, height: 360}}
    移动设备上, 可指定使用前置摄像头, 代码如下: {video: {facingMode: 'user'}}
    或者使用后置摄像头, 代码如下: {video: {facingMode: {exact : 'environment'}}}
  • 成功回调函数successCallback的参数stream, 为MediaStream对象, 表示媒体流, 可以通过URL.createObjectURL(马上废弃)转换后设置为Video或Audio元素的src属性来使用, 也可以直接使用srcObject属性来使用.
  • 失败回调函数为errorCallback

例子代码

  1.   <!DOCTYPE html>
  2. <html lang=“en”>
  3.     <head>
  4.         <meta charset=“UTF-8″>
  5.         <meta name=“viewport” content=“width=device-width, initial-scale=1.0″>
  6.         <meta http-equiv=“X-UA-Compatible” content=“ie=edge”>
  7.         <title>摄像头拍照</title>
  8.     </head>
  9.     <body>
  10.         <video id=“video” width=“480” height=“320” controls>
  11.         </video>
  12.         <div>
  13.             <button id=“capture”>拍照</button>
  14.         </div>
  15.         <canvas id=“canvas” width=“480” height=“320”></canvas>
  16.         <script>
  17.             //访问用户媒体设备的兼容方法
  18.             function getUserMedia(constraints, success, error) {
  19.                 if (navigator.mediaDevices.getUserMedia) {
  20.                     //最新的标准API
  21.                     navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error);
  22.                 } else if (navigator.webkitGetUserMedia) {
  23.                     //webkit核心浏览器
  24.                     navigator.webkitGetUserMedia(constraints, success, error)
  25.                 } else if (navigator.mozGetUserMedia) {
  26.                     //firfox浏览器
  27.                     navigator.mozGetUserMedia(constraints, success, error);
  28.                 } else if (navigator.getUserMedia) {
  29.                     //旧版API
  30.                     navigator.getUserMedia(constraints, success, error);
  31.                 }
  32.             }
  33.             let video = document.getElementById(‘video’);
  34.             let canvas = document.getElementById(‘canvas’);
  35.             let context = canvas.getContext(‘2d’);
  36.             function success(stream) {
  37.                 //兼容webkit核心浏览器
  38.                 let CompatibleURL = window.URL || window.webkitURL;
  39.                 //将视频流设置为video元素的源
  40.                 console.log(stream);
  41.                 //video.src = CompatibleURL.createObjectURL(stream);
  42.                 video.srcObject = stream;
  43.                 video.play();
  44.             }
  45.             function error(error) {
  46.                 console.log(`访问用户媒体设备失败${error.name}, ${error.message}`);
  47.             }
  48.             if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) {
  49.                 //调用用户媒体设备, 访问摄像头
  50.                 getUserMedia({ video: { width: 480, height: 320 } }, success, error);
  51.             } else {
  52.                 alert(‘不支持访问用户媒体’);
  53.             }
  54.             document.getElementById(‘capture’).addEventListener(‘click’function () {
  55.                 context.drawImage(video, 00480320);
  56.             })
  57.         </script>
  58.     </body>
  59. </html>

转载请注明:Ocsen-因上努力,果上随缘 » H5实现调用本地摄像头实现实时视频以及拍照功能

111