getUserMedia API

by Thanos Saringelos

HTML

<!DOCTYPE html>
<html>
    <head>
        <title>getUserMedia</title>
    </head>
    <body>
        <header>
            <h1>getUserMedia</h1>
        </header>
        <article>
            <video  id="video"  autoplay></video>
            <section>
                <button id="btnStart">Start video</button>
                <button id="btnStop">Stop video</button>            
                <button id="btnPhoto">Take a photo</button>
            </section>
            <canvas id="canvas" width="320" height="240"></canvas>
            <canvas id="canvas2" width="320" height="240"></canvas>
        </article>
    </body>
</html>

CSS

body {
    font-family: "Verdana";
    font-size: 9pt;
}

header {
    padding: 15px;
    box-shadow: 0px 1px 2px rgba(0,0,0,0.4);
    background-color: rgb(27, 161, 226);
    color: #fff;
}

    header h1 {
        font-size: 14pt;
    }


article {
    width: 80%;
    margin: auto;
    margin-top: 20px;
}

JavaScript

window.onload = function() {

    //Compatibility
    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia;

    var canvas = document.getElementById("canvas"),
        context = canvas.getContext("2d"),
        video = document.getElementById("video"),
        btnStart = document.getElementById("btnStart"),
        btnStop = document.getElementById("btnStop"),
        btnPhoto = document.getElementById("btnPhoto"),
        videoObj = {
            video: true,
            audio: true
        };

    btnStart.addEventListener("click", function() {
        var localMediaStream;

        if (navigator.getUserMedia) {
            navigator.getUserMedia(videoObj, function(stream) {              
                video.src = (navigator.webkitGetUserMedia) ? window.webkitURL.createObjectURL(stream) : stream;
                localMediaStream = stream;
                
            }, function(error) {
                console.error("Video capture error: ", error.code);
            });

            btnStop.addEventListener("click", function() {
                localMediaStream.stop();
            });

            btnPhoto.addEventListener("click", function() {
                context.drawImage(video, 0, 0, 320, 240);

            });
        }
    });
    
     window.requestAnimationFrame = (function () {
        return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function (callback) {
            window.setTimeout(callback, 1000 / 60);
        };
    })(); 
		
    var canvas2 = document.getElementById('canvas2');
    canvas2.width = 480;
    canvas2.height = 300;
    render(); 
    
    // merges the media elements
    function render() {  
        canvas.getContext('2d').drawImage(video,0,0, 320,240 );
        canvas2.getContext('2d').drawImage(canvas, 0, 0 ,640,480);
 
        requestAnimationFrame(render);
    } 
};