Files
ytplayer/README.md

4.8 KiB
Raw Permalink Blame History

Бэкенд Ютуб

Бэкенд для приложения для стриминга и скачивания видео и плейлистов с 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/ytplayer.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 Прогресс скачивания плейлиста