From d500806eedfe6551b10449fda11b4225f374d240 Mon Sep 17 00:00:00 2001 From: Raja Subramanian Date: Sat, 16 Aug 2025 00:18:38 +0530 Subject: [PATCH] Handle no codecs in track info. (#3859) * Handle no codecs in track info. Not sure how it happens, but seeing a panic caused by no codecs in track info. Avoiding that and logging information when it happens. * log request --- pkg/rtc/participant.go | 6 ++++++ pkg/rtc/participant_sdp.go | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/pkg/rtc/participant.go b/pkg/rtc/participant.go index ec91ad118..9d88b7621 100644 --- a/pkg/rtc/participant.go +++ b/pkg/rtc/participant.go @@ -2741,6 +2741,12 @@ func (p *ParticipantImpl) addPendingTrackLocked(req *livekit.AddTrackRequest) *l seenCodecs := make(map[string]struct{}) for _, codec := range req.SimulcastCodecs { if codec.Codec == "" { + p.pubLogger.Warnw( + "simulcast codec without mime type", nil, + "trackID", ti.Sid, + "track", logger.Proto(ti), + "addTrackRequest", logger.Proto(req), + ) continue } diff --git a/pkg/rtc/participant_sdp.go b/pkg/rtc/participant_sdp.go index cc95667df..cc49143b1 100644 --- a/pkg/rtc/participant_sdp.go +++ b/pkg/rtc/participant_sdp.go @@ -95,6 +95,17 @@ func (p *ParticipantImpl) populateSdpCid(parsedOffer *sdp.SessionDescription) ([ continue } + if len(info.Codecs) == 0 { + p.pubLogger.Warnw( + "track without codecs", nil, + "trackID", info.Sid, + "pendingTrack", p.pendingTracks[signalCid], + "media", unmatch, + "parsedOffer", parsedOffer, + ) + continue + } + found := false updated := false for _, sdpCodec := range sdpCodecs { @@ -125,6 +136,12 @@ func (p *ParticipantImpl) populateSdpCid(parsedOffer *sdp.SessionDescription) ([ if updated { p.pendingTracks[signalCid].trackInfos[0] = utils.CloneProto(info) + p.pubLogger.Debugw( + "pending track SDP cid updated", + "signalCid", signalCid, + "trackID", info.Sid, + "pendingTrack", p.pendingTracks[signalCid], + ) } p.pendingTracksLock.Unlock() }