diff --git a/internal/provider/jazz/peer.go b/internal/provider/jazz/peer.go index 156d9ce..34428a2 100644 --- a/internal/provider/jazz/peer.go +++ b/internal/provider/jazz/peer.go @@ -533,6 +533,14 @@ func (p *Peer) Close() error { return nil } +// AddVideoTrack adds a video track to the publisher peer connection. +func (p *Peer) AddVideoTrack(track *webrtc.TrackLocalStaticRTP) (*webrtc.RTPSender, error) { + if p.pcPub == nil { + return nil, fmt.Errorf("publisher peer connection not initialized") + } + return p.pcPub.AddTrack(track) +} + // SetReconnectCallback sets the callback for reconnection events. func (p *Peer) SetReconnectCallback(cb func(*webrtc.DataChannel)) { p.onReconnect = cb diff --git a/internal/provider/jazz/provider.go b/internal/provider/jazz/provider.go index d77d5f3..23a5715 100644 --- a/internal/provider/jazz/provider.go +++ b/internal/provider/jazz/provider.go @@ -72,3 +72,8 @@ func (j *jazzProvider) GetSendQueue() chan []byte { func (j *jazzProvider) GetBufferedAmount() uint64 { return j.peer.GetBufferedAmount() } + +// AddVideoTrack adds a video track to the jazz connection. +func (j *jazzProvider) AddVideoTrack(track *webrtc.TrackLocalStaticRTP) (*webrtc.RTPSender, error) { + return j.peer.AddVideoTrack(track) +} diff --git a/internal/provider/telemost/peer.go b/internal/provider/telemost/peer.go index e2fe93b..30e3737 100644 --- a/internal/provider/telemost/peer.go +++ b/internal/provider/telemost/peer.go @@ -1160,3 +1160,11 @@ func (p *Peer) CanSend() bool { } return len(p.sendQueue) < 4000 } + +// AddVideoTrack adds a video track to the publisher peer connection. +func (p *Peer) AddVideoTrack(track *webrtc.TrackLocalStaticRTP) (*webrtc.RTPSender, error) { + if p.pcPub == nil { + return nil, fmt.Errorf("publisher peer connection not initialized") + } + return p.pcPub.AddTrack(track) +} diff --git a/internal/provider/telemost/provider.go b/internal/provider/telemost/provider.go index ecc8c4f..90272f9 100644 --- a/internal/provider/telemost/provider.go +++ b/internal/provider/telemost/provider.go @@ -13,7 +13,7 @@ type telemostProvider struct { peer *Peer } -// New creates a new Yandex Telemost provider instance. +// New creates a new Telemost provider instance. func New(ctx context.Context, cfg provider.Config) (provider.Provider, error) { peer, err := NewPeer(ctx, cfg.RoomURL, cfg.Name, cfg.OnData) if err != nil { @@ -72,3 +72,9 @@ func (t *telemostProvider) GetSendQueue() chan []byte { func (t *telemostProvider) GetBufferedAmount() uint64 { return t.peer.GetBufferedAmount() } + +// AddVideoTrack adds a video track to the telemost connection. +func (t *telemostProvider) AddVideoTrack(track *webrtc.TrackLocalStaticRTP) (*webrtc.RTPSender, error) { + return t.peer.AddVideoTrack(track) +} + diff --git a/internal/provider/wbstream/peer.go b/internal/provider/wbstream/peer.go index 499a8d6..8d6652a 100644 --- a/internal/provider/wbstream/peer.go +++ b/internal/provider/wbstream/peer.go @@ -193,3 +193,11 @@ func (p *Peer) GetSendQueue() chan []byte { func (p *Peer) GetBufferedAmount() uint64 { return 0 } + +// AddVideoTrack adds a video track to the publisher peer connection. +func (p *Peer) AddVideoTrack(track *webrtc.TrackLocalStaticRTP) (*webrtc.RTPSender, error) { + if p.pcPub == nil { + return nil, fmt.Errorf("publisher peer connection not initialized") + } + return p.pcPub.AddTrack(track) +} diff --git a/internal/provider/wbstream/provider.go b/internal/provider/wbstream/provider.go index db0c609..79fec22 100644 --- a/internal/provider/wbstream/provider.go +++ b/internal/provider/wbstream/provider.go @@ -9,7 +9,7 @@ import ( "github.com/pion/webrtc/v4" ) -type wbstreamProvider struct { +type wbStreamProvider struct { peer *Peer } @@ -20,55 +20,61 @@ func New(ctx context.Context, cfg provider.Config) (provider.Provider, error) { return nil, fmt.Errorf("create wbstream peer: %w", err) } - return &wbstreamProvider{peer: peer}, nil + return &wbStreamProvider{peer: peer}, nil } // Connect starts the provider connection. -func (w *wbstreamProvider) Connect(ctx context.Context) error { +func (w *wbStreamProvider) Connect(ctx context.Context) error { return w.peer.Connect(ctx) } // Send transmits data to the room. -func (w *wbstreamProvider) Send(data []byte) error { +func (w *wbStreamProvider) Send(data []byte) error { return w.peer.Send(data) } // Close terminates the provider connection. -func (w *wbstreamProvider) Close() error { +func (w *wbStreamProvider) Close() error { return w.peer.Close() } // SetReconnectCallback sets the function to call on reconnection. -func (w *wbstreamProvider) SetReconnectCallback(cb func(*webrtc.DataChannel)) { +func (w *wbStreamProvider) SetReconnectCallback(cb func(*webrtc.DataChannel)) { w.peer.SetReconnectCallback(cb) } // SetShouldReconnect sets the function to determine if reconnection should occur. -func (w *wbstreamProvider) SetShouldReconnect(fn func() bool) { +func (w *wbStreamProvider) SetShouldReconnect(fn func() bool) { w.peer.SetShouldReconnect(fn) } // SetEndedCallback sets the function to call when the session ends. -func (w *wbstreamProvider) SetEndedCallback(cb func(string)) { +func (w *wbStreamProvider) SetEndedCallback(cb func(string)) { w.peer.SetEndedCallback(cb) } // WatchConnection monitors the provider connection state. -func (w *wbstreamProvider) WatchConnection(ctx context.Context) { +func (w *wbStreamProvider) WatchConnection(ctx context.Context) { w.peer.WatchConnection(ctx) } // CanSend checks if the provider is ready to transmit data. -func (w *wbstreamProvider) CanSend() bool { +func (w *wbStreamProvider) CanSend() bool { return w.peer.CanSend() } // GetSendQueue returns the data transmission queue. -func (w *wbstreamProvider) GetSendQueue() chan []byte { +func (w *wbStreamProvider) GetSendQueue() chan []byte { return w.peer.GetSendQueue() } // GetBufferedAmount returns the current WebRTC buffered amount. -func (w *wbstreamProvider) GetBufferedAmount() uint64 { +func (w *wbStreamProvider) GetBufferedAmount() uint64 { return w.peer.GetBufferedAmount() } + +// AddVideoTrack adds a video track to the wbstream connection. +func (w *wbStreamProvider) AddVideoTrack(track *webrtc.TrackLocalStaticRTP) (*webrtc.RTPSender, error) { + return w.peer.AddVideoTrack(track) +} +