Store first SR also as it can get reset (#2472)

This commit is contained in:
Raja Subramanian
2024-02-12 12:14:25 +05:30
committed by GitHub
parent 89a312d259
commit 49fd332e91
3 changed files with 27 additions and 11 deletions
+6 -6
View File
@@ -583,15 +583,15 @@ func (r *RTPStatsSender) LastReceiverReportTime() time.Time {
return r.lastRRTime
}
func (r *RTPStatsSender) MaybeAdjustFirstPacketTime(srData *RTCPSenderReportData, ts uint32) {
func (r *RTPStatsSender) MaybeAdjustFirstPacketTime(srFirst *RTCPSenderReportData, srNewest *RTCPSenderReportData, ts uint32) {
r.lock.Lock()
defer r.lock.Unlock()
srDataCopy := *srData
if r.srFeedFirst == nil {
r.srFeedFirst = &srDataCopy
}
r.srFeedNewest = &srDataCopy
srFirstCopy := *srFirst
r.srFeedFirst = &srFirstCopy
srNewestCopy := *srNewest
r.srFeedNewest = &srNewestCopy
r.maybeAdjustFirstPacketTime(ts, uint32(r.extStartTS))
}
+20 -4
View File
@@ -55,7 +55,13 @@ type TrackSender interface {
ID() string
SubscriberID() livekit.ParticipantID
TrackInfoAvailable()
HandleRTCPSenderReportData(payloadType webrtc.PayloadType, isSVC bool, layer int32, srData *buffer.RTCPSenderReportData) error
HandleRTCPSenderReportData(
payloadType webrtc.PayloadType,
isSVC bool,
layer int32,
srFirst *buffer.RTCPSenderReportData,
srNewest *buffer.RTCPSenderReportData,
) error
}
// -------------------------------------------------------------------
@@ -1913,9 +1919,19 @@ func (d *DownTrack) sendSilentFrameOnMuteForOpus() {
}
}
func (d *DownTrack) HandleRTCPSenderReportData(_payloadType webrtc.PayloadType, isSVC bool, layer int32, srData *buffer.RTCPSenderReportData) error {
if (layer == d.forwarder.GetReferenceLayerSpatial() || (layer == 0 && isSVC)) && srData != nil {
d.rtpStats.MaybeAdjustFirstPacketTime(srData, srData.RTPTimestamp+uint32(d.forwarder.GetReferenceTimestampOffset()))
func (d *DownTrack) HandleRTCPSenderReportData(
_payloadType webrtc.PayloadType,
isSVC bool,
layer int32,
srFirst *buffer.RTCPSenderReportData,
srNewest *buffer.RTCPSenderReportData,
) error {
if (layer == d.forwarder.GetReferenceLayerSpatial() || (layer == 0 && isSVC)) && srNewest != nil {
d.rtpStats.MaybeAdjustFirstPacketTime(
srFirst,
srNewest,
srNewest.RTPTimestamp+uint32(d.forwarder.GetReferenceTimestampOffset()),
)
}
return nil
}
+1 -1
View File
@@ -353,7 +353,7 @@ func (w *WebRTCReceiver) AddUpTrack(track *webrtc.TrackRemote, buff *buffer.Buff
w.streamTrackerManager.SetRTCPSenderReportData(layer, srFirst, srNewest)
w.downTrackSpreader.Broadcast(func(dt TrackSender) {
_ = dt.HandleRTCPSenderReportData(w.codec.PayloadType, w.isSVC, layer, srNewest)
_ = dt.HandleRTCPSenderReportData(w.codec.PayloadType, w.isSVC, layer, srFirst, srNewest)
})
})