AddDownTrack to regressed codec after restarting forwarder. (#4037)

Without that the new codec was skipping through with old selector and
not working correctly.
This commit is contained in:
Raja Subramanian
2025-10-27 20:14:33 +05:30
committed by GitHub
parent c87eb8ed11
commit 061eb8b4e8
2 changed files with 9 additions and 10 deletions
+8 -3
View File
@@ -710,7 +710,8 @@ func (d *DownTrack) handleUpstreamCodecChange(mimeType string) {
)
receiver := d.Receiver()
d.forwarder.Restart(codec.RTPCodecCapability, receiver.HeaderExtensions(), receiver.VideoLayerMode())
d.forwarder.Restart()
d.forwarder.DetermineCodec(codec.RTPCodecCapability, receiver.HeaderExtensions(), receiver.VideoLayerMode())
d.connectionStats.UpdateCodec(d.Mime(), isFECEnabled)
}
@@ -794,13 +795,17 @@ func (d *DownTrack) SetReceiver(r TrackReceiver) {
d.receiverLock.Unlock()
old.DeleteDownTrack(d.SubscriberID())
d.bindLock.Unlock()
r.AddOnReady(d.handleReceiverReady)
d.handleUpstreamCodecChange(r.Codec().MimeType)
d.bindLock.Lock()
if err := r.AddDownTrack(d); err != nil {
d.params.Logger.Warnw("failed to add downtrack to receiver", err)
}
d.bindLock.Unlock()
r.AddOnReady(d.handleReceiverReady)
d.handleUpstreamCodecChange(r.Codec().MimeType)
if sal := d.getStreamAllocatorListener(); sal != nil {
sal.OnSubscribedLayerChanged(d, d.forwarder.MaxLayer())
}
+1 -7
View File
@@ -310,10 +310,6 @@ func (f *Forwarder) DetermineCodec(codec webrtc.RTPCodecCapability, extensions [
f.lock.Lock()
defer f.lock.Unlock()
f.determineCodecLocked(codec, extensions, videoLayerMode)
}
func (f *Forwarder) determineCodecLocked(codec webrtc.RTPCodecCapability, extensions []webrtc.RTPHeaderExtensionParameter, videoLayerMode livekit.VideoLayer_Mode) {
if videoLayerMode == livekit.VideoLayer_ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR {
f.skipReferenceTS = true
}
@@ -1634,7 +1630,7 @@ func (f *Forwarder) CheckSync() (bool, int32) {
return f.vls.CheckSync()
}
func (f *Forwarder) Restart(codec webrtc.RTPCodecCapability, extensions []webrtc.RTPHeaderExtensionParameter, videoLayerMode livekit.VideoLayer_Mode) {
func (f *Forwarder) Restart() {
f.lock.Lock()
defer f.lock.Unlock()
@@ -1648,8 +1644,6 @@ func (f *Forwarder) Restart(codec webrtc.RTPCodecCapability, extensions []webrtc
}
f.lastSwitchExtIncomingTS = 0
f.refVideoLayerMode = livekit.VideoLayer_MODE_UNUSED
f.determineCodecLocked(codec, extensions, videoLayerMode)
}
func (f *Forwarder) FilterRTX(nacks []uint16) (filtered []uint16, disallowedLayers [buffer.DefaultMaxLayerSpatial + 1]bool) {