sfu

package
v4.2.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 14, 2024 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Overview

The SFU package contains the building blocks for building a selective forwarding unit powered by pion/webrtc.

Index

Constants

View Source
const DataChannelName = "data"

Variables

View Source
var ErrDuplicateTransport = errors.New("duplicate transport")

Functions

func AddBLP

func AddBLP(fsn uint16, missingSN uint16, blp rtcp.PacketBitmap) rtcp.PacketBitmap

func CreateNackPair

func CreateNackPair(sequenceNumbers []uint16) rtcp.NackPair

func SubBLP

func SubBLP(fsn uint16, foundSN uint16, blp rtcp.PacketBitmap) rtcp.PacketBitmap

Types

type Buffer

type Buffer struct {
	// contains filtered or unexported fields
}

Buffer holds the recent RTP packets and creates NACK RTCP packets.

func NewBuffer

func NewBuffer() *Buffer

NewBuffer creates a new buffer for recent RTP packets.

func (*Buffer) GetPacket

func (b *Buffer) GetPacket(sequenceNumber uint16) *rtp.Packet

func (*Buffer) Push

func (b *Buffer) Push(p *rtp.Packet) rtcp.Packet

func (*Buffer) SSRC

func (b *Buffer) SSRC() uint32

type JitterBuffer

type JitterBuffer struct {
	// contains filtered or unexported fields
}

JitterBuffer contains ring buffers for RTP packets per track SSRC

func NewJitterBuffer

func NewJitterBuffer() *JitterBuffer

func (*JitterBuffer) GetPacket

func (j *JitterBuffer) GetPacket(ssrc uint32, sn uint16) *rtp.Packet

GetPacket retreives a packet from the RTP buffer

func (*JitterBuffer) PushRTP

func (j *JitterBuffer) PushRTP(p *rtp.Packet) rtcp.Packet

PushRTP pushes a RTP packet to buffer and returns a Nack RTCP packet if the buffer determines that there is a missing packet.

func (*JitterBuffer) RemoveBuffer

func (j *JitterBuffer) RemoveBuffer(ssrc uint32)

type JitterHandler

type JitterHandler interface {
	HandleNack(nack *rtcp.TransportLayerNack) ([]*rtp.Packet, *rtcp.TransportLayerNack)
	HandleRTP(pkt *rtp.Packet) rtcp.Packet
	RemoveBuffer(ssrc uint32)
}

func NewJitterHandler

func NewJitterHandler(log logger.Logger, enabled bool) JitterHandler

type NackHandler

type NackHandler struct {
	// contains filtered or unexported fields
}

func NewJitterNackHandler

func NewJitterNackHandler(
	log logger.Logger,
	jitterBuffer *JitterBuffer,
) *NackHandler

func (*NackHandler) HandleNack

func (n *NackHandler) HandleNack(nack *rtcp.TransportLayerNack) ([]*rtp.Packet, *rtcp.TransportLayerNack)

ProcessNack tries to find the missing packet in JitterBuffer and send it, otherwise it will send the nack packet to the original sender of the track.

func (*NackHandler) HandleRTP

func (n *NackHandler) HandleRTP(pkt *rtp.Packet) rtcp.Packet

func (*NackHandler) RemoveBuffer

func (n *NackHandler) RemoveBuffer(ssrc uint32)

type NoopNackHandler

type NoopNackHandler struct{}

func (*NoopNackHandler) HandleNack

func (*NoopNackHandler) HandleRTP

func (n *NoopNackHandler) HandleRTP(pkt *rtp.Packet) rtcp.Packet

func (*NoopNackHandler) RemoveBuffer

func (n *NoopNackHandler) RemoveBuffer(ssrc uint32)

type PeerManager

type PeerManager struct {
	// contains filtered or unexported fields
}

func NewPeerManager

func NewPeerManager(room identifiers.RoomID, log logger.Logger, jitterHandler JitterHandler) *PeerManager

func (*PeerManager) Add

Add adds a transport with ClientID. If there was already an existing Transport with the same ClientID, it will be closed and removed before a new one is added.

func (*PeerManager) Close

func (t *PeerManager) Close() <-chan struct{}

func (*PeerManager) Remove

func (t *PeerManager) Remove(tr transport.Transport) error

Remove removes the transport and unsubscribes it from track events. To qualify for removal, the registered transport must have the same reference, otherwise it will not be removed. This is to prevent a transport with the same ID from messing up with another transport. This means that Remove can be called after a transport was already replaced in Add to ease the cleanup logic.

func (*PeerManager) Size

func (t *PeerManager) Size() int

Size returns the total size of transports in the room.

func (*PeerManager) Sub

func (t *PeerManager) Sub(params SubParams) error

func (*PeerManager) Unsub

func (t *PeerManager) Unsub(params SubParams) error

type Reader

type Reader struct{}

type SubParams

type SubParams struct {
	// Room to which to subscribe to.
	Room        identifiers.RoomID
	PubClientID identifiers.ClientID
	TrackID     identifiers.TrackID
	SubClientID identifiers.ClientID
}

type TracksManager

type TracksManager struct {
	// contains filtered or unexported fields
}

func NewTracksManager

func NewTracksManager(log logger.Logger, jitterBufferEnabled bool) *TracksManager

func (*TracksManager) Add

Add adds a transport to the existing PeerManager. If the manager does not exist, it is created.

NOTE: rooms are created when the peer joins the room over the WebSocket connection. The component in charge for this is the RoomManager.

Add is called from two places:

  • When WebRTCTransports are created and peers join the room, or
  • When RoomManager event that a room was created: A server transport will be created for each configured node.

func (*TracksManager) Sub

func (m *TracksManager) Sub(params SubParams) error

func (*TracksManager) Unsub

func (m *TracksManager) Unsub(params SubParams) error

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL