mirror of
https://github.com/livekit/livekit.git
synced 2026-05-24 08:05:33 +00:00
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 <raja.gobi@tutanota.com>
This commit is contained in:
+11
-6
@@ -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()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user