forked from mozdevs/MediaRecorder-examples
-
Notifications
You must be signed in to change notification settings - Fork 0
/
looping-mosaic.js
71 lines (59 loc) · 1.64 KB
/
looping-mosaic.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
window.addEventListener('load', function() {
var videoElement = document.querySelector('video');
var fragments = document.getElementById('fragments');
navigator.mediaDevices.getUserMedia({
video: true,
audio: true
}).then(function (stream) {
startRecording(stream);
}).catch(function (err) {
console.error(err);
});
function startRecording(stream) {
videoElement.src = URL.createObjectURL(stream);
videoElement.play();
recordLoop(stream);
}
function recordLoop(stream) {
recordClip(stream, function() {
setTimeout(function() {
console.log('and go');
recordLoop(stream);
}, 1);
});
}
function recordClip(stream, doneCallback) {
var recorder = new MediaRecorder(stream, {
type: 'video/mp4'
});
recorder.start();
setTimeout(function() {
recorder.stop();
recorder.ondataavailable = function (evt) {
console.log('data', evt);
var videoURL = URL.createObjectURL(evt.data);
addVideo(videoURL);
doneCallback();
};
}, 1000);
}
function addVideo(src) {
var el = document.createElement('video');
el.controls = true;
el.src = src;
fragments.appendChild(el);
var videos = fragments.querySelectorAll('video');
if(videos.length > 20) {
// remove the oldest
var first = videos[0];
first.parentNode.removeChild(first);
}
// Important: wait until data is ready or else
// the browser will complain about a broken format
el.onloadeddata = function() {
el.play();
// Loop seems to be broken (?)
el.setAttribute('loop', true);
};
}
});