Documentation ¶
Overview ¶
The SFU package contains the building blocks for building a selective forwarding unit powered by pion/webrtc.
Index ¶
- Constants
- Variables
- func AddBLP(fsn uint16, missingSN uint16, blp rtcp.PacketBitmap) rtcp.PacketBitmap
- func CreateNackPair(sequenceNumbers []uint16) rtcp.NackPair
- func SubBLP(fsn uint16, foundSN uint16, blp rtcp.PacketBitmap) rtcp.PacketBitmap
- type Buffer
- type JitterBuffer
- type JitterHandler
- type NackHandler
- type NoopNackHandler
- type PeerManager
- func (t *PeerManager) Add(tr transport.Transport) (<-chan pubsub.PubTrackEvent, error)
- func (t *PeerManager) Close() <-chan struct{}
- func (t *PeerManager) Remove(tr transport.Transport) error
- func (t *PeerManager) Size() int
- func (t *PeerManager) Sub(params SubParams) error
- func (t *PeerManager) Unsub(params SubParams) error
- type Reader
- type SubParams
- type TracksManager
Constants ¶
const DataChannelName = "data"
Variables ¶
var ErrDuplicateTransport = errors.New("duplicate transport")
Functions ¶
func AddBLP ¶
func AddBLP(fsn uint16, missingSN uint16, blp rtcp.PacketBitmap) rtcp.PacketBitmap
func CreateNackPair ¶
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.
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) RemoveBuffer ¶
func (n *NackHandler) RemoveBuffer(ssrc uint32)
type NoopNackHandler ¶
type NoopNackHandler struct{}
func (*NoopNackHandler) HandleNack ¶
func (n *NoopNackHandler) HandleNack(nack *rtcp.TransportLayerNack) ([]*rtp.Packet, *rtcp.TransportLayerNack)
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 ¶
func (t *PeerManager) Add(tr transport.Transport) (<-chan pubsub.PubTrackEvent, error)
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 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 ¶
func (m *TracksManager) Add(room identifiers.RoomID, tr transport.Transport) (<-chan pubsub.PubTrackEvent, error)
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