本地摄像头

<html>
<head>
    <title>PC本地摄像头</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <script type="text/javascript">

        var audioSelect = null;
        var videoSelect = null;


        function gotSources(sourceInfos) {
            alert("Update Select list  and SourceInfos length:" + sourceInfos.length);

            // var audioSelect = document.querySelector('select#audioSource');
            //var videoSelect = document.querySelector('select#videoSource');

            audioSelect = document.getElementById('audioSource');
            videoSelect = document.getElementById('videoSource');

            for (var i = 0; i < sourceInfos.length; i++) {

                var sourceInfo = sourceInfos[i];
                var option = document.createElement('option');
                option.value = sourceInfo.id;
                // alert("sourceInfo:" + sourceInfo.id + "*" + sourceInfo.label + "*" + sourceInfo.kind + "*" + sourceInfo.toString());
                if (sourceInfo.kind == 'audio') {
                    //alert(">>:" + i + ">" + sourceInfo.label + "is a audio");
                    option.text = sourceInfo.label || 'microphone ' +
                            (audioSelect.length + 1);
                    audioSelect.appendChild(option);
                } else if (sourceInfo.kind == 'video') {
                    //alert(">>:" + i + ">" + sourceInfo.label + "is a video");
                    option.text = sourceInfo.label || 'camera ' + (videoSelect.length + 1);
                    videoSelect.appendChild(option);
                } else {
                    console.log('Some other kind of source: ', sourceInfo);
                }
            }
        }

        function showMediaStreamInVideoElement() {
            alert("Select changed ... showMediaStreamInVideoElement!");

            if (window.stream) {
                //videoElement.src = null;
                window.stream.stop();
            }

            audioSelect = document.getElementById('audioSource');
            videoSelect = document.getElementById('videoSource');

            var audioSource = audioSelect.value;
            var videoSource = videoSelect.value;

            var constraints = {
                audio: {
                    optional: [{
                        sourceId: audioSource
                    }]
                },
                video: {
                    optional: [{
                        sourceId: videoSource
                    }]
                }
            };
            alert("audioSource ='" + audioSource + "'");
            alert("videoSource ='" + videoSource + "'");
            alert("constraints='" + constraints.toString() + "'");

            //显示摄像头视频流
            // navigator.getUserMedia(constraints, successCallback, errorCallback);
            var canvas = document.getElementById("canvas"),
                    context = canvas.getContext("2d"),
                    video = document.getElementById("video"),
            //videoObj = {video: true,audio: true},
                    videoObj = constraints,
            errBack = function (error) {
                console.log("Video capture error:", error.code);
            };

            // Put video listeners into place
            if (navigator.getUserMedia) {
                navigator.getUserMedia(videoObj, function (stream) {
                    video.src = stream;
                    //audio.src = stream;
                }, errBack);
            } else if (navigator.webkitGetUserMedia) {//chrome
                navigator.webkitGetUserMedia(videoObj, function (stream) {
                    video.src = window.URL.createObjectURL(stream) || stream;
                    //audio.src = window.URL.createObjectURL(stream) || stream;
                }, errBack)
            }
            else if (navigator.mozGetUserMedia) {//firefox
                navigator.mozGetUserMedia(videoObj, function (stream) {
                    video.src = window.URL.createObjectURL(stream) || stream;
                    //audio.src = window.URL.createObjectURL(stream) || stream;
                }, errBack)
            }
            else if (navigator.msGetUserMedia) {//IE
                navigator.msGetUserMedia(videoObj, function (stream) {
                    video.src = window.URL.createObjectURL(stream) || stream;
                    //audio.src = window.URL.createObjectURL(stream) || stream;
                }, errBack)
            }

            video.play();

            // 触发拍照动作
            document.getElementById("snap").addEventListener("click", function () {
                context.drawImage(video, 0, 0, 640, 480);
            });
        }


        function loadLocalMediaAndUpdateSelectList() {
            alert("DOMContentLoaded....");

            //window.status = "Page is loaded"
            //加载设备的音频和视频数据
            if (typeof MediaStreamTrack === 'undefined' ||
                    typeof MediaStreamTrack.getSources === 'undefined') {
                alert('This browser does not support MediaStreamTrack.\n\nTry Chrome.');
            } else {
                alert('This browser support MediaStreamTrack good.\n\n');
                MediaStreamTrack.getSources(gotSources);
            }
        }

        //start here
        window.addEventListener("DOMContentLoaded", loadLocalMediaAndUpdateSelectList(), false);
    </script>

</head>
<body>

<div id="container">

    <div class="select">
        <label for="audioSource">Audio source: </label><select id="audioSource"></select>
    </div>

    <div class="select">
        <label for="videoSource">Video source: </label><select id="videoSource"
                                                               onchange="showMediaStreamInVideoElement()"></select>
    </div>

    <div>
        <label>视频</label>
        <video id="video" width="640" height="480" autoplay></video>
        <br>
        <label>音频</label>
        <audio id="audio" width="320" height="240" controls="controls" autoplay></audio>
        <br>
        <button id="snap">点击拍照</button>
        <br>
        <canvas id="canvas" width="640" height="480"></canvas>
    </div>

</div>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值