Adds stream play logic to active producer

This commit is contained in:
Alexey Khit
2023-03-11 20:56:26 +03:00
parent 13c426e2a9
commit 0b714a59e5
2 changed files with 43 additions and 0 deletions
+31
View File
@@ -20,6 +20,37 @@ func (s *Stream) Play(source string) error {
var src streamer.Producer
for _, producer := range s.producers {
if producer.element == nil {
continue
}
cons, ok := producer.element.(streamer.Consumer)
if !ok {
continue
}
if src == nil {
var err error
if src, err = GetProducer(source); err != nil {
return err
}
}
if !matchMedia(src, cons) {
continue
}
s.AddInternalProducer(src)
go func() {
_ = src.Start()
s.RemoveProducer(src)
}()
return nil
}
for _, producer := range s.producers {
// start new client
dst, err := GetProducer(producer.url)
+12
View File
@@ -25,6 +25,18 @@ func (c *Conn) AddTrack(media *streamer.Media, track *streamer.Track) *streamer.
// receive track from WebRTC consumer (microphone, backchannel, two way audio)
return c.addConsumerRecvTrack(track)
}
case streamer.ModePassiveProducer:
// "Stream to camera" function
consCodec := media.MatchCodec(track.Codec)
consTrack := c.GetTrack(media, consCodec)
if consTrack == nil {
return nil
}
return track.Bind(func(packet *rtp.Packet) error {
return consTrack.WriteRTP(packet)
})
}
panic("not implemented")