Skip to content

Commit a0ef09e

Browse files
authored
rust server SDK: add unified start_egress convenience method (#1283)
livekit-api (rust) egress service exposes a unified start_egress that calls the Egress.StartEgress RPC with the v2 StartEgressRequest.
1 parent 7bf537c commit a0ef09e

3 files changed

Lines changed: 46 additions & 0 deletions

File tree

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
livekit-api: minor
3+
livekit: patch
4+
livekit-ffi: patch
5+
livekit-uniffi: patch
6+
---
7+
8+
Add a unified `EgressClient::start_egress` that calls the v2 `Egress.StartEgress` RPC with a `StartEgressRequest`, alongside the existing per-type helpers.

livekit-api/src/services/api_test.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -359,6 +359,25 @@ async fn egress_smoke() {
359359
)
360360
.await
361361
.expect("start_track_egress");
362+
egress
363+
.start_egress(proto::StartEgressRequest {
364+
room_name: "test-room".to_owned(),
365+
source: Some(proto::start_egress_request::Source::Web(proto::WebSource {
366+
url: "https://example.com/scene".to_owned(),
367+
..Default::default()
368+
})),
369+
outputs: vec![proto::Output {
370+
config: Some(proto::output::Config::File(proto::FileOutput {
371+
file_type: proto::EncodedFileType::Mp4 as i32,
372+
filepath: "unified.mp4".to_owned(),
373+
..Default::default()
374+
})),
375+
..Default::default()
376+
}],
377+
..Default::default()
378+
})
379+
.await
380+
.expect("start_egress");
362381
egress.update_layout("EG_abc123", "speaker").await.expect("update_layout");
363382
egress
364383
.update_stream("EG_abc123", vec!["rtmps://b.example.com/live/key".to_owned()], vec![])

livekit-api/src/services/egress.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,25 @@ impl EgressClient {
317317
.map_err(Into::into)
318318
}
319319

320+
/// Starts an egress using the unified v2 [`StartEgressRequest`](proto::StartEgressRequest),
321+
/// which supersedes the per-source `start_*_egress` helpers. Calls the
322+
/// `Egress.StartEgress` RPC and returns the created [`EgressInfo`](proto::EgressInfo).
323+
pub async fn start_egress(
324+
&self,
325+
request: proto::StartEgressRequest,
326+
) -> ServiceResult<proto::EgressInfo> {
327+
self.client
328+
.request(
329+
SVC,
330+
"StartEgress",
331+
request,
332+
self.base
333+
.auth_header(VideoGrants { room_record: true, ..Default::default() }, None)?,
334+
)
335+
.await
336+
.map_err(Into::into)
337+
}
338+
320339
pub async fn update_layout(
321340
&self,
322341
egress_id: &str,

0 commit comments

Comments
 (0)