Skip to content

Commit 30d1a82

Browse files
committed
pauseRecording/resumeRecording is implemented for all modules.
https://www.webrtc-experiment.com/RecordRTC/
1 parent 75e1db6 commit 30d1a82

File tree

11 files changed

+384
-22
lines changed

11 files changed

+384
-22
lines changed

RecordRTC.js

Lines changed: 188 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Last time updated at Jan 29, 2015, 08:32:23
1+
// Last time updated at Jan 30, 2015, 08:32:23
22

33
// links:
44
// Open-Sourced: https://github.com/muaz-khan/RecordRTC
@@ -191,10 +191,6 @@ function RecordRTC(mediaStream, config) {
191191
// not all libs yet having this method
192192
if (mediaRecorder.pause) {
193193
mediaRecorder.pause();
194-
195-
if (!config.disableLogs) {
196-
console.debug('Paused recording.');
197-
}
198194
} else if (!config.disableLogs) {
199195
console.warn('This recording library is having no "pause" method.');
200196
}
@@ -208,10 +204,6 @@ function RecordRTC(mediaStream, config) {
208204
// not all libs yet having this method
209205
if (mediaRecorder.resume) {
210206
mediaRecorder.resume();
211-
212-
if (!config.disableLogs) {
213-
console.debug('Resumed recording.');
214-
}
215207
} else if (!config.disableLogs) {
216208
console.warn('This recording library is having no "resume" method.');
217209
}
@@ -1137,6 +1129,12 @@ function MediaStreamRecorder(mediaStream) {
11371129
if (!self.disableLogs) {
11381130
console.warn(error);
11391131
}
1132+
1133+
// When the stream is "ended" set recording to 'inactive'
1134+
// and stop gathering data. Callers should not rely on
1135+
// exactness of the timeSlice value, especially
1136+
// if the timeSlice value is small. Callers should
1137+
// consider timeSlice as a minimum value
11401138

11411139
mediaRecorder.stop();
11421140
self.record(0);
@@ -1169,6 +1167,10 @@ function MediaStreamRecorder(mediaStream) {
11691167
* });
11701168
*/
11711169
this.stop = function(callback) {
1170+
if (!mediaRecorder) {
1171+
return;
1172+
}
1173+
11721174
this.callback = callback;
11731175
// mediaRecorder.state === 'recording' means that media recorder is associated with "session"
11741176
// mediaRecorder.state === 'stopped' means that media recorder is detached from the "session" ... in this case; "session" will also be deleted.
@@ -1180,6 +1182,48 @@ function MediaStreamRecorder(mediaStream) {
11801182
}
11811183
};
11821184

1185+
/**
1186+
* This method pauses the recording process.
1187+
* @method
1188+
* @memberof MediaStreamRecorder
1189+
* @example
1190+
* recorder.pause();
1191+
*/
1192+
this.pause = function() {
1193+
if (!mediaRecorder) {
1194+
return;
1195+
}
1196+
1197+
if (mediaRecorder.state === 'recording') {
1198+
mediaRecorder.pause();
1199+
1200+
if (!this.disableLogs) {
1201+
console.debug('Paused recording.');
1202+
}
1203+
}
1204+
};
1205+
1206+
/**
1207+
* This method resumes the recording process.
1208+
* @method
1209+
* @memberof MediaStreamRecorder
1210+
* @example
1211+
* recorder.resume();
1212+
*/
1213+
this.resume = function() {
1214+
if (!mediaRecorder) {
1215+
return;
1216+
}
1217+
1218+
if (mediaRecorder.state === 'paused') {
1219+
mediaRecorder.resume();
1220+
1221+
if (!this.disableLogs) {
1222+
console.debug('Resumed recording.');
1223+
}
1224+
}
1225+
};
1226+
11831227
// Reference to "MediaRecorder" object
11841228
var mediaRecorder;
11851229
}
@@ -1246,6 +1290,13 @@ function StereoRecorder(mediaStream) {
12461290
});
12471291
};
12481292

1293+
/**
1294+
* This method pauses the recording process.
1295+
* @method
1296+
* @memberof StereoRecorder
1297+
* @example
1298+
* recorder.pause();
1299+
*/
12491300
this.pause = function() {
12501301
if (!mediaRecorder) {
12511302
return;
@@ -1254,6 +1305,13 @@ function StereoRecorder(mediaStream) {
12541305
mediaRecorder.pause();
12551306
};
12561307

1308+
/**
1309+
* This method resumes the recording process.
1310+
* @method
1311+
* @memberof StereoRecorder
1312+
* @example
1313+
* recorder.resume();
1314+
*/
12571315
this.resume = function() {
12581316
if (!mediaRecorder) {
12591317
return;
@@ -1619,6 +1677,10 @@ function StereoAudioRecorder(mediaStream, config) {
16191677
*/
16201678
this.pause = function() {
16211679
isPaused = true;
1680+
1681+
if (!config.disableLogs) {
1682+
console.debug('Paused recording.');
1683+
}
16221684
};
16231685

16241686
/**
@@ -1630,6 +1692,10 @@ function StereoAudioRecorder(mediaStream, config) {
16301692
*/
16311693
this.resume = function() {
16321694
isPaused = false;
1695+
1696+
if (!config.disableLogs) {
1697+
console.debug('Resumed recording.');
1698+
}
16331699
};
16341700

16351701
var isAudioProcessStarted = false;
@@ -1742,7 +1808,44 @@ function CanvasRecorder(htmlElement) {
17421808
}
17431809
};
17441810

1811+
var isPausedRecording = false;
1812+
1813+
/**
1814+
* This method pauses the recording process.
1815+
* @method
1816+
* @memberof CanvasRecorder
1817+
* @example
1818+
* recorder.pause();
1819+
*/
1820+
this.pause = function() {
1821+
isPausedRecording = true;
1822+
1823+
if (!this.disableLogs) {
1824+
console.debug('Paused recording.');
1825+
}
1826+
};
1827+
1828+
/**
1829+
* This method resumes the recording process.
1830+
* @method
1831+
* @memberof CanvasRecorder
1832+
* @example
1833+
* recorder.resume();
1834+
*/
1835+
this.resume = function() {
1836+
isPausedRecording = false;
1837+
1838+
if (!this.disableLogs) {
1839+
console.debug('Resumed recording.');
1840+
}
1841+
};
1842+
17451843
function drawCanvasFrame() {
1844+
if (isPausedRecording) {
1845+
lastTime = new Date().getTime();
1846+
return setTimeout(drawCanvasFrame, 100);
1847+
}
1848+
17461849
window.html2canvas(htmlElement, {
17471850
onrendered: function(canvas) {
17481851
var duration = new Date().getTime() - lastTime;
@@ -1850,7 +1953,12 @@ function WhammyRecorder(mediaStream) {
18501953
function drawFrames() {
18511954
var duration = new Date().getTime() - lastTime;
18521955
if (!duration) {
1853-
return drawFrames();
1956+
return setTimeout(drawFrames, 10);
1957+
}
1958+
1959+
if (isPausedRecording) {
1960+
lastTime = new Date().getTime();
1961+
return setTimeout(drawFrames, 100);
18541962
}
18551963

18561964
// via #206, by Jack i.e. @Seymourr
@@ -2002,6 +2110,38 @@ function WhammyRecorder(mediaStream) {
20022110
}, 10);
20032111
};
20042112

2113+
var isPausedRecording = false;
2114+
2115+
/**
2116+
* This method pauses the recording process.
2117+
* @method
2118+
* @memberof WhammyRecorder
2119+
* @example
2120+
* recorder.pause();
2121+
*/
2122+
this.pause = function() {
2123+
isPausedRecording = true;
2124+
2125+
if (!this.disableLogs) {
2126+
console.debug('Paused recording.');
2127+
}
2128+
};
2129+
2130+
/**
2131+
* This method resumes the recording process.
2132+
* @method
2133+
* @memberof WhammyRecorder
2134+
* @example
2135+
* recorder.resume();
2136+
*/
2137+
this.resume = function() {
2138+
isPausedRecording = false;
2139+
2140+
if (!this.disableLogs) {
2141+
console.debug('Resumed recording.');
2142+
}
2143+
};
2144+
20052145
var canvas = document.createElement('canvas');
20062146
var context = canvas.getContext('2d');
20072147

@@ -2668,6 +2808,12 @@ function GifRecorder(mediaStream) {
26682808
var self = this;
26692809

26702810
function drawVideoFrame(time) {
2811+
if (isPausedRecording) {
2812+
return setTimeout(function() {
2813+
drawVideoFrame(time);
2814+
}, 100);
2815+
}
2816+
26712817
lastAnimationFrame = requestAnimationFrame(drawVideoFrame);
26722818

26732819
if (typeof lastFrameTime === undefined) {
@@ -2725,6 +2871,38 @@ function GifRecorder(mediaStream) {
27252871
gifEncoder.stream().bin = [];
27262872
};
27272873

2874+
var isPausedRecording = false;
2875+
2876+
/**
2877+
* This method pauses the recording process.
2878+
* @method
2879+
* @memberof GifRecorder
2880+
* @example
2881+
* recorder.pause();
2882+
*/
2883+
this.pause = function() {
2884+
isPausedRecording = true;
2885+
2886+
if (!this.disableLogs) {
2887+
console.debug('Paused recording.');
2888+
}
2889+
};
2890+
2891+
/**
2892+
* This method resumes the recording process.
2893+
* @method
2894+
* @memberof GifRecorder
2895+
* @example
2896+
* recorder.resume();
2897+
*/
2898+
this.resume = function() {
2899+
isPausedRecording = false;
2900+
2901+
if (!this.disableLogs) {
2902+
console.debug('Resumed recording.');
2903+
}
2904+
};
2905+
27282906
var canvas = document.createElement('canvas');
27292907
var context = canvas.getContext('2d');
27302908

RecordRTC.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dev/CanvasRecorder.js

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,44 @@ function CanvasRecorder(htmlElement) {
6363
}
6464
};
6565

66+
var isPausedRecording = false;
67+
68+
/**
69+
* This method pauses the recording process.
70+
* @method
71+
* @memberof CanvasRecorder
72+
* @example
73+
* recorder.pause();
74+
*/
75+
this.pause = function() {
76+
isPausedRecording = true;
77+
78+
if (!this.disableLogs) {
79+
console.debug('Paused recording.');
80+
}
81+
};
82+
83+
/**
84+
* This method resumes the recording process.
85+
* @method
86+
* @memberof CanvasRecorder
87+
* @example
88+
* recorder.resume();
89+
*/
90+
this.resume = function() {
91+
isPausedRecording = false;
92+
93+
if (!this.disableLogs) {
94+
console.debug('Resumed recording.');
95+
}
96+
};
97+
6698
function drawCanvasFrame() {
99+
if (isPausedRecording) {
100+
lastTime = new Date().getTime();
101+
return setTimeout(drawCanvasFrame, 100);
102+
}
103+
67104
window.html2canvas(htmlElement, {
68105
onrendered: function(canvas) {
69106
var duration = new Date().getTime() - lastTime;

dev/GifRecorder.js

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,12 @@ function GifRecorder(mediaStream) {
8787
var self = this;
8888

8989
function drawVideoFrame(time) {
90+
if (isPausedRecording) {
91+
return setTimeout(function() {
92+
drawVideoFrame(time);
93+
}, 100);
94+
}
95+
9096
lastAnimationFrame = requestAnimationFrame(drawVideoFrame);
9197

9298
if (typeof lastFrameTime === undefined) {
@@ -144,6 +150,38 @@ function GifRecorder(mediaStream) {
144150
gifEncoder.stream().bin = [];
145151
};
146152

153+
var isPausedRecording = false;
154+
155+
/**
156+
* This method pauses the recording process.
157+
* @method
158+
* @memberof GifRecorder
159+
* @example
160+
* recorder.pause();
161+
*/
162+
this.pause = function() {
163+
isPausedRecording = true;
164+
165+
if (!this.disableLogs) {
166+
console.debug('Paused recording.');
167+
}
168+
};
169+
170+
/**
171+
* This method resumes the recording process.
172+
* @method
173+
* @memberof GifRecorder
174+
* @example
175+
* recorder.resume();
176+
*/
177+
this.resume = function() {
178+
isPausedRecording = false;
179+
180+
if (!this.disableLogs) {
181+
console.debug('Resumed recording.');
182+
}
183+
};
184+
147185
var canvas = document.createElement('canvas');
148186
var context = canvas.getContext('2d');
149187

0 commit comments

Comments
 (0)