mirror of
https://github.com/livekit/livekit.git
synced 2026-07-28 20:49:26 +00:00
Log SDP rids to understand the mapping better. (#3770)
* Log SDP rids to understand the mapping better. * return early when layer is invalid
This commit is contained in:
+18
-16
@@ -212,13 +212,14 @@ func (t *MediaTrack) UpdateCodecCid(codecs []*livekit.SimulcastCodec) {
|
||||
}
|
||||
|
||||
// AddReceiver adds a new RTP receiver to the track, returns true when receiver represents a new codec
|
||||
func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRemote, mid string) bool {
|
||||
// and if a receiver was added successfully
|
||||
func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRemote, mid string) (bool, bool) {
|
||||
var newCodec bool
|
||||
ssrc := uint32(track.SSRC())
|
||||
buff, rtcpReader := t.params.BufferFactory.GetBufferPair(ssrc)
|
||||
if buff == nil || rtcpReader == nil {
|
||||
t.params.Logger.Errorw("could not retrieve buffer pair", nil)
|
||||
return newCodec
|
||||
return newCodec, false
|
||||
}
|
||||
|
||||
var lastRR uint32
|
||||
@@ -264,6 +265,18 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRe
|
||||
var regressCodec bool
|
||||
mimeType := mime.NormalizeMimeType(track.Codec().MimeType)
|
||||
layer := buffer.GetSpatialLayerForRid(track.RID(), ti)
|
||||
if layer < 0 {
|
||||
t.params.Logger.Warnw(
|
||||
"AddReceiver failed due to negative layer", nil,
|
||||
"rid", track.RID(),
|
||||
"layer", layer,
|
||||
"ssrc", track.SSRC(),
|
||||
"codec", track.Codec(),
|
||||
"trackInfo", logger.Proto(ti),
|
||||
)
|
||||
return newCodec, false
|
||||
}
|
||||
|
||||
t.params.Logger.Debugw(
|
||||
"AddReceiver",
|
||||
"rid", track.RID(),
|
||||
@@ -272,17 +285,6 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRe
|
||||
"codec", track.Codec(),
|
||||
"trackInfo", logger.Proto(ti),
|
||||
)
|
||||
// TODO-REMOVE-AFTER-DEBUG
|
||||
if layer < 0 {
|
||||
t.params.Logger.Infow(
|
||||
"negative layer AddReceiver",
|
||||
"rid", track.RID(),
|
||||
"layer", layer,
|
||||
"ssrc", track.SSRC(),
|
||||
"codec", track.Codec(),
|
||||
"trackInfo", logger.Proto(ti),
|
||||
)
|
||||
}
|
||||
wr := t.MediaTrackReceiver.Receiver(mimeType)
|
||||
if wr == nil {
|
||||
priority := -1
|
||||
@@ -307,7 +309,7 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRe
|
||||
if priority < 0 {
|
||||
t.params.Logger.Warnw("could not find codec for webrtc receiver", nil, "webrtcCodec", mimeType, "track", logger.Proto(ti))
|
||||
t.lock.Unlock()
|
||||
return false
|
||||
return newCodec, false
|
||||
}
|
||||
|
||||
newWR := sfu.NewWebRTCReceiver(
|
||||
@@ -428,7 +430,7 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRe
|
||||
"newCodec", newCodec,
|
||||
)
|
||||
buff.Close()
|
||||
return false
|
||||
return newCodec, false
|
||||
}
|
||||
|
||||
// LK-TODO: can remove this completely when VideoLayers protocol becomes the default as it has info from client or if we decide to use TrackInfo.Simulcast
|
||||
@@ -476,7 +478,7 @@ func (t *MediaTrack) AddReceiver(receiver *webrtc.RTPReceiver, track sfu.TrackRe
|
||||
stats,
|
||||
)
|
||||
})
|
||||
return newCodec
|
||||
return newCodec, true
|
||||
}
|
||||
|
||||
func (t *MediaTrack) GetConnectionScoreAndQuality() (float32, livekit.ConnectionQuality) {
|
||||
|
||||
+21
-9
@@ -2061,15 +2061,17 @@ func (p *ParticipantImpl) onMediaTrack(rtcTrack *webrtc.TrackRemote, rtpReceiver
|
||||
)
|
||||
|
||||
var track sfu.TrackRemote = sfu.NewTrackRemoteFromSdp(rtcTrack, codec)
|
||||
publishedTrack, isNewTrack := p.mediaTrackReceived(track, rtpReceiver)
|
||||
publishedTrack, isNewTrack, isReceiverAdded, sdpRids := p.mediaTrackReceived(track, rtpReceiver)
|
||||
if publishedTrack == nil {
|
||||
p.pubLogger.Debugw(
|
||||
"webrtc Track published but can't find MediaTrack, add to pendingTracks",
|
||||
"webrtc Track published but can't find MediaTrack in pendingTracks",
|
||||
"kind", track.Kind().String(),
|
||||
"webrtcTrackID", track.ID(),
|
||||
"rid", track.RID(),
|
||||
"SSRC", track.SSRC(),
|
||||
"mime", mime.NormalizeMimeType(codec.MimeType),
|
||||
"isReceiverAdded", isReceiverAdded,
|
||||
"sdpRids", logger.StringSlice(sdpRids[:]),
|
||||
)
|
||||
return
|
||||
}
|
||||
@@ -2085,7 +2087,8 @@ func (p *ParticipantImpl) onMediaTrack(rtcTrack *webrtc.TrackRemote, rtpReceiver
|
||||
p.setIsPublisher(true)
|
||||
p.dirty.Store(true)
|
||||
|
||||
p.pubLogger.Infow("mediaTrack published",
|
||||
p.pubLogger.Infow(
|
||||
"mediaTrack published",
|
||||
"kind", track.Kind().String(),
|
||||
"trackID", publishedTrack.ID(),
|
||||
"webrtcTrackID", track.ID(),
|
||||
@@ -2094,6 +2097,8 @@ func (p *ParticipantImpl) onMediaTrack(rtcTrack *webrtc.TrackRemote, rtpReceiver
|
||||
"mime", mime.NormalizeMimeType(codec.MimeType),
|
||||
"trackInfo", logger.Proto(publishedTrack.ToProto()),
|
||||
"fromSdp", fromSdp,
|
||||
"isReceiverAdded", isReceiverAdded,
|
||||
"sdpRids", logger.StringSlice(sdpRids[:]),
|
||||
)
|
||||
|
||||
if !isNewTrack && !publishedTrack.HasPendingCodec() && p.IsReady() {
|
||||
@@ -2757,7 +2762,12 @@ func (p *ParticipantImpl) setTrackMuted(trackID livekit.TrackID, muted bool) *li
|
||||
return trackInfo
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver *webrtc.RTPReceiver) (*MediaTrack, bool) {
|
||||
func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver *webrtc.RTPReceiver) (
|
||||
*MediaTrack,
|
||||
bool,
|
||||
bool,
|
||||
buffer.VideoLayersRid,
|
||||
) {
|
||||
p.pendingTracksLock.Lock()
|
||||
newTrack := false
|
||||
|
||||
@@ -2778,22 +2788,24 @@ func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver
|
||||
)
|
||||
p.pendingTracksLock.Unlock()
|
||||
p.pubLogger.Warnw("could not get mid for track", nil, "trackID", track.ID())
|
||||
return nil, false
|
||||
return nil, false, false, buffer.VideoLayersRid{}
|
||||
}
|
||||
|
||||
// use existing media track to handle simulcast
|
||||
var pubTime time.Duration
|
||||
var isMigrated bool
|
||||
var ridsFromSdp buffer.VideoLayersRid
|
||||
mt, ok := p.getPublishedTrackBySdpCid(track.ID()).(*MediaTrack)
|
||||
if !ok {
|
||||
signalCid, ti, sdpRids, migrated, createdAt := p.getPendingTrack(track.ID(), ToProtoTrackKind(track.Kind()), true)
|
||||
ridsFromSdp = sdpRids
|
||||
if ti == nil {
|
||||
p.pendingRemoteTracks = append(
|
||||
p.pendingRemoteTracks,
|
||||
&pendingRemoteTrack{track: track.RTCTrack(), receiver: rtpReceiver},
|
||||
)
|
||||
p.pendingTracksLock.Unlock()
|
||||
return nil, false
|
||||
return nil, false, false, ridsFromSdp
|
||||
}
|
||||
isMigrated = migrated
|
||||
|
||||
@@ -2813,7 +2825,7 @@ func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver
|
||||
p.pubLogger.Warnw("migrated track codec mismatched", nil, "track", logger.Proto(ti), "webrtcCodec", parameters)
|
||||
p.pendingTracksLock.Unlock()
|
||||
p.IssueFullReconnect(types.ParticipantCloseReasonMigrateCodecMismatch)
|
||||
return nil, false
|
||||
return nil, false, false, ridsFromSdp
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2858,7 +2870,7 @@ func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver
|
||||
|
||||
p.pendingTracksLock.Unlock()
|
||||
|
||||
mt.AddReceiver(rtpReceiver, track, mid)
|
||||
_, isReceiverAdded := mt.AddReceiver(rtpReceiver, track, mid)
|
||||
|
||||
if newTrack {
|
||||
go func() {
|
||||
@@ -2888,7 +2900,7 @@ func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver
|
||||
}()
|
||||
}
|
||||
|
||||
return mt, newTrack
|
||||
return mt, newTrack, isReceiverAdded, ridsFromSdp
|
||||
}
|
||||
|
||||
func (p *ParticipantImpl) addMigratedTrack(cid string, ti *livekit.TrackInfo) *MediaTrack {
|
||||
|
||||
Reference in New Issue
Block a user