Skip to content

feat(phase-12): adaptive ladder, HW accel, fan-out and pipe streaming - #36

Merged
SlavaKuntsov merged 1 commit into
mainfrom
feat/phase-12-adaptive-ladder
Aug 30, 2026
Merged

feat(phase-12): adaptive ladder, HW accel, fan-out and pipe streaming#36
SlavaKuntsov merged 1 commit into
mainfrom
feat/phase-12-adaptive-ladder

Conversation

@SlavaKuntsov

Copy link
Copy Markdown
Owner

Фаза 12 — адаптивный ladder + HW + фан-аут + pipe (docs/PLAN.md:183).

Изменения

  • transcoder: адаптивный ladder по высоте (<720→[360], 720–1079→[360,720], ≥1080→[360,720,1080]), 720p-first инкрементальный PATCH для HLS через ~100с вместо 300с, ENCODE_MODE crf/cbr, h264_nvenc авто-детект (ffmpeg -encoders + nvidia-smi) fallback libx264
  • pipe:0 стриминг MinIO get_object → ffmpeg stdin (256k чанки) без записи 2GB в /tmp, fallback на файл
  • large file >1GB: veryfast → ultrafast, thumbnail из 360p рипа
  • metadata: GetVODMapping разрешает 1..3 рипа (было ==3) — nginx-vod master с 2 рипами для 720p
  • upload/transcoder: declare 3 очереди video.transcode.{360p,720p,1080p} с DLX (prefetch 1 для 3 воркеров)
  • infra: ENCODE_MODE/FFMPEG_HWACCEL/TRANSCODER_PIPE_INPUT в compose/prod и .env.example, Dockerfile коммент nvidia
  • e2e: infer EXPECTED_RENDITIONS по ffprobe height, POLL_TIMEOUT 600, Makefile квотит SAMPLE с пробелами/NBSP/—

Acceptance

  • 480p→[360p], 720p→[360p,720p], ≥1080p→[360,720,1080]
  • CRF 23 + maxrate ветка, HW h264_nvenc -preset p4 -rc vbr
  • fan-out топология видна в rabbitmqadmin, incremental ready
  • pipe ffmpeg -i pipe:0 + MinIO stream
  • thumbnail из 360p, HLS выровнен 2s, fps 30 capped
  • чанк-транскод >10м — опционально, пропущен

Verification

  • uv run --project services/transcoder pytest services/transcoder/tests -q — 16 passed
  • go test ./... metadata — ok
  • black --check / flake8 / mypy transcoder — pass, gofmt -l clean
  • bash scripts/e2e.sh (6s 720p) — PASS 2 рипа, gateway 200
  • SAMPLE='…копия 2.mov' (3248x2004 275s 1.9GB) POLL_TIMEOUT=600 bash scripts/e2e.sh — PASS 3 рипа, 138 сегментов 2.000s, h264

Remaining risks

  • pipe всё ещё пишет raw для probe/audio — полный zero-disk требует header-only probe (бэклог)
  • fan-out без 3 отдельных воркеров (один воркер последовательно)
  • CRF выключен по умолчанию (cbr совместимость)

- adaptive ladder <720->[360] 720-1079->[360,720] >=1080->[360,720,1080] via probe height
- 720p-first incremental status for faster HLS, CRF mode, h264_nvenc auto-detect
- pipe:0 streaming via MinIO get_object without /tmp, ultrafast for >1GB
- metadata VOD allows 1..3 renditions, fan-out queues video.transcode.*
- e2e infer EXPECTED_RENDITIONS and POLL_TIMEOUT 600, Makefile quotes SAMPLE
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant