Skip to content

Commit 13a7804

Browse files
authored
Consumer: Fix sequence number gap (#1494)
1 parent 8327893 commit 13a7804

File tree

8 files changed

+330
-9
lines changed

8 files changed

+330
-9
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### NEXT
44

5+
- `Consumer`: Fix sequence number gap ([PR #1494](https://github.com/versatica/mediasoup/pull/1494)).
6+
57
### 3.15.4
68

79
- `Worker`: Drop VP8 packets with a higher temporal layer than the current one ([PR #1009](https://github.com/versatica/mediasoup/pull/1009)).

worker/include/Channel/ChannelSocket.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,9 @@ namespace Channel
8282
};
8383

8484
public:
85+
#ifdef MS_TEST
86+
explicit ChannelSocket();
87+
#endif
8588
explicit ChannelSocket(int consumerFd, int producerFd);
8689
explicit ChannelSocket(
8790
ChannelReadFn channelReadFn,

worker/meson.build

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ test_sources = [
333333
'test/src/RTC/TestRtpStreamSend.cpp',
334334
'test/src/RTC/TestRtpStreamRecv.cpp',
335335
'test/src/RTC/TestSeqManager.cpp',
336+
'test/src/RTC/TestSimpleConsumer.cpp',
336337
'test/src/RTC/TestTrendCalculator.cpp',
337338
'test/src/RTC/TestRtpEncodingParameters.cpp',
338339
'test/src/RTC/TestTransportCongestionControlServer.cpp',

worker/src/Channel/ChannelSocket.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ namespace Channel
3030

3131
/* Instance methods. */
3232

33+
#ifdef MS_TEST
34+
ChannelSocket::ChannelSocket()
35+
{
36+
MS_TRACE_STD();
37+
}
38+
#endif
39+
3340
ChannelSocket::ChannelSocket(int consumerFd, int producerFd)
3441
: consumerSocket(new ConsumerSocket(consumerFd, MessageMaxLen, this)),
3542
producerSocket(new ProducerSocket(producerFd, MessageMaxLen))
@@ -256,7 +263,7 @@ namespace Channel
256263
{
257264
this->channelWriteFn(payload, payloadLen, this->channelWriteCtx);
258265
}
259-
else
266+
else if (this->producerSocket)
260267
{
261268
this->producerSocket->Write(payload, payloadLen);
262269
}

worker/src/RTC/SimpleConsumer.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@ namespace RTC
320320
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::CONSUMER_INACTIVE);
321321
#endif
322322

323+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
324+
323325
return;
324326
}
325327

@@ -335,6 +337,8 @@ namespace RTC
335337
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::UNSUPPORTED_PAYLOAD_TYPE);
336338
#endif
337339

340+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
341+
338342
return;
339343
}
340344

@@ -355,6 +359,8 @@ namespace RTC
355359
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::DROPPED_BY_CODEC);
356360
#endif
357361

362+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
363+
358364
return;
359365
}
360366

@@ -366,18 +372,20 @@ namespace RTC
366372
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::NOT_A_KEYFRAME);
367373
#endif
368374

375+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
376+
369377
return;
370378
}
371379

372380
// Packets with only padding are not forwarded.
373381
if (packet->GetPayloadLength() == 0)
374382
{
375-
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
376-
377383
#ifdef MS_RTC_LOGGER_RTP
378384
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::EMPTY_PAYLOAD);
379385
#endif
380386

387+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
388+
381389
return;
382390
}
383391

worker/src/RTC/SimulcastConsumer.cpp

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -736,6 +736,8 @@ namespace RTC
736736
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::CONSUMER_INACTIVE);
737737
#endif
738738

739+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
740+
739741
return;
740742
}
741743

@@ -745,6 +747,8 @@ namespace RTC
745747
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::INVALID_TARGET_LAYER);
746748
#endif
747749

750+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
751+
748752
return;
749753
}
750754

@@ -777,6 +781,8 @@ namespace RTC
777781
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::NOT_A_KEYFRAME);
778782
#endif
779783

784+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
785+
780786
return;
781787
}
782788

@@ -804,19 +810,20 @@ namespace RTC
804810
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::NOT_A_KEYFRAME);
805811
#endif
806812

813+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
807814
return;
808815
}
809816

810817
// If the packet belongs to current spatial layer being sent and packet does
811818
// not have payload other than padding, then drop it.
812819
if (spatialLayer == this->currentSpatialLayer && packet->GetPayloadLength() == 0)
813820
{
814-
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
815-
816821
#ifdef MS_RTC_LOGGER_RTP
817822
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::EMPTY_PAYLOAD);
818823
#endif
819824

825+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
826+
820827
return;
821828
}
822829

@@ -935,6 +942,8 @@ namespace RTC
935942
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::TOO_HIGH_TIMESTAMP_EXTRA_NEEDED);
936943
#endif
937944

945+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
946+
938947
return;
939948
}
940949

@@ -980,6 +989,8 @@ namespace RTC
980989
RtcLogger::RtpPacket::DropReason::PACKET_PREVIOUS_TO_SPATIAL_LAYER_SWITCH);
981990
#endif
982991

992+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
993+
983994
return;
984995
}
985996
else if (SeqManager<uint16_t>::IsSeqHigherThan(
@@ -1022,12 +1033,12 @@ namespace RTC
10221033
// Rewrite payload if needed. Drop packet if necessary.
10231034
if (!packet->ProcessPayload(this->encodingContext.get(), marker))
10241035
{
1025-
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
1026-
10271036
#ifdef MS_RTC_LOGGER_RTP
10281037
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::DROPPED_BY_CODEC);
10291038
#endif
10301039

1040+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
1041+
10311042
return;
10321043
}
10331044

worker/src/RTC/SvcConsumer.cpp

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,8 @@ namespace RTC
645645
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::CONSUMER_INACTIVE);
646646
#endif
647647

648+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
649+
648650
return;
649651
}
650652

@@ -659,6 +661,8 @@ namespace RTC
659661
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::INVALID_TARGET_LAYER);
660662
#endif
661663

664+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
665+
662666
return;
663667
}
664668

@@ -674,6 +678,8 @@ namespace RTC
674678
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::UNSUPPORTED_PAYLOAD_TYPE);
675679
#endif
676680

681+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
682+
677683
return;
678684
}
679685

@@ -684,18 +690,20 @@ namespace RTC
684690
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::NOT_A_KEYFRAME);
685691
#endif
686692

693+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
694+
687695
return;
688696
}
689697

690698
// Packets with only padding are not forwarded.
691699
if (packet->GetPayloadLength() == 0)
692700
{
693-
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
694-
695701
#ifdef MS_RTC_LOGGER_RTP
696702
packet->logger.Dropped(RtcLogger::RtpPacket::DropReason::EMPTY_PAYLOAD);
697703
#endif
698704

705+
this->rtpSeqManager->Drop(packet->GetSequenceNumber());
706+
699707
return;
700708
}
701709

0 commit comments

Comments
 (0)