Files
ds-galo/openspec/specs/videos/spec.md
T

7.3 KiB
Raw Blame History

videos Specification

Purpose

Поддержка видео в альбомах: приём файла, фоновая подготовка web-совместимого варианта, постер-кадр и воспроизведение в браузере.

Requirements

Requirement: Приём видео

Участник с правом загрузки SHALL загружать видео в альбом; система SHALL принимать ввод video/* и SHALL отклонять файлы сверх лимита видео понятной ошибкой о превышении размера.

Scenario: Успешная загрузка видео

  • WHEN участник с правом загрузки отправляет видеофайл в пределах лимита
  • THEN система сохраняет оригинал и создаёт медиа-запись с признаком видео

Scenario: Превышение лимита видео

  • WHEN загружается файл больше лимита видео
  • THEN система отклоняет загрузку с явной ошибкой о превышении размера

Scenario: Не медиафайл

  • WHEN загружается файл, не являющийся изображением или видео
  • THEN система отклоняет загрузку

Requirement: Метаданные видео

При обработке система SHALL извлекать длительность, размеры кадра и поворот и SHALL возвращать длительность в данных медиа.

Scenario: Длительность доступна

  • WHEN видео успешно обработано
  • THEN данные медиа содержат длительность видео

Scenario: Метаданные недоступны

  • WHEN из видео не удаётся извлечь метаданные
  • THEN запись сохраняется, а длительность пуста

Requirement: Постер видео

Система SHALL извлекать кадр-постер и SHALL генерировать из него варианты thumb, medium и preview тем же способом, что для изображений, чтобы сетка и обложка отображали видео постером.

Scenario: Генерация постера

  • WHEN видео обработано
  • THEN система создаёт варианты thumb, medium и preview из кадра-постера

Scenario: Обложка из видео

  • WHEN видео становится обложкой альбома
  • THEN альбом отображает постер видео

Requirement: Гарантированное воспроизведение

Система SHALL готовить воспроизводимый вариант видео: SHALL выполнять remux без перекодирования, когда источник web-совместим, и SHALL транскодировать в h264/yuv420p/aac с faststart иначе; система SHALL NOT увеличивать разрешение и SHALL ограничивать длинную сторону 1080p.

Scenario: Совместимый источник

  • WHEN источник — h264/yuv420p с совместимым профилем, звуком aac или без звука, в подходящем контейнере и в пределах разрешения
  • THEN система подготавливает вариант remux без перекодирования

Scenario: Несовместимый источник

  • WHEN источник не является web-совместимым (например, hevc, 10-bit или yuv444)
  • THEN система транскодирует видео в h264/yuv420p/aac

Scenario: Разрешение выше предела

  • WHEN длинная сторона источника превышает 1080p
  • THEN система масштабирует видео до 1080p, не увеличивая меньший источник

Requirement: Готовность и воспроизведение видео

Данные медиа SHALL содержать адрес воспроизводимого варианта, когда он готов; клиент SHALL воспроизводить его с перемоткой; до готовности система SHALL отдавать постер и признак обработки, а обновление о готовности SHALL транслироваться подписчикам.

Scenario: Вариант не готов

  • WHEN видео ещё обрабатывается
  • THEN данные медиа содержат постер и не содержат адрес воспроизведения

Scenario: Вариант готов

  • WHEN обработка завершена
  • THEN данные медиа содержат адрес воспроизведения, а подписчики получают обновление

Scenario: Перемотка

  • WHEN клиент перематывает воспроизведение
  • THEN система отдаёт запрошенный диапазон байт

Requirement: Фоновая подготовка видео

Задание подготовки видео SHALL выполняться в фоне с длительным лизингом, таймаутом и повторами при сбое и SHALL NOT вытеснять генерацию вариантов изображений.

Scenario: Повтор при сбое

  • WHEN подготовка видео завершается ошибкой
  • THEN задание повторяется с задержкой до достижения предела попыток

Scenario: Изоляция от картинок

  • WHEN длительное видео обрабатывается
  • THEN генерация вариантов изображений продолжает выполняться

Requirement: Оригинал видео

Система SHALL сохранять исходный видеофайл и SHALL использовать его для скачивания независимо от подготовленного варианта.

Scenario: Скачивание оригинала

  • WHEN участник скачивает видео
  • THEN система возвращает адрес исходного файла

Requirement: Отсутствие видео-инструментов

При отсутствии ffmpeg/ffprobe система SHALL отключать приём видео и SHALL отражать недоступность видео-обработки в состоянии здоровья.

Scenario: Инструменты отсутствуют

  • WHEN видео-инструменты недоступны
  • THEN приём видео отклоняется, а health сообщает о недоступности видео