@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.
117 lines (92 loc) • 3.23 kB
HTML
<style>
html, body {
margin: 0;
padding: 0;
text-align: center;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
font-size: 1em;
}
video {
width: 30%;
border-radius: 5px;
border: 1px solid black;
}
</style>
<title>Seeking Workaround | RecordRTC</title>
<h1>Seeking Workaround for RecordRTC</h1>
<br>
<button id="btn-start-recording">Start Recording</button>
<button id="btn-stop-recording" disabled>Stop Recording</button>
<hr>
<video controls autoplay playsinline></video>
<script src="/RecordRTC.js"></script>
<script src="https://www.webrtc-experiment.com/EBML.js"></script> <!-- ../libs/DBML.js -->
<script>
var video = document.querySelector('video');
function captureStream(callback) {
navigator.mediaDevices.getUserMedia({video:true,audio:true}).then(function(stream) {
callback(stream);
}).catch(function(error) {
console.error(error);
alert('Unable to capture your stream. Please check console logs.\n' + error);
});
}
function stopRecordingCallback() {
video.muted = false;
video.volume = 1;
video.src = video.srcObject = null;
getSeekableBlob(recorder.getBlob(), function(seekableBlob) {
video.src = URL.createObjectURL(seekableBlob);
recorder.stream.stop();
recorder.destroy();
recorder = null;
document.getElementById('btn-start-recording').disabled = false;
invokeSaveAsDialog(seekableBlob, 'seekable-recordrtc.webm');
});
}
var recorder; // globally accessible
document.getElementById('btn-start-recording').onclick = function() {
this.disabled = true;
captureStream(function(stream) {
video.muted = true;
video.volume = 0;
video.srcObject = stream;
recorder = RecordRTC(stream, {
type: 'video'
});
recorder.startRecording();
// release stream on stopRecording
recorder.stream = stream;
document.getElementById('btn-stop-recording').disabled = false;
});
};
document.getElementById('btn-stop-recording').onclick = function() {
this.disabled = true;
recorder.stopRecording(stopRecordingCallback);
};
function addStreamStopListener(stream, callback) {
stream.addEventListener('ended', function() {
callback();
callback = function() {};
}, false);
stream.addEventListener('inactive', function() {
callback();
callback = function() {};
}, false);
stream.getTracks().forEach(function(track) {
track.addEventListener('ended', function() {
callback();
callback = function() {};
}, false);
track.addEventListener('inactive', function() {
callback();
callback = function() {};
}, false);
});
}
</script>
<br><br>
<footer style="margin-top: 20px; text-align: left;">
<small id="send-message"></small>
</footer>
<script src="https://www.webrtc-experiment.com/common.js"></script>