html5 中获取摄像头设备 2018-10-25

2018-10-25  本文已影响0人  metaFormNLP

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>HTML5 GetUserMedia Demo</title>

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />

</head>

<body>

<input type="button" title="开启摄像头" value="开启摄像头" onclick="getMedia();" /><br />

<video height="120px" autoplay="autoplay"></video><hr />

<input type="button" title="拍照" value="拍照" onclick="getPhoto();" /><br />

<canvas id="canvas1" height="120px" ></canvas><hr />

<input type="button" title="视频" value="视频" onclick="getVedio();" /><br />

<canvas id="canvas2" height="120px"></canvas>

<script type="text/javascript">

var video =document.querySelector('video');

var audio,audioType;

var canvas1 =document.getElementById('canvas1');

var context1 =canvas1.getContext('2d');

var canvas2 =document.getElementById('canvas2');

var context2 =canvas2.getContext('2d');

navigator.getUserMedia =navigator.getUserMedia ||navigator.webkitGetUserMedia ||navigator.mozGetUserMedia ||navigator.msGetUserMedia;

window.URL =window.URL ||window.webkitURL ||window.mozURL ||window.msURL;

var exArray = [];//存储设备源ID

        navigator.mediaDevices.enumerateDevices()

.then(function (devices) {

devices.forEach(function (device) {

var option =document.createElement('option');

option.value = device.deviceId;

if (device.kind ==='videoinput') {

option.text = device.label ||'camera' + (videoSelect.length +1);

videoSelect.appendChild(option);

}else if (device.kind =='audioinput') {

option.text = device.label ||'mic' + (audioSelect.length +1);

audioSelect.appendChild(option);

}

});

})

.catch(function (err) {

console.log(err.name +": " + err.message);

});

function getMedia() {

if (navigator.getUserMedia) {

navigator.getUserMedia({

'video': {

'optional': [{

'sourceId':exArray[1]//0为前置摄像头,1为后置

                        }]

},

'audio':true

                },successFunc,errorFunc);//success是获取成功的回调函数

            }

else {

alert('Native device media streaming (getUserMedia) not supported in this browser.');

}

}

function successFunc(stream) {

alert('Succeed to get media!');

if (video.mozSrcObject !==undefined) {

//Firefox中,video.mozSrcObject最初为null,而不是未定义的,我们可以靠这个来检测Firefox的支持

                video.mozSrcObject = stream;

}

else {

video.src =window.URL.createObjectURL(stream) || stream;

}

//video.play();

            // 音频

            audio =new Audio();

audioType =getAudioType(audio);

if (audioType) {

audio.src ='polaroid.' +audioType;

audio.play();

}

}

function errorFunc(e) {

alert('Error!'+e);

}

// 将视频帧绘制到Canvas对象上,Canvas每60ms切换帧,形成肉眼视频效果

        function drawVideoAtCanvas(video,context) {

window.setInterval(function () {

context.drawImage(video,0,0,90,120);

},60);

}

//获取音频格式

        function getAudioType(element) {

if (element.canPlayType) {

if (element.canPlayType('audio/mp4; codecs="mp4a.40.5"') !=='') {

return ('aac');

}else if (element.canPlayType('audio/ogg; codecs="vorbis"') !=='') {

return ("ogg");

}

}

return false;

}

// vedio播放时触发,绘制vedio帧图像到canvas

//        video.addEventListener('play', function () {

//            drawVideoAtCanvas(video, context2);

//        }, false);

        //拍照

        function getPhoto() {

context1.drawImage(video,0,0,90,120);//将video对象内指定的区域捕捉绘制到画布上指定的区域,实现拍照。

        }

//视频

        function getVedio() {

drawVideoAtCanvas(video,context2);

}

</script>

</body>

</html>

上一篇 下一篇

猜你喜欢

热点阅读