feat(video): add video upload with remux/transcode playback
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.
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
# 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** данные медиа содержат адрес воспроизведения
|
||||
Reference in New Issue
Block a user