getUserMedia is a method specified as part of WebRTC that allows access to the microphone and webcam of users.
// The video element on the page to display the webcam let video = document.getElementById('thevideo'); // Constraints - what do we want? let constraints = { audio: false, video: true } // Prompt the user for permission, get the stream navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { /* Use the stream */ // Attach to our video object video.srcObject = stream; // Wait for the stream to load enough to play video.onloadedmetadata = function(e) { video.play(); }; }) .catch(function(err) { /* Handle the error */ alert(err); });
One cool aspect of this is that you can draw the video on to a canvas as well (perhaps to manipulate it):
// Canvas element on the page var thecanvas = document.getElementById('thecanvas'); var thecontext = thecanvas.getContext('2d'); var draw = function() { // Draw the video onto the canvas thecontext.drawImage(video,0,0,video.width,video.height); document.getElementById('imagefile').src = dataUrl; // Draw again in 3 seconds setTimeout(draw,3000); }; draw();
From the canvas, you can create an image and send that via Socket.io to everyone else, making a poor persons video server:
// Create a data URL from the canvas var dataUrl = thecanvas.toDataURL('image/webp', 1); // Optionally draw it to an image object to make sure it works document.getElementById('imagefile').src = dataUrl; // Send it via our socket server the same way as we send the image socket.emit('image', dataUrl);
More Information: Capturing Audio and Video in HTML5