Fix stream audio to second source

This commit is contained in:
Alexey Khit
2023-02-28 22:54:09 +03:00
parent 1fe21bb300
commit ab1b3932ac
+19 -14
View File
@@ -18,41 +18,46 @@ func (s *Stream) Play(source string) error {
return nil return nil
} }
var src streamer.Producer
for _, producer := range s.producers { for _, producer := range s.producers {
// start new client // start new client
client, err := GetProducer(producer.url) dst, err := GetProducer(producer.url)
if err != nil { if err != nil {
return err continue
} }
// check if client support consumer interface // check if client support consumer interface
cons, ok := client.(streamer.Consumer) cons, ok := dst.(streamer.Consumer)
if !ok { if !ok {
_ = dst.Stop()
continue continue
} }
// start new producer // start new producer
prod, err := GetProducer(source) if src == nil {
if err != nil { if src, err = GetProducer(source); err != nil {
return err return err
}
} }
if !matchMedia(prod, cons) { if !matchMedia(src, cons) {
return errors.New("can't match media") _ = dst.Stop()
continue
} }
s.AddInternalProducer(prod) s.AddInternalProducer(src)
s.AddInternalConsumer(cons) s.AddInternalConsumer(cons)
go func() { go func() {
_ = prod.Start() _ = src.Start()
_ = client.Stop() _ = dst.Stop()
s.RemoveProducer(prod) s.RemoveProducer(src)
}() }()
go func() { go func() {
_ = client.Start() _ = dst.Start()
_ = prod.Stop() _ = src.Stop()
s.RemoveInternalConsumer(cons) s.RemoveInternalConsumer(cons)
}() }()