From 46e8278276ad1cbfddf90dd2d309fa8a99c970fd Mon Sep 17 00:00:00 2001 From: "yuriko.pozhilov" Date: Sun, 22 Mar 2026 14:04:03 +0000 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B2=20=C2=AB?= =?UTF-8?q?/=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..037067e --- /dev/null +++ b/README.md @@ -0,0 +1,111 @@ +# Бэкенд Ютуб + +Бэкенд для приложения для стриминга и скачивания видео и плейлистов с 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` | Прогресс скачивания плейлиста | + +--- \ No newline at end of file