<!DOCTYPE html>
<html>
<head>
<title>Record Desktop</title>
</head>
<body>
<h1>Record Desktop with webRTC</h1>
<div>
<button id = "record">record</button>
<button id = "pause">pause</button>
</div>
<script>
'use strict'
var mediaRecorder;
const pauseBtn = document.getElementById('pause');
pauseBtn.disabled = true;
pauseBtn.onclick = function(ev) {
if (!mediaRecorder) {
return;
}
if (pauseBtn.textContent == "pause") {
mediaRecorder.pause();
pauseBtn.textContent = "resume";
}
else {
mediaRecorder.resume();
pauseBtn.textContent = "pause";
}
}
var buffer = [];
function onDataAvailable(d) {
if (d && d.data && d.data.size > 0) {
buffer.push(d.data);
}
}
function onRecordError(e) {
console.error('Recorder error', e);
}
const recordBtn = document.getElementById('record');
function onGetStream(stream) {
recordBtn.textContent = "stop";
var options = {mimeType: 'video/webm;codecs=vp8'};
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
console.error(`${options.mimeType} is not supported!`);
return;
}
try {
mediaRecorder = new MediaRecorder(stream, options);
}
catch (e) {
console.error('Filed to create MediaRecorder', e);
return;
}
mediaRecorder.ondataavailable = onDataAvailable;
mediaRecorder.onerror = onRecordError;
mediaRecorder.start(10);
}
function saveVideo() {
if (buffer) {
var blob = new Blob(buffer, {type: 'video/webm'});
var url = window.URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.style.display = 'none';
a.download = 'record.webm';
a.click();
}
else {
console.error("record failed");
}
}
// 捕获视频
const streamContrains = {
video: {
width: 1280,
height: 720,
frameRate: 15,
},
audio: false
};
function onGetStreamError(error) {
console.log('getDisplayMedia error', error);
}
recordBtn.onclick = function(ev) {
if (mediaRecorder && recordBtn.textContent != "record") {
recordBtn.textContent = "record";
pauseBtn.disabled = false;
let tracks = mediaRecorder.stream.getTracks();
tracks.forEach(track => track.stop());
saveVideo();
return;
}
pauseBtn.disabled = false;
const mDevices = navigator.mediaDevices;
const promise = mDevices.getDisplayMedia(streamContrains);
promise.then(
onGetStream
).catch(
onGetStreamError
);
}
</script>
</body>
</html>
https://blog.csdn.net/leapmotion/article/details/108611151