forked from muralikg/puppetcam
-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.js
95 lines (87 loc) · 2.61 KB
/
background.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/* global chrome, MediaRecorder, FileReader */
let recorder = null;
let filename = null;
chrome.runtime.onConnect.addListener(port => {
port.onMessage.addListener(msg => {
console.log(msg);
switch (msg.type) {
case 'SET_EXPORT_PATH':
filename = msg.filename
break
case 'REC_STOP':
recorder.stop()
break
case 'REC_CLIENT_PLAY':
if(recorder){
return
}
const tab = port.sender.tab
tab.url = msg.data.url
chrome.desktopCapture.chooseDesktopMedia(['tab', 'audio'], streamId => {
// Get the stream
navigator.webkitGetUserMedia({
// audio: false,
audio: {
mandatory: {
chromeMediaSource: 'system'
}
},
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: streamId,
minWidth: 1280,
maxWidth: 1280,
minHeight: 1024,
maxHeight: 1024,
minFrameRate: 60,
maxFrameRate: 60,
}
}
}, stream => {
var chunks=[];
recorder = new MediaRecorder(stream, {
videoBitsPerSecond: 2500000,
ignoreMutedMedia: true,
mimeType: 'video/webm'
});
recorder.ondataavailable = function (event) {
if (event.data.size > 0) {
chunks.push(event.data);
}
};
recorder.onstop = function () {
var superBuffer = new Blob(chunks, {
type: 'video/webm'
});
var url = URL.createObjectURL(superBuffer);
// var a = document.createElement('a');
// document.body.appendChild(a);
// a.style = 'display: none';
// a.href = url;
// a.download = 'test.webm';
// a.click();
chrome.downloads.download({
url: url,
filename: filename
}, ()=>{
});
}
recorder.start();
}, error => console.log('Unable to get user media', error))
})
break
default:
console.log('Unrecognized message', msg)
}
})
chrome.downloads.onChanged.addListener(function(delta) {
if (!delta.state ||(delta.state.current != 'complete')) {
return;
}
try{
port.postMessage({downloadComplete: true})
}
catch(e){}
});
})