HTML5 使用video标签实现选择摄像头功能

1. html 


// jquery reference 
// <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
//


	<input type="hidden" name="imgValue" id="imgValue" />
	<button id="btnOpen1" class="btn btn-default" type="button" >Open WebCam</button>
	<select id="videoSource" ></select>


	<div id="vdoOne" style="display:none">
		<video id="video" style="margin-top:15px;margin-bottom:15px;" width="300" autoplay></video>
		<canvas id="canvasPreview" style="margin-top:15px;" width="300" height="224"></canvas>
		<canvas id="canvasUpload" style="display:none;" width='300' height='224'></canvas>
		<button id="snap" class="btn btn-default" type="button">Snap Photo</button>
	</div>






2. javascript 


<script>


 Elements for taking the snapshot
        var canvasPreview = document.getElementById('canvasPreview');
        var canvasUpload = document.getElementById('canvasUpload');
        var contextPreview = canvasPreview.getContext('2d');
        var contextUpload = canvasUpload.getContext('2d');




        //#################### Video Source #######################3
        var videoElement = document.querySelector('video');
        var videoSelect = document.querySelector('select#videoSource');


        navigator.mediaDevices.enumerateDevices()
            .then(gotDevices).then(getStream).catch(handleError);


        videoSelect.onchange = getStream;




        function gotDevices(deviceInfos) {
            for (var i = 0; i < deviceInfos.length; ++i) {
                var deviceInfo = deviceInfos[i];
                var option = document.createElement('option');
                option.value = deviceInfo.deviceId;
                if (deviceInfo.kind === 'videoinput') {
                    option.text = deviceInfo.label ||
                        'camera ' +
                        (videoSelect.length + 1);
                    videoSelect.appendChild(option);
                } else {
                    console.log('Found ome other kind of source/device: ', deviceInfo);
                }
            }
        }


        var _streamCopy = null;
        function getStream() {
            if (_streamCopy != null) {
                try {
                    _streamCopy.stop(); // if this method doesn't exist, the catch will be executed.
                } catch (e) {
                    _streamCopy.getVideoTracks()[0].stop(); // then stop the first video track of the stream
                }
            }
            
            var constraints = {
                audio:false,
                video: {
                    optional: [
                        {
                            sourceId: videoSelect.value
                        }
                    ]
                }
            };
            
            navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(handleError);
        }


        function gotStream(stream) {
            _streamCopy = stream; // make stream available to console
            videoElement.srcObject = stream;
        }


        function handleError(error) {
            alert(error.name + ": " + error.message);
        }


        //######################## End Video Source #################




        // Get access to the camera!
        if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
            navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) {
                videoElement.src = window.URL.createObjectURL(stream);
                videoElement.play();


            });
        } else {
            document.getElementById("pnlVideo1").style.display = "none";
        }




         Trigger photo take
        document.getElementById("snap").addEventListener("click",
            function() {
                contextPreview.drawImage(videoElement, 0, 0, 300, 224);
                contextUpload.drawImage(videoElement, 0, 0, 300, 224);
                document.getElementById("video").style.display = "none";
                document.getElementById("snap").style.display = "none";
                document.getElementById("canvasPreview").style.display = "block";


                var image = document.getElementById("canvasUpload").toDataURL("image/jpeg");
                image = image.replace('data:image/jpeg;base64,', '');
                $("#imgValue").val(image);
				
				alert("image value :" + image);
            });


         Trigger photo take




        document.getElementById("btnOpen1").addEventListener("click",
            function() {
                document.getElementById("vdoOne").style.display = "block";
                document.getElementById("video").style.display = "block";
                document.getElementById("snap").style.display = "block";
                document.getElementById("canvasPreview").style.display = "none";
            });
			
</script>


  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值