buffer

package
v0.14.1 Latest Latest
Warning

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

Go to latest
Published: Nov 11, 2021 License: Apache-2.0 Imports: 16 Imported by: 0

Documentation

Index

Constants

View Source
const (
	MaxSN = 1 << 16
)

Variables

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

Functions

func IsLaterTimestamp

func IsLaterTimestamp(timestamp1 uint32, timestamp2 uint32) bool

IsLaterTimestamp returns true if timestamp1 is later in time than timestamp2 factoring in timestamp wrap-around

func IsTimestampWrapAround

func IsTimestampWrapAround(timestamp1 uint32, timestamp2 uint32) bool

IsTimestampWrapAround returns true if wrap around happens from timestamp1 to timestamp2

func VP8PictureIdSizeDiff

func VP8PictureIdSizeDiff(mBit1 bool, mBit2 bool) int

Types

type Bucket

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

func NewBucket

func NewBucket(buf *[]byte) *Bucket

func (*Bucket) AddPacket

func (b *Bucket) AddPacket(pkt []byte, sn uint16, latest bool) ([]byte, error)

func (*Bucket) GetPacket

func (b *Bucket) GetPacket(buf []byte, sn uint16) (i int, err error)

type Buffer

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

Buffer contains all packets

func NewBuffer

func NewBuffer(ssrc uint32, vp, ap *sync.Pool, logger logr.Logger) *Buffer

NewBuffer constructs a new Buffer

func (*Buffer) Bind

func (b *Buffer) Bind(params webrtc.RTPParameters, o Options)

func (*Buffer) Bitrate

func (b *Buffer) Bitrate() uint64

Bitrate returns the current publisher stream bitrate.

func (*Buffer) BitrateTemporal

func (b *Buffer) BitrateTemporal() []uint64

BitrateTemporal returns the current publisher stream bitrate temporal layer wise.

func (*Buffer) BitrateTemporalCumulative

func (b *Buffer) BitrateTemporalCumulative() []uint64

BitrateTemporalCumulative returns the current publisher stream bitrate temporal layer accumulated with lower temporal layers.

func (*Buffer) Close

func (b *Buffer) Close() error

func (*Buffer) GetClockRate

func (b *Buffer) GetClockRate() uint32

GetClockRate returns the RTP clock rate

func (*Buffer) GetLatestTimestamp

func (b *Buffer) GetLatestTimestamp() (latestTimestamp uint32, latestTimestampTimeInNanosSinceEpoch int64)

GetLatestTimestamp returns the latest RTP timestamp factoring in potential RTP timestamp wrap-around

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, sn uint16) (int, error)

func (*Buffer) GetSenderReportData

func (b *Buffer) GetSenderReportData() (rtpTime uint32, ntpTime uint64, lastReceivedTimeInNanosSinceEpoch int64)

GetSenderReportData returns the rtp, ntp and nanos of the last sender report

func (*Buffer) GetStats

func (b *Buffer) GetStats() (stats Stats)

GetStats returns the raw statistics about a particular buffer state

func (*Buffer) MaxTemporalLayer

func (b *Buffer) MaxTemporalLayer() int32

func (*Buffer) OnAudioLevel

func (b *Buffer) OnAudioLevel(fn func(level uint8))

func (*Buffer) OnClose

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

func (*Buffer) OnFeedback

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

func (*Buffer) OnTransportWideCC

func (b *Buffer) OnTransportWideCC(fn func(sn uint16, timeNS int64, marker bool))

func (*Buffer) Read

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

func (*Buffer) ReadExtended

func (b *Buffer) ReadExtended() (*ExtPacket, error)

func (*Buffer) SetLastFractionLostReport

func (b *Buffer) SetLastFractionLostReport(lost uint8)

func (*Buffer) SetSenderReportData

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

func (*Buffer) Write

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

Write adds a RTP Packet, out of order, new packet may be arrived later

type ExtPacket

type ExtPacket struct {
	Head     bool
	Cycle    uint32
	Arrival  int64
	Packet   rtp.Packet
	Payload  interface{}
	KeyFrame bool
}

type Factory

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

func NewBufferFactory

func NewBufferFactory(trackingPackets int, logger logr.Logger) *Factory

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

type Options

type Options struct {
	MaxBitRate uint64
}

BufferOptions provides configuration options for the buffer

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 SeqWrapHandler

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

func (*SeqWrapHandler) Cycles

func (s *SeqWrapHandler) Cycles() uint32

func (*SeqWrapHandler) MaxSeqNo

func (s *SeqWrapHandler) MaxSeqNo() uint32

func (*SeqWrapHandler) Unwrap

func (s *SeqWrapHandler) Unwrap(seq uint16) (uint32, bool)

unwrap seq and update the maxSeqNo. return unwraped value, and whether seq is newer

func (*SeqWrapHandler) UpdateMaxSeq

func (s *SeqWrapHandler) UpdateMaxSeq(extSeq uint32)

type Stats

type Stats struct {
	LastExpected uint32
	LastReceived uint32
	LostRate     float32
	PacketCount  uint32  // Number of packets received from this source.
	Jitter       float64 // An estimate of the statistical variance of the RTP data packet inter-arrival time.
	TotalByte    uint64
}

type VP8

type VP8 struct {
	TemporalSupported bool // LK-TODO: CLEANUP-REMOVE
	FirstByte         byte

	PictureIDPresent int
	PictureID        uint16 /* 8 or 16 bits, picture ID */
	PicIDIdx         int    // LK-TODO: CLEANUP-REMOVE
	MBit             bool

	TL0PICIDXPresent int
	TL0PICIDX        uint8 /* 8 bits temporal level zero index */
	TlzIdx           int   // LK-TODO: CLEANUP-REMOVE

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

	KEYIDXPresent int
	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) MarshalTo

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

func (*VP8) Unmarshal

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

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

Jump to

Keyboard shortcuts

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