sfu

package
v1.11.0 Latest Latest
Warning

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

Go to latest
Published: Nov 29, 2021 License: MIT Imports: 38 Imported by: 37

Documentation

Index

Constants

View Source
const APIChannelLabel = "ion-sfu"
View Source
const (
	AudioLevelsMethod = "audioLevels"
)

Variables

View Source
var (
	ErrSpatialNotSupported = errors.New("current track does not support simulcast/SVC")
	ErrSpatialLayerBusy    = errors.New("a spatial layer change is in progress, try latter")
)
View Source
var (
	// ErrTransportExists join is called after a peerconnection is established
	ErrTransportExists = errors.New("rtc transport already exists for this connection")
	// ErrNoTransportEstablished cannot signal before join
	ErrNoTransportEstablished = errors.New("no rtc transport exists for this Peer")
	// ErrOfferIgnored if offer received in unstable state
	ErrOfferIgnored = errors.New("offered ignored")
)

Logger is an implementation of logr.Logger. If is not provided - will be turned off.

Functions

func InitTurnServer added in v1.8.3

func InitTurnServer(conf TurnConfig, auth func(username, realm string, srcAddr net.Addr) ([]byte, bool)) (*turn.Server, error)

func RelayWithFanOutDataChannels added in v1.10.9

func RelayWithFanOutDataChannels() func(r *relayPeer)

func RelayWithSenderReports added in v1.10.9

func RelayWithSenderReports() func(r *relayPeer)

Types

type AudioObserver added in v1.9.9

type AudioObserver struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewAudioObserver added in v1.9.9

func NewAudioObserver(threshold uint8, interval, filter int) *AudioObserver

func (*AudioObserver) Calc added in v1.9.9

func (a *AudioObserver) Calc() []string

type Candidates

type Candidates struct {
	IceLite    bool     `mapstructure:"icelite"`
	NAT1To1IPs []string `mapstructure:"nat1to1"`
}

type ChannelAPIMessage added in v1.10.3

type ChannelAPIMessage struct {
	Method string      `json:"method"`
	Params interface{} `json:"params,omitempty"`
}

type Config

type Config struct {
	SFU struct {
		Ballast   int64 `mapstructure:"ballast"`
		WithStats bool  `mapstructure:"withstats"`
	} `mapstructure:"sfu"`
	WebRTC        WebRTCConfig `mapstructure:"webrtc"`
	Router        RouterConfig `mapstructure:"Router"`
	Turn          TurnConfig   `mapstructure:"turn"`
	BufferFactory *buffer.Factory
	TurnAuth      func(username string, realm string, srcAddr net.Addr) ([]byte, bool)
}

Config for base SFU

type Datachannel added in v1.8.0

type Datachannel struct {
	Label string
	// contains filtered or unexported fields
}

Datachannel is a wrapper to define middlewares executed on defined label. The datachannels created will be negotiated on join to all peers that joins the SFU.

func (*Datachannel) OnMessage added in v1.8.0

func (dc *Datachannel) OnMessage(fn func(ctx context.Context, args ProcessArgs))

OnMessage sets the message callback for the datachannel, the event is fired after all the middlewares have processed the message.

func (*Datachannel) Use added in v1.8.0

func (dc *Datachannel) Use(middlewares ...func(MessageProcessor) MessageProcessor)

Use adds the middlewares to the current Datachannel. The middlewares are going to be executed before the OnMessage event fires.

type DownTrack

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

DownTrack implements TrackLocal, is the track used to write packets to SFU Subscriber, the track handle the packets for simple, simulcast and SVC Publisher.

func NewDownTrack

func NewDownTrack(c webrtc.RTPCodecCapability, r Receiver, bf *buffer.Factory, peerID string, mt int) (*DownTrack, error)

NewDownTrack returns a DownTrack.

func (*DownTrack) Bind

func (d *DownTrack) Bind(t webrtc.TrackLocalContext) (webrtc.RTPCodecParameters, error)

Bind is called by the PeerConnection after negotiation is complete This asserts that the code requested is supported by the remote peer. If so it setups all the state (SSRC and PayloadType) to have a call

func (*DownTrack) Close

func (d *DownTrack) Close()

Close track

func (*DownTrack) Codec

func (d *DownTrack) Codec() webrtc.RTPCodecCapability

Codec returns current track codec capability

func (*DownTrack) CreateSenderReport added in v1.9.0

func (d *DownTrack) CreateSenderReport() *rtcp.SenderReport

func (*DownTrack) CreateSourceDescriptionChunks added in v1.9.0

func (d *DownTrack) CreateSourceDescriptionChunks() []rtcp.SourceDescriptionChunk

func (*DownTrack) CurrentSpatialLayer added in v1.10.4

func (d *DownTrack) CurrentSpatialLayer() int

func (*DownTrack) Enabled added in v1.10.8

func (d *DownTrack) Enabled() bool

func (*DownTrack) ID

func (d *DownTrack) ID() string

ID is the unique identifier for this Track. This should be unique for the stream, but doesn't have to globally unique. A common example would be 'audio' or 'video' and StreamID would be 'desktop' or 'webcam'

func (*DownTrack) Kind

func (d *DownTrack) Kind() webrtc.RTPCodecType

Kind controls if this TrackLocal is audio or video

func (*DownTrack) Mute

func (d *DownTrack) Mute(val bool)

Mute enables or disables media forwarding

func (*DownTrack) OnBind

func (d *DownTrack) OnBind(fn func())

func (*DownTrack) OnCloseHandler

func (d *DownTrack) OnCloseHandler(fn func())

OnCloseHandler method to be called on remote tracked removed

func (*DownTrack) SetInitialLayers added in v1.8.2

func (d *DownTrack) SetInitialLayers(spatialLayer, temporalLayer int32)

func (*DownTrack) SetTransceiver added in v1.9.0

func (d *DownTrack) SetTransceiver(transceiver *webrtc.RTPTransceiver)

func (*DownTrack) Stop added in v1.10.8

func (d *DownTrack) Stop() error

func (*DownTrack) StreamID

func (d *DownTrack) StreamID() string

StreamID is the group this track belongs too. This must be unique

func (*DownTrack) SwitchSpatialLayer

func (d *DownTrack) SwitchSpatialLayer(targetLayer int32, setAsMax bool) error

func (*DownTrack) SwitchSpatialLayerDone added in v1.10.4

func (d *DownTrack) SwitchSpatialLayerDone(layer int32)

func (*DownTrack) SwitchTemporalLayer added in v1.8.2

func (d *DownTrack) SwitchTemporalLayer(targetLayer int32, setAsMax bool)

func (*DownTrack) Unbind

func (d *DownTrack) Unbind(_ webrtc.TrackLocalContext) error

Unbind implements the teardown logic when the track is no longer needed. This happens because a track has been stopped.

func (*DownTrack) UpdateStats added in v1.9.1

func (d *DownTrack) UpdateStats(packetLen uint32)

func (*DownTrack) UptrackLayersChange added in v1.10.3

func (d *DownTrack) UptrackLayersChange(availableLayers []uint16) (int64, error)

func (*DownTrack) WriteRTP

func (d *DownTrack) WriteRTP(p *buffer.ExtPacket, layer int) error

WriteRTP writes a RTP Packet to the DownTrack

type DownTrackType

type DownTrackType int

DownTrackType determines the type of track

const (
	SimpleDownTrack DownTrackType = iota + 1
	SimulcastDownTrack
)

type ICEServerConfig

type ICEServerConfig struct {
	URLs       []string `mapstructure:"urls"`
	Username   string   `mapstructure:"username"`
	Credential string   `mapstructure:"credential"`
}

ICEServerConfig defines parameters for ice servers

type JoinConfig added in v1.9.8

type JoinConfig struct {
	// If true the peer will not be allowed to publish tracks to SessionLocal.
	NoPublish bool
	// If true the peer will not be allowed to subscribe to other peers in SessionLocal.
	NoSubscribe bool
	// If true the peer will not automatically subscribe all tracks,
	// and then the peer can use peer.Subscriber().AddDownTrack/RemoveDownTrack
	// to customize the subscrbe stream combination as needed.
	// this parameter depends on NoSubscribe=false.
	NoAutoSubscribe bool
}

JoinConfig allow adding more control to the peers joining a SessionLocal.

type MessageProcessor added in v1.8.0

type MessageProcessor interface {
	Process(ctx context.Context, args ProcessArgs)
}

type Middlewares added in v1.8.0

type Middlewares []func(MessageProcessor) MessageProcessor

func (Middlewares) Process added in v1.8.0

func (Middlewares) ProcessFunc added in v1.8.0

func (mws Middlewares) ProcessFunc(h MessageProcessor) MessageProcessor

type Peer

type Peer interface {
	ID() string
	Session() Session
	Publisher() *Publisher
	Subscriber() *Subscriber
	Close() error
	SendDCMessage(label string, msg []byte) error
}

type PeerLocal added in v1.9.9

type PeerLocal struct {
	sync.Mutex

	OnOffer                    func(*webrtc.SessionDescription)
	OnIceCandidate             func(*webrtc.ICECandidateInit, int)
	OnICEConnectionStateChange func(webrtc.ICEConnectionState)
	// contains filtered or unexported fields
}

PeerLocal represents a pair peer connection

func NewPeer

func NewPeer(provider SessionProvider) *PeerLocal

NewPeer creates a new PeerLocal for signaling with the given SFU

func (*PeerLocal) Answer added in v1.9.9

func (p *PeerLocal) Answer(sdp webrtc.SessionDescription) (*webrtc.SessionDescription, error)

Answer an offer from remote

func (*PeerLocal) Close added in v1.9.9

func (p *PeerLocal) Close() error

Close shuts down the peer connection and sends true to the done channel

func (*PeerLocal) ID added in v1.9.9

func (p *PeerLocal) ID() string

ID return the peer id

func (*PeerLocal) Join added in v1.9.9

func (p *PeerLocal) Join(sid, uid string, config ...JoinConfig) error

Join initializes this peer for a given sessionID

func (*PeerLocal) Publisher added in v1.9.9

func (p *PeerLocal) Publisher() *Publisher

func (*PeerLocal) SendDCMessage added in v1.10.4

func (p *PeerLocal) SendDCMessage(label string, msg []byte) error

func (*PeerLocal) Session added in v1.9.9

func (p *PeerLocal) Session() Session

func (*PeerLocal) SetRemoteDescription added in v1.9.9

func (p *PeerLocal) SetRemoteDescription(sdp webrtc.SessionDescription) error

SetRemoteDescription when receiving an answer from remote

func (*PeerLocal) Subscriber added in v1.9.9

func (p *PeerLocal) Subscriber() *Subscriber

func (*PeerLocal) Trickle added in v1.9.9

func (p *PeerLocal) Trickle(candidate webrtc.ICECandidateInit, target int) error

Trickle candidates available for this peer

type ProcessArgs added in v1.8.0

type ProcessArgs struct {
	Peer        Peer
	Message     webrtc.DataChannelMessage
	DataChannel *webrtc.DataChannel
}

type ProcessFunc added in v1.8.0

type ProcessFunc func(ctx context.Context, args ProcessArgs)

func (ProcessFunc) Process added in v1.8.0

func (p ProcessFunc) Process(ctx context.Context, args ProcessArgs)

type Publisher

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

func NewPublisher

func NewPublisher(id string, session Session, cfg *WebRTCTransportConfig) (*Publisher, error)

NewPublisher creates a new Publisher

func (*Publisher) AddICECandidate

func (p *Publisher) AddICECandidate(candidate webrtc.ICECandidateInit) error

AddICECandidate to peer connection

func (*Publisher) AddRelayFanOutDataChannel added in v1.10.9

func (p *Publisher) AddRelayFanOutDataChannel(label string)

AddRelayFanOutDataChannel adds fan out data channel to relayed peers

func (*Publisher) Answer

func (p *Publisher) Answer(offer webrtc.SessionDescription) (webrtc.SessionDescription, error)

func (*Publisher) Close

func (p *Publisher) Close()

Close peer

func (*Publisher) GetRelayedDataChannels added in v1.10.9

func (p *Publisher) GetRelayedDataChannels(label string) []*webrtc.DataChannel

GetRelayedDataChannels Returns a slice of data channels that belongs to relayed peers

func (*Publisher) GetRouter

func (p *Publisher) GetRouter() Router

GetRouter returns Router with mediaSSRC

func (*Publisher) OnICECandidate

func (p *Publisher) OnICECandidate(f func(c *webrtc.ICECandidate))

OnICECandidate handler

func (*Publisher) OnICEConnectionStateChange

func (p *Publisher) OnICEConnectionStateChange(f func(connectionState webrtc.ICEConnectionState))

func (*Publisher) OnPublisherTrack added in v1.10.8

func (p *Publisher) OnPublisherTrack(f func(track PublisherTrack))

func (*Publisher) PeerConnection added in v1.9.9

func (p *Publisher) PeerConnection() *webrtc.PeerConnection

func (*Publisher) PublisherTracks added in v1.10.8

func (p *Publisher) PublisherTracks() []PublisherTrack

func (*Publisher) Relay added in v1.10.4

func (p *Publisher) Relay(signalFn func(meta relay.PeerMeta, signal []byte) ([]byte, error),
	options ...func(r *relayPeer)) (*relay.Peer, error)

Relay will relay all current and future tracks from current Publisher

func (*Publisher) Relayed added in v1.10.9

func (p *Publisher) Relayed() bool

Relayed returns true if the publisher has been relayed at least once

func (*Publisher) SignalingState

func (p *Publisher) SignalingState() webrtc.SignalingState

func (*Publisher) Tracks added in v1.10.6

func (p *Publisher) Tracks() []*webrtc.TrackRemote

type PublisherTrack added in v1.10.8

type PublisherTrack struct {
	Track    *webrtc.TrackRemote
	Receiver Receiver
	// contains filtered or unexported fields
}

type Receiver

type Receiver interface {
	TrackID() string
	StreamID() string
	Codec() webrtc.RTPCodecParameters
	Kind() webrtc.RTPCodecType
	SSRC(layer int) uint32
	SetTrackMeta(trackID, streamID string)
	AddUpTrack(track *webrtc.TrackRemote, buffer *buffer.Buffer, bestQualityFirst bool)
	AddDownTrack(track *DownTrack, bestQualityFirst bool)
	SwitchDownTrack(track *DownTrack, layer int) error
	GetBitrate() [3]uint64
	GetMaxTemporalLayer() [3]int32
	RetransmitPackets(track *DownTrack, packets []packetMeta) error
	DeleteDownTrack(layer int, id string)
	OnCloseHandler(fn func())
	SendRTCP(p []rtcp.Packet)
	SetRTCPCh(ch chan []rtcp.Packet)
	GetSenderReportTime(layer int) (rtpTS uint32, ntpTS uint64)
}

Receiver defines a interface for a track receivers

func NewWebRTCReceiver

func NewWebRTCReceiver(receiver *webrtc.RTPReceiver, track *webrtc.TrackRemote, pid string) Receiver

NewWebRTCReceiver creates a new webrtc track receivers

type RelayPeer added in v1.10.9

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

func NewRelayPeer added in v1.10.9

func NewRelayPeer(peer *relay.Peer, session Session, config *WebRTCTransportConfig) *RelayPeer

func (*RelayPeer) DataChannel added in v1.10.9

func (r *RelayPeer) DataChannel(label string) *webrtc.DataChannel

func (*RelayPeer) GetRouter added in v1.10.9

func (r *RelayPeer) GetRouter() Router

func (*RelayPeer) ID added in v1.10.9

func (r *RelayPeer) ID() string

func (*RelayPeer) Relay added in v1.10.9

func (r *RelayPeer) Relay(signalFn func(meta relay.PeerMeta, signal []byte) ([]byte, error)) (*relay.Peer, error)

type Router

type Router interface {
	ID() string
	AddReceiver(receiver *webrtc.RTPReceiver, track *webrtc.TrackRemote, trackID, streamID string) (Receiver, bool)
	AddDownTracks(s *Subscriber, r Receiver) error
	SetRTCPWriter(func([]rtcp.Packet) error)
	AddDownTrack(s *Subscriber, r Receiver) (*DownTrack, error)
	Stop()
}

Router defines a track rtp/rtcp Router

type RouterConfig

type RouterConfig struct {
	WithStats           bool            `mapstructure:"withstats"`
	MaxBandwidth        uint64          `mapstructure:"maxbandwidth"`
	MaxPacketTrack      int             `mapstructure:"maxpackettrack"`
	AudioLevelInterval  int             `mapstructure:"audiolevelinterval"`
	AudioLevelThreshold uint8           `mapstructure:"audiolevelthreshold"`
	AudioLevelFilter    int             `mapstructure:"audiolevelfilter"`
	Simulcast           SimulcastConfig `mapstructure:"simulcast"`
}

RouterConfig defines Router configurations

type SFU

type SFU struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

SFU represents an sfu instance

func NewSFU

func NewSFU(c Config) *SFU

NewSFU creates a new sfu instance

func (*SFU) GetSession

func (s *SFU) GetSession(sid string) (Session, WebRTCTransportConfig)

func (*SFU) GetSessions added in v1.9.1

func (s *SFU) GetSessions() []Session

GetSessions return all sessions

func (*SFU) NewDatachannel added in v1.8.0

func (s *SFU) NewDatachannel(label string) *Datachannel

type Session

type Session interface {
	ID() string
	Publish(router Router, r Receiver)
	Subscribe(peer Peer)
	AddPeer(peer Peer)
	GetPeer(peerID string) Peer
	RemovePeer(peer Peer)
	AddRelayPeer(peerID string, signalData []byte) ([]byte, error)
	AudioObserver() *AudioObserver
	AddDatachannel(owner string, dc *webrtc.DataChannel)
	GetDCMiddlewares() []*Datachannel
	GetFanOutDataChannelLabels() []string
	GetDataChannels(peerID, label string) (dcs []*webrtc.DataChannel)
	FanOutMessage(origin, label string, msg webrtc.DataChannelMessage)
	Peers() []Peer
	RelayPeers() []*RelayPeer
}

Session represents a set of peers. Transports inside a SessionLocal are automatically subscribed to each other.

func NewSession

func NewSession(id string, dcs []*Datachannel, cfg WebRTCTransportConfig) Session

NewSession creates a new SessionLocal

type SessionLocal added in v1.9.9

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

func (*SessionLocal) AddDatachannel added in v1.9.9

func (s *SessionLocal) AddDatachannel(owner string, dc *webrtc.DataChannel)

func (*SessionLocal) AddPeer added in v1.9.9

func (s *SessionLocal) AddPeer(peer Peer)

func (*SessionLocal) AddRelayPeer added in v1.10.9

func (s *SessionLocal) AddRelayPeer(peerID string, signalData []byte) ([]byte, error)

func (*SessionLocal) AudioObserver added in v1.9.9

func (s *SessionLocal) AudioObserver() *AudioObserver

func (*SessionLocal) Close added in v1.10.8

func (s *SessionLocal) Close()

func (*SessionLocal) FanOutMessage added in v1.10.9

func (s *SessionLocal) FanOutMessage(origin, label string, msg webrtc.DataChannelMessage)

func (*SessionLocal) GetDCMiddlewares added in v1.9.9

func (s *SessionLocal) GetDCMiddlewares() []*Datachannel

func (*SessionLocal) GetDataChannels added in v1.9.9

func (s *SessionLocal) GetDataChannels(peerID, label string) []*webrtc.DataChannel

func (*SessionLocal) GetFanOutDataChannelLabels added in v1.10.9

func (s *SessionLocal) GetFanOutDataChannelLabels() []string

func (*SessionLocal) GetPeer added in v1.10.9

func (s *SessionLocal) GetPeer(peerID string) Peer

func (*SessionLocal) GetRelayPeer added in v1.10.9

func (s *SessionLocal) GetRelayPeer(peerID string) *RelayPeer

func (*SessionLocal) ID added in v1.9.9

func (s *SessionLocal) ID() string

ID return SessionLocal id

func (*SessionLocal) OnClose added in v1.9.9

func (s *SessionLocal) OnClose(f func())

OnClose is called when the SessionLocal is closed

func (*SessionLocal) Peers added in v1.9.9

func (s *SessionLocal) Peers() []Peer

Peers returns peers in this SessionLocal

func (*SessionLocal) Publish added in v1.9.9

func (s *SessionLocal) Publish(router Router, r Receiver)

Publish will add a Sender to all peers in current SessionLocal from given Receiver

func (*SessionLocal) RelayPeers added in v1.10.9

func (s *SessionLocal) RelayPeers() []*RelayPeer

RelayPeers returns relay peers in this SessionLocal

func (*SessionLocal) RemovePeer added in v1.9.9

func (s *SessionLocal) RemovePeer(p Peer)

RemovePeer removes Peer from the SessionLocal

func (*SessionLocal) Subscribe added in v1.9.9

func (s *SessionLocal) Subscribe(peer Peer)

Subscribe will create a Sender for every other Receiver in the SessionLocal

type SessionProvider

type SessionProvider interface {
	GetSession(sid string) (Session, WebRTCTransportConfig)
}

SessionProvider provides the SessionLocal to the sfu.Peer This allows the sfu.SFU{} implementation to be customized / wrapped by another package

type SimulcastConfig

type SimulcastConfig struct {
	BestQualityFirst    bool `mapstructure:"bestqualityfirst"`
	EnableTemporalLayer bool `mapstructure:"enabletemporallayer"`
}

type Subscriber

type Subscriber struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func NewSubscriber

func NewSubscriber(id string, cfg WebRTCTransportConfig) (*Subscriber, error)

NewSubscriber creates a new Subscriber

func (*Subscriber) AddDataChannel

func (s *Subscriber) AddDataChannel(label string) (*webrtc.DataChannel, error)

func (*Subscriber) AddDatachannel added in v1.8.0

func (s *Subscriber) AddDatachannel(peer Peer, dc *Datachannel) error

func (*Subscriber) AddDownTrack

func (s *Subscriber) AddDownTrack(streamID string, downTrack *DownTrack)

func (*Subscriber) AddICECandidate

func (s *Subscriber) AddICECandidate(candidate webrtc.ICECandidateInit) error

AddICECandidate to peer connection

func (*Subscriber) Close

func (s *Subscriber) Close() error

Close peer

func (*Subscriber) CreateOffer

func (s *Subscriber) CreateOffer() (webrtc.SessionDescription, error)

func (*Subscriber) DataChannel added in v1.9.1

func (s *Subscriber) DataChannel(label string) *webrtc.DataChannel

DataChannel returns the channel for a label

func (*Subscriber) DownTracks added in v1.10.8

func (s *Subscriber) DownTracks() []*DownTrack

func (*Subscriber) GetDatachannel added in v1.9.9

func (s *Subscriber) GetDatachannel(label string) *webrtc.DataChannel

func (*Subscriber) GetDownTracks

func (s *Subscriber) GetDownTracks(streamID string) []*DownTrack

func (*Subscriber) Negotiate added in v1.9.9

func (s *Subscriber) Negotiate()

Negotiate fires a debounced negotiation request

func (*Subscriber) OnICECandidate

func (s *Subscriber) OnICECandidate(f func(c *webrtc.ICECandidate))

OnICECandidate handler

func (*Subscriber) OnNegotiationNeeded

func (s *Subscriber) OnNegotiationNeeded(f func())

func (*Subscriber) RegisterDatachannel added in v1.9.9

func (s *Subscriber) RegisterDatachannel(label string, dc *webrtc.DataChannel)

func (*Subscriber) RemoveDownTrack added in v1.7.5

func (s *Subscriber) RemoveDownTrack(streamID string, downTrack *DownTrack)

func (*Subscriber) SetRemoteDescription

func (s *Subscriber) SetRemoteDescription(desc webrtc.SessionDescription) error

SetRemoteDescription sets the SessionDescription of the remote peer

type TurnAuth added in v1.8.1

type TurnAuth struct {
	Credentials string `mapstructure:"credentials"`
	Secret      string `mapstructure:"secret"`
}

type TurnConfig added in v1.7.4

type TurnConfig struct {
	Enabled   bool     `mapstructure:"enabled"`
	Realm     string   `mapstructure:"realm"`
	Address   string   `mapstructure:"address"`
	Cert      string   `mapstructure:"cert"`
	Key       string   `mapstructure:"key"`
	Auth      TurnAuth `mapstructure:"auth"`
	PortRange []uint16 `mapstructure:"portrange"`
}

WebRTCConfig defines parameters for ice

type WebRTCConfig

type WebRTCConfig struct {
	ICESinglePort int                  `mapstructure:"singleport"`
	ICEPortRange  []uint16             `mapstructure:"portrange"`
	ICEServers    []ICEServerConfig    `mapstructure:"iceserver"`
	Candidates    Candidates           `mapstructure:"candidates"`
	SDPSemantics  string               `mapstructure:"sdpsemantics"`
	MDNS          bool                 `mapstructure:"mdns"`
	Timeouts      WebRTCTimeoutsConfig `mapstructure:"timeouts"`
}

WebRTCConfig defines parameters for ice

type WebRTCReceiver

type WebRTCReceiver struct {
	sync.Mutex
	// contains filtered or unexported fields
}

WebRTCReceiver receives a video track

func (*WebRTCReceiver) AddDownTrack

func (w *WebRTCReceiver) AddDownTrack(track *DownTrack, bestQualityFirst bool)

func (*WebRTCReceiver) AddUpTrack

func (w *WebRTCReceiver) AddUpTrack(track *webrtc.TrackRemote, buff *buffer.Buffer, bestQualityFirst bool)

func (*WebRTCReceiver) Codec

func (w *WebRTCReceiver) Codec() webrtc.RTPCodecParameters

func (*WebRTCReceiver) DeleteDownTrack

func (w *WebRTCReceiver) DeleteDownTrack(layer int, id string)

DeleteDownTrack removes a DownTrack from a Receiver

func (*WebRTCReceiver) GetBitrate added in v1.8.2

func (w *WebRTCReceiver) GetBitrate() [3]uint64

func (*WebRTCReceiver) GetMaxTemporalLayer added in v1.8.2

func (w *WebRTCReceiver) GetMaxTemporalLayer() [3]int32

func (*WebRTCReceiver) GetSenderReportTime added in v1.10.9

func (w *WebRTCReceiver) GetSenderReportTime(layer int) (rtpTS uint32, ntpTS uint64)

func (*WebRTCReceiver) Kind

func (w *WebRTCReceiver) Kind() webrtc.RTPCodecType

func (*WebRTCReceiver) OnCloseHandler

func (w *WebRTCReceiver) OnCloseHandler(fn func())

OnCloseHandler method to be called on remote tracked removed

func (*WebRTCReceiver) RetransmitPackets added in v1.7.0

func (w *WebRTCReceiver) RetransmitPackets(track *DownTrack, packets []packetMeta) error

func (*WebRTCReceiver) SSRC

func (w *WebRTCReceiver) SSRC(layer int) uint32

func (*WebRTCReceiver) SendRTCP

func (w *WebRTCReceiver) SendRTCP(p []rtcp.Packet)

func (*WebRTCReceiver) SetRTCPCh

func (w *WebRTCReceiver) SetRTCPCh(ch chan []rtcp.Packet)

func (*WebRTCReceiver) SetTrackMeta added in v1.10.9

func (w *WebRTCReceiver) SetTrackMeta(trackID, streamID string)

func (*WebRTCReceiver) StreamID

func (w *WebRTCReceiver) StreamID() string

func (*WebRTCReceiver) SwitchDownTrack added in v1.9.8

func (w *WebRTCReceiver) SwitchDownTrack(track *DownTrack, layer int) error

func (*WebRTCReceiver) TrackID

func (w *WebRTCReceiver) TrackID() string

type WebRTCTimeoutsConfig added in v1.10.4

type WebRTCTimeoutsConfig struct {
	ICEDisconnectedTimeout int `mapstructure:"disconnected"`
	ICEFailedTimeout       int `mapstructure:"failed"`
	ICEKeepaliveInterval   int `mapstructure:"keepalive"`
}

type WebRTCTransportConfig

type WebRTCTransportConfig struct {
	Configuration webrtc.Configuration
	Setting       webrtc.SettingEngine
	Router        RouterConfig
	BufferFactory *buffer.Factory
}

WebRTCTransportConfig represents Configuration options

func NewWebRTCTransportConfig

func NewWebRTCTransportConfig(c Config) WebRTCTransportConfig

NewWebRTCTransportConfig parses our settings and returns a usable WebRTCTransportConfig for creating PeerConnections

Jump to

Keyboard shortcuts

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