FoxideFM — это современная self-hosted онлайн-радиостанция, состоящая из мощного бэкенда на Rust и красивого фронтенда на React + Tailwind CSS.
- Трансляция без пауз: Стриминг аудио осуществляется чанками (Chunked Transfer Encoding) через
broadcast-канал в реальном времени. Поддерживаются сторонние плееры (VLC, AIMP, Winamp). - Прямой эфир (SSE): Метаданные текущего трека (название, артист, обложка) передаются на клиенты в реальном времени через Server-Sent Events без необходимости перезагрузки страницы.
- Smart Throttling: Бэкенд вычисляет скорость отправки аудио-чанков на основе битрейта трека из базы данных и регулирует тайминги (throttling) с точностью до миллисекунды, создавая эффект непрерывного прямого эфира без переполнения буфера клиентов.
- Библиотека и Плейлисты: Полноценная админ-панель для управления треками, очередью воспроизведения и плейлистами. Обложки автоматически извлекаются из загружаемых MP3-файлов.
- Своя база данных: Хранение треков в легковесной базе
SQLite(черезsqlx). - Модульная архитектура: Чистый и легковесный код как на бэкенде, так и на фронтенде.
- Современный стек: Rust (Axum), React 19, Vite 8, Tailwind CSS v4, Lucide Icons.
backend/— Серверная часть на Rust (Axum, sqlx, tokio). См. Backend API Docsfrontend/— Клиентская часть на React (Vite, Tailwind CSS, React Query). См. Frontend Docs
Перейдите в папку фронтенда, установите зависимости и соберите проект:
cd frontend
pnpm install
pnpm build(Собранная статика появится в frontend/dist и будет автоматически подхвачена бэкендом)
Бэкенд самостоятельно создаст SQLite-базу radio.db и нужные папки при первом запуске:
cd backend
cargo run --releaseОткройте браузер и перейдите по адресу: 👉 http://127.0.0.1:3000
- Публичная страница: Станция с плеером и информацией о текущем треке.
- Панель администратора: Доступна по адресу
/admin.- Логин:
admin(устанавливается через переменные окружения, по умолчанию admin:admin) - Здесь вы можете загружать треки, управлять очередью и создавать плейлисты!
- Логин:
Если вы хотите изменять фронтенд и видеть изменения в реальном времени:
- Запустите бэкенд:
cd backend && cargo run - В другом окне терминала запустите Vite:
cd frontend && pnpm dev
Vite автоматически проксирует все запросы /api/* к Rust-серверу.
- Нативный ICY-сервер (Чистый TCP/Tokio): Перенести отдачу аудио-потока с высокоуровневого
axum/hyperна сырые TCP-сокеты (tokio::net::TcpListener). Это позволит полностью избавиться от HTTP Chunked Encoding и реализовать 100% совместимую поддержку ICY-метаданных для плееров типа VLC, Winamp и старых автомагнитол. - Background Jobs для FFmpeg: Вынести синхронную обработку треков в фоновую очередь, чтобы не блокировать потоки сервера при массовой загрузке.
- HLS (HTTP Live Streaming): Добавить поддержку HLS с буферизацией чанков для стабильного прослушивания при плохом интернете.
- Плавные переходы (Crossfading): Реализовать микширование треков при переключении для бесшовного эфира.
- Drag-and-Drop в UI: Добавить возможность сортировки треков в очереди и плейлистах с помощью перетаскивания (например, через
dnd-kit). - Улучшенная обработка ошибок: Использование специализированного слоя ошибок в API (вместо общих 500-х).
- Безопасность: Добавление строгих настроек CORS и флага
Secureдля JWT-куки в production среде.