Add video as a media kind in photos: streaming upload with per-kind limits, ffprobe metadata, poster frame reusing the image variant pipeline, and a playback object (remux when web-compatible, else h264/yuv420p/aac transcode). Video jobs run on a separate pool with a long lease. Frontend gains a video viewer, grid badge/duration and video upload.
52 lines
3.2 KiB
Markdown
52 lines
3.2 KiB
Markdown
# Spec Delta
|
|
|
|
## MODIFIED Requirements
|
|
|
|
### Requirement: Журнал объектов
|
|
|
|
Каждый физический объект SHALL иметь ровно одну запись в слое метаданных с ключом,
|
|
MIME-типом, размером, габаритами и состоянием; фото SHALL ссылаться на объекты по
|
|
ролям original, thumb, medium, preview и playback.
|
|
|
|
#### Scenario: Привязка ролей
|
|
|
|
- **WHEN** фото загружено и обработано
|
|
- **THEN** фото ссылается на объект-оригинал и, когда они готовы, на объекты thumb, medium и preview
|
|
|
|
#### Scenario: Оригинал без вариантов
|
|
|
|
- **WHEN** варианты ещё не сгенерированы
|
|
- **THEN** фото доступно с оригиналом, а thumb, medium и preview отсутствуют
|
|
|
|
#### Scenario: Привязка роли воспроизведения
|
|
|
|
- **WHEN** видео обработано
|
|
- **THEN** медиа ссылается на объект playback наряду с оригиналом и постером
|
|
|
|
### Requirement: Генерация вариантов
|
|
Генерация вариантов SHALL выполняться через надёжную очередь заданий с
|
|
однократным выполнением и повтором при сбое; готовый результат SHALL
|
|
транслироваться подписчикам альбома. Очередь SHALL поддерживать настраиваемую
|
|
пропускную способность, SHALL обрабатывать более свежие фото раньше остальных и
|
|
SHALL различать короткие задания изображений и длительные задания видео.
|
|
|
|
#### Scenario: Повтор после рестарта
|
|
- **WHEN** процесс перезапускается с незавершёнными заданиями
|
|
- **THEN** генерация вариантов продолжается
|
|
|
|
#### Scenario: Событие после генерации
|
|
- **WHEN** варианты фото готовы
|
|
- **THEN** подписчикам альбома публикуется событие обновления этого фото
|
|
|
|
#### Scenario: Приоритет свежих фото
|
|
- **WHEN** в очереди есть готовые к обработке задания разного возраста
|
|
- **THEN** система обрабатывает более свежие фото раньше
|
|
|
|
#### Scenario: Настраиваемая пропускная способность
|
|
- **WHEN** задан уровень параллелизма генерации
|
|
- **THEN** система обрабатывает варианты с этим уровнем параллелизма
|
|
|
|
#### Scenario: Длительное задание видео
|
|
- **WHEN** выполняется длительная подготовка видео
|
|
- **THEN** задание удерживается на весь срок выполнения и не вытесняет генерацию вариантов изображений
|