mirror of
https://github.com/livekit/livekit.git
synced 2026-08-28 07:14:12 +00:00
Do not send both asb-send-time and twcc. (#3890)
* Do not send both asb-send-time and twcc. In single peer connection mode, both extensions are set on the media engine and both would be negotiated. Unfortunately, pion/webrtc does not yet support RTPSender.SetParameters() which would allow setting specific header extensions for the sender. So, check for TWCC enabled and use it. If not, do abs-send-time if that is enabled. * check BWE type * comment
This commit is contained in:
@@ -286,7 +286,6 @@ func filterCodecs(
|
||||
|
||||
for _, enabledCodec := range enabledCodecs {
|
||||
if mime.NormalizeMimeType(enabledCodec.Mime) == mime.NormalizeMimeType(c.RTPCodecCapability.MimeType) {
|
||||
// SINGLE-PEER-CONNECTION-TOOD: remove `nack` for RED?
|
||||
if mime.IsMimeTypeStringVideo(c.RTPCodecCapability.MimeType) {
|
||||
c.RTPCodecCapability.RTCPFeedback = rtcpFeedbackConfig.Video
|
||||
} else {
|
||||
|
||||
@@ -424,7 +424,8 @@ func newPeerConnection(params TransportParams, onBandwidthEstimator func(estimat
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
}
|
||||
if !params.IsOfferer {
|
||||
// sfu only use interceptor to send XR but don't read response from it (use buffer instead),
|
||||
// so use a empty callback here
|
||||
ir.Add(lkinterceptor.NewRTTFromXRFactory(func(rtt uint32) {}))
|
||||
|
||||
@@ -31,6 +31,29 @@ const (
|
||||
|
||||
// ------------------------------------------------
|
||||
|
||||
type BWEType int
|
||||
|
||||
const (
|
||||
BWETypeNone BWEType = iota
|
||||
BWETypeRemote
|
||||
BWETypeSendSide
|
||||
)
|
||||
|
||||
func (b BWEType) String() string {
|
||||
switch b {
|
||||
case BWETypeNone:
|
||||
return "NONE"
|
||||
case BWETypeRemote:
|
||||
return "REMOTE"
|
||||
case BWETypeSendSide:
|
||||
return "SEND_SIDE"
|
||||
default:
|
||||
return fmt.Sprintf("%d", int(b))
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------
|
||||
|
||||
type CongestionState int
|
||||
|
||||
const (
|
||||
@@ -55,6 +78,8 @@ func (c CongestionState) String() string {
|
||||
// ------------------------------------------------
|
||||
|
||||
type BWE interface {
|
||||
Type() BWEType
|
||||
|
||||
SetBWEListener(bweListner BWEListener)
|
||||
|
||||
Reset()
|
||||
|
||||
@@ -24,6 +24,8 @@ import (
|
||||
"github.com/livekit/protocol/utils/mono"
|
||||
)
|
||||
|
||||
var _ bwe.BWE = (*RemoteBWE)(nil)
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
type RemoteBWEConfig struct {
|
||||
@@ -81,6 +83,10 @@ func NewRemoteBWE(params RemoteBWEParams) *RemoteBWE {
|
||||
return r
|
||||
}
|
||||
|
||||
func (r *RemoteBWE) Type() bwe.BWEType {
|
||||
return bwe.BWETypeRemote
|
||||
}
|
||||
|
||||
func (r *RemoteBWE) SetBWEListener(bweListener bwe.BWEListener) {
|
||||
r.lock.Lock()
|
||||
defer r.lock.Unlock()
|
||||
|
||||
@@ -23,6 +23,8 @@ import (
|
||||
"github.com/pion/rtcp"
|
||||
)
|
||||
|
||||
var _ bwe.BWE = (*SendSideBWE)(nil)
|
||||
|
||||
//
|
||||
// Based on a simplified/modified version of JitterPath paper
|
||||
// (https://homepage.iis.sinica.edu.tw/papers/lcs/2114-F.pdf)
|
||||
@@ -88,6 +90,10 @@ func NewSendSideBWE(params SendSideBWEParams) *SendSideBWE {
|
||||
}
|
||||
}
|
||||
|
||||
func (r *SendSideBWE) Type() bwe.BWEType {
|
||||
return bwe.BWETypeSendSide
|
||||
}
|
||||
|
||||
func (s *SendSideBWE) SetBWEListener(bweListener bwe.BWEListener) {
|
||||
s.congestionDetector.SetBWEListener(bweListener)
|
||||
}
|
||||
|
||||
@@ -38,6 +38,7 @@ import (
|
||||
"github.com/livekit/protocol/utils/mono"
|
||||
|
||||
"github.com/livekit/livekit-server/pkg/sfu/buffer"
|
||||
"github.com/livekit/livekit-server/pkg/sfu/bwe"
|
||||
"github.com/livekit/livekit-server/pkg/sfu/ccutils"
|
||||
"github.com/livekit/livekit-server/pkg/sfu/connectionquality"
|
||||
"github.com/livekit/livekit-server/pkg/sfu/mime"
|
||||
@@ -192,6 +193,9 @@ type DownTrackStreamAllocatorListener interface {
|
||||
// check if track should participate in BWE
|
||||
IsBWEEnabled(dt *DownTrack) bool
|
||||
|
||||
// get the BWE type in use
|
||||
BWEType() bwe.BWEType
|
||||
|
||||
// check if subscription mute can be applied
|
||||
IsSubscribeMutable(dt *DownTrack) bool
|
||||
}
|
||||
@@ -793,13 +797,15 @@ func (d *DownTrack) SetReceiver(r TrackReceiver) {
|
||||
// Sets RTP header extensions for this track
|
||||
func (d *DownTrack) SetRTPHeaderExtensions(rtpHeaderExtensions []webrtc.RTPHeaderExtensionParameter) {
|
||||
isBWEEnabled := true
|
||||
bweType := bwe.BWETypeNone
|
||||
if sal := d.getStreamAllocatorListener(); sal != nil {
|
||||
isBWEEnabled = sal.IsBWEEnabled(d)
|
||||
bweType = sal.BWEType()
|
||||
}
|
||||
for _, ext := range rtpHeaderExtensions {
|
||||
switch ext.URI {
|
||||
case sdp.ABSSendTimeURI:
|
||||
if isBWEEnabled {
|
||||
if isBWEEnabled && bweType == bwe.BWETypeRemote {
|
||||
d.absSendTimeExtID = ext.ID
|
||||
} else {
|
||||
d.absSendTimeExtID = 0
|
||||
@@ -809,7 +815,7 @@ func (d *DownTrack) SetRTPHeaderExtensions(rtpHeaderExtensions []webrtc.RTPHeade
|
||||
case pd.PlayoutDelayURI:
|
||||
d.playoutDelayExtID = ext.ID
|
||||
case sdp.TransportCCURI:
|
||||
if isBWEEnabled {
|
||||
if isBWEEnabled && bweType == bwe.BWETypeSendSide {
|
||||
d.transportWideExtID = ext.ID
|
||||
} else {
|
||||
d.transportWideExtID = 0
|
||||
|
||||
@@ -557,6 +557,10 @@ func (s *StreamAllocator) IsBWEEnabled(downTrack *sfu.DownTrack) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (s *StreamAllocator) BWEType() bwe.BWEType {
|
||||
return s.params.BWE.Type()
|
||||
}
|
||||
|
||||
// called to check if track subscription mute can be applied
|
||||
func (s *StreamAllocator) IsSubscribeMutable(downTrack *sfu.DownTrack) bool {
|
||||
s.videoTracksMu.Lock()
|
||||
|
||||
Reference in New Issue
Block a user