Recording ingest + FFmpeg processing pipeline

FeatureConversionService
Shipped
April 27, 2026 at 3:44 AM UTC
Author
Kamo
Commit
498bc3b

- New **************** endpoint stages multipart uploads forwarded by APIService into MinIO bucket **************** and creates an UnprocessedRecording staging row. Idempotent on retries using (phoneServerId, asteriskUniqueId). - New **************** endpoint (called by DaemonService) drains rows: downloads staged WAVs, mixes call legs into a single Opus/WebM master via FFmpeg amix, transcodes per-channel WAVs as tracks alongside the master, and uploads through RecordingImagingService with VM_RECORDING (8) / CALL_RECORDING (9) ImageAssocType. - New FfmpegService wrapper (transcodeToOpusWebm / mixToOpusWebm) with timeout and tempfile cleanup. - NATS publisher emits voip.recording.received on every staged upload so DaemonService can short-cut its periodic poll. - Dockerfile installs ffmpeg in the runtime stage (alpine ffmpeg ships libopus by default). - ConfigMap exposes **************** (shared cross-service internal-call secret) so the new endpoints can authenticate APIService and DaemonService callers.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing