美文网首页
html5 中获取摄像头设备 2018-10-25

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

作者: metaFormNLP | 来源:发表于2018-10-25 17:04 被阅读0次

    <!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>

    相关文章

      网友评论

          本文标题:html5 中获取摄像头设备 2018-10-25

          本文链接:https://www.haomeiwen.com/subject/ztectqtx.html