mie-webconf-app
Version:
This is a mediasoup based web conferencing app with socket.io for signalling
66 lines (59 loc) • 1.62 kB
JavaScript
// src/mediasoup-config.js
const mediasoup = require('mediasoup');
//importing os to get number of cores
const os = require('os');
const numCores = os.cpus().length;
const workerSettings = {
logLevel: 'warn',
rtcMinPort: 10000,
rtcMaxPort: 10100
};
const workers = [];
let nextWorkerIndex = 0;
const routers = new Map();
const createWorkers = async () => {
for (let i = 0; i < numCores; i++) {
const worker = await mediasoup.createWorker(workerSettings);
worker.on('died', () => {
console.error(`Mediasoup worker ${i} died`);
setTimeout(() => process.exit(1), 2000);
});
workers.push(worker);
}
console.log(`Created ${workers.length} mediasoup workers`);
};
const getNextWorker = () => {
const worker = workers[nextWorkerIndex];
nextWorkerIndex = (nextWorkerIndex + 1) % workers.length;
return worker;
};
// Getter function to safely access `router`
const getRouter = async (roomId) => {
let router = routers.get(roomId);
if (!router || router.closed) {
router = await createRouter(roomId);
}
return router;
};
const createRouter = async (roomId) => {
const worker = getNextWorker();
const router = await worker.createRouter({
mediaCodecs: [
{
kind: 'audio',
mimeType: 'audio/opus',
clockRate: 48000,
channels: 2
},
{
kind: 'video',
mimeType: 'video/VP8',
clockRate: 90000
}
]
});
routers.set(roomId, router);
console.log(`Created router for room ${roomId} on worker ${worker.pid}`);
return router;
}
module.exports = { createWorkers, getRouter, workers };