File: noop_pacer.go

package info (click to toggle)
golang-github-pion-interceptor 0.1.12-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bookworm-backports, forky, sid, trixie
  • size: 764 kB
  • sloc: makefile: 8
file content (57 lines) | stat: -rw-r--r-- 1,443 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package gcc

import (
	"errors"
	"fmt"
	"sync"

	"github.com/pion/interceptor"
	"github.com/pion/rtp"
)

// ErrUnknownStream is returned when trying to send a packet with a SSRC that
// was never registered with any stream
var ErrUnknownStream = errors.New("unknown ssrc")

// NoOpPacer implements a pacer that always immediately sends incoming packets
type NoOpPacer struct {
	lock         sync.Mutex
	ssrcToWriter map[uint32]interceptor.RTPWriter
}

// NewNoOpPacer initializes a new NoOpPacer
func NewNoOpPacer() *NoOpPacer {
	return &NoOpPacer{
		lock:         sync.Mutex{},
		ssrcToWriter: map[uint32]interceptor.RTPWriter{},
	}
}

// SetTargetBitrate sets the bitrate at which the pacer sends data. NoOp for
// NoOp pacer.
func (p *NoOpPacer) SetTargetBitrate(int) {
}

// AddStream adds a stream and corresponding writer to the p
func (p *NoOpPacer) AddStream(ssrc uint32, writer interceptor.RTPWriter) {
	p.lock.Lock()
	defer p.lock.Unlock()
	p.ssrcToWriter[ssrc] = writer
}

// Write sends a packet with header and payload to a previously added stream
func (p *NoOpPacer) Write(header *rtp.Header, payload []byte, attributes interceptor.Attributes) (int, error) {
	p.lock.Lock()
	defer p.lock.Unlock()

	if w, ok := p.ssrcToWriter[header.SSRC]; ok {
		return w.Write(header, payload, attributes)
	}

	return 0, fmt.Errorf("%w: %v", ErrUnknownStream, header.SSRC)
}

// Close closes p
func (p *NoOpPacer) Close() error {
	return nil
}