如何使用jquery使用网络摄像头或移动设备捕获图像?

时间:2018-02-04 14:37:14

标签: jquery html5 laravel-5 jquery-mobile php-7

我正在构建一个应用程序,它应该打开手机或网络摄像头中的前置摄像头。我的代码在网络上运行良好但在移动设备和标签上没有响应。我该如何解决这个问题? 我正在使用 getUserMedia Web API。 如何更改我的代码以捕获网络摄像头和移动设备中的图像?

Html代码

<video id="video"></video>
<canvas id="canvas" style="display:none;"></canvas>
<div id="buttoncontent">

</div>

 {{ csrf_field() }}
<button id="startbutton" class="btn btn-primary "  >CAPTURE</button>
<button type="submit" id="cancel" class="btn btn-primary  cancel">Next</button>

jquery代码

  var streaming = false,
    video = document.querySelector('#video'),
    canvas = document.querySelector('#canvas'),
    buttoncontent = document.querySelector('#buttoncontent'),
    cancel= document.querySelector('#cancel'),
    //photo = document.querySelector('#photo'),
    startbutton = document.querySelector('#startbutton'),
    width = 320,
    height = 0;


  navigator.getMedia = ( navigator.getUserMedia ||
                       navigator.webkitGetUserMedia ||
                       navigator.mozGetUserMedia    ||
                       navigator.msGetUserMedia
                       );

  navigator.getMedia({
      video: true,
      audio: false
    },
    function(stream) {
      if (navigator.mozGetUserMedia) {
        video.mozSrcObject = stream;
      } else {
        var vendorURL = window.URL || window.webkitURL;
        video.src = vendorURL.createObjectURL(stream);
      }
      video.play();
    },
    function(err) {
      console.log("An error occured! " + err);
    }
  );

  video.addEventListener('canplay', function(ev) {
    if (!streaming) {
      height = video.videoHeight / (video.videoWidth / width);
      video.setAttribute('width', width);
      video.setAttribute('height', height);
      canvas.setAttribute('width', width);
      canvas.setAttribute('height', height);
      streaming = true;
    }
  }, false);

  function takepicture() {
    video.style.display = "none";
    canvas.style.display = "block";
    startbutton.innerText= "RETAKE";
    canvas.width = width;
    canvas.height = height;
    canvas.getContext('2d').drawImage(video, 0, 0, width, height);
    var data = canvas.toDataURL('image/png');

    canvas.setAttribute('src', data);
    return   data;
  }

  startbutton.addEventListener('click', function(ev) {

    if(startbutton.innerText==="CAPTURE")
    {
        var data=takepicture();

        $('#file').val(data);
    }
    else
    {
        video.style.display = "block";
        canvas.style.display = "none";
      startbutton.innerText= "CAPTURE";
    }
    ev.preventDefault();
  }, false);
  cancel.addEventListener('click',function(e)
    {
            if(cancel.innerText==="Next")
            {
                    video.mozSrcObject.getTracks().forEach( (track) =>
                    {
                        track.stop();
                     });
            }

    }, false);


});

它在手机中不起作用。请帮我解决这个问题。它在网络上处以罚款。

如何更改我的代码以捕获网络摄像头或移动设备中的图像?

1 个答案:

答案 0 :(得分:0)

  1. 在https或localhost
  2. 上运行它们
  3. 在您的视频标记中添加playsinline
相关问题