7.3 KiB
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 сообщает о недоступности видео