Sometimes i have calls with a transcript but the e...
# ask-ai
s
Sometimes i have calls with a transcript but the egress audio recording is just empty. Any idea why?
t
Thanks for reaching out, aric. I'm an AI assistant and I'm here to help. Give me a moment while I research this topic.
Thanks — I understand you’re seeing transcripts for some calls while the egress audio file is empty. Here are the most likely reasons and what you can check/do next. Possible causes • Failed upload to cloud storage (S3/GCS): the recording was captured locally but the upload to your bucket failed due to credentials, network, or bucket config problems. • Egress stopped or didn’t start correctly: the egress job may have been started incorrectly or terminated before media was written. • Room/participant disconnected early: abrupt room deletion or disconnects can cause egress to end with no audio file. • Separate systems for transcripts vs egress: transcripts (Agent Observability / text streams) can be produced independently and remain available even if the audio egress failed. What to check now • Inspect the
egress_ended
webhook for that session. If
backupStorageUsed: true
appears, the recording was saved to backup and the
manifestLocation
URL in the webhook contains download links (valid 7 days). • Check your egress/cloud storage logs and credentials for upload errors around the call time. • Confirm egress job lifecycle: verify egress was started and not stopped prematurely. • If you rely on egress for archive, enable temporary egress backup in project settings to retain files when uploads fail. If you want, share one example call’s
egress_ended
webhook payload or the timestamp/room ID and I’ll help inspect the webhook fields and point to the likely root cause. Sources: Backup Egress Recordings | Security Overview | LiveKit | Why is my Agent insights data missing? | LiveKit, with interactive elements
s
Question: where does the egress job lives ? Inside my livekit python worker process ? On livekit cloud servers ?
t
Good question — here's the short answer and why it matters. Egress jobs do NOT run inside your LiveKit Python worker process. Egress runs as a separate, dedicated service — either on LiveKit’s cloud servers (for LiveKit Cloud) or on your own servers when self‑hosting. Egress workers are isolated from agent/room processes, handle tasks like transcoding and uploads, and communicate with the SFU via the egress queue (Redis Pub/Sub), so they won’t load your Python worker or SFU directly. If you want, tell me whether you’re on LiveKit Cloud or self‑hosted and I’ll point to the exact logs/webhook fields to inspect for egress failures. Sources: Job lifecycle | LiveKit Documentation | Universal Egress | LiveKit | Universal Egress | LiveKit | Security Overview | LiveKit, with interactive elements
s
what does SFU stands for?
t
SFU stands for Selective Forwarding Unit. An SFU is a media server that receives media streams from participants and forwards (selectively) those streams to other participants without decoding and re‑encoding them. This keeps latency and CPU cost low while allowing features like simulcast, track selection, and routing multiple participant streams. , with interactive elements