Skip to content

Commit 5244e8b

Browse files
committed
Add report reception timestamps
1 parent a71cb0a commit 5244e8b

File tree

5 files changed

+18
-14
lines changed

5 files changed

+18
-14
lines changed

Diff for: pkg/ccfb/ccfb_receiver.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ type acknowledgementList struct {
1919
acks []acknowledgement
2020
}
2121

22-
func convertCCFB(ts time.Time, feedback *rtcp.CCFeedbackReport) map[uint32]acknowledgementList {
22+
func convertCCFB(ts time.Time, feedback *rtcp.CCFeedbackReport) (time.Time, map[uint32]acknowledgementList) {
2323
if feedback == nil {
24-
return nil
24+
return time.Time{}, nil
2525
}
2626
result := map[uint32]acknowledgementList{}
2727
referenceTime := ntp.ToTime32(feedback.ReportTimestamp, ts)
2828
for _, rb := range feedback.ReportBlocks {
2929
result[rb.MediaSSRC] = convertMetricBlock(ts, referenceTime, rb.BeginSequence, rb.MetricBlocks)
3030
}
31-
return result
31+
return referenceTime, result
3232
}
3333

3434
func convertMetricBlock(ts time.Time, reference time.Time, seqNrOffset uint16, blocks []rtcp.CCFeedbackMetricBlock) acknowledgementList {

Diff for: pkg/ccfb/history.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import (
1111
)
1212

1313
type PacketReportList struct {
14-
Timestamp time.Time
14+
Arrival time.Time
15+
Departure time.Time
1516
Reports []PacketReport
1617
}
1718

@@ -109,7 +110,7 @@ func (h *history) getReportForAck(al acknowledgementList) PacketReportList {
109110
}
110111

111112
return PacketReportList{
112-
Timestamp: al.ts,
113-
Reports: reports,
113+
Arrival: al.ts,
114+
Reports: reports,
114115
}
115116
}

Diff for: pkg/ccfb/history_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func TestHistory(t *testing.T) {
7272
},
7373
},
7474
expectedReport: PacketReportList{
75-
Timestamp: time.Time{}.Add(time.Second),
75+
Arrival: time.Time{}.Add(time.Second),
7676
Reports: []PacketReport{
7777
{1, 1200, time.Time{}.Add(2 * time.Millisecond), true, time.Time{}.Add(3 * time.Millisecond), 0},
7878
{2, 1200, time.Time{}.Add(3 * time.Millisecond), false, time.Time{}, 0},

Diff for: pkg/ccfb/interceptor.go

+6-4
Original file line numberDiff line numberDiff line change
@@ -93,12 +93,12 @@ func (i *Interceptor) BindLocalStream(info *interceptor.StreamInfo, writer inter
9393
// BindRTCPReader implements interceptor.Interceptor.
9494
func (i *Interceptor) BindRTCPReader(reader interceptor.RTCPReader) interceptor.RTCPReader {
9595
return interceptor.RTCPReaderFunc(func(b []byte, a interceptor.Attributes) (int, interceptor.Attributes, error) {
96-
now := i.timestamp()
97-
9896
n, attr, err := reader.Read(b, a)
9997
if err != nil {
10098
return n, attr, err
10199
}
100+
now := i.timestamp()
101+
102102
buf := make([]byte, n)
103103
copy(buf, b[:n])
104104

@@ -111,14 +111,16 @@ func (i *Interceptor) BindRTCPReader(reader interceptor.RTCPReader) interceptor.
111111
pkts, err := attr.GetRTCPPackets(buf)
112112
for _, pkt := range pkts {
113113
var reportLists map[uint32]acknowledgementList
114+
var reportDeparture time.Time
114115
switch fb := pkt.(type) {
115116
case *rtcp.CCFeedbackReport:
116-
reportLists = convertCCFB(now, fb)
117+
reportDeparture, reportLists = convertCCFB(now, fb)
117118
case *rtcp.TransportLayerCC:
118-
reportLists = convertTWCC(now, fb)
119+
reportDeparture, reportLists = convertTWCC(now, fb)
119120
}
120121
for ssrc, reportList := range reportLists {
121122
prl := i.ssrcToHistory[ssrc].getReportForAck(reportList)
123+
prl.Departure = reportDeparture
122124
if l, ok := pktReportLists[ssrc]; !ok {
123125
pktReportLists[ssrc] = &prl
124126
} else {

Diff for: pkg/ccfb/twcc_receiver.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import (
77
"github.com/pion/rtcp"
88
)
99

10-
func convertTWCC(ts time.Time, feedback *rtcp.TransportLayerCC) map[uint32]acknowledgementList {
10+
func convertTWCC(ts time.Time, feedback *rtcp.TransportLayerCC) (time.Time, map[uint32]acknowledgementList) {
1111
log.Printf("got twcc report: %v", feedback)
1212
if feedback == nil {
13-
return nil
13+
return time.Time{}, nil
1414
}
1515
var acks []acknowledgement
1616

1717
nextTimestamp := time.Time{}.Add(time.Duration(feedback.ReferenceTime) * 64 * time.Millisecond)
18+
reportDeparture := nextTimestamp
1819
recvDeltaIndex := 0
1920

2021
offset := 0
@@ -85,7 +86,7 @@ func convertTWCC(ts time.Time, feedback *rtcp.TransportLayerCC) map[uint32]ackno
8586
}
8687
}
8788

88-
return map[uint32]acknowledgementList{
89+
return reportDeparture, map[uint32]acknowledgementList{
8990
0: {
9091
ts: ts,
9192
acks: acks,

0 commit comments

Comments
 (0)