Одно приложение покрывает три сценария прямо из браузера:
- Запись экрана в файл — локально объединяем системный звук, микрофон и камеру и отдаём готовый WEBM.
- Трансляция экрана по коду комнаты — ведущий получает ссылку, зрители смотрят через WebRTC без дополнительных плагинов.
- Комната видеозвонка — создаём ссылку, обмениваемся SDP и ICE через встроенный сигналинг, управляем микрофоном/камерой и переключаем камеры на устройствах.
- Node.js 20 или новее (сервер и сборка фронтенда тестировались на Node 20).
- npm 10.
npm install # ставим бэкенд зависимости
npm --prefix frontend install # ставим зависимости интерфейсаФронтенд (Vite) читает переменную VITE_SIGNALING_URL, которая задаёт базовый WebSocket‑адрес для сигналинга.
- Для локальной разработки в репозитории уже есть
frontend/.env.developmentсо значениемwss://localhost:8000, которое совпадает с адресом HTTPS‑сервера, поднимаемогоnpm start. - Примеры конфигурации для production и разработки лежат в
frontend/.env.example. Скопируйте нужный блок в.env.production,.env.localили другой файл окружения Vite и подставьте свои домены. - Если переменная не задана, клиент автоматически использует протокол и хост текущей страницы, как и раньше.
| Скрипт | Назначение |
|---|---|
npm start |
Соберёт фронтенд (если нужно) и запустит HTTPS‑сервер на https://localhost:8000. |
npm run dev:client |
Запустит Vite Dev Server (порт 5173) для разработки UI. |
npm run lint |
Линт серверного кода и фронтенда (ESLint + Prettier). |
npm run build |
Сборка интерфейса в каталог dist/, который раздаёт Express. |
Сервер всегда стартует поверх HTTPS. Для production прокиньте
SSL_KEY_PATHиSSL_CERT_PATH. В разработки используются само‑подписанные сертификаты из./ssl.
server.js # Express + WebSocket сигналинг
frontend/ # Vite + React + Ant Design интерфейс
├── src/features # Фичи: запись, трансляция, звонок
├── src/lib # Переиспользуемые утилиты (WebRTC, микшеры и т.д.)
└── dist/ # Результат сборки (создаётся командой build)
Сервер выводит подробные шаги в консоль (подключения, рассылка сигналов, управление комнатами), что облегчает разбор проблем в продакшене. В клиентском коде дополнительно заложены лог‑сообщения в ключевых местах (инициализация WebRTC, захват медиа, переключение устройств).
Для продакшена:
export SSL_KEY_PATH=/etc/letsencrypt/live/your-domain/privkey.pem
export SSL_CERT_PATH=/etc/letsencrypt/live/your-domain/fullchain.pem
npm run prodЛокально достаточно npm start — будут использованы сертификаты из ./ssl.
Запустить автоматические проверки можно через npm-скрипты:
npm run test:client— юнит-тесты фронтенда на Vitest (аналогnpm run testвнутри каталогаfrontend).npm run test:server— серверные тесты на Vitest с окружением Node.js.npm run test— оба набора тестов подряд, если нужно прогнать весь стек.
Поверх автоматизации по-прежнему полезно пройтись по ключевым пользовательским сценариям вручную:
- Запись экрана: старт/стоп, наличие файла, работа микрофона и камеры.
- Трансляция: ведущий + несколько зрителей в разных окнах/браузерах.
- Звонок: два и более участников, переключение камер, отключение микрофона/видео.