diff --git a/cmd/streams/producer.go b/cmd/streams/producer.go index 84235069..fac46ab7 100644 --- a/cmd/streams/producer.go +++ b/cmd/streams/producer.go @@ -24,6 +24,7 @@ type Producer struct { template string element streamer.Producer + lastErr error tracks []*streamer.Track state state @@ -45,10 +46,9 @@ func (p *Producer) GetMedias() []*streamer.Media { if p.state == stateNone { log.Debug().Msgf("[streams] probe producer url=%s", p.url) - var err error - p.element, err = GetProducer(p.url) - if err != nil || p.element == nil { - log.Error().Err(err).Caller().Send() + p.element, p.lastErr = GetProducer(p.url) + if p.lastErr != nil || p.element == nil { + log.Error().Err(p.lastErr).Caller().Send() return nil } diff --git a/cmd/streams/stream.go b/cmd/streams/stream.go index 118d7d58..99a9b946 100644 --- a/cmd/streams/stream.go +++ b/cmd/streams/stream.go @@ -99,11 +99,18 @@ func (s *Stream) AddConsumer(cons streamer.Consumer) (err error) { if len(producers) == 0 { s.stopProducers() + if len(codecs) > 0 { return errors.New("codecs not match: " + codecs) - } else { - return fmt.Errorf("sources unavailable: %d", len(s.producers)) } + + for i, producer := range s.producers { + if producer.lastErr != nil { + return fmt.Errorf("source %d error: %w", i, producer.lastErr) + } + } + + return fmt.Errorf("sources unavailable: %d", len(s.producers)) } s.mu.Lock()