feat(media): add single-server SFU scaffolding and media mode config

This commit is contained in:
2026-02-07 17:30:00 +00:00
parent 63e7700340
commit aae91ac862
5 changed files with 179 additions and 0 deletions

43
Backend/media/config.ts Normal file
View File

@@ -0,0 +1,43 @@
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),
},
};