Эта часть проекта отвечает за автономный аудиоплеер, который запускается на устройстве (например, Raspberry Pi) и отображает полноэкранный интерфейс на Qt.
Проект реализован как Qt Widgets‑приложение, использующее сцену (QGraphicsScene) с виджетом плеера, а также отдельную сцену для просмотра плейлистов, которые генерирует веб‑часть проекта (Django).
-
Точка входа:
res/main.cpp- Разбирает аргумент командной строки как угол поворота экрана (в градусах), который затем передаётся в графические сцены.
- Инициализирует
QApplication. - Проверяет наличие сети и доступность сайтов (Spotify, YouTube) через
Wifichecker. - Запускает
xraycontroller(контроллер внешнего процесса, путь к бинарнику и конфигу задаётся вxraycontroller.h/.cpp). - Создаёт и показывает
PlayerScene.
-
Главная сцена плеера:
res/ui/PlayerScene.{h,cpp}- Владеет:
PlayerAudio— аудио‑движок, обёртка надQMediaPlayerи стратегиями разных источников (mp3 / YouTube / Spotify).PlayerWindow— основной UI плеера (обложка, название, артист, время, кнопки play/pause, prev/next, loop, shuffle).PlaylistScene— сцена списка плейлистов и их содержимого.
- Заворачивает
PlayerWindowвQGraphicsSceneи показывает его черезQGraphicsViewво фреймлес‑окнеQMainWindow. - По нажатию кнопки меню (
btnMenuвPlayerWindow) переключаетQGraphicsViewна сценуPlaylistScene, а по запросу назад изPlaylistSceneвозвращается на основную сцену.
- Владеет:
-
Окно плеера:
res/ui/PlayerWindow.{h,cpp}- Управляет:
- Кнопками управления воспроизведением (
btnPlay,btnPrev,btnNext,btnLoop,btnShuffle). - Прогресс‑баром и метками текущего/общего времени.
- Текущей обложкой трека (
lblCover). - Бегущими строками для названия и артиста (
MarqueeController).
- Кнопками управления воспроизведением (
- Реагирует на события
QMediaPlayer(смена статуса, позиция, длительность, метаданные) и обновляет UI. - Обрабатывает горячие клавиши (Esc, Space, стрелки, F7) через
keyPressEvent.
- Управляет:
-
Сцена плейлистов:
res/ui/PlaylistScene.{h,cpp}- Владеет
PlaylistWindowи показывает его в собственной сцене. - Загружает список плейлистов с диска из JSON‑файлов, которые создаёт веб‑часть:
- Путь:
../web-interface/data/playlists/*.jsonотносительно директории приложения. - Формат каждого файла:
{ "name": "Имя плейлиста", "tracks": [ { "type": "youtube|spotify|mp3", "name": "Название трека", "artist": "Исполнитель", "duration": "MM:SS или HH:MM:SS", "path": "...", "cover": "..." } ] }
- Путь:
- Работает в двух режимах:
- PlaylistsList — список плейлистов (одна строка = один плейлист, показывается название и количество треков).
- TracksView — содержимое выбранного плейлиста (одна строка = один трек, показываются название, артист и длительность).
- При нажатии «Назад»:
- В режиме
TracksViewвозвращает к списку плейлистов. - В режиме
PlaylistsListэмититrequestBack, иPlayerSceneпереключает сцену обратно на основной плеер.
- В режиме
- Владеет
-
Окно списка/содержимого плейлиста:
res/ui/PlaylistWindow.{h,cpp,ui}- UI определён в
PlaylistWindow.ui(тёмная тема, заголовок, кнопка «Назад», три строки с треками, кнопки прокрутки вверх/вниз). - В коде:
- Метод
setPlaylist(const QList<QPair<QString, QString>>& tracks, const QString& name)принимает список пар"title", "meta"и устанавливает заголовок плейлиста. - Создаёт фиксированное количество (3) видимых строк, которые заполняются из массива и прокручиваются через
scrollUp/scrollDown. - Каждая строка — это
QPushButton, в котором располагаются:- Квадратная обложка 48×48 (
QLabelсQPixmap). - Два текста (
titleиmeta) в вертикальном лейауте.
- Квадратная обложка 48×48 (
- При клике по строке эмитится сигнал
itemClicked(int index)с индексом элемента в текущем списке. - Сигнал
requestBack()эмитится по нажатию кнопки «Назад».
- Метод
- UI определён в
-
Вспомогательные классы:
res/utils/*.{h,cpp},res/audio/*.{h,cpp}PlayerAudio,mediafactory, стратегии разных источников (mp3strategy,youtubestrategy,spotifystrategy).MarqueeController— анимация бегущей строки.FullscreenMessage— полноэкранные сообщения.Wifichecker— проверка сетевого доступа и доступности сайтов.xraycontroller— запуск/остановка внешнего процесса (xray) с конфигом.
Веб‑часть (web-interface) управляет плейлистами и треками с помощью Django и сохраняет их в JSON‑файлах:
- Каталог плейлистов:
web-interface/data/playlists/. - Имена файлов совпадают с идентификатором плейлиста (например,
test.json→id = "test"). - При изменении/создании плейлистов через веб‑интерфейс JSON‑файлы автоматически обновляются.
Медиаплеер для Raspberry Pi с поддержкой воспроизведения MP3 файлов и потокового аудио с YouTube. Приложение разработано с использованием Qt6 и предназначено для работы на Raspberry Pi с поворотом интерфейса на 90 градусов для удобного отображения на вертикальном дисплее.
- Воспроизведение локальных MP3 файлов
- Потоковое воспроизведение аудио с YouTube
- Графический интерфейс с поддержкой поворота экрана
- Отображение метаданных треков (название, исполнитель)
- Управление воспроизведением (пауза, перемотка)
- Прогресс-бар с отображением времени
- Qt6 (Core, Widgets, Multimedia) - графический интерфейс и медиа-функции
- TagLib - чтение метаданных из MP3 файлов
- yt-dlp - извлечение аудио-потоков с YouTube
- C++20 - язык программирования
- CMake 3.16 или выше
- Компилятор C++ с поддержкой C++20 (GCC 10+, Clang 12+)
- vcpkg для управления зависимостями
- Python 3 (для работы с yt-dlp)
- yt-dlp (установка через pip:
pip install yt-dlp)
- Raspberry Pi OS (Linux)
- Windows (для разработки)
- Linux (для разработки)
Если у вас еще не установлен vcpkg:
# Клонируем репозиторий vcpkg
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
# На Linux/macOS
./bootstrap-vcpkg.sh
# На Windows
.\bootstrap-vcpkg.bat# Установка зависимостей из manifest файла
vcpkg install --triplet x64-linux # Для Linux/Raspberry Pi
# или
vcpkg install --triplet x64-windows # Для Windowsgit clone <your-repo-url>
cd Raspberry-Pi-playermkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>/scripts/buildsystems/vcpkg.cmake
cmake --build .mkdir build
cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=<path-to-vcpkg>\scripts\buildsystems\vcpkg.cmake
cmake --build .Для работы с YouTube необходимо установить yt-dlp:
pip install yt-dlpИли через пакетный менеджер:
# На Raspberry Pi OS
sudo apt-get install yt-dlp
# Или через pip
pip3 install yt-dlp- Убедитесь, что в директории
res/music/есть MP3 файлы для тестирования - Проверьте, что yt-dlp установлен и доступен в PATH
# Из директории build
./Raspberry-Pi-player # Linux/Raspberry Pi
# или
.\Raspberry-Pi-player.exe # Windows- tg :@mikoshidoomsday
- email: al_rus_06@mail.ru


