From c6a35d3ff137141b9949f1835dfbb8070367d737 Mon Sep 17 00:00:00 2001 From: cnderrauber Date: Thu, 17 Mar 2022 18:50:07 +0800 Subject: [PATCH] fix keyFrameRequestGeneration not exit after close (#527) * fix keyFrameRequestGeneration not exit after close * change to bound check * Refactor stop key frame requester into a function * Remove redundant key frame requester stop Co-authored-by: boks1971 --- pkg/sfu/downtrack.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/pkg/sfu/downtrack.go b/pkg/sfu/downtrack.go index 488f6d465..d4a005039 100644 --- a/pkg/sfu/downtrack.go +++ b/pkg/sfu/downtrack.go @@ -236,6 +236,7 @@ func (d *DownTrack) Bind(t webrtc.TrackLocalContext) (webrtc.RTPCodecParameters, d.bound.Store(true) d.connectionStats.Start() + d.logger.Debugw("binded") return codec, nil } @@ -297,14 +298,18 @@ func (d *DownTrack) maybeStartKeyFrameRequester() { // or paused due to bandwidth constraints. A new key frame requester is // started if a layer lock is required. // - gen := d.keyFrameRequestGeneration.Inc() + d.stopKeyFrameRequester() locked, layer := d.forwarder.CheckSync() if !locked { - go d.keyFrameRequester(gen, layer) + go d.keyFrameRequester(d.keyFrameRequestGeneration.Load(), layer) } } +func (d *DownTrack) stopKeyFrameRequester() { + d.keyFrameRequestGeneration.Inc() +} + func (d *DownTrack) keyFrameRequester(generation uint32, layer int32) { interval := 2 * d.rtpStats.GetRtt() if interval < keyFrameIntervalMin { @@ -320,7 +325,8 @@ func (d *DownTrack) keyFrameRequester(generation uint32, layer int32) { d.rtpStats.UpdateLayerLockPliAndTime(1) <-ticker.C - if generation != d.keyFrameRequestGeneration.Load() { + + if generation != d.keyFrameRequestGeneration.Load() || !d.bound.Load() { return } } @@ -396,8 +402,7 @@ func (d *DownTrack) WriteRTP(extPkt *buffer.ExtPacket, layer int32) error { locked, _ := d.forwarder.CheckSync() if locked { - // move generator to stop key frame requester - d.keyFrameRequestGeneration.Inc() + d.stopKeyFrameRequester() } } @@ -577,7 +582,7 @@ func (d *DownTrack) CloseWithFlush(flush bool) { } d.callbacksQueue.Stop() - d.keyFrameRequestGeneration.Inc() + d.stopKeyFrameRequester() }) }