Do not seed if stream is already writable. (#3347)

* Do not seed if stream is already writable.

It is possible that in migration case, when the forwarder state is
fetched from migrating out node and used to seed downtrack, it has
already started due to the time it takes to get the state. Seeding in
that state will reset things and cause large sequence number gaps
potentially.

* do not take lock
This commit is contained in:
Raja Subramanian
2025-01-20 11:08:59 +05:30
committed by GitHub
parent 5de7445d17
commit fe94a18bc2
+10 -2
View File
@@ -370,13 +370,17 @@ func NewDownTrack(params DowntrackParams) (*DownTrack, error) {
d.rtpStats = rtpstats.NewRTPStatsSender(rtpstats.RTPStatsParams{
ClockRate: d.codec.ClockRate,
Logger: d.params.Logger,
Logger: d.params.Logger.WithValues(
"stream", "primary",
),
}, 4096)
d.deltaStatsSenderSnapshotId = d.rtpStats.NewSenderSnapshotId()
d.rtpStatsRTX = rtpstats.NewRTPStatsSender(rtpstats.RTPStatsParams{
ClockRate: d.codec.ClockRate,
Logger: d.params.Logger,
Logger: d.params.Logger.WithValues(
"stream", "rtx",
),
}, 1024)
d.deltaStatsRTXSenderSnapshotId = d.rtpStatsRTX.NewSenderSnapshotId()
@@ -1277,6 +1281,10 @@ func (d *DownTrack) GetState() DownTrackState {
}
func (d *DownTrack) SeedState(state DownTrackState) {
if d.writable.Load() {
return
}
if state.RTPStats != nil || state.ForwarderState != nil {
d.params.Logger.Debugw("seeding down track state", "state", state)
}