mirror of
https://github.com/livekit/livekit.git
synced 2026-11-12 20:49:07 +00:00
* rtc: do not advertise a subscribed track the subscriber cannot decode In single peer connection mode a subscriber offers a recvonly section with its own codecs. If the published track uses a codec the subscriber did not offer, DownTrack.Bind finds no match but returns nil, because returning an error aborts the whole transport. pion then keeps the sender, so the answer still carries the track msid and ssrc. The subscriber sees a short-lived TrackSubscribed before the bind failure removes the track again. Park such a sender before building the answer: drop its track so the section answers inactive, then report the codec failure out of band so the subscription manager unsubscribes without reentering negotiation. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * rtc: report codec mismatch via Handler, not the downtrack Route the parked sender's failure through a new Handler method into the participant, instead of reaching from transport into the downtrack. The participant unsubscribes and reports the codec error. Keeps transport free of the sfu package. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * rtc: use CodecsFromMediaDescription for the offered-codec check Reuse the protocol sdp helper instead of hand-parsing rtpmap lines. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * rtc: reword codec-suppression comments Describe it as a subscription, drop the stale prototype label. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * rtc: check every bindable codec before suppressing a sender The check before the answer looked only at the primary codec. A subscriber that offers a later upstream codec, for example Opus for a RED-first track, lost a track that Bind can bind. DownTrack.BindableCodecs returns the codecs Bind can pick, and both Bind and the check use it. It also fixes the encrypted RED/Opus rule in Bind: the old condition was never true, so an encrypted RED track could bind as Opus. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * rtc: keep published encrypted codecs bindable, record codec rejections The encrypted RED/Opus rule cut every RED/Opus pair to the primary codec. That also dropped a second codec the publisher sends on its own stream. WrappedReceiver now decides which codecs bind: for an encrypted source, only its published codecs, never the RED or Opus alternative it adds. A sender parked before the answer now ends its subscription through the same path as a bind error, so it records OnTrackSubscribeFailed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>