· 6 years ago · Jul 02, 2019, 11:46 PM
1(node:13704) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
2
3const {desktopCapturer} = require('electron');
4const fs = require('graceful-fs');
5
6const SECRET_KEY = 'Electron 69';
7let recorder;
8let blobs = [];
9
10const startRecording = () => {
11 let title = document.title;
12 document.title = SECRET_KEY;
13
14 desktopCapturer.getSources({types: ['window', 'screen']}, (error, sources) => {
15 if (error) throw error;
16 for (let source of sources) {
17 if (source.name === SECRET_KEY) {
18 document.title = title;
19
20 navigator.mediaDevices.getUserMedia({
21 audio: false,
22 video: {
23 mandatory: {
24 chromeMediaSource: 'desktop',
25 chromeMediaSourceId: source.id,
26 minWidth: 1280,
27 maxWidth: 1280,
28 minHeight: 720,
29 maxHeight: 720
30 }
31 }
32 }).then((stream) => handleStream(stream))
33 .catch((e) => handleError(e));
34 return
35 }
36 }
37 });
38};
39
40function handleStream(stream) {
41 recorder = new MediaRecorder(stream);
42 blobs = [];
43 recorder.ondataavailable = function(event) {
44 blobs.push(event.data);
45 };
46 recorder.start();
47}
48
49function stopRecording() {
50 recorder.stop();
51 toArrayBuffer(new Blob(blobs, {type: 'video/mp4'}), function(ab) {
52 const buffer = toBuffer(ab);
53 const file = `./record.mp4`;
54 fs.writeFile(file, buffer, function(err) {
55 if (err) {
56 console.error('Failed to save video ' + err);
57 } else {
58 console.log('Saved video: ' + file);
59 }
60 });
61 });
62}
63
64function handleError(e) {
65 console.error('handleUserMediaError', e);
66}
67
68function toArrayBuffer(blob, cb) {
69 let fileReader = new FileReader();
70 fileReader.onload = function() {
71 let arrayBuffer = this.result;
72 cb(arrayBuffer);
73 };
74 fileReader.readAsArrayBuffer(blob);
75}
76
77function toBuffer(ab) {
78 let buffer = new Buffer(ab.byteLength);
79 let arr = new Uint8Array(ab);
80 for (let i = 0; i < arr.byteLength; i++) {
81 buffer[i] = arr[i];
82 }
83 return buffer;
84}
85
86// Record for 3 seconds and save to disk
87startRecording();
88setTimeout(function() { stopRecording() }, 3000);