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.
59 lines
3.7 KiB
Markdown
59 lines
3.7 KiB
Markdown
# Spec Delta
|
|
|
|
## MODIFIED Requirements
|
|
|
|
### Requirement: Загрузка фото
|
|
Пользователь с правом загрузки SHALL иметь возможность загружать медиа (изображения и
|
|
видео) по одному и массово; система SHALL принимать ввод `image/*` и `video/*`.
|
|
|
|
#### Scenario: Успешная загрузка
|
|
- **WHEN** участник с правом загрузки отправляет файл изображения
|
|
- **THEN** система сохраняет оригинал и создаёт запись фото с метаданными
|
|
|
|
#### Scenario: Успешная загрузка видео
|
|
- **WHEN** участник с правом загрузки отправляет видеофайл
|
|
- **THEN** система сохраняет оригинал и создаёт медиа-запись с признаком видео
|
|
|
|
#### Scenario: Загрузка без права
|
|
- **WHEN** наблюдатель пытается загрузить фото
|
|
- **THEN** система отклоняет запрос
|
|
|
|
#### Scenario: Неподдерживаемый файл
|
|
- **WHEN** загружается файл, не являющийся изображением или видео
|
|
- **THEN** система отклоняет загрузку
|
|
|
|
### Requirement: Ограничение размера загрузки
|
|
Система SHALL ограничивать размер загружаемых файлов отдельно для изображений и видео и
|
|
SHALL отвечать понятной ошибкой при превышении лимита, а не ошибкой разбора формы.
|
|
|
|
#### Scenario: Превышение лимита
|
|
- **WHEN** загружаемый файл превышает максимальный размер
|
|
- **THEN** система отклоняет загрузку с явной ошибкой о превышении размера
|
|
|
|
#### Scenario: Превышение лимита видео
|
|
- **WHEN** загружаемое видео превышает лимит видео
|
|
- **THEN** система отклоняет загрузку с явной ошибкой о превышении размера
|
|
|
|
#### Scenario: Файл в пределах лимита
|
|
- **WHEN** файл не превышает лимит
|
|
- **THEN** система принимает multipart-загрузку и обрабатывает фото
|
|
|
|
## ADDED Requirements
|
|
|
|
### Requirement: Медиа-запись фото
|
|
Данные фото SHALL включать вид медиа (`image` | `video`), длительность для видео и адрес
|
|
воспроизведения, когда видео-вариант готов; для изображений адрес воспроизведения
|
|
отсутствует.
|
|
|
|
#### Scenario: Запись изображения
|
|
- **WHEN** клиент получает данные изображения
|
|
- **THEN** вид медиа — изображение, длительность и адрес воспроизведения отсутствуют
|
|
|
|
#### Scenario: Запись видео без готового варианта
|
|
- **WHEN** клиент получает данные видео, а вариант ещё не готов
|
|
- **THEN** вид медиа — видео, длительность присутствует, адрес воспроизведения отсутствует
|
|
|
|
#### Scenario: Запись видео с готовым вариантом
|
|
- **WHEN** видео-вариант готов
|
|
- **THEN** данные медиа содержат адрес воспроизведения
|