socialfi/server/cron/thumbnails.js

40 lines
1.6 KiB
JavaScript

const CronJob = require('cron').CronJob,
axios = require('axios'),
jwt = require('jsonwebtoken'),
crypto = require('crypto'),
helpers = require('../helpers/helpers'),
config = require('../config/default'),
port = config.rtmp_server.http.port;
const job = new CronJob('*/5 * * * * *', function () {
// Use node-media-server API v1 with a signed token (internal use)
// Compute secret the same way node-media-server does (sha256 of first user password)
const jwtConfig = config.rtmp_server.auth && config.rtmp_server.auth.jwt;
let token = null;
try {
if (jwtConfig && jwtConfig.users && jwtConfig.users.length > 0) {
const secret = crypto.createHash('sha256').update(jwtConfig.users[0].password).digest('hex');
token = jwt.sign({}, secret, { algorithm: jwtConfig.algorithm || 'HS256' });
}
} catch (e) {
console.log('Failed to generate JWT for node-media-server api:', e.message);
}
const apiUrl = 'http://127.0.0.1:' + port + '/api/v1/streams' + (token ? ('?token=' + token) : '');
axios.get(apiUrl)
.then(response => {
let streams = response.data;
if (typeof (streams['live'] !== undefined)) {
let live_streams = streams['live'];
for (let stream in live_streams) {
if (!live_streams.hasOwnProperty(stream)) continue;
helpers.generateStreamThumbnail(stream);
}
}
})
.catch(error => {
console.log(error);
});
}, null, false);
module.exports = job;