diff --git a/internal/streams/streams.go b/internal/streams/streams.go index f3b8df03c..b18fdfb43 100644 --- a/internal/streams/streams.go +++ b/internal/streams/streams.go @@ -116,12 +116,26 @@ func Patch(name string, source string) (*Stream, error) { } func GetOrPatch(query url.Values) (*Stream, error) { - // check if src param exists - source := query.Get("src") - if source == "" { + sources := query["src"] + if len(sources) == 0 { return nil, errors.New("streams: source empty") } + // multi-source: create stream with multiple producers + if len(sources) > 1 { + name := query.Get("name") + if name == "" { + name = sources[0] + } + if stream := Get(name); stream != nil { + return stream, nil + } + log.Info().Msgf("[streams] create new multi-source stream name=%s sources=%d", name, len(sources)) + return New(name, sources...) + } + + source := sources[0] + // check if src is stream name if stream := Get(source); stream != nil { return stream, nil