46e8278276ad1cbfddf90dd2d309fa8a99c970fd
Бэкенд Ютуб
Бэкенд для приложения для стриминга и скачивания видео и плейлистов с YouTube. Построено на FastAPI + yt-dlp + FFmpeg.
Возможности и особенности
- Стриминг видео без предварительной загрузки
- Скачивание видео в формате MP4
- Выбор качества видео (144p — 4K)
- Можно выбрать субтитры (автоматически сгенерированные, если у ролика нет субтитров)
- Поддержка плейлистов: онлайн-просмотр и скачивание в ZIP-архиве
- Универсальный REST API — подключение любого клиента
- Поддержка нескольких пользователей одновременно, кэширование метаданных.
Требования
- Python 3.12+
- FFmpeg
- Git
Установка и запуск на Linux-сервере
1. Клонирование репозитория
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 install.sh
Во время выполнения скрипт дважды откроет текстовый редактор: первый раз — для заполнения
.envвторой раз — для проверки конфигурации systemd перед регистрацией службы
3. Регистрация и запуск системной службы
После завершения install.sh скопируйте конфигурацию и запустите службу через restart.sh. Скрипт:
- перезагружает конфигурацию systemd
- регистрирует службу для автозапуска при старте системы
- запускает службу
- выводит текущий статус
sudo cp systemd.ini /etc/systemd/system/ytplayer.service
bash restart.sh
Локальный запуск (для разработки и тестирования)
Используйте start.sh — скрипт активирует виртуальное окружение и запускает приложение напрямую через Python без systemd:
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 для автоматического обновления каждую ночь:
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 |
Прогресс скачивания плейлиста |
Description
Languages
Python
54.1%
HTML
45.1%
Shell
0.8%