Skip to content

Commit b1c953f

Browse files
committed
Add debounce and fix sdes mid ext for senders
1 parent aff9290 commit b1c953f

File tree

7 files changed

+26
-19
lines changed

7 files changed

+26
-19
lines changed

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/pion/ion-sfu
33
go 1.13
44

55
require (
6+
github.com/bep/debounce v1.2.0
67
github.com/gammazero/deque v0.0.0-20201010052221-3932da5530cc
78
github.com/golang/protobuf v1.4.3 // indirect
89
github.com/gorilla/websocket v1.4.2

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmV
3030
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
3131
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
3232
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
33+
github.com/bep/debounce v1.2.0 h1:wXds8Kq8qRfwAOpAxHrJDbCXgC5aHSzgQb/0gKsHQqo=
34+
github.com/bep/debounce v1.2.0/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0=
3335
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
3436
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
3537
github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g=

pkg/router.go

+13-1
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,20 @@ func (r *router) AddReceiver(track *webrtc.Track, receiver *webrtc.RTPReceiver)
9595
}
9696
}
9797
trackID := track.ID()
98+
99+
var twccExt uint8
100+
if e, ok := r.extensions[webrtc.SDPSectionType(mid)]; ok {
101+
for _, ex := range e {
102+
if ex.URI.String() == sdp.TransportCCURI {
103+
twccExt = uint8(ex.Value)
104+
}
105+
}
106+
}
107+
98108
recv := NewWebRTCReceiver(receiver, track, BufferOptions{
99109
BufferTime: r.config.MaxBufferTime,
100110
MaxBitRate: r.config.MaxBandwidth * 1000,
101-
TWCCExt: r.GetExtMap(mid, sdp.TransportCCURI),
111+
TWCCExt: twccExt,
102112
})
103113
recv.OnTransportWideCC(func(sn uint16, timeNS int64, marker bool) {
104114
r.twcc.push(sn, timeNS, marker)
@@ -253,6 +263,8 @@ func (r *router) sendRTCP() {
253263
}
254264

255265
func (r *router) GetExtMap(mid, ext string) uint8 {
266+
r.mu.RLock()
267+
defer r.mu.RUnlock()
256268
if e, ok := r.extensions[webrtc.SDPSectionType(mid)]; ok {
257269
for _, ex := range e {
258270
if ex.URI.String() == ext {

pkg/sender.go

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ type Sender interface {
2121
ID() string
2222
Start()
2323
Close()
24-
SetMidExt(id uint8)
2524
Kind() webrtc.RTPCodecType
2625
Type() SenderType
2726
Track() *webrtc.Track

pkg/simplesender.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ type SimpleSender struct {
2424
payload uint8
2525
maxBitrate uint64
2626
target uint64
27-
sdesMidExt uint8
2827
sdesMidHdrCtr uint8
2928
onCloseHandler func()
3029
// Muting helpers
@@ -116,8 +115,8 @@ func (s *SimpleSender) WriteRTP(pkt *rtp.Packet) {
116115
h.PayloadType = s.payload
117116
h.Timestamp = s.lastTS
118117
h.SequenceNumber = s.lastSN
119-
if s.sdesMidHdrCtr < 50 && s.sdesMidExt != 0 {
120-
if err := h.SetExtension(s.sdesMidExt, []byte(s.transceiver.Mid())); err != nil {
118+
if s.sdesMidHdrCtr < 50 {
119+
if err := h.SetExtension(1, []byte(s.transceiver.Mid())); err != nil {
121120
log.Errorf("Setting sdes mid header err: %v", err)
122121
}
123122
s.sdesMidHdrCtr++
@@ -145,10 +144,6 @@ func (s *SimpleSender) Mute(val bool) {
145144
}
146145
}
147146

148-
func (s *SimpleSender) SetMidExt(id uint8) {
149-
s.sdesMidExt = id
150-
}
151-
152147
func (s *SimpleSender) Kind() webrtc.RTPCodecType {
153148
return s.track.Kind()
154149
}

pkg/simulcastsender.go

+2-7
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ type SimulcastSender struct {
2525
enabled atomicBool
2626
target uint64
2727
payload uint8
28-
sdesMidExt uint8
2928
sdesMidHdrCtr uint8
3029
maxBitrate uint64
3130
onCloseHandler func()
@@ -181,8 +180,8 @@ func (s *SimulcastSender) WriteRTP(pkt *rtp.Packet) {
181180
h.SequenceNumber = lSN
182181
h.Timestamp = s.lTS
183182
h.PayloadType = s.payload
184-
if s.sdesMidHdrCtr < 50 && s.sdesMidExt != 0 {
185-
if err := h.SetExtension(s.sdesMidExt, []byte(s.transceiver.Mid())); err != nil {
183+
if s.sdesMidHdrCtr < 50 {
184+
if err := h.SetExtension(1, []byte(s.transceiver.Mid())); err != nil {
186185
log.Errorf("Setting sdes mid header err: %v", err)
187186
}
188187
s.sdesMidHdrCtr++
@@ -219,10 +218,6 @@ func (s *SimulcastSender) Transceiver() *webrtc.RTPTransceiver {
219218
return s.transceiver
220219
}
221220

222-
func (s *SimulcastSender) SetMidExt(id uint8) {
223-
s.sdesMidExt = id
224-
}
225-
226221
func (s *SimulcastSender) Type() SenderType {
227222
return SimulcastSenderType
228223
}

pkg/webrtctransport.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package sfu
22

33
import (
44
"sync"
5+
"time"
56

7+
"github.com/bep/debounce"
68
"github.com/gammazero/deque"
79

810
"github.com/lucsky/cuid"
@@ -156,8 +158,6 @@ func (p *WebRTCTransport) SetRemoteDescription(desc webrtc.SessionDescription) e
156158
for i := 0; i < p.pendingSenders.Len(); i++ {
157159
pd := p.pendingSenders.PopFront().(pendingSender)
158160
if pd.transceiver.Mid() == mid {
159-
ext := p.router.GetExtMap(mid, sdp.SDESMidURI)
160-
pd.sender.SetMidExt(ext)
161161
pendingStart = append(pendingStart, pd)
162162
} else {
163163
p.pendingSenders.PushBack(pd)
@@ -215,7 +215,10 @@ func (p *WebRTCTransport) OnICECandidate(f func(c *webrtc.ICECandidate)) {
215215

216216
// OnNegotiationNeeded handler
217217
func (p *WebRTCTransport) OnNegotiationNeeded(f func()) {
218-
p.negotiate = f
218+
debounced := debounce.New(100 * time.Millisecond)
219+
p.negotiate = func() {
220+
debounced(f)
221+
}
219222
}
220223

221224
// OnTrack handler

0 commit comments

Comments
 (0)