Fix stream audio to second source
This commit is contained in:
+19
-14
@@ -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)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user