Обложка: Создаём локальный видеохостинг. Часть 1: продвижение с бэкендом

Создаём локальный видеохостинг. Часть 1: продвижение с бэкендом

Максим Кузнецов
Максим Кузнецов

Senior Python Developer в Akvelon

Напомню цель — написать небольшой и очень простой сервер с возможностью просмотра видео на разных устройствах.

В прошлой части мы определились с тем, что попытаемся написать бэкенд на FastAPI. Выбор кажется очевиден, но сделаю пояснение.

FastApi — асинхронный веб-фреймворк. По мне асинхронность — идеальный вариант для работы с файлами и сетью, особенно при большой нагрузке.

Теперь нам потребуется работа с файлами и отдача их пользователю, в этом нам поможет документация. Пара минут чтения документации и вуаля, находим ответ на вопрос, как отдать файлы пользователю в FastApi. Теперь определимся с эндпоинтами.

Как минимум нам нужно 3 эндпоинта:

  • список всех видео,
  • страница отображения одного видео,
  • API с загрузкой файла.

Для «Список видео» и «Отображение видео» будет использован HTMLResponse и Jinja2-шаблоны.

Как можете увидеть в документации, есть FileRepsonse и StreamResponse. Особой разницы в них я не увидел, но в FileResponse есть chunk_size — видимо, размер отправляемой части в байтах. Сделаем впоследствии 2 разных эндпоинта для проверки скорости работы + разных параметров.

Это ссылка на репозиторий, в котором обновления будут появляться быстрее, чем публиковаться статьи. Но я постараюсь максимально быстро описывать случившиеся изменения.

Оставляйте коментарии и рекомендуйте, что добавить, какую технологию использовать или какие альтернативы, советы, рекомендации, мне будет очень интересно почитать.

К комментариям

UPD: После тестирования я обнаружил неточность. VLC не может воспроизвести ответ через FileResponse, хотя в браузере работает. Поэтому оставим StreamResponse, но нужно будет поработать над оптимизацией для чтения из файла.