Search code examples
javascriptphphtmlwebcam

How to save video using web cam?


I have a plug & play web cam and i want to record video by clicking start and stop button. My web cam is iball company and if there are any simple script then please provide me. I want simple php code.

<p><video id="video" autoplay="autoplay"></video></p>
<p><input type="button" id="buttonSnap" value="Take screenshot" disabled="disabled" onclick="snapshot()" /></p>
<p>
<input type="button" id="buttonStart" value="Start" disabled="disabled" onclick="start()" />
<input type="button" id="buttonStop" value="Stop" disabled="disabled" onclick="stop()" />
</p>
<p><canvas id="canvas"></canvas></p>


<script type="text/javascript">
"use strict";
var video = document.getElementById('video');
var canvas = document.getElementById('canvas');
var videoStream = null;
var preLog = document.getElementById('preLog');

function log(text)
{
    if (preLog) preLog.textContent += ('\n' + text);
    else alert(text);
}

function snapshot()
{
    canvas.width = video.videoWidth;
    canvas.height = video.videoHeight;
    canvas.getContext('2d').drawImage(video, 0, 0);
}

function noStream()
{
    log('Access to camera was denied!');
}

function stop()
{
    var myButton = document.getElementById('buttonStop');
    if (myButton) myButton.disabled = true;
    myButton = document.getElementById('buttonSnap');
    if (myButton) myButton.disabled = true;
    if (videoStream)
    {
        if (videoStream.stop) videoStream.stop();
        else if (videoStream.msStop) videoStream.msStop();
        videoStream.onended = null;
        videoStream = null;
    }
    if (video)
    {
        video.onerror = null;
        video.pause();
        if (video.mozSrcObject)
            video.mozSrcObject = null;
        video.src = "";
    }
    myButton = document.getElementById('buttonStart');
    if (myButton) myButton.disabled = false;
}

function gotStream(stream)
{
    var myButton = document.getElementById('buttonStart');
    if (myButton) myButton.disabled = true;
    videoStream = stream;
    log('Got stream.');
    video.onerror = function ()
    {
        log('video.onerror');
        if (video) stop();
    };
    stream.onended = noStream;
    if (window.webkitURL) video.src = window.webkitURL.createObjectURL(stream);
    else if (video.mozSrcObject !== undefined)
    {//FF18a
        video.mozSrcObject = stream;
        video.play();
    }
    else if (navigator.mozGetUserMedia)
    {//FF16a, 17a
        video.src = stream;
        video.play();
    }
    else if (window.URL) video.src = window.URL.createObjectURL(stream);
    else video.src = stream;
    myButton = document.getElementById('buttonSnap');
    if (myButton) myButton.disabled = false;
    myButton = document.getElementById('buttonStop');
    if (myButton) myButton.disabled = false;
}

function start()
{
    if ((typeof window === 'undefined') || (typeof navigator === 'undefined')) log('This page needs a Web browser with the objects window.* and navigator.*!');
    else if (!(video && canvas)) log('HTML context error!');
    else
    {
        log('Get user media…');
        if (navigator.getUserMedia) navigator.getUserMedia({video:true}, gotStream, noStream);
        else if (navigator.oGetUserMedia) navigator.oGetUserMedia({video:true}, gotStream, noStream);
        else if (navigator.mozGetUserMedia) navigator.mozGetUserMedia({video:true}, gotStream, noStream);
        else if (navigator.webkitGetUserMedia) navigator.webkitGetUserMedia({video:true}, gotStream, noStream);
        else if (navigator.msGetUserMedia) navigator.msGetUserMedia({video:true, audio:false}, gotStream, noStream);
        else log('getUserMedia() not available from your Web browser!');
    }
}

start();
</script>

I got this code from https://codepen.io/blaberus/pen/raGdBG . Using This code I can see video but how can I record. Anyone help?


Solution

  • <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
    <meta name="mobile-web-app-capable" content="yes">
    <meta id="theme-color" name="theme-color" content="#fff">
    <base target="_blank">
    <title>Media Recorder API Demo</title>
    <link rel="stylesheet" href="css/main.css" />
    <style>
    a#downloadLink {
        display: block;
        margin: 0 0 1em 0;
        min-height: 1.2em;
    }
    p#data {
        min-height: 6em;
    }
    </style>
    </head>
    <body>
    <div id="container">
    <div style = "text-align:center;">
        <h1>Media Recorder API Demo </h1>
        <!-- <h2>Record a 640x480 video using the media recorder API implemented in Firefox and Chrome</h2> -->
        <video controls autoplay></video><br>
        <button id="rec" onclick="onBtnRecordClicked()">Record</button>
        <button id="pauseRes"   onclick="onPauseResumeClicked()" disabled>Pause</button>
        <button id="stop"  onclick="onBtnStopClicked()" disabled>Stop</button>
     </div>
    <a id="downloadLink" download="mediarecorder.webm" name="mediarecorder.webm" href></a>
    <p id="data"></p>
    <script src="js/main.js"></script>
    </div>
    </body>
    </html>
    
    <script>
    'use strict';
    
    /* globals MediaRecorder */
    
    // Spec is at http://dvcs.w3.org/hg/dap/raw-file/tip/media-stream-capture/RecordingProposal.html
    
    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;
    
    
    if(getBrowser() == "Chrome"){
        var constraints = {"audio": true, "video": {  "mandatory": {  "minWidth": 640,  "maxWidth": 640, "minHeight": 480,"maxHeight": 480 }, "optional": [] } };//Chrome
    }else if(getBrowser() == "Firefox"){
        var constraints = {audio: true,video: {  width: { min: 640, ideal: 640, max: 640 },  height: { min: 480, ideal: 480, max: 480 }}}; //Firefox
    }
    
    var recBtn = document.querySelector('button#rec');
    var pauseResBtn = document.querySelector('button#pauseRes');
    var stopBtn = document.querySelector('button#stop');
    
    var videoElement = document.querySelector('video');
    var dataElement = document.querySelector('#data');
    var downloadLink = document.querySelector('a#downloadLink');
    
    videoElement.controls = false;
    
    function errorCallback(error){
        console.log('navigator.getUserMedia error: ', error);   
    }
    
    /*
    var mediaSource = new MediaSource();
    mediaSource.addEventListener('sourceopen', handleSourceOpen, false);
    var sourceBuffer;
    */
    
    var mediaRecorder;
    var chunks = [];
    var count = 0;
    
    function startRecording(stream) {
        log('Start recording...');
        if (typeof MediaRecorder.isTypeSupported == 'function'){
            /*
                MediaRecorder.isTypeSupported is a function announced in https://developers.google.com/web/updates/2016/01/mediarecorder and later introduced in the MediaRecorder API spec http://www.w3.org/TR/mediastream-recording/
            */
            if (MediaRecorder.isTypeSupported('video/webm;codecs=vp9')) {
              var options = {mimeType: 'video/webm;codecs=vp9'};
            } else if (MediaRecorder.isTypeSupported('video/webm;codecs=h264')) {
              var options = {mimeType: 'video/webm;codecs=h264'};
            } else  if (MediaRecorder.isTypeSupported('video/webm;codecs=vp8')) {
              var options = {mimeType: 'video/webm;codecs=vp8'};
            }
            log('Using '+options.mimeType);
            mediaRecorder = new MediaRecorder(stream, options);
        }else{
            log('Using default codecs for browser');
            mediaRecorder = new MediaRecorder(stream);
        }
    
        pauseResBtn.textContent = "Pause";
    
        mediaRecorder.start(10);
    
        var url = window.URL || window.webkitURL;
        videoElement.src = url ? url.createObjectURL(stream) : stream;
        videoElement.play();
    
        mediaRecorder.ondataavailable = function(e) {
            //log('Data available...');
            //console.log(e.data);
            //console.log(e.data.type);
            //console.log(e);
            chunks.push(e.data);
        };
    
        mediaRecorder.onerror = function(e){
            log('Error: ' + e);
            console.log('Error: ', e);
        };
    
    
        mediaRecorder.onstart = function(){
            log('Started & state = ' + mediaRecorder.state);
        };
    
        mediaRecorder.onstop = function(){
            log('Stopped  & state = ' + mediaRecorder.state);
    
            var blob = new Blob(chunks, {type: "video/mp4"});
            chunks = [];
    
            var videoURL = window.URL.createObjectURL(blob);
    
            downloadLink.href = videoURL;
            videoElement.src = videoURL;
            downloadLink.innerHTML = 'Download video file';
    
            var rand =  Math.floor((Math.random() * 10000000));
            var name  = "video_"+rand+".mp4" ;
    
            downloadLink.setAttribute( "download", name);
            downloadLink.setAttribute( "name", name);
        };
    
        mediaRecorder.onpause = function(){
            log('Paused & state = ' + mediaRecorder.state);
        }
    
        mediaRecorder.onresume = function(){
            log('Resumed  & state = ' + mediaRecorder.state);
        }
    
        mediaRecorder.onwarning = function(e){
            log('Warning: ' + e);
        };
    }
    
    //function handleSourceOpen(event) {
    //  console.log('MediaSource opened');
    //  sourceBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vp9"');
    //  console.log('Source buffer: ', sourceBuffer);
    //}
    
    function onBtnRecordClicked (){
         if (typeof MediaRecorder === 'undefined' || !navigator.getUserMedia) {
            alert('MediaRecorder not supported on your browser, use Firefox 30 or Chrome 49 instead.');
        }else {
            navigator.getUserMedia(constraints, startRecording, errorCallback);
            recBtn.disabled = true;
            pauseResBtn.disabled = false;
            stopBtn.disabled = false;
        }
    }
    
    function onBtnStopClicked(){
        mediaRecorder.stop();
        videoElement.controls = true;
    
        recBtn.disabled = false;
        pauseResBtn.disabled = true;
        stopBtn.disabled = true;
    }
    
    function onPauseResumeClicked(){
        if(pauseResBtn.textContent === "Pause"){
            console.log("pause");
            pauseResBtn.textContent = "Resume";
            mediaRecorder.pause();
            stopBtn.disabled = true;
        }else{
            console.log("resume");
            pauseResBtn.textContent = "Pause";
            mediaRecorder.resume();
            stopBtn.disabled = false;
        }
        recBtn.disabled = true;
        pauseResBtn.disabled = false;
    }
    
    
    function log(message){
        dataElement.innerHTML = dataElement.innerHTML+'<br>'+message ;
    }
    
    
    
    //browser ID
    function getBrowser(){
        var nVer = navigator.appVersion;
        var nAgt = navigator.userAgent;
        var browserName  = navigator.appName;
        var fullVersion  = ''+parseFloat(navigator.appVersion);
        var majorVersion = parseInt(navigator.appVersion,10);
        var nameOffset,verOffset,ix;
    
        // In Opera, the true version is after "Opera" or after "Version"
        if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
         browserName = "Opera";
         fullVersion = nAgt.substring(verOffset+6);
         if ((verOffset=nAgt.indexOf("Version"))!=-1)
           fullVersion = nAgt.substring(verOffset+8);
        }
        // In MSIE, the true version is after "MSIE" in userAgent
        else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
         browserName = "Microsoft Internet Explorer";
         fullVersion = nAgt.substring(verOffset+5);
        }
        // In Chrome, the true version is after "Chrome"
        else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
         browserName = "Chrome";
         fullVersion = nAgt.substring(verOffset+7);
        }
        // In Safari, the true version is after "Safari" or after "Version"
        else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
         browserName = "Safari";
         fullVersion = nAgt.substring(verOffset+7);
         if ((verOffset=nAgt.indexOf("Version"))!=-1)
           fullVersion = nAgt.substring(verOffset+8);
        }
        // In Firefox, the true version is after "Firefox"
        else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
         browserName = "Firefox";
         fullVersion = nAgt.substring(verOffset+8);
        }
        // In most other browsers, "name/version" is at the end of userAgent
        else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) <
               (verOffset=nAgt.lastIndexOf('/')) )
        {
         browserName = nAgt.substring(nameOffset,verOffset);
         fullVersion = nAgt.substring(verOffset+1);
         if (browserName.toLowerCase()==browserName.toUpperCase()) {
          browserName = navigator.appName;
         }
        }
        // trim the fullVersion string at semicolon/space if present
        if ((ix=fullVersion.indexOf(";"))!=-1)
           fullVersion=fullVersion.substring(0,ix);
        if ((ix=fullVersion.indexOf(" "))!=-1)
           fullVersion=fullVersion.substring(0,ix);
    
        majorVersion = parseInt(''+fullVersion,10);
        if (isNaN(majorVersion)) {
         fullVersion  = ''+parseFloat(navigator.appVersion);
         majorVersion = parseInt(navigator.appVersion,10);
        }
    
    
        return browserName;
    }
    
    </script>