modern-city-48224
09/10/2025, 10:04 PMcaller_req = lk_api.ParticipantEgressRequest(
room_name=ctx.room.name,
identity=caller_room_identity,
screen_share=False,
file_outputs=[lk_api.EncodedFileOutput(
file_type=lk_api.EncodedFileType.OGG,
filepath=file_path_caller,
s3=lk_api.S3Upload(
bucket=S3_RECORDING_BUCKET_NAME,
region=S3_RECORDING_REGION,
access_key=S3_RECORDING_ACCESS_KEY,
secret=S3_RECORDING_SECRET_KEY,
),
)],
)
await lkapi.egress.start_participant_egress(caller_req)
However, I get the following error:
livekit.api.twirp_client.TwirpError: TwirpError(code=invalid_argument, message=no supported codec is compatible with all outputs, status=400)
What is the issue?tall-airline-16756
09/10/2025, 10:04 PMtall-airline-16756
09/10/2025, 10:05 PMmodern-city-48224
09/10/2025, 10:06 PMmodern-city-48224
09/10/2025, 10:06 PMtall-airline-16756
09/10/2025, 10:07 PMmodern-city-48224
09/10/2025, 10:20 PMlkapi = lk_api.LiveKitAPI()
caller_req = lk_api.ParticipantEgressRequest(
room_name=ctx.room.name,
identity=caller_room_identity,
screen_share=False,
file_outputs=[lk_api.EncodedFileOutput(
file_type=lk_api.EncodedFileType.MP4,
filepath=file_path_caller,
s3=lk_api.S3Upload(
endpoint=S3_RECORDING_ENDPOINT,
bucket=S3_RECORDING_BUCKET_NAME,
region=S3_RECORDING_REGION,
access_key=S3_RECORDING_ACCESS_KEY,
secret=S3_RECORDING_SECRET_KEY,
),
)],
)
print("Caller egress request...")
await lkapi.egress.start_participant_egress(caller_req)
print("Caller egress request done")
I am using supabase for storage (locally) in combination with ngrok. However I am not receiving any request from Livekit to my supabase instancetall-airline-16756
09/10/2025, 10:21 PMmodern-city-48224
09/10/2025, 10:22 PMtall-airline-16756
09/10/2025, 10:22 PMParticipantEgressRequest
for S3-compatible storage backends like Supabase, here are some important steps to follow:
• Make sure to set the s3
field in your output configuration (for example, in file_outputs
) with these details: Sources: lib/livekit/proto/livekit_egress_pb.rb | pkg/config/storage.go | protobufs/livekit_egress.proto | Egress API | LiveKit Docsmodern-city-48224
09/10/2025, 10:23 PMtall-airline-16756
09/10/2025, 10:24 PMs3
field, I’d love to share some common tips and troubleshooting steps that might help when using LiveKit's ParticipantEgressRequest
with S3-compatible storage like Supabase:
• Ensure Correct Endpoint: Double-check that your endpoint
is correctly formatted (for example, replace <SUPABASE_STORAGE_ENDPOINT>
with your actual Supabase storage endpoint) and that it’s accessible via ngrok if you’re working locally.
• Force Path Style: It’s often helpful to set force_path_style=True
in the S3Upload
configuration since many S3-compatible services expect path-style addressing.
• Check Permissions: Make sure your access key and secret key have the right write permissions for the bucket you’re targeting in Supabase.
• Inspect EgressInfo: If the egress doesn’t go through, taking a look at the EgressInfo
response can provide detailed error messages and codes that can guide us.
• Test Connectivity: You might want to try tools like curl
or the AWS CLI (configured with your custom endpoint) to confirm the endpoint is reachable and your credentials are working as expected.
Please feel free to reach out if you’d like me to help you debug further or if you have any specific error messages you want to share. I’m here to help!
Sources: Egress output types | LiveKit Docs | livekit-protocol/livekit/protocol/egress.py | Community & Support | livekit/livekit_composite | DeepWiki | Egress & Media Processing | livekit/livekit_composite | DeepWiki | livekit/livekit_egress.pb.gomodern-city-48224
09/10/2025, 10:29 PMtall-airline-16756
09/10/2025, 10:30 PMmax_retries
and retry_delay
.
To keep an eye on everything, you can use webhooks to track the egress_ended
status and see exactly when the upload wraps up. If you’d like, I’m here to help you set up those webhooks or chat about ways to make the upload process even smoother. Just let me know!
Sources: test/file.go | Quotas and limits | LiveKit Docsmodern-city-48224
09/10/2025, 10:38 PMlkapi = lk_api.LiveKitAPI()
caller_req = lk_api.ParticipantEgressRequest(
room_name=ctx.room.name,
identity=caller_room_identity,
screen_share=False,
file_outputs=[lk_api.EncodedFileOutput(
file_type=lk_api.EncodedFileType.MP4,
filepath=file_path_caller,
s3=lk_api.S3Upload(
endpoint=S3_RECORDING_ENDPOINT,
bucket=S3_RECORDING_BUCKET_NAME,
region=S3_RECORDING_REGION,
access_key=S3_RECORDING_ACCESS_KEY,
secret=S3_RECORDING_SECRET_KEY,
),
)],
)
print("Caller egress request...")
res = await lkapi.egress.start_participant_egress(caller_req)
print("Caller egress request response:", res)
if res.error:
logger.error(f"Caller egress request failed: {res.error}")
raise Exception(f"Caller egress request failed: {res.error}")
print("Caller egress request done")
Why is this not working?tall-airline-16756
09/10/2025, 10:38 PMParticipantEgressRequest
might not be working and some tips to help you debug them:
• Incorrect S3 Configuration: Please make sure the S3Upload
object has the correct endpoint
, bucket
, region
, access_key
, and secret
. It’s always good to double-check these values for accuracy.
• Authentication Issues: Take a moment to verify that your LiveKit API client is initialized with the right apiKey
and apiSecret
.
• Participant Activity: Make sure the participant with the given identity
is actually in the room and actively publishing media like camera, mic, or screen share.
• Inspect EgressInfo: If the request doesn’t go through, try checking the EgressInfo
response for the error
and error_code
fields. These can give you clues about what might be going wrong.
• Backup Storage: Sometimes if the main S3 upload fails, the system saves the file locally as a fallback. You can check if backup_storage_used
is set to true
in the EgressInfo
.
If you’d like, I’m here to help you interpret any error messages or walk you through further debugging steps. Just let me know!
Sources: test/edge.go | packages/livekit-server-sdk/src/EgressClient.ts | livekit-api/src/services/egress.rs | Egress & Media Processing | livekit/livekit_composite | DeepWiki | Storage & Configuration | livekit/livekit_composite | DeepWiki