UNPKG

@vikasietum_tecknology/record-rtc

Version:

record-rtc is a library based on recordrtc library. In this forked version of the original library we have optimized the memory management. The video recording is stored in IndexDB in chunks.

175 lines (146 loc) 6.98 kB
<!DOCTYPE html> <html> <head> <script src="/RecordRTC.js"></script> <style> video { max-width: 100%; border: 5px solid yellow; border-radius: 9px; } body { background: black; } h1 { color: yellow; } </style> </head> <body> <h1 id="header">RecordRTC Upload to PHP</h1> <video id="your-video-id" controls autoplay playsinline></video> <script type="text/javascript"> // capture camera and/or microphone navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(function(camera) { // preview camera during recording document.getElementById('your-video-id').muted = true; document.getElementById('your-video-id').srcObject = camera; // recording configuration/hints/parameters var recordingHints = { type: 'video' }; // initiating the recorder var recorder = RecordRTC(camera, recordingHints); // starting recording here recorder.startRecording(); // auto stop recording after 5 seconds var milliSeconds = 5 * 1000; setTimeout(function() { // stop recording recorder.stopRecording(function() { // get recorded blob var blob = recorder.getBlob(); // generating a random file name var fileName = getFileName('webm'); // we need to upload "File" --- not "Blob" var fileObject = new File([blob], fileName, { type: 'video/webm' }); uploadToPHPServer(fileObject, function(response, fileDownloadURL) { if(response !== 'ended') { document.getElementById('header').innerHTML = response; // upload progress return; } document.getElementById('header').innerHTML = '<a href="' + fileDownloadURL + '" target="_blank">' + fileDownloadURL + '</a>'; alert('Successfully uploaded recorded blob.'); // preview uploaded file document.getElementById('your-video-id').srcObject = null; document.getElementById('your-video-id').src = fileDownloadURL; // open uploaded file in a new tab window.open(fileDownloadURL); }); // release camera document.getElementById('your-video-id').srcObject = document.getElementById('your-video-id').src = null; camera.getTracks().forEach(function(track) { track.stop(); }); }); }, milliSeconds); }); function uploadToPHPServer(blob, callback) { // create FormData var formData = new FormData(); formData.append('video-filename', blob.name); formData.append('video-blob', blob); callback('Uploading recorded-file to server.'); var upload_url = 'https://webrtcweb.com/f/'; // var upload_url = 'RecordRTC-to-PHP/save.php'; var upload_directory = upload_url; // var upload_directory = 'RecordRTC-to-PHP/uploads/'; makeXMLHttpRequest(upload_url, formData, function(progress) { if (progress !== 'upload-ended') { callback(progress); return; } var initialURL = upload_directory + blob.name; callback('ended', initialURL); }); } function makeXMLHttpRequest(url, data, callback) { var request = new XMLHttpRequest(); request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { if (request.responseText === 'success') { callback('upload-ended'); return; } alert(request.responseText); return; } }; request.upload.onloadstart = function() { callback('PHP upload started...'); }; request.upload.onprogress = function(event) { callback('PHP upload Progress ' + Math.round(event.loaded / event.total * 100) + "%"); }; request.upload.onload = function() { callback('progress-about-to-end'); }; request.upload.onload = function() { callback('PHP upload ended. Getting file URL.'); }; request.upload.onerror = function(error) { callback('PHP upload failed.'); }; request.upload.onabort = function(error) { callback('PHP upload aborted.'); }; request.open('POST', url); request.send(data); } // this function is used to generate random file name function getFileName(fileExtension) { var d = new Date(); var year = d.getUTCFullYear(); var month = d.getUTCMonth(); var date = d.getUTCDate(); return 'RecordRTC-' + year + month + date + '-' + getRandomString() + '.' + fileExtension; } function getRandomString() { if (window.crypto && window.crypto.getRandomValues && navigator.userAgent.indexOf('Safari') === -1) { var a = window.crypto.getRandomValues(new Uint32Array(3)), token = ''; for (var i = 0, l = a.length; i < l; i++) { token += a[i].toString(36); } return token; } else { return (Math.random() * new Date().getTime()).toString(36).replace(/\./g, ''); } } </script> <footer style="margin-top: 20px;"><small id="send-message"></small></footer> <script src="https://www.webrtc-experiment.com/common.js"></script> </body> </html>