JS调用摄像头屏幕截图

<!DOCTYPE html>
<html>

<head>
  <title>JS调用摄像头屏幕截图</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <style>

  </style>
  <script src="https://code.jquery.com/jquery-2.2.4.min.js" integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="  
  crossorigin="anonymous"></script>
  <script src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
  <script type="text/javascript">
	var localVideo;
	var localStream;
    var aCanvas;
    var ctx;
	$(function(){
	    localVideo = document.querySelector('#localVideo');	
		aCanvas = document.getElementById('canvas');
		ctx = aCanvas.getContext('2d');
		navigator.mediaDevices.enumerateDevices()
		.then(function(devices) {
		  devices.forEach(function(device) {
			if(device.kind === "videoinput"){
				if(device.label === ""){
					$("#videoDevice").append("<option value='" + device.deviceId  + "'>" + device.deviceId + "</option>");
				}else{
					$("#videoDevice").append("<option value='" + device.deviceId  + "'>" + device.label + "</option>");
				}
			}
			if(device.kind === "audioinput"){
				if(device.label === ""){
					$("#microphoneDevice").append("<option value='" + device.deviceId  + "'>" + device.deviceId + "</option>");
				}else{
					$("#microphoneDevice").append("<option value='" + device.deviceId  + "'>" + device.label + "</option>");
				}
			}
			//console.log(device.kind + ": " + device.label +	" id = " + device.deviceId);
		  });
		})
		.catch(function(err) {
		  console.log(err.name + ": " + err.message);
		});
	});

	
	function View(){	
		let deviceType = $('input[name="deviceType"]:checked').val().toString();
		if (deviceType === "1") {//摄像头
			return new Promise(function (resolve, reject) {
				navigator.mediaDevices.getUserMedia({
					audio: {deviceId: $("#microphoneDevice").val()},
					video: {deviceId: $("#videoDevice").val()}
					//video: {mediaSource: 'screen'}//屏幕共享只支持火狐
				}).then(function openLocalStream(stream) {
					localVideo.srcObject = stream;
					localStream = stream;
					resolve('初始化本地视频成功!');
				}).catch(function (e) {
					console.log(e);
					alert('getUserMedia() error: ' + e.name);
					reject(e);
				});
			});
		} else {//屏幕
			return new Promise(function (resolve, reject) {
				navigator.mediaDevices.getDisplayMedia({
					video: {cursor: "never"},
					audio: false //true时谷歌报错
				}).then(function (stream) {
					localVideo.srcObject = stream;
					localStream = stream;
					resolve('初始化本地视频成功!');
				}).catch(function (e) {
					console.log(e);
					alert('getDisplayMedia() error: ' + e.name);
					reject(e.name);
				});
			});
		}
	}
	
	function Stop(){
		//清空图像
		localVideo.srcObject = null;
		//关闭设备
		localStream.getTracks().forEach(track => {
		track.stop();
		});
	}
	
	function Snap(){
		ctx.drawImage(localVideo, 0, 0, 640, 480); //将获取视频绘制在画布上
	}
  </script>
</head>

<body>
  <input type="radio" name="deviceType" value="1" checked>摄像头
  <input type="radio" name="deviceType" value="2">屏幕
  <button type="button" onclick="View()">显示</button>
  <button type="button" onclick="Stop()">停止</button>
  <button type="button" onclick="Snap()">截图</button>
  视频:<select id="videoDevice"></select>  
  麦克风:<select id="microphoneDevice"></select>
  <br>
  <video id="localVideo" style="width: 600px; height:600px" autoplay></video>
  <canvas id="canvas" width="600" height="600"></canvas>
</body>

</html>

在线代码:https://codepen.io/pen/?&editable=true

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值