Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 33 additions & 16 deletions egress/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,28 @@ const (
Unknown = "unknown"
)

func GetTypes(info *livekit.EgressInfo) (string, string) {
switch req := info.Request.(type) {
type EncodedOutput interface {
GetFileOutputs() []*livekit.EncodedFileOutput
GetStreamOutputs() []*livekit.StreamOutput
GetSegmentOutputs() []*livekit.SegmentedFileOutput
}

type EncodedOutputDeprecated interface {
GetFile() *livekit.EncodedFileOutput
GetStream() *livekit.StreamOutput
GetSegments() *livekit.SegmentedFileOutput
}

func GetTypes(request interface{}) (string, string) {
switch req := request.(type) {
case *livekit.EgressInfo_RoomComposite:
return EgressTypeRoomComposite, getOutputType(req.RoomComposite)
return EgressTypeRoomComposite, GetOutputType(req.RoomComposite)

case *livekit.EgressInfo_Web:
return EgressTypeWeb, getOutputType(req.Web)
return EgressTypeWeb, GetOutputType(req.Web)

case *livekit.EgressInfo_TrackComposite:
return EgressTypeTrackComposite, getOutputType(req.TrackComposite)
return EgressTypeTrackComposite, GetOutputType(req.TrackComposite)

case *livekit.EgressInfo_Track:
switch req.Track.Output.(type) {
Expand All @@ -53,27 +65,32 @@ func GetTypes(info *livekit.EgressInfo) (string, string) {
return Unknown, Unknown
}

func getOutputType(req interface {
GetFile() *livekit.EncodedFileOutput
GetStream() *livekit.StreamOutput
GetSegments() *livekit.SegmentedFileOutput
GetFileOutputs() []*livekit.EncodedFileOutput
GetStreamOutputs() []*livekit.StreamOutput
GetSegmentOutputs() []*livekit.SegmentedFileOutput
}) string {
func GetOutputType(req EncodedOutput) string {
hasFile := len(req.GetFileOutputs()) > 0
hasStream := len(req.GetStreamOutputs()) > 0
hasSegments := len(req.GetSegmentOutputs()) > 0

switch {
case (hasFile && (hasStream || hasSegments)) || (hasStream && hasSegments):
return OutputTypeMultiple
case hasFile || req.GetFile() != nil:
case hasFile:
return OutputTypeFile
case hasStream || req.GetStream() != nil:
case hasStream:
return OutputTypeStream
case hasSegments || req.GetSegments() != nil:
case hasSegments:
return OutputTypeSegments
default:
if r, ok := req.(EncodedOutputDeprecated); ok {
if r.GetFile() != nil {
return OutputTypeFile
}
if r.GetStream() != nil {
return OutputTypeStream
}
if r.GetSegments() != nil {
return OutputTypeSegments
}
}
}

return Unknown
Expand Down