111 lines
4.8 KiB
Markdown
111 lines
4.8 KiB
Markdown
# Бэкенд Ютуб
|
||
|
||
Бэкенд для приложения для стриминга и скачивания видео и плейлистов с 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` | Прогресс скачивания плейлиста |
|
||
|
||
--- |