From 0b714a59e5d668189e30666a5e726d08b7324de7 Mon Sep 17 00:00:00 2001 From: Alexey Khit Date: Sat, 11 Mar 2023 20:56:26 +0300 Subject: [PATCH] Adds stream play logic to active producer --- cmd/streams/play.go | 31 +++++++++++++++++++++++++++++++ pkg/webrtc/consumer.go | 12 ++++++++++++ 2 files changed, 43 insertions(+) diff --git a/cmd/streams/play.go b/cmd/streams/play.go index 5fe24af5..5f34d73e 100644 --- a/cmd/streams/play.go +++ b/cmd/streams/play.go @@ -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) diff --git a/pkg/webrtc/consumer.go b/pkg/webrtc/consumer.go index b9ebb278..90dc9d3f 100644 --- a/pkg/webrtc/consumer.go +++ b/pkg/webrtc/consumer.go @@ -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")