40 lines
1.6 KiB
JavaScript
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; |