tuned-city
clone your own copy | download snapshot

Snapshots | iceberg

Inside this repository

media.js
application/javascript

Download raw (2.6 KB)

/*
 * GET home page.
 */

var Media = require('../models').Media;
var exec = require('child_process').exec;
var fs = require('fs');

exports.media = function(req, res){
    Media.find({'_id':req.params.id}, function media_find(err, m){
        if(err)
        {
            res.send('500', err);
        }
        else
        {
            if(m.length > 0)
                res.send(m[0]);
            else
                res.send('404', 'Could not find media ['+req.params.id+'] on this server');
        }
    });
};

exports.poster = function(req, res){
    Media.find({'_id':req.params.id}, function media_find(err, m){
        if(err)
        {
            res.send('500', err);
        }
        else
        {
            var timestamp = req.params.timestamp || 0;
            var fn = req.params.id + "_" + timestamp + ".jpg",
                path = __dirname + '/../public/posters/' + fn;

            if (fs.existsSync(path)) {
                res.send({url: '/posters/' + fn});
            } else {
                var ffmpeg = 'ffmpeg -i \'' + m[0].url + '\' -ss ' + timestamp + ' -vcodec mjpeg -vframes 1 -f image2 "' + path+'"';
                console.log('poster: '+ffmpeg);
                exec(ffmpeg,
                    function (error, stdout, stderr) {
                        if (error !== null) {
                            console.log('exec error: ' + error);
                        } else {
                            res.send({url: '/posters/' + fn});
                        }
                });
            }
        }
    });
};

exports.spectrogram = function(req, res){
    Media.find({'_id':req.params.id}, function media_find(err, m){
        if(err)
        {
            res.send('500', err);
        }
        else
        {
            var timestamp = req.params.timestamp || 0;
            var fn = req.params.id + "_" + timestamp + ".png",
                path = __dirname + '/../public/spectrograms/' + fn;

            if (fs.existsSync(path)) {
                res.send({url: '/spectrograms/' + fn});
            } else {
                var cmd = [
                    'ffmpeg -y -i \'' + m[0].url + '\' -ac 2 /tmp/foo.wav',
                    'svt.py -s "' + path + '" -o 1 -w 600 -h 50 -p 3 /tmp/foo.wav',
                    'rm /tmp/foo.wav'
                ];

                exec(cmd.join(' && '), function (error, stdout, stderr) {
                    if (error !== null) {
                        console.log('exec error: ' + error);
                    } else {
                        res.send({url: '/spectrograms/' + fn});
                    }
                });
            }
        }
    });
};