'use strict'; const os = require('os'); const ifaces = os.networkInterfaces(); const getLocalIp = () => { let localIp = '127.0.0.1'; Object.keys(ifaces).forEach((ifname) => { for (const iface of ifaces[ifname]) { // Ignore IPv6 and 127.0.0.1 if (iface.family !== 'IPv4' || iface.internal !== false) { continue; } // Set the local ip to the first IPv4 address found and exit the loop localIp = iface.address; return; } }); return localIp; }; // https://api.ipify.org module.exports = { listenIp: '0.0.0.0', listenPort: 3010, // ssl/README.md sslCrt: '../ssl/cert.pem', sslKey: '../ssl/key.pem', /* Ngrok 1. Goto https://ngrok.com 2. Get started for free 3. Copy YourNgrokAuthToken: https://dashboard.ngrok.com/get-started/your-authtoken */ ngrokAuthToken: '', apiKeySecret: 'mirotalksfu_default_secret', mediasoup: { // Worker settings numWorkers: Object.keys(os.cpus()).length, worker: { rtcMinPort: 40000, rtcMaxPort: 40100, logLevel: 'warn', logTags: ['info', 'ice', 'dtls', 'rtp', 'srtp', 'rtcp'], }, // Router settings router: { mediaCodecs: [ { kind: 'audio', mimeType: 'audio/opus', clockRate: 48000, channels: 2, }, { kind: 'video', mimeType: 'video/VP8', clockRate: 90000, parameters: { 'x-google-start-bitrate': 1000, }, }, { kind: 'video', mimeType: 'video/VP9', clockRate: 90000, parameters: { 'profile-id': 2, 'x-google-start-bitrate': 1000, }, }, { kind: 'video', mimeType: 'video/h264', clockRate: 90000, parameters: { 'packetization-mode': 1, 'profile-level-id': '4d0032', 'level-asymmetry-allowed': 1, 'x-google-start-bitrate': 1000, }, }, { kind: 'video', mimeType: 'video/h264', clockRate: 90000, parameters: { 'packetization-mode': 1, 'profile-level-id': '42e01f', 'level-asymmetry-allowed': 1, 'x-google-start-bitrate': 1000, }, }, ], }, // WebRtcTransport settings webRtcTransport: { listenIps: [ { ip: '0.0.0.0', announcedIp: getLocalIp(), // replace by public static IP address https://api.ipify.org }, ], maxIncomingBitrate: 1500000, initialAvailableOutgoingBitrate: 1000000, }, }, };