-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
59 lines (49 loc) · 1.61 KB
/
index.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
// env
if (!process.env.S3_BUCKET) {
console.log("S3_BUCKET environment variable required.");
process.exit(1);
}
var bucket = process.env.S3_BUCKET;
var fps = parseInt(process.env.FPS, 10) || 2; // 2 frames per second
var debug = require('debug')('clickberry:video-frames:worker');
var Bus = require('./lib/bus');
var bus = new Bus();
var Sequencer = require('./lib/sequencer');
function handleError(err) {
console.error(err);
}
function publishFrameEvent(videoId, videoUri, segmentIdx, frameIdx, frameUri, fn) {
var data = {
videoId: videoId,
videoUri: videoUri,
segmentIdx: segmentIdx,
frameIdx: frameIdx,
uri: frameUri
};
bus.publishVideoFrameCreated(data, fn);
}
bus.on('segment', function (msg) {
var segment = JSON.parse(msg.body);
debug('New segment: ' + JSON.stringify(segment));
// extracting and uploading frames
var sequencer = new Sequencer()
.on('frame', function (frame) {
// generate frame event
publishFrameEvent(segment.videoId, segment.videoUri, segment.segmentIdx, frame.idx, frame.uri, function (err) {
if (err) handleError(err);
});
})
.on('error', function(err) {
handleError(err);
});
sequencer.downloadAndExtractToS3(segment.videoId, segment.uri, bucket, segment.fps, fps, function (err) {
if (err && !err.fatal) {
// re-queue the message again if not fatal
debug('Video segment processing failed (' + segment.uri + '), skipping the file: ' + err);
return;
}
debug('Video segment processing completed successfully: ' + segment.uri);
msg.finish();
});
});
debug('Listening for messages...');