-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathserver.js
More file actions
80 lines (59 loc) · 1.81 KB
/
server.js
File metadata and controls
80 lines (59 loc) · 1.81 KB
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
require('dotenv').config({ silent: true });
var path = require('path');
var Bunyan = require('bunyan');
var restify = require('restify');
var ffmpeg = require('fluent-ffmpeg');
var validator = require('validator');
var packageJSON = require('./package.json');
var ffprobeOptions = [];
if(process.env.ffprobe_timeout_milliseconds){
ffprobeOptions.push('-timeout');
ffprobeOptions.push(process.env.ffprobe_timeout_milliseconds * 1000);
}
if(!process.env.base_path){
process.env.base_path = '/';
}
if(process.env.ffmpeg_dir){
ffmpeg.setFfmpegPath(path.join(process.env.ffmpeg_dir, 'ffmpeg'));
ffmpeg.setFfprobePath(path.join(process.env.ffmpeg_dir, 'ffprobe'));
}
var log = new Bunyan({
name: 'video-metadata-api',
level: process.env.log_level || 'info' // jshint ignore:line
});
var server = restify.createServer({
name: packageJSON.name + ' ' + packageJSON.version,
log: log
});
server.use(restify.requestLogger());
server.use(restify.queryParser());
server.get(process.env.base_path, function getMetadata(req, res, next){
var video_url = req.query.video_url;
if(!video_url){
return next(new restify.MissingParameterError('Missing video_url.'));
}
if(!validator.isURL(video_url)){
return next(new restify.InvalidArgumentError('video_url is not a valid URL.'));
}
ffmpeg.ffprobe(video_url, ffprobeOptions, function(err, metadata) {
if(err){
next(err);
}else{
req.log.debug({
metadata: metadata
}, 'Metadata extracted.');
res.send(metadata);
next();
}
});
});
server.get(process.env.base_path + 'check', function check(req, res, next){
res.send('ok');
next();
});
server.on('after', restify.auditLogger({
log: log
}));
server.listen(process.env.port || 3000, function() {
server.log.info('%s listening at %s', server.name, server.url);
});