buffer

package
v0.15.5 Latest Latest
Warning

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

Go to latest
Published: Feb 28, 2022 License: Apache-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ReportDelta = 1e9
)

Variables

View Source
var (
	ErrPacketNotFound = errors.New("packet not found in cache")
	ErrBufferTooSmall = errors.New("buffer too small")
	ErrPacketTooOld   = errors.New("received packet too old")
	ErrRTXPacket      = errors.New("packet already received")
)

Functions

func IsH264Keyframe added in v0.15.0

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 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) ([]byte, error)

func (*Bucket) GetPacket

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

type Buffer

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

Buffer contains all packets

func NewBuffer

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

NewBuffer constructs a new Buffer

func (*Buffer) Bind

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

func (*Buffer) Bitrate

func (b *Buffer) Bitrate() int64

Bitrate returns the current publisher stream bitrate.

func (*Buffer) BitrateTemporalCumulative

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

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) 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() *StreamStatsWithLayers

func (*Buffer) OnAudioLevel

func (b *Buffer) OnAudioLevel(fn func(level uint8, durationMs uint32))

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) SendPLI added in v0.15.4

func (b *Buffer) SendPLI()

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) SetRTT added in v0.15.4

func (b *Buffer) SetRTT(rtt uint32)

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 an RTP Packet, out of order, new packet may be arrived later

type ExtPacket

type ExtPacket struct {
	Head      bool
	Arrival   int64
	Packet    *rtp.Packet
	Payload   interface{}
	KeyFrame  bool
	RawPacket []byte
}

type Factory

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

func NewBufferFactory

func NewBufferFactory(trackingPackets int) *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 LayerStats added in v0.15.4

type LayerStats struct {
	TotalPackets uint32
	TotalBytes   uint64
	TotalFrames  uint32
}

type NackQueue added in v0.15.0

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

func NewNACKQueue added in v0.15.0

func NewNACKQueue() *NackQueue

func (*NackQueue) Pairs added in v0.15.0

func (n *NackQueue) Pairs() ([]rtcp.NackPair, int)

func (*NackQueue) Push added in v0.15.0

func (n *NackQueue) Push(sn uint16)

func (*NackQueue) Remove added in v0.15.0

func (n *NackQueue) Remove(sn uint16)

func (*NackQueue) SetRTT added in v0.15.4

func (n *NackQueue) SetRTT(rtt uint32)

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 StreamStats added in v0.15.4

type StreamStats struct {
	TotalPrimaryPackets    uint32
	TotalPrimaryBytes      uint64
	TotalRetransmitPackets uint32
	TotalRetransmitBytes   uint64
	TotalPaddingPackets    uint32
	TotalPaddingBytes      uint64
	TotalPacketsLost       uint32
	TotalFrames            uint32
	RTT                    uint32
	Jitter                 float64
	TotalNACKs             uint32
	TotalPLIs              uint32
	TotalFIRs              uint32
}

type StreamStatsWithLayers added in v0.15.4

type StreamStatsWithLayers struct {
	StreamStats StreamStats
	Layers      map[int]LayerStats
}

type VP8

type VP8 struct {
	FirstByte byte

	PictureIDPresent int
	PictureID        uint16 /* 8 or 16 bits, picture ID */
	MBit             bool

	TL0PICIDXPresent int
	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.
	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 (v *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