refactor(provider): implement AddVideoTrack in all providers

This commit is contained in:
zarazaex69
2026-04-20 05:26:50 +03:00
parent fd40ec8320
commit 686909d8a2
6 changed files with 54 additions and 13 deletions

View File

@@ -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

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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)
}