Documentation
¶
Index ¶
- Constants
- Variables
- type AudioConfig
- type AudioLevelHandle
- type Bitrates
- type DownTrack
- func (d *DownTrack) AddReceiverReportListener(listener ReceiverReportListener)
- func (d *DownTrack) AllocateNextHigher(availableChannelCapacity int64, allowOvershoot bool) (VideoAllocation, bool)
- func (d *DownTrack) AllocateOptimal(allowOvershoot bool, hold bool) VideoAllocation
- func (d *DownTrack) BandwidthRequested() int64
- func (d *DownTrack) Bind(t webrtc.TrackLocalContext) (webrtc.RTPCodecParameters, error)
- func (d *DownTrack) Close()
- func (d *DownTrack) CloseWithFlush(flush bool)
- func (d *DownTrack) Codec() webrtc.RTPCodecCapability
- func (d *DownTrack) CreateSenderReport() *rtcp.SenderReport
- func (d *DownTrack) CreateSourceDescriptionChunks() []rtcp.SourceDescriptionChunk
- func (d *DownTrack) DebugInfo() map[string]interface{}
- func (d *DownTrack) DistanceToDesired() float64
- func (d *DownTrack) GetConnectionScoreAndQuality() (float32, livekit.ConnectionQuality)
- func (d *DownTrack) GetDeltaStatsSender() map[uint32]*buffer.StreamStatsWithLayers
- func (d *DownTrack) GetNackStats() (totalPackets uint32, totalRepeatedNACKs uint32)
- func (d *DownTrack) GetNextHigherTransition(allowOvershoot bool) (VideoTransition, bool)
- func (d *DownTrack) GetPrimaryStreamLastReceiverReportTime() time.Time
- func (d *DownTrack) GetPrimaryStreamPacketsSent() uint64
- func (d *DownTrack) GetState() DownTrackState
- func (d *DownTrack) GetTrackStats() *livekit.RTPStats
- func (d *DownTrack) GetTransceiver() *webrtc.RTPTransceiver
- func (d *DownTrack) HandleRTCPSenderReportData(_payloadType webrtc.PayloadType, isSVC bool, layer int32, ...) error
- func (d *DownTrack) ID() string
- func (d *DownTrack) IsClosed() bool
- func (d *DownTrack) IsDeficient() bool
- func (d *DownTrack) Kind() webrtc.RTPCodecType
- func (d *DownTrack) MaxLayer() buffer.VideoLayer
- func (d *DownTrack) Mime() mime.MimeType
- func (d *DownTrack) Mute(muted bool)
- func (d *DownTrack) OnBinding(fn func(error))
- func (d *DownTrack) OnCloseHandler(fn func(isExpectedToResume bool))
- func (d *DownTrack) OnCodecNegotiated(f func(webrtc.RTPCodecCapability))
- func (d *DownTrack) OnMaxLayerChanged(fn func(dt *DownTrack, layer int32))
- func (d *DownTrack) OnRttUpdate(fn func(dt *DownTrack, rtt uint32))
- func (d *DownTrack) OnStatsUpdate(fn func(dt *DownTrack, stat *livekit.AnalyticsStat))
- func (d *DownTrack) Pause() VideoAllocation
- func (d *DownTrack) ProvisionalAllocate(availableChannelCapacity int64, layers buffer.VideoLayer, allowPause bool, ...) (bool, int64)
- func (d *DownTrack) ProvisionalAllocateCommit() VideoAllocation
- func (d *DownTrack) ProvisionalAllocateGetBestWeightedTransition() VideoTransition
- func (d *DownTrack) ProvisionalAllocateGetCooperativeTransition(allowOvershoot bool) VideoTransition
- func (d *DownTrack) ProvisionalAllocatePrepare()
- func (d *DownTrack) ProvisionalAllocateReset()
- func (d *DownTrack) PubMute(pubMuted bool)
- func (d *DownTrack) RID() string
- func (d *DownTrack) Receiver() TrackReceiver
- func (d *DownTrack) Resync()
- func (d *DownTrack) SSRC() uint32
- func (d *DownTrack) SSRCRTX() uint32
- func (d *DownTrack) SeedState(state DownTrackState)
- func (d *DownTrack) SetActivePaddingOnMuteUpTrack()
- func (d *DownTrack) SetConnected()
- func (d *DownTrack) SetMaxSpatialLayer(spatialLayer int32)
- func (d *DownTrack) SetMaxTemporalLayer(temporalLayer int32)
- func (d *DownTrack) SetProbeClusterId(probeClusterId ccutils.ProbeClusterId)
- func (d *DownTrack) SetRTPHeaderExtensions(rtpHeaderExtensions []webrtc.RTPHeaderExtensionParameter)
- func (d *DownTrack) SetReceiver(r TrackReceiver)
- func (d *DownTrack) SetStreamAllocatorListener(listener DownTrackStreamAllocatorListener)
- func (d *DownTrack) SetTransceiver(transceiver *webrtc.RTPTransceiver)
- func (d *DownTrack) Stop() error
- func (d *DownTrack) StopWriteAndGetState() DownTrackState
- func (d *DownTrack) StreamID() string
- func (d *DownTrack) SubscriberID() livekit.ParticipantID
- func (d *DownTrack) SwapProbeClusterId(match ccutils.ProbeClusterId, swap ccutils.ProbeClusterId)
- func (d *DownTrack) Unbind(_ webrtc.TrackLocalContext) error
- func (d *DownTrack) UpTrackBitrateAvailabilityChange()
- func (d *DownTrack) UpTrackBitrateReport(availableLayers []int32, bitrates Bitrates)
- func (d *DownTrack) UpTrackLayersChange()
- func (d *DownTrack) UpTrackMaxPublishedLayerChange(maxPublishedLayer int32)
- func (d *DownTrack) UpTrackMaxTemporalLayerSeenChange(maxTemporalLayerSeen int32)
- func (d *DownTrack) WritePaddingRTP(bytesToSend int, paddingOnMute bool, forceMarker bool) int
- func (d *DownTrack) WriteProbePackets(bytesToSend int, usePadding bool) int
- func (d *DownTrack) WriteRTP(extPkt *buffer.ExtPacket, layer int32) error
- type DownTrackSpreader
- func (d *DownTrackSpreader) Broadcast(writer func(TrackSender)) int
- func (d *DownTrackSpreader) DownTrackCount() int
- func (d *DownTrackSpreader) Free(subscriberID livekit.ParticipantID)
- func (d *DownTrackSpreader) GetDownTracks() []TrackSender
- func (d *DownTrackSpreader) HasDownTrack(subscriberID livekit.ParticipantID) bool
- func (d *DownTrackSpreader) ResetAndGetDownTracks() []TrackSender
- func (d *DownTrackSpreader) Store(ts TrackSender)
- type DownTrackSpreaderParams
- type DownTrackState
- type DownTrackStreamAllocatorListener
- type DowntrackParams
- type ForwardStats
- type Forwarder
- func (f *Forwarder) AllocateNextHigher(availableChannelCapacity int64, availableLayers []int32, brs Bitrates, ...) (VideoAllocation, bool)
- func (f *Forwarder) AllocateOptimal(availableLayers []int32, brs Bitrates, allowOvershoot bool, hold bool) VideoAllocation
- func (f *Forwarder) BandwidthRequested(brs Bitrates) int64
- func (f *Forwarder) CheckSync() (bool, int32)
- func (f *Forwarder) CurrentLayer() buffer.VideoLayer
- func (f *Forwarder) DetermineCodec(codec webrtc.RTPCodecCapability, ...)
- func (f *Forwarder) DistanceToDesired(availableLayers []int32, brs Bitrates) float64
- func (f *Forwarder) FilterRTX(nacks []uint16) (filtered []uint16, disallowedLayers [buffer.DefaultMaxLayerSpatial + 1]bool)
- func (f *Forwarder) GetMaxSubscribedSpatial() int32
- func (f *Forwarder) GetNextHigherTransition(brs Bitrates, allowOvershoot bool) (VideoTransition, bool)
- func (f *Forwarder) GetOptimalBandwidthNeeded(brs Bitrates) int64
- func (f *Forwarder) GetPadding(frameEndNeeded bool) ([]byte, error)
- func (f *Forwarder) GetSenderReportParams() (int32, uint64, *livekit.RTCPSenderReportState)
- func (f *Forwarder) GetSnTsForBlankFrames(frameRate uint32, numPackets int) ([]SnTs, bool, error)
- func (f *Forwarder) GetSnTsForPadding(num int, forceMarker bool) ([]SnTs, error)
- func (f *Forwarder) GetState() *livekit.RTPForwarderState
- func (f *Forwarder) GetTranslationParams(extPkt *buffer.ExtPacket, layer int32) (TranslationParams, error)
- func (f *Forwarder) IsAnyMuted() bool
- func (f *Forwarder) IsDeficient() bool
- func (f *Forwarder) IsMuted() bool
- func (f *Forwarder) IsPubMuted() bool
- func (f *Forwarder) MaxLayer() buffer.VideoLayer
- func (f *Forwarder) Mute(muted bool, isSubscribeMutable bool) bool
- func (f *Forwarder) Pause(availableLayers []int32, brs Bitrates) VideoAllocation
- func (f *Forwarder) PauseReason() VideoPauseReason
- func (f *Forwarder) ProvisionalAllocate(availableChannelCapacity int64, layer buffer.VideoLayer, allowPause bool, ...) (bool, int64)
- func (f *Forwarder) ProvisionalAllocateCommit() VideoAllocation
- func (f *Forwarder) ProvisionalAllocateGetBestWeightedTransition() (VideoTransition, []int32, Bitrates)
- func (f *Forwarder) ProvisionalAllocateGetCooperativeTransition(allowOvershoot bool) (VideoTransition, []int32, Bitrates)
- func (f *Forwarder) ProvisionalAllocatePrepare(availableLayers []int32, bitrates Bitrates)
- func (f *Forwarder) ProvisionalAllocateReset()
- func (f *Forwarder) PubMute(pubMuted bool) bool
- func (f *Forwarder) RTPMungerDebugInfo() map[string]interface{}
- func (f *Forwarder) Restart()
- func (f *Forwarder) Resync()
- func (f *Forwarder) SeedState(state *livekit.RTPForwarderState)
- func (f *Forwarder) SetMaxPublishedLayer(maxPublishedLayer int32) bool
- func (f *Forwarder) SetMaxSpatialLayer(spatialLayer int32) (bool, buffer.VideoLayer)
- func (f *Forwarder) SetMaxTemporalLayer(temporalLayer int32) (bool, buffer.VideoLayer)
- func (f *Forwarder) SetMaxTemporalLayerSeen(maxTemporalLayerSeen int32) bool
- func (f *Forwarder) SetRefSenderReport(isSVC bool, layer int32, srData *livekit.RTCPSenderReportState)
- func (f *Forwarder) TargetLayer() buffer.VideoLayer
- type PLIThrottleConfig
- type PlayoutDelayController
- func (c *PlayoutDelayController) GetDelayExtension(seq uint16) []byte
- func (c *PlayoutDelayController) GetState() PlayoutDelayControllerState
- func (c *PlayoutDelayController) OnSeqAcked(seq uint16)
- func (c *PlayoutDelayController) SeedState(pdcs PlayoutDelayControllerState)
- func (c *PlayoutDelayController) SetJitter(jitter uint32)
- type PlayoutDelayControllerState
- type PlayoutDelayState
- type RTPMunger
- func (r *RTPMunger) DebugInfo() map[string]interface{}
- func (r *RTPMunger) FilterRTX(nacks []uint16) []uint16
- func (r *RTPMunger) GetState() *livekit.RTPMungerState
- func (r *RTPMunger) GetTSOffset() uint64
- func (r *RTPMunger) IsOnFrameBoundary() bool
- func (r *RTPMunger) PacketDropped(extPkt *buffer.ExtPacket)
- func (r *RTPMunger) SeedState(state *livekit.RTPMungerState)
- func (r *RTPMunger) SetLastSnTs(extPkt *buffer.ExtPacket)
- func (r *RTPMunger) UpdateAndGetPaddingSnTs(num int, clockRate uint32, frameRate uint32, forceMarker bool, ...) ([]SnTs, error)
- func (r *RTPMunger) UpdateAndGetSnTs(extPkt *buffer.ExtPacket, marker bool) (TranslationParamsRTP, error)
- func (r *RTPMunger) UpdateSnTsOffsets(extPkt *buffer.ExtPacket, snAdjust uint64, tsAdjust uint64)
- type ReceiverCodecState
- type ReceiverOpts
- type ReceiverReportListener
- type RedPrimaryReceiver
- func (r *RedPrimaryReceiver) AddDownTrack(track TrackSender) error
- func (r *RedPrimaryReceiver) CanClose() bool
- func (r *RedPrimaryReceiver) Close()
- func (r *RedPrimaryReceiver) DeleteDownTrack(subscriberID livekit.ParticipantID)
- func (r *RedPrimaryReceiver) ForwardRTP(pkt *buffer.ExtPacket, spatialLayer int32) int
- func (r *RedPrimaryReceiver) GetDownTracks() []TrackSender
- func (r *RedPrimaryReceiver) IsClosed() bool
- func (r *RedPrimaryReceiver) ReadRTP(buf []byte, layer uint8, esn uint64) (int, error)
- func (r *RedPrimaryReceiver) ResyncDownTracks()
- type RedReceiver
- func (r *RedReceiver) AddDownTrack(track TrackSender) error
- func (r *RedReceiver) CanClose() bool
- func (r *RedReceiver) Close()
- func (r *RedReceiver) DeleteDownTrack(subscriberID livekit.ParticipantID)
- func (r *RedReceiver) ForwardRTP(pkt *buffer.ExtPacket, spatialLayer int32) int
- func (r *RedReceiver) GetDownTracks() []TrackSender
- func (r *RedReceiver) IsClosed() bool
- func (r *RedReceiver) ReadRTP(buf []byte, layer uint8, esn uint64) (int, error)
- func (r *RedReceiver) ResyncDownTracks()
- type SequenceNumberOrdering
- type SnTs
- type StreamTrackerConfig
- type StreamTrackerFrameConfig
- type StreamTrackerManager
- func (s *StreamTrackerManager) AddDependencyDescriptorTrackers()
- func (s *StreamTrackerManager) AddTracker(layer int32) streamtracker.StreamTrackerWorker
- func (s *StreamTrackerManager) Close()
- func (s *StreamTrackerManager) DistanceToDesired() float64
- func (s *StreamTrackerManager) GetLayeredBitrate() ([]int32, Bitrates)
- func (s *StreamTrackerManager) GetMaxPublishedLayer() int32
- func (s *StreamTrackerManager) GetMaxTemporalLayerSeen() int32
- func (s *StreamTrackerManager) GetTracker(layer int32) streamtracker.StreamTrackerWorker
- func (s *StreamTrackerManager) IsPaused() bool
- func (s *StreamTrackerManager) RemoveAllTrackers()
- func (s *StreamTrackerManager) RemoveTracker(layer int32)
- func (s *StreamTrackerManager) SetListener(listener StreamTrackerManagerListener)
- func (s *StreamTrackerManager) SetMaxExpectedSpatialLayer(layer int32) int32
- func (s *StreamTrackerManager) SetPaused(paused bool)
- func (s *StreamTrackerManager) UpdateTrackInfo(ti *livekit.TrackInfo)
- type StreamTrackerManagerConfig
- type StreamTrackerManagerListener
- type StreamTrackerPacketConfig
- type StreamTrackerType
- type TrackReceiver
- type TrackRemote
- type TrackRemoteFromSdp
- type TrackSender
- type TranslationParams
- type TranslationParamsRTP
- type VideoAllocation
- type VideoAllocationProvisional
- type VideoPauseReason
- type VideoTransition
- type WebRTCReceiver
- func (w *WebRTCReceiver) AddDownTrack(track TrackSender) error
- func (w *WebRTCReceiver) AddOnCodecStateChange(f func(webrtc.RTPCodecParameters, ReceiverCodecState))
- func (w *WebRTCReceiver) AddOnReady(fn func())
- func (w *WebRTCReceiver) AddUpTrack(track TrackRemote, buff *buffer.Buffer) error
- func (w *WebRTCReceiver) Codec() webrtc.RTPCodecParameters
- func (w *WebRTCReceiver) CodecState() ReceiverCodecState
- func (w *WebRTCReceiver) DebugInfo() map[string]interface{}
- func (w *WebRTCReceiver) DeleteDownTrack(subscriberID livekit.ParticipantID)
- func (w *WebRTCReceiver) GetAudioLevel() (float64, bool)
- func (w *WebRTCReceiver) GetConnectionScoreAndQuality() (float32, livekit.ConnectionQuality)
- func (w *WebRTCReceiver) GetDeltaStats() map[uint32]*buffer.StreamStatsWithLayers
- func (w *WebRTCReceiver) GetDownTracks() []TrackSender
- func (w *WebRTCReceiver) GetLastSenderReportTime() time.Time
- func (w *WebRTCReceiver) GetLayeredBitrate() ([]int32, Bitrates)
- func (w *WebRTCReceiver) GetPrimaryReceiverForRed() TrackReceiver
- func (w *WebRTCReceiver) GetRedReceiver() TrackReceiver
- func (w *WebRTCReceiver) GetTemporalLayerFpsForSpatial(layer int32) []float32
- func (w *WebRTCReceiver) GetTrackStats() *livekit.RTPStats
- func (w *WebRTCReceiver) HeaderExtensions() []webrtc.RTPHeaderExtensionParameter
- func (w *WebRTCReceiver) IsClosed() bool
- func (w *WebRTCReceiver) Kind() webrtc.RTPCodecType
- func (w *WebRTCReceiver) Mime() mime.MimeType
- func (w *WebRTCReceiver) OnAvailableLayersChanged()
- func (w *WebRTCReceiver) OnBitrateAvailabilityChanged()
- func (w *WebRTCReceiver) OnBitrateReport(availableLayers []int32, bitrates Bitrates)
- func (w *WebRTCReceiver) OnCloseHandler(fn func())
- func (w *WebRTCReceiver) OnMaxAvailableLayerChanged(maxAvailableLayer int32)
- func (w *WebRTCReceiver) OnMaxLayerChange(fn func(maxLayer int32))
- func (w *WebRTCReceiver) OnMaxPublishedLayerChanged(maxPublishedLayer int32)
- func (w *WebRTCReceiver) OnMaxTemporalLayerSeenChanged(maxTemporalLayerSeen int32)
- func (w *WebRTCReceiver) OnStatsUpdate(fn func(w *WebRTCReceiver, stat *livekit.AnalyticsStat))
- func (w *WebRTCReceiver) ReadRTP(buf []byte, layer uint8, esn uint64) (int, error)
- func (w *WebRTCReceiver) SendPLI(layer int32, force bool)
- func (w *WebRTCReceiver) SetCodecState(state ReceiverCodecState)
- func (w *WebRTCReceiver) SetMaxExpectedSpatialLayer(layer int32)
- func (w *WebRTCReceiver) SetRTT(rtt uint32)
- func (w *WebRTCReceiver) SetUpTrackPaused(paused bool)
- func (w *WebRTCReceiver) StreamID() string
- func (w *WebRTCReceiver) TrackID() livekit.TrackID
- func (w *WebRTCReceiver) TrackInfo() *livekit.TrackInfo
- func (w *WebRTCReceiver) UpdateTrackInfo(ti *livekit.TrackInfo)
Constants ¶
const ( RTPPaddingMaxPayloadSize = 255 RTPPaddingEstimatedHeaderSize = 20 RTPBlankFramesMuteSeconds = float32(1.0) RTPBlankFramesCloseSeconds = float32(0.2) FlagStopRTXOnPLI = true )
const ( FlagPauseOnDowngrade = true FlagFilterRTX = false FlagFilterRTXLayers = true TransitionCostSpatial = 10 ResumeBehindThresholdSeconds = float64(0.2) // 200ms ResumeBehindHighThresholdSeconds = float64(2.0) // 2 seconds LayerSwitchBehindThresholdSeconds = float64(0.05) // 50ms SwitchAheadThresholdSeconds = float64(0.025) // 25ms )
Forwarder
const (
RtxGateWindow = 2000
)
Variables ¶
var ( ErrUnknownKind = errors.New("unknown kind of codec") ErrOutOfOrderSequenceNumberCacheMiss = errors.New("out-of-order sequence number not found in cache") ErrPaddingOnlyPacket = errors.New("padding only packet that need not be forwarded") ErrDuplicatePacket = errors.New("duplicate packet") ErrPaddingNotOnFrameBoundary = errors.New("padding cannot send on non-frame boundary") ErrDownTrackAlreadyBound = errors.New("already bound") ErrPayloadOverflow = errors.New("payload overflow") )
var ( VP8KeyFrame8x8 = []byte{ 0x10, 0x02, 0x00, 0x9d, 0x01, 0x2a, 0x08, 0x00, 0x08, 0x00, 0x00, 0x47, 0x08, 0x85, 0x85, 0x88, 0x85, 0x84, 0x88, 0x02, 0x02, 0x00, 0x0c, 0x0d, 0x60, 0x00, 0xfe, 0xff, 0xab, 0x50, 0x80, } H264KeyFrame2x2SPS = []byte{ 0x67, 0x42, 0xc0, 0x1f, 0x0f, 0xd9, 0x1f, 0x88, 0x88, 0x84, 0x00, 0x00, 0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xc8, 0x3c, 0x60, 0xc9, 0x20, } H264KeyFrame2x2PPS = []byte{ 0x68, 0x87, 0xcb, 0x83, 0xcb, 0x20, } H264KeyFrame2x2IDR = []byte{ 0x65, 0x88, 0x84, 0x0a, 0xf2, 0x62, 0x80, 0x00, 0xa7, 0xbe, } H264KeyFrame2x2 = [][]byte{H264KeyFrame2x2SPS, H264KeyFrame2x2PPS, H264KeyFrame2x2IDR} OpusSilenceFrame = []byte{ 0xf8, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } )
var ( ErrReceiverClosed = errors.New("receiver closed") ErrDownTrackAlreadyExist = errors.New("DownTrack already exist") ErrBufferNotFound = errors.New("buffer not found") ErrDuplicateLayer = errors.New("duplicate layer") )
var ( ErrIncompleteRedHeader = errors.New("incomplete red block header") ErrIncompleteRedBlock = errors.New("incomplete red block payload") )
var ( DefaultStreamTrackerConfigVideo = StreamTrackerConfig{ StreamTrackerType: StreamTrackerTypePacket, BitrateReportInterval: map[int32]time.Duration{ 0: 1 * time.Second, 1: 1 * time.Second, 2: 1 * time.Second, }, PacketTracker: streamtracker.DefaultStreamTrackerPacketConfigVideo, FrameTracker: streamtracker.DefaultStreamTrackerFrameConfigVideo, } StreamTrackerType: StreamTrackerTypePacket, BitrateReportInterval: map[int32]time.Duration{ 0: 4 * time.Second, 1: 4 * time.Second, 2: 4 * time.Second, }, PacketTracker: streamtracker.DefaultStreamTrackerPacketConfigScreenshare, FrameTracker: streamtracker.DefaultStreamTrackerFrameConfigScreenshare, } )
var ( DefaultAudioConfig = AudioConfig{ AudioLevelConfig: audio.DefaultAudioLevelConfig, } )
var ( DefaultPLIThrottleConfig = PLIThrottleConfig{ LowQuality: 500 * time.Millisecond, MidQuality: time.Second, HighQuality: time.Second, } )
var ( DefaultStreamTrackerManagerConfig = StreamTrackerManagerConfig{ Video: DefaultStreamTrackerConfigVideo, Screenshare: DefaultStreamTrackerConfigScreenshare, } )
var (
PacketFactory *sync.Pool
)
var ( VideoAllocationDefault = VideoAllocation{ PauseReason: VideoPauseReasonFeedDry, TargetLayer: buffer.InvalidLayer, RequestLayerSpatial: buffer.InvalidLayerSpatial, MaxLayer: buffer.InvalidLayer, } )
Functions ¶
This section is empty.
Types ¶
type AudioConfig ¶ added in v1.8.1
type AudioConfig struct { audio.AudioLevelConfig `yaml:",inline"` // enable red encoding downtrack for opus only audio up track ActiveREDEncoding bool `yaml:"active_red_encoding,omitempty"` // enable proxying weakest subscriber loss to publisher in RTCP Receiver Report EnableLossProxying bool `yaml:"enable_loss_proxying,omitempty"` }
type AudioLevelHandle ¶ added in v0.15.3
type Bitrates ¶ added in v0.15.0
type Bitrates [buffer.DefaultMaxLayerSpatial + 1][buffer.DefaultMaxLayerTemporal + 1]int64
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. A DownTrack has the following lifecycle - new - bound / unbound - closed once closed, a DownTrack cannot be re-used.
func NewDownTrack ¶
func NewDownTrack(params DowntrackParams) (*DownTrack, error)
NewDownTrack returns a DownTrack.
func (*DownTrack) AddReceiverReportListener ¶
func (d *DownTrack) AddReceiverReportListener(listener ReceiverReportListener)
func (*DownTrack) AllocateNextHigher ¶ added in v0.15.0
func (d *DownTrack) AllocateNextHigher(availableChannelCapacity int64, allowOvershoot bool) (VideoAllocation, bool)
func (*DownTrack) AllocateOptimal ¶ added in v0.15.6
func (d *DownTrack) AllocateOptimal(allowOvershoot bool, hold bool) VideoAllocation
func (*DownTrack) BandwidthRequested ¶ added in v0.15.0
func (*DownTrack) Bind ¶
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 sets up all the state (SSRC and PayloadType) to have a call
func (*DownTrack) CloseWithFlush ¶ added in v0.15.3
CloseWithFlush - flush used to indicate whether send blank frame to flush decoder of client.
- When transceiver is reused by other participant's video track, set flush=true to avoid previous video shows before new stream is displayed.
- in case of session migration, participant migrate from other node, video track should be resumed with same participant, set flush=false since we don't need to flush decoder.
func (*DownTrack) Codec ¶
func (d *DownTrack) Codec() webrtc.RTPCodecCapability
Codec returns current track codec capability
func (*DownTrack) CreateSenderReport ¶
func (d *DownTrack) CreateSenderReport() *rtcp.SenderReport
func (*DownTrack) CreateSourceDescriptionChunks ¶
func (d *DownTrack) CreateSourceDescriptionChunks() []rtcp.SourceDescriptionChunk
func (*DownTrack) DistanceToDesired ¶ added in v0.15.0
func (*DownTrack) GetConnectionScoreAndQuality ¶ added in v1.4.0
func (d *DownTrack) GetConnectionScoreAndQuality() (float32, livekit.ConnectionQuality)
func (*DownTrack) GetDeltaStatsSender ¶ added in v1.5.0
func (d *DownTrack) GetDeltaStatsSender() map[uint32]*buffer.StreamStatsWithLayers
func (*DownTrack) GetNackStats ¶ added in v0.15.5
func (*DownTrack) GetNextHigherTransition ¶ added in v0.15.5
func (d *DownTrack) GetNextHigherTransition(allowOvershoot bool) (VideoTransition, bool)
func (*DownTrack) GetPrimaryStreamLastReceiverReportTime ¶ added in v1.8.1
func (*DownTrack) GetPrimaryStreamPacketsSent ¶ added in v1.8.1
func (*DownTrack) GetState ¶ added in v1.2.4
func (d *DownTrack) GetState() DownTrackState
func (*DownTrack) GetTrackStats ¶ added in v0.15.6
func (*DownTrack) GetTransceiver ¶ added in v1.1.1
func (d *DownTrack) GetTransceiver() *webrtc.RTPTransceiver
func (*DownTrack) HandleRTCPSenderReportData ¶ added in v1.3.3
func (*DownTrack) ID ¶
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) IsDeficient ¶ added in v0.15.0
func (*DownTrack) Kind ¶
func (d *DownTrack) Kind() webrtc.RTPCodecType
Kind controls if this TrackLocal is audio or video
func (*DownTrack) MaxLayer ¶ added in v1.4.2
func (d *DownTrack) MaxLayer() buffer.VideoLayer
func (*DownTrack) OnCloseHandler ¶
OnCloseHandler method to be called on remote tracked removed
func (*DownTrack) OnCodecNegotiated ¶ added in v1.8.0
func (d *DownTrack) OnCodecNegotiated(f func(webrtc.RTPCodecCapability))
func (*DownTrack) OnMaxLayerChanged ¶ added in v0.15.4
func (*DownTrack) OnRttUpdate ¶ added in v0.15.4
func (*DownTrack) OnStatsUpdate ¶ added in v0.15.3
func (d *DownTrack) OnStatsUpdate(fn func(dt *DownTrack, stat *livekit.AnalyticsStat))
func (*DownTrack) Pause ¶ added in v0.15.0
func (d *DownTrack) Pause() VideoAllocation
func (*DownTrack) ProvisionalAllocate ¶ added in v0.15.0
func (*DownTrack) ProvisionalAllocateCommit ¶ added in v0.15.0
func (d *DownTrack) ProvisionalAllocateCommit() VideoAllocation
func (*DownTrack) ProvisionalAllocateGetBestWeightedTransition ¶ added in v0.15.0
func (d *DownTrack) ProvisionalAllocateGetBestWeightedTransition() VideoTransition
func (*DownTrack) ProvisionalAllocateGetCooperativeTransition ¶ added in v0.15.0
func (d *DownTrack) ProvisionalAllocateGetCooperativeTransition(allowOvershoot bool) VideoTransition
func (*DownTrack) ProvisionalAllocatePrepare ¶ added in v0.15.0
func (d *DownTrack) ProvisionalAllocatePrepare()
func (*DownTrack) ProvisionalAllocateReset ¶ added in v1.4.5
func (d *DownTrack) ProvisionalAllocateReset()
func (*DownTrack) PubMute ¶ added in v1.3.4
PubMute enables or disables media forwarding - publisher side
func (*DownTrack) Receiver ¶ added in v1.8.4
func (d *DownTrack) Receiver() TrackReceiver
func (*DownTrack) SeedState ¶ added in v1.2.4
func (d *DownTrack) SeedState(state DownTrackState)
func (*DownTrack) SetActivePaddingOnMuteUpTrack ¶ added in v1.3.3
func (d *DownTrack) SetActivePaddingOnMuteUpTrack()
SetActivePaddingOnMuteUpTrack will enable padding on the track when its uptrack is muted. Pion will not fire OnTrack event until it receives packet for the track, so we send padding packets to help pion client (go-sdk) to fire the event.
func (*DownTrack) SetConnected ¶ added in v1.1.0
func (d *DownTrack) SetConnected()
func (*DownTrack) SetMaxSpatialLayer ¶ added in v0.15.0
func (*DownTrack) SetMaxTemporalLayer ¶ added in v0.15.0
func (*DownTrack) SetProbeClusterId ¶ added in v1.8.1
func (d *DownTrack) SetProbeClusterId(probeClusterId ccutils.ProbeClusterId)
func (*DownTrack) SetRTPHeaderExtensions ¶
func (d *DownTrack) SetRTPHeaderExtensions(rtpHeaderExtensions []webrtc.RTPHeaderExtensionParameter)
Sets RTP header extensions for this track
func (*DownTrack) SetReceiver ¶ added in v1.8.4
func (d *DownTrack) SetReceiver(r TrackReceiver)
func (*DownTrack) SetStreamAllocatorListener ¶ added in v1.4.0
func (d *DownTrack) SetStreamAllocatorListener(listener DownTrackStreamAllocatorListener)
func (*DownTrack) SetTransceiver ¶
func (d *DownTrack) SetTransceiver(transceiver *webrtc.RTPTransceiver)
func (*DownTrack) StopWriteAndGetState ¶ added in v1.7.1
func (d *DownTrack) StopWriteAndGetState() DownTrackState
func (*DownTrack) SubscriberID ¶ added in v1.1.0
func (d *DownTrack) SubscriberID() livekit.ParticipantID
func (*DownTrack) SwapProbeClusterId ¶ added in v1.8.1
func (d *DownTrack) SwapProbeClusterId(match ccutils.ProbeClusterId, swap ccutils.ProbeClusterId)
func (*DownTrack) Unbind ¶
Unbind implements the teardown logic when the track is no longer needed. This happens because a track has been stopped.
func (*DownTrack) UpTrackBitrateAvailabilityChange ¶ added in v0.15.6
func (d *DownTrack) UpTrackBitrateAvailabilityChange()
func (*DownTrack) UpTrackBitrateReport ¶ added in v1.4.0
func (*DownTrack) UpTrackLayersChange ¶ added in v0.15.3
func (d *DownTrack) UpTrackLayersChange()
func (*DownTrack) UpTrackMaxPublishedLayerChange ¶ added in v1.3.5
func (*DownTrack) UpTrackMaxTemporalLayerSeenChange ¶ added in v1.4.0
func (*DownTrack) WritePaddingRTP ¶
WritePaddingRTP tries to write as many padding only RTP packets as necessary to satisfy given size to the DownTrack
func (*DownTrack) WriteProbePackets ¶ added in v1.8.1
type DownTrackSpreader ¶ added in v0.15.7
type DownTrackSpreader struct {
// contains filtered or unexported fields
}
func NewDownTrackSpreader ¶ added in v0.15.7
func NewDownTrackSpreader(params DownTrackSpreaderParams) *DownTrackSpreader
func (*DownTrackSpreader) Broadcast ¶ added in v0.15.7
func (d *DownTrackSpreader) Broadcast(writer func(TrackSender)) int
func (*DownTrackSpreader) DownTrackCount ¶ added in v1.1.0
func (d *DownTrackSpreader) DownTrackCount() int
func (*DownTrackSpreader) Free ¶ added in v0.15.7
func (d *DownTrackSpreader) Free(subscriberID livekit.ParticipantID)
func (*DownTrackSpreader) GetDownTracks ¶ added in v0.15.7
func (d *DownTrackSpreader) GetDownTracks() []TrackSender
func (*DownTrackSpreader) HasDownTrack ¶ added in v0.15.7
func (d *DownTrackSpreader) HasDownTrack(subscriberID livekit.ParticipantID) bool
func (*DownTrackSpreader) ResetAndGetDownTracks ¶ added in v0.15.7
func (d *DownTrackSpreader) ResetAndGetDownTracks() []TrackSender
func (*DownTrackSpreader) Store ¶ added in v0.15.7
func (d *DownTrackSpreader) Store(ts TrackSender)
type DownTrackSpreaderParams ¶ added in v0.15.7
type DownTrackState ¶ added in v1.2.4
type DownTrackState struct { RTPStats *rtpstats.RTPStatsSender DeltaStatsSenderSnapshotId uint32 RTPStatsRTX *rtpstats.RTPStatsSender DeltaStatsRTXSenderSnapshotId uint32 ForwarderState *livekit.RTPForwarderState PlayoutDelayControllerState PlayoutDelayControllerState }
func (DownTrackState) MarshalLogObject ¶ added in v1.8.0
func (d DownTrackState) MarshalLogObject(e zapcore.ObjectEncoder) error
type DownTrackStreamAllocatorListener ¶ added in v1.4.0
type DownTrackStreamAllocatorListener interface { // RTCP received OnREMB(dt *DownTrack, remb *rtcp.ReceiverEstimatedMaximumBitrate) OnTransportCCFeedback(dt *DownTrack, cc *rtcp.TransportLayerCC) // video layer availability changed OnAvailableLayersChanged(dt *DownTrack) // video layer bitrate availability changed OnBitrateAvailabilityChanged(dt *DownTrack) // max published spatial layer changed OnMaxPublishedSpatialChanged(dt *DownTrack) // max published temporal layer changed OnMaxPublishedTemporalChanged(dt *DownTrack) // subscription changed - mute/unmute OnSubscriptionChanged(dt *DownTrack) // subscribed max video layer changed OnSubscribedLayerChanged(dt *DownTrack, layers buffer.VideoLayer) // stream resumed OnResume(dt *DownTrack) // check if track should participate in BWE IsBWEEnabled(dt *DownTrack) bool // check if subscription mute can be applied IsSubscribeMutable(dt *DownTrack) bool }
type DowntrackParams ¶ added in v1.4.5
type DowntrackParams struct { Codecs []webrtc.RTPCodecParameters Source livekit.TrackSource Receiver TrackReceiver BufferFactory *buffer.Factory SubID livekit.ParticipantID StreamID string MaxTrack int PlayoutDelayLimit *livekit.PlayoutDelay Pacer pacer.Pacer Logger logger.Logger Trailer []byte RTCPWriter func([]rtcp.Packet) error DisableSenderReportPassThrough bool SupportsCodecChange bool }
type ForwardStats ¶ added in v1.6.2
type ForwardStats struct {
// contains filtered or unexported fields
}
func NewForwardStats ¶ added in v1.6.2
func NewForwardStats(latencyUpdateInterval, reportInterval, latencyWindowLength time.Duration) *ForwardStats
func (*ForwardStats) GetLastStats ¶ added in v1.6.2
func (s *ForwardStats) GetLastStats(duration time.Duration) (latency, jitter time.Duration)
func (*ForwardStats) GetStats ¶ added in v1.6.2
func (s *ForwardStats) GetStats() (latency, jitter time.Duration)
func (*ForwardStats) Stop ¶ added in v1.6.2
func (s *ForwardStats) Stop()
func (*ForwardStats) Update ¶ added in v1.6.2
func (s *ForwardStats) Update(arrival, left int64)
type Forwarder ¶ added in v0.15.0
type Forwarder struct {
// contains filtered or unexported fields
}
func NewForwarder ¶ added in v0.15.0
func (*Forwarder) AllocateNextHigher ¶ added in v0.15.0
func (*Forwarder) AllocateOptimal ¶ added in v0.15.6
func (*Forwarder) BandwidthRequested ¶ added in v0.15.0
func (*Forwarder) CurrentLayer ¶ added in v1.4.2
func (f *Forwarder) CurrentLayer() buffer.VideoLayer
func (*Forwarder) DetermineCodec ¶ added in v1.1.0
func (f *Forwarder) DetermineCodec(codec webrtc.RTPCodecCapability, extensions []webrtc.RTPHeaderExtensionParameter)
func (*Forwarder) DistanceToDesired ¶ added in v0.15.0
func (*Forwarder) GetMaxSubscribedSpatial ¶ added in v1.4.5
func (*Forwarder) GetNextHigherTransition ¶ added in v0.15.5
func (f *Forwarder) GetNextHigherTransition(brs Bitrates, allowOvershoot bool) (VideoTransition, bool)
func (*Forwarder) GetOptimalBandwidthNeeded ¶ added in v1.4.0
func (*Forwarder) GetPadding ¶ added in v1.4.2
func (*Forwarder) GetSenderReportParams ¶ added in v1.6.0
func (f *Forwarder) GetSenderReportParams() (int32, uint64, *livekit.RTCPSenderReportState)
func (*Forwarder) GetSnTsForBlankFrames ¶ added in v0.15.0
func (*Forwarder) GetSnTsForPadding ¶ added in v0.15.0
func (*Forwarder) GetState ¶ added in v1.1.1
func (f *Forwarder) GetState() *livekit.RTPForwarderState
func (*Forwarder) GetTranslationParams ¶ added in v0.15.0
func (*Forwarder) IsAnyMuted ¶ added in v1.3.5
func (*Forwarder) IsDeficient ¶ added in v0.15.0
func (*Forwarder) IsPubMuted ¶ added in v1.3.4
func (*Forwarder) MaxLayer ¶ added in v1.4.2
func (f *Forwarder) MaxLayer() buffer.VideoLayer
func (*Forwarder) Pause ¶ added in v0.15.0
func (f *Forwarder) Pause(availableLayers []int32, brs Bitrates) VideoAllocation
func (*Forwarder) PauseReason ¶ added in v1.4.5
func (f *Forwarder) PauseReason() VideoPauseReason
func (*Forwarder) ProvisionalAllocate ¶ added in v0.15.0
func (*Forwarder) ProvisionalAllocateCommit ¶ added in v0.15.0
func (f *Forwarder) ProvisionalAllocateCommit() VideoAllocation
func (*Forwarder) ProvisionalAllocateGetBestWeightedTransition ¶ added in v0.15.0
func (f *Forwarder) ProvisionalAllocateGetBestWeightedTransition() (VideoTransition, []int32, Bitrates)
func (*Forwarder) ProvisionalAllocateGetCooperativeTransition ¶ added in v0.15.0
func (f *Forwarder) ProvisionalAllocateGetCooperativeTransition(allowOvershoot bool) (VideoTransition, []int32, Bitrates)
func (*Forwarder) ProvisionalAllocatePrepare ¶ added in v0.15.0
func (*Forwarder) ProvisionalAllocateReset ¶ added in v1.4.5
func (f *Forwarder) ProvisionalAllocateReset()
func (*Forwarder) RTPMungerDebugInfo ¶ added in v1.5.0
func (*Forwarder) SeedState ¶ added in v1.1.1
func (f *Forwarder) SeedState(state *livekit.RTPForwarderState)
func (*Forwarder) SetMaxPublishedLayer ¶ added in v1.3.5
func (*Forwarder) SetMaxSpatialLayer ¶ added in v0.15.0
func (f *Forwarder) SetMaxSpatialLayer(spatialLayer int32) (bool, buffer.VideoLayer)
func (*Forwarder) SetMaxTemporalLayer ¶ added in v0.15.0
func (f *Forwarder) SetMaxTemporalLayer(temporalLayer int32) (bool, buffer.VideoLayer)
func (*Forwarder) SetMaxTemporalLayerSeen ¶ added in v1.4.0
func (*Forwarder) SetRefSenderReport ¶ added in v1.6.0
func (f *Forwarder) SetRefSenderReport(isSVC bool, layer int32, srData *livekit.RTCPSenderReportState)
func (*Forwarder) TargetLayer ¶ added in v1.4.2
func (f *Forwarder) TargetLayer() buffer.VideoLayer
type PLIThrottleConfig ¶ added in v1.8.1
type PlayoutDelayController ¶ added in v1.5.3
type PlayoutDelayController struct {
// contains filtered or unexported fields
}
func NewPlayoutDelayController ¶ added in v1.5.3
func NewPlayoutDelayController(minDelay, maxDelay uint32, logger logger.Logger, rtpStats *rtpstats.RTPStatsSender) (*PlayoutDelayController, error)
func (*PlayoutDelayController) GetDelayExtension ¶ added in v1.5.3
func (c *PlayoutDelayController) GetDelayExtension(seq uint16) []byte
func (*PlayoutDelayController) GetState ¶ added in v1.8.1
func (c *PlayoutDelayController) GetState() PlayoutDelayControllerState
func (*PlayoutDelayController) OnSeqAcked ¶ added in v1.5.3
func (c *PlayoutDelayController) OnSeqAcked(seq uint16)
func (*PlayoutDelayController) SeedState ¶ added in v1.8.1
func (c *PlayoutDelayController) SeedState(pdcs PlayoutDelayControllerState)
func (*PlayoutDelayController) SetJitter ¶ added in v1.5.3
func (c *PlayoutDelayController) SetJitter(jitter uint32)
type PlayoutDelayControllerState ¶ added in v1.8.1
type PlayoutDelayControllerState struct {
SenderSnapshotID uint32
}
func (PlayoutDelayControllerState) MarshalLogObject ¶ added in v1.8.1
func (p PlayoutDelayControllerState) MarshalLogObject(e zapcore.ObjectEncoder) error
type PlayoutDelayState ¶ added in v1.5.3
type PlayoutDelayState int32
const ( PlayoutDelayStateChanged PlayoutDelayState = iota PlayoutDelaySending PlayoutDelayAcked )
func (PlayoutDelayState) String ¶ added in v1.5.3
func (s PlayoutDelayState) String() string
type RTPMunger ¶ added in v0.15.0
type RTPMunger struct {
// contains filtered or unexported fields
}
func NewRTPMunger ¶ added in v0.15.0
func (*RTPMunger) GetState ¶ added in v1.7.1
func (r *RTPMunger) GetState() *livekit.RTPMungerState
func (*RTPMunger) GetTSOffset ¶ added in v1.6.2
func (*RTPMunger) IsOnFrameBoundary ¶ added in v0.15.0
func (*RTPMunger) PacketDropped ¶ added in v0.15.0
func (*RTPMunger) SeedState ¶ added in v1.7.1
func (r *RTPMunger) SeedState(state *livekit.RTPMungerState)
func (*RTPMunger) SetLastSnTs ¶ added in v0.15.0
func (*RTPMunger) UpdateAndGetPaddingSnTs ¶ added in v0.15.0
func (*RTPMunger) UpdateAndGetSnTs ¶ added in v0.15.0
type ReceiverCodecState ¶ added in v1.8.4
type ReceiverCodecState int
const ( ReceiverCodecStateNormal ReceiverCodecState = iota ReceiverCodecStateSuspended ReceiverCodecStateInvalid )
type ReceiverOpts ¶
type ReceiverOpts func(w *WebRTCReceiver) *WebRTCReceiver
func WithAudioConfig ¶ added in v0.15.7
func WithAudioConfig(audioConfig AudioConfig) ReceiverOpts
WithAudioConfig sets up parameters for active speaker detection
func WithForwardStats ¶ added in v1.6.2
func WithForwardStats(forwardStats *ForwardStats) ReceiverOpts
func WithLoadBalanceThreshold ¶
func WithLoadBalanceThreshold(downTracks int) ReceiverOpts
WithLoadBalanceThreshold enables parallelization of packet writes when downTracks exceeds threshold Value should be between 3 and 150. For a server handling a few large rooms, use a smaller value (required to handle very large (250+ participant) rooms). For a server handling many small rooms, use a larger value or disable. Set to 0 (disabled) by default.
func WithPliThrottleConfig ¶ added in v0.15.7
func WithPliThrottleConfig(pliThrottleConfig PLIThrottleConfig) ReceiverOpts
WithPliThrottleConfig indicates minimum time(ms) between sending PLIs
func WithStreamTrackers ¶
func WithStreamTrackers() ReceiverOpts
WithStreamTrackers enables StreamTracker use for simulcast
type ReceiverReportListener ¶
type ReceiverReportListener func(dt *DownTrack, report *rtcp.ReceiverReport)
type RedPrimaryReceiver ¶ added in v1.2.0
type RedPrimaryReceiver struct { TrackReceiver // contains filtered or unexported fields }
func NewRedPrimaryReceiver ¶ added in v1.2.0
func NewRedPrimaryReceiver(receiver TrackReceiver, dsp DownTrackSpreaderParams) *RedPrimaryReceiver
func (*RedPrimaryReceiver) AddDownTrack ¶ added in v1.2.0
func (r *RedPrimaryReceiver) AddDownTrack(track TrackSender) error
func (*RedPrimaryReceiver) CanClose ¶ added in v1.2.0
func (r *RedPrimaryReceiver) CanClose() bool
func (*RedPrimaryReceiver) Close ¶ added in v1.2.0
func (r *RedPrimaryReceiver) Close()
func (*RedPrimaryReceiver) DeleteDownTrack ¶ added in v1.2.0
func (r *RedPrimaryReceiver) DeleteDownTrack(subscriberID livekit.ParticipantID)
func (*RedPrimaryReceiver) ForwardRTP ¶ added in v1.2.0
func (r *RedPrimaryReceiver) ForwardRTP(pkt *buffer.ExtPacket, spatialLayer int32) int
func (*RedPrimaryReceiver) GetDownTracks ¶ added in v1.8.4
func (r *RedPrimaryReceiver) GetDownTracks() []TrackSender
func (*RedPrimaryReceiver) IsClosed ¶ added in v1.3.5
func (r *RedPrimaryReceiver) IsClosed() bool
func (*RedPrimaryReceiver) ResyncDownTracks ¶ added in v1.8.1
func (r *RedPrimaryReceiver) ResyncDownTracks()
type RedReceiver ¶ added in v1.3.0
type RedReceiver struct { TrackReceiver // contains filtered or unexported fields }
func NewRedReceiver ¶ added in v1.3.0
func NewRedReceiver(receiver TrackReceiver, dsp DownTrackSpreaderParams) *RedReceiver
func (*RedReceiver) AddDownTrack ¶ added in v1.3.0
func (r *RedReceiver) AddDownTrack(track TrackSender) error
func (*RedReceiver) CanClose ¶ added in v1.3.0
func (r *RedReceiver) CanClose() bool
func (*RedReceiver) Close ¶ added in v1.3.0
func (r *RedReceiver) Close()
func (*RedReceiver) DeleteDownTrack ¶ added in v1.3.0
func (r *RedReceiver) DeleteDownTrack(subscriberID livekit.ParticipantID)
func (*RedReceiver) ForwardRTP ¶ added in v1.3.0
func (r *RedReceiver) ForwardRTP(pkt *buffer.ExtPacket, spatialLayer int32) int
func (*RedReceiver) GetDownTracks ¶ added in v1.8.4
func (r *RedReceiver) GetDownTracks() []TrackSender
func (*RedReceiver) IsClosed ¶ added in v1.3.5
func (r *RedReceiver) IsClosed() bool
func (*RedReceiver) ResyncDownTracks ¶ added in v1.8.1
func (r *RedReceiver) ResyncDownTracks()
type SequenceNumberOrdering ¶
type SequenceNumberOrdering int
RTPMunger
const ( SequenceNumberOrderingContiguous SequenceNumberOrdering = iota SequenceNumberOrderingOutOfOrder SequenceNumberOrderingGap SequenceNumberOrderingDuplicate )
type StreamTrackerConfig ¶ added in v1.8.1
type StreamTrackerConfig struct { StreamTrackerType StreamTrackerType `yaml:"stream_tracker_type,omitempty"` BitrateReportInterval map[int32]time.Duration `yaml:"bitrate_report_interval,omitempty"` PacketTracker map[int32]streamtracker.StreamTrackerPacketConfig `yaml:"packet_tracker,omitempty"` FrameTracker map[int32]streamtracker.StreamTrackerFrameConfig `yaml:"frame_tracker,omitempty"` }
type StreamTrackerFrameConfig ¶ added in v1.8.1
type StreamTrackerFrameConfig struct {
MinFPS float64 `yaml:"min_fps,omitempty"`
}
type StreamTrackerManager ¶ added in v0.15.4
type StreamTrackerManager struct {
// contains filtered or unexported fields
}
func NewStreamTrackerManager ¶ added in v0.15.4
func NewStreamTrackerManager( logger logger.Logger, trackInfo *livekit.TrackInfo, isSVC bool, clockRate uint32, config StreamTrackerManagerConfig, ) *StreamTrackerManager
func (*StreamTrackerManager) AddDependencyDescriptorTrackers ¶ added in v1.4.4
func (s *StreamTrackerManager) AddDependencyDescriptorTrackers()
func (*StreamTrackerManager) AddTracker ¶ added in v0.15.4
func (s *StreamTrackerManager) AddTracker(layer int32) streamtracker.StreamTrackerWorker
func (*StreamTrackerManager) Close ¶ added in v1.4.0
func (s *StreamTrackerManager) Close()
func (*StreamTrackerManager) DistanceToDesired ¶ added in v1.2.0
func (s *StreamTrackerManager) DistanceToDesired() float64
func (*StreamTrackerManager) GetLayeredBitrate ¶ added in v1.2.4
func (s *StreamTrackerManager) GetLayeredBitrate() ([]int32, Bitrates)
func (*StreamTrackerManager) GetMaxPublishedLayer ¶ added in v1.3.5
func (s *StreamTrackerManager) GetMaxPublishedLayer() int32
func (*StreamTrackerManager) GetMaxTemporalLayerSeen ¶ added in v1.4.0
func (s *StreamTrackerManager) GetMaxTemporalLayerSeen() int32
func (*StreamTrackerManager) GetTracker ¶ added in v0.15.4
func (s *StreamTrackerManager) GetTracker(layer int32) streamtracker.StreamTrackerWorker
func (*StreamTrackerManager) IsPaused ¶ added in v1.3.3
func (s *StreamTrackerManager) IsPaused() bool
func (*StreamTrackerManager) RemoveAllTrackers ¶ added in v0.15.4
func (s *StreamTrackerManager) RemoveAllTrackers()
func (*StreamTrackerManager) RemoveTracker ¶ added in v0.15.4
func (s *StreamTrackerManager) RemoveTracker(layer int32)
func (*StreamTrackerManager) SetListener ¶ added in v1.4.0
func (s *StreamTrackerManager) SetListener(listener StreamTrackerManagerListener)
func (*StreamTrackerManager) SetMaxExpectedSpatialLayer ¶ added in v0.15.4
func (s *StreamTrackerManager) SetMaxExpectedSpatialLayer(layer int32) int32
func (*StreamTrackerManager) SetPaused ¶ added in v0.15.4
func (s *StreamTrackerManager) SetPaused(paused bool)
func (*StreamTrackerManager) UpdateTrackInfo ¶ added in v1.5.2
func (s *StreamTrackerManager) UpdateTrackInfo(ti *livekit.TrackInfo)
type StreamTrackerManagerConfig ¶ added in v1.8.1
type StreamTrackerManagerConfig struct { Video StreamTrackerConfig `yaml:"video,omitempty"` }
type StreamTrackerManagerListener ¶ added in v1.4.0
type StreamTrackerManagerListener interface { OnAvailableLayersChanged() OnBitrateAvailabilityChanged() OnMaxPublishedLayerChanged(maxPublishedLayer int32) OnMaxTemporalLayerSeenChanged(maxTemporalLayerSeen int32) OnMaxAvailableLayerChanged(maxAvailableLayer int32) OnBitrateReport(availableLayers []int32, bitrates Bitrates) }
type StreamTrackerPacketConfig ¶ added in v1.8.1
type StreamTrackerType ¶ added in v1.8.1
type StreamTrackerType string
const ( StreamTrackerTypePacket StreamTrackerType = "packet" StreamTrackerTypeFrame StreamTrackerType = "frame" )
type TrackReceiver ¶ added in v0.15.0
type TrackReceiver interface { TrackID() livekit.TrackID StreamID() string // returns the initial codec of the receiver, it is determined by the track's codec // and will not change if the codec changes during the session (publisher changes codec) Codec() webrtc.RTPCodecParameters Mime() mime.MimeType HeaderExtensions() []webrtc.RTPHeaderExtensionParameter IsClosed() bool ReadRTP(buf []byte, layer uint8, esn uint64) (int, error) GetLayeredBitrate() ([]int32, Bitrates) GetAudioLevel() (float64, bool) SendPLI(layer int32, force bool) SetUpTrackPaused(paused bool) SetMaxExpectedSpatialLayer(layer int32) AddDownTrack(track TrackSender) error DeleteDownTrack(participantID livekit.ParticipantID) GetDownTracks() []TrackSender DebugInfo() map[string]interface{} TrackInfo() *livekit.TrackInfo UpdateTrackInfo(ti *livekit.TrackInfo) // Get primary receiver if this receiver represents a RED codec; otherwise it will return itself GetPrimaryReceiverForRed() TrackReceiver // Get red receiver for primary codec, used by forward red encodings for opus only codec GetRedReceiver() TrackReceiver GetTemporalLayerFpsForSpatial(layer int32) []float32 GetTrackStats() *livekit.RTPStats // AddOnReady adds a function to be called when the receiver is ready, the callback // could be called immediately if the receiver is ready when the callback is added AddOnReady(func()) AddOnCodecStateChange(func(webrtc.RTPCodecParameters, ReceiverCodecState)) CodecState() ReceiverCodecState }
TrackReceiver defines an interface receive media from remote peer
type TrackRemote ¶ added in v1.8.1
type TrackRemoteFromSdp ¶ added in v1.8.1
type TrackRemoteFromSdp struct { *webrtc.TrackRemote // contains filtered or unexported fields }
TrackRemoteFromSdp represents a remote track that could be created by the sdp. It is a wrapper around the webrtc.TrackRemote and return the Codec from sdp before the first RTP packet is received.
func NewTrackRemoteFromSdp ¶ added in v1.8.1
func NewTrackRemoteFromSdp(track *webrtc.TrackRemote, codec webrtc.RTPCodecParameters) *TrackRemoteFromSdp
func (*TrackRemoteFromSdp) Codec ¶ added in v1.8.1
func (t *TrackRemoteFromSdp) Codec() webrtc.RTPCodecParameters
func (*TrackRemoteFromSdp) RTCTrack ¶ added in v1.8.4
func (t *TrackRemoteFromSdp) RTCTrack() *webrtc.TrackRemote
type TrackSender ¶ added in v0.15.0
type TrackSender interface { UpTrackLayersChange() UpTrackBitrateAvailabilityChange() UpTrackMaxPublishedLayerChange(maxPublishedLayer int32) UpTrackMaxTemporalLayerSeenChange(maxTemporalLayerSeen int32) UpTrackBitrateReport(availableLayers []int32, bitrates Bitrates) WriteRTP(p *buffer.ExtPacket, layer int32) error Close() IsClosed() bool // ID is the globally unique identifier for this Track. ID() string SubscriberID() livekit.ParticipantID HandleRTCPSenderReportData( payloadType webrtc.PayloadType, isSVC bool, layer int32, publisherSRData *livekit.RTCPSenderReportState, ) error Resync() SetReceiver(TrackReceiver) }
TrackSender defines an interface send media to remote peer
type TranslationParams ¶ added in v0.15.0
type TranslationParams struct {
// contains filtered or unexported fields
}
type TranslationParamsRTP ¶ added in v0.15.0
type TranslationParamsRTP struct {
// contains filtered or unexported fields
}
type VideoAllocation ¶ added in v0.15.0
type VideoAllocation struct { PauseReason VideoPauseReason IsDeficient bool BandwidthRequested int64 BandwidthDelta int64 BandwidthNeeded int64 Bitrates Bitrates TargetLayer buffer.VideoLayer RequestLayerSpatial int32 MaxLayer buffer.VideoLayer DistanceToDesired float64 }
func (*VideoAllocation) MarshalLogObject ¶ added in v1.6.0
func (v *VideoAllocation) MarshalLogObject(e zapcore.ObjectEncoder) error
func (*VideoAllocation) String ¶ added in v0.15.0
func (v *VideoAllocation) String() string
type VideoAllocationProvisional ¶ added in v0.15.0
type VideoAllocationProvisional struct {
// contains filtered or unexported fields
}
type VideoPauseReason ¶ added in v1.3.4
type VideoPauseReason int
const ( VideoPauseReasonNone VideoPauseReason = iota VideoPauseReasonMuted VideoPauseReasonPubMuted VideoPauseReasonFeedDry VideoPauseReasonBandwidth )
func (VideoPauseReason) String ¶ added in v1.3.4
func (v VideoPauseReason) String() string
type VideoTransition ¶ added in v0.15.0
type VideoTransition struct { From buffer.VideoLayer To buffer.VideoLayer BandwidthDelta int64 }
func (*VideoTransition) MarshalLogObject ¶ added in v1.6.0
func (v *VideoTransition) MarshalLogObject(e zapcore.ObjectEncoder) error
func (*VideoTransition) String ¶ added in v1.2.4
func (v *VideoTransition) String() string
type WebRTCReceiver ¶
type WebRTCReceiver struct {
// contains filtered or unexported fields
}
WebRTCReceiver receives a media track
func NewWebRTCReceiver ¶
func NewWebRTCReceiver( receiver *webrtc.RTPReceiver, track TrackRemote, trackInfo *livekit.TrackInfo, logger logger.Logger, onRTCP func([]rtcp.Packet), streamTrackerManagerConfig StreamTrackerManagerConfig, opts ...ReceiverOpts, ) *WebRTCReceiver
NewWebRTCReceiver creates a new webrtc track receiver
func (*WebRTCReceiver) AddDownTrack ¶
func (w *WebRTCReceiver) AddDownTrack(track TrackSender) error
func (*WebRTCReceiver) AddOnCodecStateChange ¶ added in v1.8.4
func (w *WebRTCReceiver) AddOnCodecStateChange(f func(webrtc.RTPCodecParameters, ReceiverCodecState))
func (*WebRTCReceiver) AddOnReady ¶ added in v1.8.0
func (w *WebRTCReceiver) AddOnReady(fn func())
func (*WebRTCReceiver) AddUpTrack ¶
func (w *WebRTCReceiver) AddUpTrack(track TrackRemote, buff *buffer.Buffer) error
func (*WebRTCReceiver) Codec ¶
func (w *WebRTCReceiver) Codec() webrtc.RTPCodecParameters
func (*WebRTCReceiver) CodecState ¶ added in v1.8.4
func (w *WebRTCReceiver) CodecState() ReceiverCodecState
func (*WebRTCReceiver) DebugInfo ¶
func (w *WebRTCReceiver) DebugInfo() map[string]interface{}
func (*WebRTCReceiver) DeleteDownTrack ¶
func (w *WebRTCReceiver) DeleteDownTrack(subscriberID livekit.ParticipantID)
DeleteDownTrack removes a DownTrack from a Receiver
func (*WebRTCReceiver) GetAudioLevel ¶ added in v0.15.7
func (w *WebRTCReceiver) GetAudioLevel() (float64, bool)
func (*WebRTCReceiver) GetConnectionScoreAndQuality ¶ added in v1.4.0
func (w *WebRTCReceiver) GetConnectionScoreAndQuality() (float32, livekit.ConnectionQuality)
func (*WebRTCReceiver) GetDeltaStats ¶ added in v1.5.0
func (w *WebRTCReceiver) GetDeltaStats() map[uint32]*buffer.StreamStatsWithLayers
func (*WebRTCReceiver) GetDownTracks ¶ added in v1.8.4
func (w *WebRTCReceiver) GetDownTracks() []TrackSender
func (*WebRTCReceiver) GetLastSenderReportTime ¶ added in v1.6.1
func (w *WebRTCReceiver) GetLastSenderReportTime() time.Time
func (*WebRTCReceiver) GetLayeredBitrate ¶ added in v1.2.4
func (w *WebRTCReceiver) GetLayeredBitrate() ([]int32, Bitrates)
func (*WebRTCReceiver) GetPrimaryReceiverForRed ¶ added in v1.2.0
func (w *WebRTCReceiver) GetPrimaryReceiverForRed() TrackReceiver
func (*WebRTCReceiver) GetRedReceiver ¶ added in v1.3.0
func (w *WebRTCReceiver) GetRedReceiver() TrackReceiver
func (*WebRTCReceiver) GetTemporalLayerFpsForSpatial ¶ added in v1.3.0
func (w *WebRTCReceiver) GetTemporalLayerFpsForSpatial(layer int32) []float32
func (*WebRTCReceiver) GetTrackStats ¶ added in v0.15.6
func (w *WebRTCReceiver) GetTrackStats() *livekit.RTPStats
func (*WebRTCReceiver) HeaderExtensions ¶ added in v1.1.0
func (w *WebRTCReceiver) HeaderExtensions() []webrtc.RTPHeaderExtensionParameter
func (*WebRTCReceiver) IsClosed ¶ added in v1.3.5
func (w *WebRTCReceiver) IsClosed() bool
func (*WebRTCReceiver) Kind ¶
func (w *WebRTCReceiver) Kind() webrtc.RTPCodecType
func (*WebRTCReceiver) Mime ¶ added in v1.8.4
func (w *WebRTCReceiver) Mime() mime.MimeType
func (*WebRTCReceiver) OnAvailableLayersChanged ¶ added in v1.4.0
func (w *WebRTCReceiver) OnAvailableLayersChanged()
StreamTrackerManagerListener.OnAvailableLayersChanged
func (*WebRTCReceiver) OnBitrateAvailabilityChanged ¶ added in v1.4.0
func (w *WebRTCReceiver) OnBitrateAvailabilityChanged()
StreamTrackerManagerListener.OnBitrateAvailabilityChanged
func (*WebRTCReceiver) OnBitrateReport ¶ added in v1.4.0
func (w *WebRTCReceiver) OnBitrateReport(availableLayers []int32, bitrates Bitrates)
StreamTrackerManagerListener.OnBitrateReport
func (*WebRTCReceiver) OnCloseHandler ¶
func (w *WebRTCReceiver) OnCloseHandler(fn func())
OnCloseHandler method to be called on remote tracked removed
func (*WebRTCReceiver) OnMaxAvailableLayerChanged ¶ added in v1.4.0
func (w *WebRTCReceiver) OnMaxAvailableLayerChanged(maxAvailableLayer int32)
StreamTrackerManagerListener.OnMaxAvailableLayerChanged
func (*WebRTCReceiver) OnMaxLayerChange ¶ added in v1.1.0
func (w *WebRTCReceiver) OnMaxLayerChange(fn func(maxLayer int32))
func (*WebRTCReceiver) OnMaxPublishedLayerChanged ¶ added in v1.4.0
func (w *WebRTCReceiver) OnMaxPublishedLayerChanged(maxPublishedLayer int32)
StreamTrackerManagerListener.OnMaxPublishedLayerChanged
func (*WebRTCReceiver) OnMaxTemporalLayerSeenChanged ¶ added in v1.4.0
func (w *WebRTCReceiver) OnMaxTemporalLayerSeenChanged(maxTemporalLayerSeen int32)
StreamTrackerManagerListener.OnMaxTemporalLayerSeenChanged
func (*WebRTCReceiver) OnStatsUpdate ¶ added in v0.15.4
func (w *WebRTCReceiver) OnStatsUpdate(fn func(w *WebRTCReceiver, stat *livekit.AnalyticsStat))
func (*WebRTCReceiver) SendPLI ¶ added in v0.15.0
func (w *WebRTCReceiver) SendPLI(layer int32, force bool)
func (*WebRTCReceiver) SetCodecState ¶ added in v1.8.4
func (w *WebRTCReceiver) SetCodecState(state ReceiverCodecState)
func (*WebRTCReceiver) SetMaxExpectedSpatialLayer ¶ added in v0.15.2
func (w *WebRTCReceiver) SetMaxExpectedSpatialLayer(layer int32)
func (*WebRTCReceiver) SetRTT ¶ added in v0.15.4
func (w *WebRTCReceiver) SetRTT(rtt uint32)
func (*WebRTCReceiver) SetUpTrackPaused ¶
func (w *WebRTCReceiver) SetUpTrackPaused(paused bool)
SetUpTrackPaused indicates upstream will not be sending any data. this will reflect the "muted" status and will pause streamtracker to ensure we don't turn off the layer
func (*WebRTCReceiver) StreamID ¶
func (w *WebRTCReceiver) StreamID() string
func (*WebRTCReceiver) TrackID ¶
func (w *WebRTCReceiver) TrackID() livekit.TrackID
func (*WebRTCReceiver) TrackInfo ¶ added in v1.2.0
func (w *WebRTCReceiver) TrackInfo() *livekit.TrackInfo
func (*WebRTCReceiver) UpdateTrackInfo ¶ added in v1.5.2
func (w *WebRTCReceiver) UpdateTrackInfo(ti *livekit.TrackInfo)