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;