2016-07-26 18:25:18 +00:00
|
|
|
var fs = require('fs');
|
|
|
|
var util = require('util');
|
|
|
|
var stream = require('stream');
|
|
|
|
|
|
|
|
var FfmpegCommand = require('fluent-ffmpeg');
|
|
|
|
|
|
|
|
var helpers = require('./helpers');
|
|
|
|
var BaseProcessor = require('./baseprocessor');
|
|
|
|
|
|
|
|
|
|
|
|
function FFMPEGProcessor()
|
|
|
|
{
|
|
|
|
BaseProcessor.apply(this, arguments);
|
|
|
|
}
|
|
|
|
|
|
|
|
util.inherits(FFMPEGProcessor, BaseProcessor);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FFMPEGProcessor.prototype.run = function()
|
|
|
|
{
|
|
|
|
var self = this;
|
2016-08-07 08:05:18 +00:00
|
|
|
var filename = helpers.createVariableFilename(this.cam.options.filename, this.now,
|
|
|
|
{
|
|
|
|
camId: this.camId
|
|
|
|
});
|
|
|
|
|
|
|
|
var tempFilename = filename + '.recording';
|
|
|
|
var cleanup = function()
|
|
|
|
{
|
|
|
|
fs.rename(tempFilename, filename, function(err)
|
|
|
|
{
|
|
|
|
console.log('Error: could not move ' + tempFilename + ' to ' + filename + ': ' + err.message);
|
|
|
|
self.doEnd();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2016-07-26 18:25:18 +00:00
|
|
|
var command = new FfmpegCommand();
|
|
|
|
command
|
|
|
|
.input(this.cam.options.input)
|
|
|
|
.inputOptions(['-t ' + this.cam.options.time]);
|
|
|
|
|
|
|
|
if (typeof(this.cam.options.inputFormat) !== 'undefined')
|
|
|
|
{
|
|
|
|
command.inputFormat(this.cam.options.inputFormat);
|
|
|
|
if (this.cam.options.inputFormat === 'mjpeg')
|
|
|
|
command.inputOption('-use_wallclock_as_timestamps 1');
|
|
|
|
}
|
|
|
|
|
|
|
|
command
|
2016-08-07 08:05:18 +00:00
|
|
|
.output(tempFilename)
|
2016-07-26 18:25:18 +00:00
|
|
|
.videoCodec(this.cam.options.videoCodec)
|
|
|
|
.outputFormat(this.cam.options.outputFormat);
|
|
|
|
|
2016-08-07 08:05:18 +00:00
|
|
|
command.on('error', function(err, stdout, stderr)
|
|
|
|
{
|
|
|
|
console.log('Error: FFmpeg output:' + err.message);
|
|
|
|
cleanup();
|
|
|
|
});
|
|
|
|
|
2016-07-26 18:25:18 +00:00
|
|
|
command.on('end', function()
|
|
|
|
{
|
2016-08-07 08:05:18 +00:00
|
|
|
cleanup();
|
2016-07-26 18:25:18 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
self.doStart();
|
|
|
|
command.run();
|
|
|
|
|
|
|
|
FFMPEGProcessor.super_.prototype.run.call(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = FFMPEGProcessor;
|