diff --git a/.changeset/egressobs-media-audio-only.md b/.changeset/egressobs-media-audio-only.md new file mode 100644 index 000000000..d1e49b84f --- /dev/null +++ b/.changeset/egressobs-media-audio-only.md @@ -0,0 +1,6 @@ +--- +"github.com/livekit/protocol": patch +"@livekit/protocol": patch +--- + +`egressobs.GetAudioOnly` reports `true` for v2 egress and replay requests with a `MediaSource` that has no video selector diff --git a/observability/egressobs/egress.go b/observability/egressobs/egress.go index 059f12370..10bd51808 100644 --- a/observability/egressobs/egress.go +++ b/observability/egressobs/egress.go @@ -201,5 +201,6 @@ func GetAudioOnly(info *livekit.EgressInfo) bool { } func getAudioOnlyV2(r egress.EgressRequest) bool { - return r.GetTemplate().GetAudioOnly() || r.GetWeb().GetAudioOnly() + return r.GetTemplate().GetAudioOnly() || r.GetWeb().GetAudioOnly() || + (r.GetMedia() != nil && r.GetMedia().GetVideo() == nil) } diff --git a/observability/egressobs/egress_test.go b/observability/egressobs/egress_test.go index 0a65f1eb3..9642632df 100644 --- a/observability/egressobs/egress_test.go +++ b/observability/egressobs/egress_test.go @@ -242,12 +242,67 @@ func TestGetAudioOnly(t *testing.T) { audioOnly: true, }, { - name: "v2 Media returns false", + name: "v2 Media audio routes only", info: &livekit.EgressInfo{ Request: &livekit.EgressInfo_Egress{ Egress: &livekit.StartEgressRequest{ Source: &livekit.StartEgressRequest_Media{ - Media: &livekit.MediaSource{}, + Media: &livekit.MediaSource{ + Audio: &livekit.AudioConfig{ + Routes: []*livekit.AudioRoute{{ + Match: &livekit.AudioRoute_ParticipantIdentity{ParticipantIdentity: "caller"}, + Channel: livekit.AudioChannel_AUDIO_CHANNEL_LEFT, + }}, + }, + }, + }, + }, + }, + }, + audioOnly: true, + }, + { + name: "v2 Media capture all audio", + info: &livekit.EgressInfo{ + Request: &livekit.EgressInfo_Egress{ + Egress: &livekit.StartEgressRequest{ + Source: &livekit.StartEgressRequest_Media{ + Media: &livekit.MediaSource{ + Audio: &livekit.AudioConfig{CaptureAll: true}, + }, + }, + }, + }, + }, + audioOnly: true, + }, + { + name: "v2 Media video track", + info: &livekit.EgressInfo{ + Request: &livekit.EgressInfo_Egress{ + Egress: &livekit.StartEgressRequest{ + Source: &livekit.StartEgressRequest_Media{ + Media: &livekit.MediaSource{ + Video: &livekit.MediaSource_VideoTrackId{VideoTrackId: "TR_video"}, + Audio: &livekit.AudioConfig{CaptureAll: true}, + }, + }, + }, + }, + }, + audioOnly: false, + }, + { + name: "v2 Media participant video", + info: &livekit.EgressInfo{ + Request: &livekit.EgressInfo_Egress{ + Egress: &livekit.StartEgressRequest{ + Source: &livekit.StartEgressRequest_Media{ + Media: &livekit.MediaSource{ + Video: &livekit.MediaSource_ParticipantVideo{ + ParticipantVideo: &livekit.ParticipantVideo{Identity: "speaker"}, + }, + }, }, }, }, @@ -267,6 +322,21 @@ func TestGetAudioOnly(t *testing.T) { }, audioOnly: true, }, + { + name: "Replay Media audio only", + info: &livekit.EgressInfo{ + Request: &livekit.EgressInfo_Replay{ + Replay: &livekit.ExportReplayRequest{ + Source: &livekit.ExportReplayRequest_Media{ + Media: &livekit.MediaSource{ + Audio: &livekit.AudioConfig{CaptureAll: true}, + }, + }, + }, + }, + }, + audioOnly: true, + }, { name: "Track request returns false", info: &livekit.EgressInfo{