buffer

package
v1.7.1 Latest Latest
Warning

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

Go to latest
Published: Aug 11, 2024 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ReportDelta = 1e9

	InitPacketBufferSizeVideo = 300
	InitPacketBufferSizeAudio = 70
)
View Source
const (
	InvalidLayerSpatial  = int32(-1)
	InvalidLayerTemporal = int32(-1)

	DefaultMaxLayerSpatial  = int32(2)
	DefaultMaxLayerTemporal = int32(3)
)
View Source
const (
	QuarterResolution = "q"
	HalfResolution    = "h"
	FullResolution    = "f"
)

Variables

View Source
var (
	ErrFrameEarlierThanKeyFrame            = fmt.Errorf("frame is earlier than current keyframe")
	ErrDDStructureAttachedToNonFirstPacket = fmt.Errorf("dependency descriptor structure is attached to non-first packet of a frame")
)
View Source
var (
	InvalidLayer = VideoLayer{
		Spatial:  InvalidLayerSpatial,
		Temporal: InvalidLayerTemporal,
	}

	DefaultMaxLayer = VideoLayer{
		Spatial:  DefaultMaxLayerSpatial,
		Temporal: DefaultMaxLayerTemporal,
	}
)

Functions

func AggregateRTPStats added in v0.15.6

func AggregateRTPStats(statsList []*livekit.RTPStats) *livekit.RTPStats

func GetActiveDecodeTargetBitmask added in v1.4.2

func GetActiveDecodeTargetBitmask(layer VideoLayer, decodeTargets []DependencyDescriptorDecodeTarget) *uint32

func IsAV1KeyFrame added in v1.4.2

func IsAV1KeyFrame(payload []byte) bool

IsAV1KeyFrame detects if av1 payload is a keyframe taken from https://github.com/jech/galene/blob/master/codecs/codecs.go all credits belongs to Juliusz Chroboczek @jech and the awesome Galene SFU

func IsH264KeyFrame added in v1.4.2

func IsH264KeyFrame(payload []byte) bool

IsH264KeyFrame detects if h264 payload is a keyframe this code was taken from https://github.com/jech/galene/blob/codecs/rtpconn/rtpreader.go#L45 all credits belongs to Juliusz Chroboczek @jech and the awesome Galene SFU

func IsRedCodec added in v1.7.1

func IsRedCodec(mime string) bool

func IsSvcCodec added in v1.7.1

func IsSvcCodec(mime string) bool

SVC-TODO: Have to use more conditions to differentiate between SVC-TODO: SVC and non-SVC (could be single layer or simulcast). SVC-TODO: May only need to differentiate between simulcast and non-simulcast SVC-TODO: i. e. may be possible to treat single layer as SVC to get proper/intended functionality.

func IsVP9KeyFrame added in v1.4.2

func IsVP9KeyFrame(payload []byte) bool

IsVP9KeyFrame detects if vp9 payload is a keyframe taken from https://github.com/jech/galene/blob/master/codecs/codecs.go all credits belongs to Juliusz Chroboczek @jech and the awesome Galene SFU

func LayerPresenceFromTrackInfo added in v1.2.1

func LayerPresenceFromTrackInfo(trackInfo *livekit.TrackInfo) *[livekit.VideoQuality_HIGH + 1]bool

SIMULCAST-CODEC-TODO: these need to be codec mime aware if and when each codec suppports different layers

func RTPDriftToString added in v1.5.0

func RTPDriftToString(r *livekit.RTPDrift) string

func RidToSpatialLayer added in v1.2.1

func RidToSpatialLayer(rid string, trackInfo *livekit.TrackInfo) int32

func SpatialLayerToRid added in v1.2.1

func SpatialLayerToRid(layer int32, trackInfo *livekit.TrackInfo) string

func SpatialLayerToVideoQuality added in v1.2.1

func SpatialLayerToVideoQuality(layer int32, trackInfo *livekit.TrackInfo) livekit.VideoQuality

func VPxPictureIdSizeDiff added in v1.4.2

func VPxPictureIdSizeDiff(mBit1 bool, mBit2 bool) int

func VideoQualityToRid added in v1.2.1

func VideoQualityToRid(quality livekit.VideoQuality, trackInfo *livekit.TrackInfo) string

func VideoQualityToSpatialLayer added in v1.2.1

func VideoQualityToSpatialLayer(quality livekit.VideoQuality, trackInfo *livekit.TrackInfo) int32

Types

type Buffer

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

Buffer contains all packets

func NewBuffer

func NewBuffer(ssrc uint32, maxVideoPkts, maxAudioPkts int) *Buffer

NewBuffer constructs a new Buffer

func (*Buffer) Bind

func (b *Buffer) Bind(params webrtc.RTPParameters, codec webrtc.RTPCodecCapability, bitrates int)

func (*Buffer) Close

func (b *Buffer) Close() error

func (*Buffer) GetAudioLevel added in v0.15.7

func (b *Buffer) GetAudioLevel() (float64, bool)

func (*Buffer) GetClockRate

func (b *Buffer) GetClockRate() uint32

GetClockRate returns the RTP clock rate

func (*Buffer) GetDeltaStats added in v0.15.7

func (b *Buffer) GetDeltaStats() *StreamStatsWithLayers

func (*Buffer) GetLastSenderReportTime added in v1.6.1

func (b *Buffer) GetLastSenderReportTime() time.Time

func (*Buffer) GetMediaSSRC

func (b *Buffer) GetMediaSSRC() uint32

GetMediaSSRC returns the associated SSRC of the RTP stream

func (*Buffer) GetPacket

func (b *Buffer) GetPacket(buff []byte, esn uint64) (int, error)

func (*Buffer) GetSenderReportData

func (b *Buffer) GetSenderReportData() *RTCPSenderReportData

func (*Buffer) GetStats

func (b *Buffer) GetStats() *livekit.RTPStats

func (*Buffer) GetTemporalLayerFpsForSpatial added in v1.3.0

func (b *Buffer) GetTemporalLayerFpsForSpatial(layer int32) []float32

func (*Buffer) OnClose

func (b *Buffer) OnClose(fn func())

func (*Buffer) OnFinalRtpStats added in v1.4.0

func (b *Buffer) OnFinalRtpStats(fn func(*livekit.RTPStats))

func (*Buffer) OnFpsChanged added in v1.3.0

func (b *Buffer) OnFpsChanged(f func())

func (*Buffer) OnRtcpFeedback added in v0.15.7

func (b *Buffer) OnRtcpFeedback(fn func(fb []rtcp.Packet))

func (*Buffer) OnRtcpSenderReport added in v1.3.3

func (b *Buffer) OnRtcpSenderReport(fn func())

func (*Buffer) Read

func (b *Buffer) Read(buff []byte) (n int, err error)

func (*Buffer) ReadExtended

func (b *Buffer) ReadExtended(buf []byte) (*ExtPacket, error)

func (*Buffer) SendPLI added in v0.15.4

func (b *Buffer) SendPLI(force bool)

func (*Buffer) SetAudioLevelParams added in v0.15.7

func (b *Buffer) SetAudioLevelParams(audioLevelParams audio.AudioLevelParams)

func (*Buffer) SetAudioLossProxying added in v1.6.0

func (b *Buffer) SetAudioLossProxying(enable bool)

func (*Buffer) SetLastFractionLostReport

func (b *Buffer) SetLastFractionLostReport(lost uint8)

func (*Buffer) SetLogger added in v0.15.4

func (b *Buffer) SetLogger(logger logger.Logger)

func (*Buffer) SetPLIThrottle added in v0.15.4

func (b *Buffer) SetPLIThrottle(duration int64)

func (*Buffer) SetPaused added in v1.3.3

func (b *Buffer) SetPaused(paused bool)

func (*Buffer) SetPrimaryBufferForRTX added in v1.5.3

func (b *Buffer) SetPrimaryBufferForRTX(primaryBuffer *Buffer)

func (*Buffer) SetRTT added in v0.15.4

func (b *Buffer) SetRTT(rtt uint32)

func (*Buffer) SetSenderReportData

func (b *Buffer) SetSenderReportData(rtpTime uint32, ntpTime uint64, packets uint32, octets uint32)

func (*Buffer) SetTWCCAndExtID added in v1.5.3

func (b *Buffer) SetTWCCAndExtID(twcc *twcc.Responder, extID uint8)

func (*Buffer) Write

func (b *Buffer) Write(pkt []byte) (n int, err error)

Write adds an RTP Packet, ordering is not guaranteed, newer packets may arrive later

type DataStats added in v0.15.6

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

func NewDataStats added in v0.15.6

func NewDataStats(params DataStatsParam) *DataStats

func (*DataStats) Stop added in v0.15.6

func (s *DataStats) Stop()

func (*DataStats) ToProtoActive added in v0.15.6

func (s *DataStats) ToProtoActive() *livekit.RTPStats

func (*DataStats) ToProtoAggregateOnly added in v0.15.6

func (s *DataStats) ToProtoAggregateOnly() *livekit.RTPStats

func (*DataStats) Update added in v0.15.6

func (s *DataStats) Update(bytes int, time int64)

type DataStatsParam added in v0.15.6

type DataStatsParam struct {
	WindowDuration time.Duration
}

type DependencyDescriptorDecodeTarget added in v1.4.2

type DependencyDescriptorDecodeTarget struct {
	Target int
	Layer  VideoLayer
}

func ProcessFrameDependencyStructure added in v1.4.2

func ProcessFrameDependencyStructure(structure *dd.FrameDependencyStructure) []DependencyDescriptorDecodeTarget

func (*DependencyDescriptorDecodeTarget) String added in v1.5.1

type DependencyDescriptorParser added in v1.0.0

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

func NewDependencyDescriptorParser added in v1.0.0

func NewDependencyDescriptorParser(ddExtID uint8, logger logger.Logger, onMaxLayerChanged func(int32, int32)) *DependencyDescriptorParser

func (*DependencyDescriptorParser) Parse added in v1.0.0

type ExtDependencyDescriptor added in v1.4.4

type ExtDependencyDescriptor struct {
	Descriptor *dd.DependencyDescriptor

	DecodeTargets              []DependencyDescriptorDecodeTarget
	StructureUpdated           bool
	ActiveDecodeTargetsUpdated bool
	Integrity                  bool
	ExtFrameNum                uint64
	// the frame number of the keyframe which the current frame depends on
	ExtKeyFrameNum uint64
}

type ExtPacket

type ExtPacket struct {
	VideoLayer
	Arrival              int64
	ExtSequenceNumber    uint64
	ExtTimestamp         uint64
	Packet               *rtp.Packet
	Payload              interface{}
	KeyFrame             bool
	RawPacket            []byte
	DependencyDescriptor *ExtDependencyDescriptor
	AbsCaptureTimeExt    *act.AbsCaptureTime
	IsOutOfOrder         bool
}

type Factory

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

func (*Factory) GetBuffer

func (f *Factory) GetBuffer(ssrc uint32) *Buffer

func (*Factory) GetBufferPair

func (f *Factory) GetBufferPair(ssrc uint32) (*Buffer, *RTCPReader)

func (*Factory) GetOrNew

func (f *Factory) GetOrNew(packetType packetio.BufferPacketType, ssrc uint32) io.ReadWriteCloser

func (*Factory) GetRTCPReader

func (f *Factory) GetRTCPReader(ssrc uint32) *RTCPReader

func (*Factory) SetRTXPair added in v1.5.3

func (f *Factory) SetRTXPair(repair, base uint32)

type FactoryOfBufferFactory added in v1.3.2

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

func NewFactoryOfBufferFactory added in v1.3.2

func NewFactoryOfBufferFactory(trackingPacketsVideo int, trackingPacketsAudio int) *FactoryOfBufferFactory

func (*FactoryOfBufferFactory) CreateBufferFactory added in v1.3.2

func (f *FactoryOfBufferFactory) CreateBufferFactory() *Factory

type FrameEntity added in v1.4.5

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

func (*FrameEntity) AddPacket added in v1.4.5

func (fe *FrameEntity) AddPacket(extSeq uint64, ddVal *dd.DependencyDescriptor)

func (*FrameEntity) Integrity added in v1.4.5

func (fe *FrameEntity) Integrity() bool

func (*FrameEntity) Reset added in v1.4.5

func (fe *FrameEntity) Reset()

type FrameIntegrityChecker added in v1.4.5

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

func NewFrameIntegrityChecker added in v1.4.5

func NewFrameIntegrityChecker(frameCount, packetCount int) *FrameIntegrityChecker

func (*FrameIntegrityChecker) AddPacket added in v1.4.5

func (fc *FrameIntegrityChecker) AddPacket(extSeq uint64, extFrameNum uint64, ddVal *dd.DependencyDescriptor)

func (*FrameIntegrityChecker) FrameIntegrity added in v1.4.5

func (fc *FrameIntegrityChecker) FrameIntegrity(extFrameNum uint64) bool

type FrameRateCalculator added in v1.3.0

type FrameRateCalculator interface {
	RecvPacket(ep *ExtPacket) bool
	GetFrameRate() []float32
	Completed() bool
}

type FrameRateCalculatorDD added in v1.3.0

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

FrameRateCalculator based on Dependency descriptor

func NewFrameRateCalculatorDD added in v1.3.0

func NewFrameRateCalculatorDD(clockRate uint32, logger logger.Logger) *FrameRateCalculatorDD

func (*FrameRateCalculatorDD) Completed added in v1.3.0

func (f *FrameRateCalculatorDD) Completed() bool

func (*FrameRateCalculatorDD) GetFrameRateCalculatorForSpatial added in v1.3.0

func (f *FrameRateCalculatorDD) GetFrameRateCalculatorForSpatial(spatial int32) *FrameRateCalculatorForDDLayer

func (*FrameRateCalculatorDD) GetFrameRateForSpatial added in v1.3.0

func (f *FrameRateCalculatorDD) GetFrameRateForSpatial(spatial int32) []float32

func (*FrameRateCalculatorDD) RecvPacket added in v1.3.0

func (f *FrameRateCalculatorDD) RecvPacket(ep *ExtPacket) bool

func (*FrameRateCalculatorDD) SetMaxLayer added in v1.3.0

func (f *FrameRateCalculatorDD) SetMaxLayer(spatial, temporal int32)

type FrameRateCalculatorForDDLayer added in v1.3.0

type FrameRateCalculatorForDDLayer struct {
	*FrameRateCalculatorDD
	// contains filtered or unexported fields
}

func (*FrameRateCalculatorForDDLayer) GetFrameRate added in v1.3.0

func (f *FrameRateCalculatorForDDLayer) GetFrameRate() []float32

type FrameRateCalculatorForVP9Layer added in v1.4.2

type FrameRateCalculatorForVP9Layer struct {
	*FrameRateCalculatorVP9
	// contains filtered or unexported fields
}

func (*FrameRateCalculatorForVP9Layer) GetFrameRate added in v1.4.2

func (f *FrameRateCalculatorForVP9Layer) GetFrameRate() []float32

type FrameRateCalculatorVP8 added in v1.3.0

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

FrameRateCalculator based on PictureID in VP8

func NewFrameRateCalculatorVP8 added in v1.3.0

func NewFrameRateCalculatorVP8(clockRate uint32, logger logger.Logger) *FrameRateCalculatorVP8

func (FrameRateCalculatorVP8) Completed added in v1.3.0

func (f FrameRateCalculatorVP8) Completed() bool

func (FrameRateCalculatorVP8) GetFrameRate added in v1.3.0

func (f FrameRateCalculatorVP8) GetFrameRate() []float32

func (*FrameRateCalculatorVP8) RecvPacket added in v1.3.0

func (f *FrameRateCalculatorVP8) RecvPacket(ep *ExtPacket) bool

type FrameRateCalculatorVP9 added in v1.4.2

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

FrameRateCalculator based on PictureID in VP9

func NewFrameRateCalculatorVP9 added in v1.4.2

func NewFrameRateCalculatorVP9(clockRate uint32, logger logger.Logger) *FrameRateCalculatorVP9

func (*FrameRateCalculatorVP9) Completed added in v1.4.2

func (f *FrameRateCalculatorVP9) Completed() bool

func (*FrameRateCalculatorVP9) GetFrameRateCalculatorForSpatial added in v1.4.2

func (f *FrameRateCalculatorVP9) GetFrameRateCalculatorForSpatial(spatial int32) *FrameRateCalculatorForVP9Layer

func (*FrameRateCalculatorVP9) GetFrameRateForSpatial added in v1.4.2

func (f *FrameRateCalculatorVP9) GetFrameRateForSpatial(spatial int32) []float32

func (*FrameRateCalculatorVP9) RecvPacket added in v1.4.2

func (f *FrameRateCalculatorVP9) RecvPacket(ep *ExtPacket) bool

type PacketHistory added in v1.4.5

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

func NewPacketHistory added in v1.4.5

func NewPacketHistory(packetCount int) *PacketHistory

func (*PacketHistory) AddPacket added in v1.4.5

func (ph *PacketHistory) AddPacket(extSeq uint64)

func (*PacketHistory) PacketsConsecutive added in v1.4.5

func (ph *PacketHistory) PacketsConsecutive(start, end uint64) bool

type RTCPReader

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

func NewRTCPReader

func NewRTCPReader(ssrc uint32) *RTCPReader

func (*RTCPReader) Close

func (r *RTCPReader) Close() error

func (*RTCPReader) OnClose

func (r *RTCPReader) OnClose(fn func())

func (*RTCPReader) OnPacket

func (r *RTCPReader) OnPacket(f func([]byte))

func (*RTCPReader) Read

func (r *RTCPReader) Read(_ []byte) (n int, err error)

func (*RTCPReader) Write

func (r *RTCPReader) Write(p []byte) (n int, err error)

type RTCPSenderReportData added in v1.3.3

type RTCPSenderReportData struct {
	RTPTimestamp    uint32
	RTPTimestampExt uint64
	NTPTimestamp    mediatransportutil.NtpTime
	At              time.Time
	AtAdjusted      time.Time
	Packets         uint32
	Octets          uint32
}

func (*RTCPSenderReportData) MarshalLogObject added in v1.6.0

func (r *RTCPSenderReportData) MarshalLogObject(e zapcore.ObjectEncoder) error

func (*RTCPSenderReportData) PropagationDelay added in v1.6.1

func (r *RTCPSenderReportData) PropagationDelay(passThrough bool) time.Duration

func (*RTCPSenderReportData) ToString added in v1.5.1

func (r *RTCPSenderReportData) ToString() string

type RTPDeltaInfo added in v0.15.7

type RTPDeltaInfo struct {
	StartTime            time.Time
	EndTime              time.Time
	Packets              uint32
	Bytes                uint64
	HeaderBytes          uint64
	PacketsDuplicate     uint32
	BytesDuplicate       uint64
	HeaderBytesDuplicate uint64
	PacketsPadding       uint32
	BytesPadding         uint64
	HeaderBytesPadding   uint64
	PacketsLost          uint32
	PacketsMissing       uint32
	PacketsOutOfOrder    uint32
	Frames               uint32
	RttMax               uint32
	JitterMax            float64
	Nacks                uint32
	Plis                 uint32
	Firs                 uint32
}

func AggregateRTPDeltaInfo added in v1.4.0

func AggregateRTPDeltaInfo(deltaInfoList []*RTPDeltaInfo) *RTPDeltaInfo

type RTPFlowState added in v0.15.6

type RTPFlowState struct {
	IsNotHandled bool

	HasLoss            bool
	LossStartInclusive uint64
	LossEndExclusive   uint64

	IsDuplicate  bool
	IsOutOfOrder bool

	ExtSequenceNumber uint64
	ExtTimestamp      uint64
}

func (*RTPFlowState) MarshalLogObject added in v1.6.2

func (r *RTPFlowState) MarshalLogObject(e zapcore.ObjectEncoder) error

type RTPStatsParams added in v0.15.6

type RTPStatsParams struct {
	ClockRate uint32
	Logger    logger.Logger
}

type RTPStatsReceiver added in v1.5.0

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

func NewRTPStatsReceiver added in v1.5.0

func NewRTPStatsReceiver(params RTPStatsParams) *RTPStatsReceiver

func (RTPStatsReceiver) CheckAndUpdatePli added in v1.6.0

func (r RTPStatsReceiver) CheckAndUpdatePli(throttle int64, force bool) bool

func (*RTPStatsReceiver) DeltaInfo added in v1.5.0

func (r *RTPStatsReceiver) DeltaInfo(snapshotID uint32) *RTPDeltaInfo

func (*RTPStatsReceiver) GetRtcpReceptionReport added in v1.5.0

func (r *RTPStatsReceiver) GetRtcpReceptionReport(ssrc uint32, proxyFracLost uint8, snapshotID uint32) *rtcp.ReceptionReport

func (*RTPStatsReceiver) GetRtcpSenderReportData added in v1.5.0

func (r *RTPStatsReceiver) GetRtcpSenderReportData() *RTCPSenderReportData

func (RTPStatsReceiver) GetRtt added in v1.5.0

func (r RTPStatsReceiver) GetRtt() uint32

func (*RTPStatsReceiver) HighestTimestamp added in v1.7.1

func (r *RTPStatsReceiver) HighestTimestamp() uint32

func (RTPStatsReceiver) IsActive added in v1.5.0

func (r RTPStatsReceiver) IsActive() bool

func (RTPStatsReceiver) LastPli added in v1.5.0

func (r RTPStatsReceiver) LastPli() time.Time

func (*RTPStatsReceiver) LastSenderReportTime added in v1.6.1

func (r *RTPStatsReceiver) LastSenderReportTime() time.Time

func (*RTPStatsReceiver) MarshalLogObject added in v1.6.2

func (r *RTPStatsReceiver) MarshalLogObject(e zapcore.ObjectEncoder) error

func (*RTPStatsReceiver) NewSnapshotId added in v1.5.0

func (r *RTPStatsReceiver) NewSnapshotId() uint32

func (RTPStatsReceiver) SetLogger added in v1.5.0

func (r RTPStatsReceiver) SetLogger(logger logger.Logger)

func (*RTPStatsReceiver) SetRtcpSenderReportData added in v1.5.0

func (r *RTPStatsReceiver) SetRtcpSenderReportData(srData *RTCPSenderReportData) bool

func (RTPStatsReceiver) Stop added in v1.5.0

func (r RTPStatsReceiver) Stop()

func (*RTPStatsReceiver) String added in v1.5.2

func (r *RTPStatsReceiver) String() string

func (*RTPStatsReceiver) ToProto added in v1.5.0

func (r *RTPStatsReceiver) ToProto() *livekit.RTPStats

func (*RTPStatsReceiver) Update added in v1.5.0

func (r *RTPStatsReceiver) Update(
	packetTime int64,
	sequenceNumber uint16,
	timestamp uint32,
	marker bool,
	hdrSize int,
	payloadSize int,
	paddingSize int,
) (flowState RTPFlowState)

func (RTPStatsReceiver) UpdateFir added in v1.5.0

func (r RTPStatsReceiver) UpdateFir(firCount uint32)

func (RTPStatsReceiver) UpdateFirTime added in v1.5.0

func (r RTPStatsReceiver) UpdateFirTime()

func (RTPStatsReceiver) UpdateKeyFrame added in v1.5.0

func (r RTPStatsReceiver) UpdateKeyFrame(kfCount uint32)

func (RTPStatsReceiver) UpdateLayerLockPliAndTime added in v1.5.0

func (r RTPStatsReceiver) UpdateLayerLockPliAndTime(pliCount uint32)

func (RTPStatsReceiver) UpdateNack added in v1.5.0

func (r RTPStatsReceiver) UpdateNack(nackCount uint32)

func (RTPStatsReceiver) UpdateNackProcessed added in v1.5.0

func (r RTPStatsReceiver) UpdateNackProcessed(nackAckCount uint32, nackMissCount uint32, nackRepeatedCount uint32)

func (RTPStatsReceiver) UpdatePli added in v1.5.0

func (r RTPStatsReceiver) UpdatePli(pliCount uint32)

func (RTPStatsReceiver) UpdatePliAndTime added in v1.5.0

func (r RTPStatsReceiver) UpdatePliAndTime(pliCount uint32)

func (RTPStatsReceiver) UpdatePliTime added in v1.5.0

func (r RTPStatsReceiver) UpdatePliTime()

func (RTPStatsReceiver) UpdateRtt added in v1.5.0

func (r RTPStatsReceiver) UpdateRtt(rtt uint32)

type RTPStatsSender added in v1.5.0

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

func NewRTPStatsSender added in v1.5.0

func NewRTPStatsSender(params RTPStatsParams) *RTPStatsSender

func (RTPStatsSender) CheckAndUpdatePli added in v1.6.0

func (r RTPStatsSender) CheckAndUpdatePli(throttle int64, force bool) bool

func (*RTPStatsSender) DeltaInfo added in v1.5.0

func (r *RTPStatsSender) DeltaInfo(snapshotID uint32) *RTPDeltaInfo

func (*RTPStatsSender) DeltaInfoSender added in v1.5.0

func (r *RTPStatsSender) DeltaInfoSender(senderSnapshotID uint32) *RTPDeltaInfo

func (*RTPStatsSender) ExtHighestSequenceNumber added in v1.7.1

func (r *RTPStatsSender) ExtHighestSequenceNumber() uint64

func (*RTPStatsSender) GetExpectedRTPTimestamp added in v1.5.0

func (r *RTPStatsSender) GetExpectedRTPTimestamp(at time.Time) (expectedTSExt uint64, err error)

func (*RTPStatsSender) GetRtcpSenderReport added in v1.5.0

func (r *RTPStatsSender) GetRtcpSenderReport(ssrc uint32, publisherSRData *RTCPSenderReportData, tsOffset uint64, passThrough bool) *rtcp.SenderReport

func (RTPStatsSender) GetRtt added in v1.5.0

func (r RTPStatsSender) GetRtt() uint32

func (*RTPStatsSender) GetTotalPacketsPrimary added in v1.5.0

func (r *RTPStatsSender) GetTotalPacketsPrimary() uint64

func (RTPStatsSender) IsActive added in v1.5.0

func (r RTPStatsSender) IsActive() bool

func (RTPStatsSender) LastPli added in v1.5.0

func (r RTPStatsSender) LastPli() time.Time

func (*RTPStatsSender) LastReceiverReportTime added in v1.5.0

func (r *RTPStatsSender) LastReceiverReportTime() time.Time

func (*RTPStatsSender) MarshalLogObject added in v1.6.2

func (r *RTPStatsSender) MarshalLogObject(e zapcore.ObjectEncoder) error

func (*RTPStatsSender) MaybeAdjustFirstPacketTime added in v1.5.0

func (r *RTPStatsSender) MaybeAdjustFirstPacketTime(publisherSRData *RTCPSenderReportData, tsOffset uint64)

func (*RTPStatsSender) NewSenderSnapshotId added in v1.5.0

func (r *RTPStatsSender) NewSenderSnapshotId() uint32

func (*RTPStatsSender) NewSnapshotId added in v1.5.0

func (r *RTPStatsSender) NewSnapshotId() uint32

func (*RTPStatsSender) Seed added in v1.5.0

func (r *RTPStatsSender) Seed(from *RTPStatsSender)

func (RTPStatsSender) SetLogger added in v1.5.0

func (r RTPStatsSender) SetLogger(logger logger.Logger)

func (RTPStatsSender) Stop added in v1.5.0

func (r RTPStatsSender) Stop()

func (*RTPStatsSender) String added in v1.5.2

func (r *RTPStatsSender) String() string

func (*RTPStatsSender) ToProto added in v1.5.0

func (r *RTPStatsSender) ToProto() *livekit.RTPStats

func (*RTPStatsSender) Update added in v1.5.0

func (r *RTPStatsSender) Update(
	packetTime int64,
	extSequenceNumber uint64,
	extTimestamp uint64,
	marker bool,
	hdrSize int,
	payloadSize int,
	paddingSize int,
)

func (RTPStatsSender) UpdateFir added in v1.5.0

func (r RTPStatsSender) UpdateFir(firCount uint32)

func (RTPStatsSender) UpdateFirTime added in v1.5.0

func (r RTPStatsSender) UpdateFirTime()

func (*RTPStatsSender) UpdateFromReceiverReport added in v1.5.0

func (r *RTPStatsSender) UpdateFromReceiverReport(rr rtcp.ReceptionReport) (rtt uint32, isRttChanged bool)

func (RTPStatsSender) UpdateKeyFrame added in v1.5.0

func (r RTPStatsSender) UpdateKeyFrame(kfCount uint32)

func (RTPStatsSender) UpdateLayerLockPliAndTime added in v1.5.0

func (r RTPStatsSender) UpdateLayerLockPliAndTime(pliCount uint32)

func (RTPStatsSender) UpdateNack added in v1.5.0

func (r RTPStatsSender) UpdateNack(nackCount uint32)

func (RTPStatsSender) UpdateNackProcessed added in v1.5.0

func (r RTPStatsSender) UpdateNackProcessed(nackAckCount uint32, nackMissCount uint32, nackRepeatedCount uint32)

func (RTPStatsSender) UpdatePli added in v1.5.0

func (r RTPStatsSender) UpdatePli(pliCount uint32)

func (RTPStatsSender) UpdatePliAndTime added in v1.5.0

func (r RTPStatsSender) UpdatePliAndTime(pliCount uint32)

func (RTPStatsSender) UpdatePliTime added in v1.5.0

func (r RTPStatsSender) UpdatePliTime()

func (RTPStatsSender) UpdateRtt added in v1.5.0

func (r RTPStatsSender) UpdateRtt(rtt uint32)

type StreamStatsWithLayers added in v0.15.4

type StreamStatsWithLayers struct {
	RTPStats *RTPDeltaInfo
	Layers   map[int32]*RTPDeltaInfo
}

type VP8

type VP8 struct {
	FirstByte byte
	S         bool

	I         bool
	M         bool
	PictureID uint16 /* 7 or 15 bits, picture ID */

	L         bool
	TL0PICIDX uint8 /* 8 bits temporal level zero index */

	// Optional Header If either of the T or K bits are set to 1,
	// the TID/Y/KEYIDX extension field MUST be present.
	T   bool
	TID uint8 /* 2 bits temporal layer idx */
	Y   bool

	K      bool
	KEYIDX uint8 /* 5 bits of key frame idx */

	HeaderSize int

	// IsKeyFrame is a helper to detect if current packet is a keyframe
	IsKeyFrame bool
}

VP8 is a helper to get temporal data from VP8 packet header

VP8 Payload Descriptor
		0 1 2 3 4 5 6 7                      0 1 2 3 4 5 6 7
		+-+-+-+-+-+-+-+-+                   +-+-+-+-+-+-+-+-+
		|X|R|N|S|R| PID | (REQUIRED)        |X|R|N|S|R| PID | (REQUIRED)
		+-+-+-+-+-+-+-+-+                   +-+-+-+-+-+-+-+-+
	X:  |I|L|T|K| RSV   | (OPTIONAL)   X:   |I|L|T|K| RSV   | (OPTIONAL)
		+-+-+-+-+-+-+-+-+                   +-+-+-+-+-+-+-+-+
	I:  |M| PictureID   | (OPTIONAL)   I:   |M| PictureID   | (OPTIONAL)
		+-+-+-+-+-+-+-+-+                   +-+-+-+-+-+-+-+-+
	L:  |   TL0PICIDX   | (OPTIONAL)        |   PictureID   |
		+-+-+-+-+-+-+-+-+                   +-+-+-+-+-+-+-+-+
	T/K:|TID|Y| KEYIDX  | (OPTIONAL)   L:   |   TL0PICIDX   | (OPTIONAL)
		+-+-+-+-+-+-+-+-+                   +-+-+-+-+-+-+-+-+
	T/K:|TID|Y| KEYIDX  | (OPTIONAL)
		+-+-+-+-+-+-+-+-+

func (*VP8) Marshal added in v1.4.2

func (v *VP8) Marshal() ([]byte, error)

func (*VP8) MarshalTo

func (v *VP8) MarshalTo(buf []byte) (int, error)

func (*VP8) Unmarshal

func (v *VP8) Unmarshal(payload []byte) error

Unmarshal parses the passed byte slice and stores the result in the VP8 this method is called upon

type VideoLayer added in v1.0.0

type VideoLayer struct {
	Spatial  int32
	Temporal int32
}

func (VideoLayer) GreaterThan added in v1.0.0

func (v VideoLayer) GreaterThan(v2 VideoLayer) bool

func (VideoLayer) IsValid added in v1.0.0

func (v VideoLayer) IsValid() bool

func (VideoLayer) SpatialGreaterThanOrEqual added in v1.0.0

func (v VideoLayer) SpatialGreaterThanOrEqual(v2 VideoLayer) bool

func (VideoLayer) String added in v1.0.0

func (v VideoLayer) String() string

Jump to

Keyboard shortcuts

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