videolayerselector

package
v1.13.10 Latest Latest
Warning

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

Go to latest
Published: Oct 14, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

Documentation

Index

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 NewBase

func NewBase(logger logger.Logger) *Base

func (*Base) CheckSync added in v1.4.4

func (b *Base) CheckSync() (locked bool, layer int32)

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 (b *Base) GetRequestSpatial() int32

func (*Base) GetTarget

func (b *Base) GetTarget() buffer.VideoLayer

func (*Base) IsOvershootOkay

func (b *Base) IsOvershootOkay() bool

func (*Base) Rollback added in v1.4.5

func (b *Base) Rollback()

func (*Base) Select

func (b *Base) Select(_extPkt *buffer.ExtPacket, _layer int32) (result VideoLayerSelectorResult)

func (*Base) SelectTemporal

func (b *Base) SelectTemporal(extPkt *buffer.ExtPacket) int32

func (*Base) SetCurrent

func (b *Base) SetCurrent(currentLayer buffer.VideoLayer)

func (*Base) SetEnableStartAtDesiredQuality added in v1.13.2

func (b *Base) SetEnableStartAtDesiredQuality(enable bool)

func (*Base) SetMax

func (b *Base) SetMax(maxLayer buffer.VideoLayer)

func (*Base) SetMaxSeen

func (b *Base) SetMaxSeen(maxSeenLayer buffer.VideoLayer)

func (*Base) SetMaxSeenSpatial

func (b *Base) SetMaxSeenSpatial(layer int32)

func (*Base) SetMaxSeenTemporal

func (b *Base) SetMaxSeenTemporal(layer int32)

func (*Base) SetMaxSpatial

func (b *Base) SetMaxSpatial(layer int32)

func (*Base) SetMaxTemporal

func (b *Base) SetMaxTemporal(layer int32)

func (*Base) SetRequestSpatial

func (b *Base) SetRequestSpatial(layer int32)

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

GetState returns the last frame number sent, nil before the first one.

func (*DDForwarder) SeedState added in v1.13.10

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 Null

type Null struct {
	*Base
}

func NewNull

func NewNull(logger logger.Logger) *Null

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 NewSimulcast(logger logger.Logger) *Simulcast

func NewSimulcastFromOther added in v1.8.4

func NewSimulcastFromOther(vls VideoLayerSelector) *Simulcast

func (*Simulcast) IsOvershootOkay

func (s *Simulcast) IsOvershootOkay() bool

func (*Simulcast) Select

func (s *Simulcast) Select(extPkt *buffer.ExtPacket, layer int32) (result VideoLayerSelectorResult)

type VP9

type VP9 struct {
	*Base
}

func NewVP9

func NewVP9(logger logger.Logger) *VP9

func NewVP9FromOther added in v1.8.4

func NewVP9FromOther(vls VideoLayerSelector) *VP9

func (*VP9) IsOvershootOkay

func (v *VP9) IsOvershootOkay() bool

func (*VP9) Select

func (v *VP9) Select(extPkt *buffer.ExtPacket, _layer int32) (result VideoLayerSelectorResult)

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
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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