-
Notifications
You must be signed in to change notification settings - Fork 87
Open
Description
Your environment.
- Version: master
- Browser: N/A
What did you do?
When TransportLayerCC packets are parsed in feedback_adapter.go the refTime and deltaIndex are only updated for packets found in history. If only some packets in the report are missing from history this leads to subsequent packets getting the wrong arrival time. See test below.
What did you expect?
The arrival time for packets still in history should be correct even if some earlier packets in the report expired.
func TestRecvDeltaOutOfSync(t *testing.T) {
adapter := NewFeedbackAdapter()
t0 := time.Time{}
headers := []rtp.Header{}
// passes when packet count is <= 250
for i := uint16(0); i < 251; i++ {
pkt := getPacketWithTransportCCExt(t, i)
headers = append(headers, pkt.Header)
assert.NoError(t, adapter.OnSent(t0, &pkt.Header, 1200, interceptor.Attributes{TwccExtensionAttributesKey: hdrExtID}))
}
results, err := adapter.OnTransportCCFeedback(t0, &rtcp.TransportLayerCC{
Header: rtcp.Header{},
SenderSSRC: 0,
MediaSSRC: 0,
BaseSequenceNumber: 0,
PacketStatusCount: 22,
ReferenceTime: 0,
FbPktCount: 0,
PacketChunks: []rtcp.PacketStatusChunk{
&rtcp.StatusVectorChunk{
PacketStatusChunk: nil,
Type: rtcp.TypeTCCStatusVectorChunk,
SymbolSize: rtcp.TypeTCCSymbolSizeTwoBit,
SymbolList: []uint16{
rtcp.TypeTCCPacketReceivedSmallDelta,
rtcp.TypeTCCPacketReceivedSmallDelta,
},
},
},
RecvDeltas: []*rtcp.RecvDelta{
{
Type: rtcp.TypeTCCPacketReceivedSmallDelta,
Delta: 3,
},
{
Type: rtcp.TypeTCCPacketReceivedSmallDelta,
Delta: 6,
},
},
})
assert.NoError(t, err)
assert.NotEmpty(t, results)
assert.Len(t, results, 2)
assert.Contains(t, results, Acknowledgment{
SequenceNumber: 1,
Size: headers[1].MarshalSize() + 1200,
Departure: t0,
Arrival: t0.Add(9 * time.Microsecond),
})
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels