44 lines
1.2 KiB
TypeScript
44 lines
1.2 KiB
TypeScript
export type MediaMode = 'legacy' | 'single_server_sfu';
|
|
|
|
const parseMediaMode = (value: string | undefined): MediaMode => {
|
|
const normalized = (value ?? 'legacy').trim().toLowerCase();
|
|
if (normalized === 'single_server_sfu') {
|
|
return 'single_server_sfu';
|
|
}
|
|
return 'legacy';
|
|
};
|
|
|
|
const parseCsv = (value: string | undefined): string[] => {
|
|
if (!value) return [];
|
|
return value
|
|
.split(',')
|
|
.map((item) => item.trim())
|
|
.filter(Boolean);
|
|
};
|
|
|
|
const parsePositiveNumber = (value: string | undefined): number | null => {
|
|
if (!value) return null;
|
|
const parsed = Number(value);
|
|
if (!Number.isFinite(parsed) || parsed <= 0) {
|
|
return null;
|
|
}
|
|
return parsed;
|
|
};
|
|
|
|
export const mediaMode: MediaMode = parseMediaMode(process.env.MEDIA_MODE);
|
|
|
|
export const mediaConfig = {
|
|
mode: mediaMode,
|
|
turn: {
|
|
urls: parseCsv(process.env.TURN_URLS),
|
|
username: process.env.TURN_USERNAME ?? '',
|
|
credential: process.env.TURN_CREDENTIAL ?? '',
|
|
},
|
|
recordingsDir: process.env.MEDIA_RECORDINGS_DIR ?? 'media-recordings',
|
|
limits: {
|
|
maxPublishers: parsePositiveNumber(process.env.MEDIA_MAX_PUBLISHERS),
|
|
maxSubscribersPerRoom: parsePositiveNumber(process.env.MEDIA_MAX_SUBSCRIBERS_PER_ROOM),
|
|
},
|
|
};
|
|
|