Enable TWCC by default

Add functions to configure TWCC reports and TWCC header extensions.
Only TWCC reports are enabled by default, because there is no Congestion
Controller available to handle reports from a remote peer, yet.
This commit is contained in:
Mathis Engelbart
2021-07-15 23:03:10 +02:00
committed by Sean DuBois
parent f8ecedc524
commit 5003380054
4 changed files with 43 additions and 5 deletions

View File

@@ -8,7 +8,9 @@ import (
"github.com/pion/interceptor"
"github.com/pion/interceptor/pkg/nack"
"github.com/pion/interceptor/pkg/report"
"github.com/pion/interceptor/pkg/twcc"
"github.com/pion/rtp"
"github.com/pion/sdp/v3"
)
// RegisterDefaultInterceptors will register some useful interceptors.
@@ -23,6 +25,10 @@ func RegisterDefaultInterceptors(mediaEngine *MediaEngine, interceptorRegistry *
return err
}
if err := ConfigureTWCCSender(mediaEngine, interceptorRegistry); err != nil {
return err
}
return nil
}
@@ -62,6 +68,36 @@ func ConfigureNack(mediaEngine *MediaEngine, interceptorRegistry *interceptor.Re
return nil
}
// ConfigureTWCCHeaderExtensionSender will setup everything necessary for adding
// a TWCC header extension to outgoing RTP packets. This will allow the remote peer to generate TWCC reports.
func ConfigureTWCCHeaderExtensionSender(mediaEngine *MediaEngine, interceptorRegistry *interceptor.Registry) error {
err := mediaEngine.RegisterHeaderExtension(RTPHeaderExtensionCapability{URI: sdp.TransportCCURI}, RTPCodecTypeVideo)
if err != nil {
return err
}
i, err := twcc.NewHeaderExtensionInterceptor()
if err != nil {
return err
}
interceptorRegistry.Add(i)
return err
}
// ConfigureTWCCSender will setup everything necessary for generating TWCC reports.
func ConfigureTWCCSender(mediaEngine *MediaEngine, interceptorRegistry *interceptor.Registry) error {
mediaEngine.RegisterFeedback(RTCPFeedback{Type: TypeRTCPFBTransportCC}, RTPCodecTypeVideo)
err := mediaEngine.RegisterHeaderExtension(RTPHeaderExtensionCapability{URI: sdp.TransportCCURI}, RTPCodecTypeVideo)
if err != nil {
return err
}
generator, err := twcc.NewSenderInterceptor()
if err != nil {
return err
}
interceptorRegistry.Add(generator)
return nil
}
type interceptorToTrackLocalWriter struct{ interceptor atomic.Value } // interceptor.RTPWriter }
func (i *interceptorToTrackLocalWriter) WriteRTP(header *rtp.Header, payload []byte) (int, error) {