# Бэкенд Ютуб Бэкенд для приложения для стриминга и скачивания видео и плейлистов с YouTube. Построено на **FastAPI** + **yt-dlp** + **FFmpeg**. --- ## Возможности и особенности - Стриминг видео без предварительной загрузки - Скачивание видео в формате MP4 - Выбор качества видео (144p — 4K) - Можно выбрать субтитры (автоматически сгенерированные, если у ролика нет субтитров) - Поддержка плейлистов: онлайн-просмотр и скачивание в ZIP-архиве - Универсальный REST API — подключение любого клиента - Поддержка нескольких пользователей одновременно, кэширование метаданных. --- ## Требования - Python 3.12+ - FFmpeg - Git --- ## Установка и запуск на Linux-сервере ### 1. Клонирование репозитория ```bash git clone https://git.wizardstech.ru/yuriko.pozhilov/YouTube-app.git cd ytplayer python3 -m venv venv source venv/bin/activate ``` ### 2. Установка зависимостей Запустите `install.sh`. Скрипт последовательно: - устанавливает все Python-зависимости из `requirements.txt` - устанавливает FFmpeg через apt - открывает `.env` для заполнения переменных окружения - запускает uvicorn для проверки работоспособности - открывает редактор для проверки конфигурации systemd ```bash bash install.sh ``` > Во время выполнения скрипт дважды откроет текстовый редактор: > первый раз — для заполнения `.env` > второй раз — для проверки конфигурации systemd перед регистрацией службы ### 3. Регистрация и запуск системной службы После завершения `install.sh` скопируйте конфигурацию и запустите службу через `restart.sh`. Скрипт: - перезагружает конфигурацию systemd - регистрирует службу для автозапуска при старте системы - запускает службу - выводит текущий статус ```bash sudo cp systemd.ini /etc/systemd/system/ytplayer.service bash restart.sh ``` --- ## Локальный запуск (для разработки и тестирования) Используйте `start.sh` — скрипт активирует виртуальное окружение и запускает приложение напрямую через Python без systemd: ```bash bash start.sh ``` Приложение будет доступно по адресу: `http://localhost:5000` --- ## Управление службой на сервере | Действие | Команда | |---|---| | Запустить / перезапустить | `bash restart.sh` | | Остановить | `sudo systemctl stop ytplayer` | | Просмотр логов | `journalctl -u ytplayer -f` | | Статус службы | `sudo systemctl status ytplayer` | --- ## Автообновление yt-dlp YouTube регулярно меняет API, поэтому yt-dlp нужно обновлять. Добавьте задачу в cron для автоматического обновления каждую ночь: ```bash crontab -e # Добавить строку: 0 3 * * * /home/ubuntu/ytplayer/venv/bin/pip install -U yt-dlp ``` --- ## API | Метод | Эндпоинт | Параметры | Описание | |---|---|---|---| | GET | `/info` | `url` | Метаданные видео или плейлиста | | POST | `/validate` | `{url}` | Проверка доступности ссылки | | GET | `/stream` | `url`, `format_id` | Стриминг видео | | GET | `/download` | `url`, `format_id` | Скачивание видео (MP4) | | GET | `/subtitles` | `url`, `lang`, `auto` | Субтитры в формате VTT | | GET | `/download/progress` | `url` | Прогресс скачивания | | GET | `/playlist/info` | `url` | Метаданные плейлиста | | GET | `/playlist/stream` | `url`, `index`, `format_id` | Стриминг видео из плейлиста | | GET | `/playlist/download` | `url`, `format_id` | Скачивание плейлиста (ZIP) | | GET | `/playlist/progress` | `url` | Прогресс скачивания плейлиста | ---