Documentation
¶
Index ¶
- type Base
- func (b *Base) CheckSync() (locked bool, layer int32)
- func (b *Base) GetCurrent() buffer.VideoLayer
- func (b *Base) GetMax() buffer.VideoLayer
- func (b *Base) GetMaxSeen() buffer.VideoLayer
- func (b *Base) GetRequestSpatial() int32
- func (b *Base) GetTarget() buffer.VideoLayer
- func (b *Base) IsOvershootOkay() bool
- func (b *Base) Rollback()
- func (b *Base) Select(_extPkt *buffer.ExtPacket, _layer int32) (result VideoLayerSelectorResult)
- func (b *Base) SelectTemporal(extPkt *buffer.ExtPacket) int32
- func (b *Base) SetCurrent(currentLayer buffer.VideoLayer)
- func (b *Base) SetEnableStartAtDesiredQuality(enable bool)
- func (b *Base) SetMax(maxLayer buffer.VideoLayer)
- func (b *Base) SetMaxSeen(maxSeenLayer buffer.VideoLayer)
- func (b *Base) SetMaxSeenSpatial(layer int32)
- func (b *Base) SetMaxSeenTemporal(layer int32)
- func (b *Base) SetMaxSpatial(layer int32)
- func (b *Base) SetMaxTemporal(layer int32)
- func (b *Base) SetRequestSpatial(layer int32)
- func (b *Base) SetTarget(targetLayer buffer.VideoLayer)
- func (b *Base) SetTemporalLayerSelector(tls temporallayerselector.TemporalLayerSelector)
- type DDForwarder
- type DecodeTarget
- type DependencyDescriptor
- type FrameChain
- func (fc *FrameChain) BeginUpdateActive()
- func (fc *FrameChain) Broken() bool
- func (fc *FrameChain) EndUpdateActive()
- func (fc *FrameChain) OnExpectFrameChanged(frameNum uint64, decision selectorDecision)
- func (fc *FrameChain) OnFrame(extFrameNum uint64, fd *dd.FrameDependencyTemplate) bool
- func (fc *FrameChain) UpdateActive(active bool)
- type FrameDetectionResult
- type FrameNumberWrapper
- type Null
- type SelectorDecisionCache
- func (s *SelectorDecisionCache) AddDropped(entity uint64)
- func (s *SelectorDecisionCache) AddForwarded(entity uint64)
- func (s *SelectorDecisionCache) ExpectDecision(entity uint64, f func(entity uint64, decision selectorDecision)) bool
- func (s *SelectorDecisionCache) GetDecision(entity uint64) (selectorDecision, error)
- type Simulcast
- type VP9
- type VideoLayerSelector
- type VideoLayerSelectorResult
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Base ¶
type Base struct {
// contains filtered or unexported fields
}
func (*Base) GetCurrent ¶
func (b *Base) GetCurrent() buffer.VideoLayer
func (*Base) GetMax ¶
func (b *Base) GetMax() buffer.VideoLayer
func (*Base) GetMaxSeen ¶
func (b *Base) GetMaxSeen() buffer.VideoLayer
func (*Base) GetRequestSpatial ¶
func (*Base) GetTarget ¶
func (b *Base) GetTarget() buffer.VideoLayer
func (*Base) IsOvershootOkay ¶
func (*Base) Select ¶
func (b *Base) Select(_extPkt *buffer.ExtPacket, _layer int32) (result VideoLayerSelectorResult)
func (*Base) SetCurrent ¶
func (b *Base) SetCurrent(currentLayer buffer.VideoLayer)
func (*Base) SetEnableStartAtDesiredQuality ¶ added in v1.13.2
func (*Base) SetMax ¶
func (b *Base) SetMax(maxLayer buffer.VideoLayer)
func (*Base) SetMaxSeen ¶
func (b *Base) SetMaxSeen(maxSeenLayer buffer.VideoLayer)
func (*Base) SetMaxSeenSpatial ¶
func (*Base) SetMaxSeenTemporal ¶
func (*Base) SetMaxSpatial ¶
func (*Base) SetMaxTemporal ¶
func (*Base) SetRequestSpatial ¶
func (*Base) SetTarget ¶
func (b *Base) SetTarget(targetLayer buffer.VideoLayer)
func (*Base) SetTemporalLayerSelector ¶
func (b *Base) SetTemporalLayerSelector(tls temporallayerselector.TemporalLayerSelector)
type DDForwarder ¶ added in v1.13.10
type DDForwarder struct {
// contains filtered or unexported fields
}
DDForwarder forwards the dependency descriptor of a simulcast stream. Without it, a subscriber of a stream without picture IDs, VP8 from libwebrtc for example, finds frame references by sequence number alone and stalls on every sequence number it cannot account for.
libwebrtc numbers frames with one counter for all simulcast layers of a sender, so the frame numbers of a new layer are close to those of the old one. The numbers sent to the subscriber must still never go back: a key frame older than the last structure the subscriber received is dropped. So whenever the stream changes, a layer switch, a stream restart or a new forwarder, the numbers are moved up past the last one sent if needed. Otherwise they pass through with the current offset, so frame diffs and chain diffs stay valid. A migrated subscriber continues with the last number sent, which is part of the migrated forwarder state.
func NewDDForwarder ¶ added in v1.13.10
func NewDDForwarder(logger logger.Logger) *DDForwarder
func NewDDForwarderFromOther ¶ added in v1.13.10
func NewDDForwarderFromOther(other *DDForwarder, logger logger.Logger) *DDForwarder
NewDDForwarderFromOther continues the frame numbers of a forwarder it replaces on the same downtrack, a restarted upstream receiver for example.
func (*DDForwarder) Forward ¶ added in v1.13.10
func (d *DDForwarder) Forward(extPkt *buffer.ExtPacket, temporal int32, result *VideoLayerSelectorResult) bool
Forward marshals the descriptor of a forwarded packet into result. temporal is the temporal layer the packet is forwarded at. It returns false when there is nothing to send, before the first key frame of the stream for example.
func (*DDForwarder) GetState ¶ added in v1.13.10
func (d *DDForwarder) GetState() *livekit.DependencyDescriptorForwarderState
GetState returns the last frame number sent, nil before the first one.
func (*DDForwarder) SeedState ¶ added in v1.13.10
func (d *DDForwarder) SeedState(state *livekit.DependencyDescriptorForwarderState)
SeedState continues after the last frame number a forwarder on another node sent to the subscriber. Extended numbers there started from a lower or equal base, so the first key frame here moves past it, and the 16 bit numbers continue.
type DecodeTarget ¶ added in v1.4.4
type DecodeTarget struct {
buffer.DependencyDescriptorDecodeTarget
// contains filtered or unexported fields
}
func NewDecodeTarget ¶ added in v1.4.4
func NewDecodeTarget(target buffer.DependencyDescriptorDecodeTarget, chain *FrameChain) *DecodeTarget
func (*DecodeTarget) Active ¶ added in v1.4.4
func (dt *DecodeTarget) Active() bool
func (*DecodeTarget) OnFrame ¶ added in v1.4.4
func (dt *DecodeTarget) OnFrame(extFrameNum uint64, fd *dd.FrameDependencyTemplate) (FrameDetectionResult, error)
func (*DecodeTarget) UpdateActive ¶ added in v1.4.4
func (dt *DecodeTarget) UpdateActive(activeBitmask uint32)
func (*DecodeTarget) Valid ¶ added in v1.4.4
func (dt *DecodeTarget) Valid() bool
type DependencyDescriptor ¶
type DependencyDescriptor struct {
*Base
// contains filtered or unexported fields
}
func NewDependencyDescriptor ¶
func NewDependencyDescriptor(logger logger.Logger) *DependencyDescriptor
func NewDependencyDescriptorFromOther ¶ added in v1.8.4
func NewDependencyDescriptorFromOther(vls VideoLayerSelector) *DependencyDescriptor
func (*DependencyDescriptor) CheckSync ¶ added in v1.4.4
func (d *DependencyDescriptor) CheckSync() (locked bool, layer int32)
func (*DependencyDescriptor) IsOvershootOkay ¶
func (d *DependencyDescriptor) IsOvershootOkay() bool
func (*DependencyDescriptor) Rollback ¶ added in v1.4.5
func (d *DependencyDescriptor) Rollback()
func (*DependencyDescriptor) Select ¶
func (d *DependencyDescriptor) Select(extPkt *buffer.ExtPacket, _layer int32) (result VideoLayerSelectorResult)
type FrameChain ¶ added in v1.4.4
type FrameChain struct {
// contains filtered or unexported fields
}
func NewFrameChain ¶ added in v1.4.4
func NewFrameChain(decisions *SelectorDecisionCache, chainIdx int, logger logger.Logger) *FrameChain
func (*FrameChain) BeginUpdateActive ¶ added in v1.4.4
func (fc *FrameChain) BeginUpdateActive()
func (*FrameChain) Broken ¶ added in v1.4.4
func (fc *FrameChain) Broken() bool
func (*FrameChain) EndUpdateActive ¶ added in v1.4.4
func (fc *FrameChain) EndUpdateActive()
func (*FrameChain) OnExpectFrameChanged ¶ added in v1.4.4
func (fc *FrameChain) OnExpectFrameChanged(frameNum uint64, decision selectorDecision)
func (*FrameChain) OnFrame ¶ added in v1.4.4
func (fc *FrameChain) OnFrame(extFrameNum uint64, fd *dd.FrameDependencyTemplate) bool
func (*FrameChain) UpdateActive ¶ added in v1.4.4
func (fc *FrameChain) UpdateActive(active bool)
type FrameDetectionResult ¶ added in v1.4.4
type FrameDetectionResult struct {
TargetValid bool
DTI dd.DecodeTargetIndication
}
type FrameNumberWrapper ¶ added in v1.5.2
type FrameNumberWrapper struct {
// contains filtered or unexported fields
}
func (*FrameNumberWrapper) LastOrigin ¶ added in v1.9.1
func (f *FrameNumberWrapper) LastOrigin() uint64
func (*FrameNumberWrapper) UpdateAndGet ¶ added in v1.5.2
func (f *FrameNumberWrapper) UpdateAndGet(new uint64, updateOffset bool) uint64
UpdateAndGet returns the wrapped frame number from the given frame number, and updates the offset to make sure the returned frame number is always inorder. Should only updateOffset if the new frame is a keyframe because frame dependencies uses on the frame number diff so frames inside a GOP should have the same offset.
type SelectorDecisionCache ¶
type SelectorDecisionCache struct {
// contains filtered or unexported fields
}
func NewSelectorDecisionCache ¶
func NewSelectorDecisionCache(maxNumElements uint64, numNackEntries uint64) *SelectorDecisionCache
func (*SelectorDecisionCache) AddDropped ¶
func (s *SelectorDecisionCache) AddDropped(entity uint64)
func (*SelectorDecisionCache) AddForwarded ¶
func (s *SelectorDecisionCache) AddForwarded(entity uint64)
func (*SelectorDecisionCache) ExpectDecision ¶ added in v1.4.4
func (s *SelectorDecisionCache) ExpectDecision(entity uint64, f func(entity uint64, decision selectorDecision)) bool
func (*SelectorDecisionCache) GetDecision ¶
func (s *SelectorDecisionCache) GetDecision(entity uint64) (selectorDecision, error)
type Simulcast ¶
type Simulcast struct {
*Base
}
func NewSimulcast ¶
func NewSimulcastFromOther ¶ added in v1.8.4
func NewSimulcastFromOther(vls VideoLayerSelector) *Simulcast
func (*Simulcast) IsOvershootOkay ¶
type VP9 ¶
type VP9 struct {
*Base
}
func NewVP9FromOther ¶ added in v1.8.4
func NewVP9FromOther(vls VideoLayerSelector) *VP9
func (*VP9) IsOvershootOkay ¶
type VideoLayerSelector ¶
type VideoLayerSelector interface {
IsOvershootOkay() bool
SetTemporalLayerSelector(tls temporallayerselector.TemporalLayerSelector)
SetEnableStartAtDesiredQuality(enable bool)
SetMax(maxLayer buffer.VideoLayer)
SetMaxSpatial(layer int32)
SetMaxTemporal(layer int32)
GetMax() buffer.VideoLayer
SetTarget(targetLayer buffer.VideoLayer)
GetTarget() buffer.VideoLayer
SetRequestSpatial(layer int32)
GetRequestSpatial() int32
CheckSync() (locked bool, layer int32)
SetMaxSeen(maxSeenLayer buffer.VideoLayer)
SetMaxSeenSpatial(layer int32)
SetMaxSeenTemporal(layer int32)
GetMaxSeen() buffer.VideoLayer
SetCurrent(currentLayer buffer.VideoLayer)
GetCurrent() buffer.VideoLayer
Select(extPkt *buffer.ExtPacket, layer int32) VideoLayerSelectorResult
SelectTemporal(extPkt *buffer.ExtPacket) int32
Rollback()
// contains filtered or unexported methods
}
type VideoLayerSelectorResult ¶
type VideoLayerSelectorResult struct {
IsSelected bool
IsRelevant bool
IsSwitching bool
IsResuming bool
RTPMarker bool
// marshaled dependency descriptor extension, held inline when it fits and
// spilled to the heap when it does not, the way the sequencer keeps its copy
DDBytes [dd.MaxInlineExtensionSize]byte
DDBytesLen int
DDBytesSpill []byte
}