Skip to content
KryptonFoxPublic

About

Self-Hosted online radio server

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

FoxideFM 🦊📻

FoxideFM — это современная self-hosted онлайн-радиостанция, состоящая из мощного бэкенда на Rust и красивого фронтенда на React + Tailwind CSS.

FoxideFM Rust React

🚀 Особенности

  • Трансляция без пауз: Стриминг аудио осуществляется чанками (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 Docs
  • frontend/ — Клиентская часть на React (Vite, Tailwind CSS, React Query). См. Frontend Docs

🛠 Установка и запуск

Требования

Шаг 1: Сборка фронтенда

Перейдите в папку фронтенда, установите зависимости и соберите проект:

cd frontend
pnpm install
pnpm build

(Собранная статика появится в frontend/dist и будет автоматически подхвачена бэкендом)

Шаг 2: Запуск сервера (Бэкенд)

Бэкенд самостоятельно создаст SQLite-базу radio.db и нужные папки при первом запуске:

cd backend
cargo run --release

Шаг 3: Использование

Откройте браузер и перейдите по адресу: 👉 http://127.0.0.1:3000

  • Публичная страница: Станция с плеером и информацией о текущем треке.
  • Панель администратора: Доступна по адресу /admin.
    • Логин: admin (устанавливается через переменные окружения, по умолчанию admin:admin)
    • Здесь вы можете загружать треки, управлять очередью и создавать плейлисты!

🔧 Разработка (Dev-режим)

Если вы хотите изменять фронтенд и видеть изменения в реальном времени:

  1. Запустите бэкенд: cd backend && cargo run
  2. В другом окне терминала запустите Vite: cd frontend && pnpm dev

Vite автоматически проксирует все запросы /api/* к Rust-серверу.

📝 TODO: Планы на будущее (Возможные улучшения)

  • Нативный 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 среде.

About

Self-Hosted online radio server

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages