|
|
|
|
@ -10,24 +10,35 @@
|
|
|
|
|
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_receiver.h"
|
|
|
|
|
|
|
|
|
|
#include <cstddef>
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
#include <memory>
|
|
|
|
|
#include <optional>
|
|
|
|
|
#include <set>
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <utility>
|
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
#include "absl/strings/string_view.h"
|
|
|
|
|
#include "api/array_view.h"
|
|
|
|
|
#include "api/environment/environment_factory.h"
|
|
|
|
|
#include "api/units/data_rate.h"
|
|
|
|
|
#include "api/units/time_delta.h"
|
|
|
|
|
#include "api/units/timestamp.h"
|
|
|
|
|
#include "api/video/video_bitrate_allocation.h"
|
|
|
|
|
#include "api/video/video_bitrate_allocator.h"
|
|
|
|
|
#include "api/video/video_codec_constants.h"
|
|
|
|
|
#include "modules/rtp_rtcp/include/report_block_data.h"
|
|
|
|
|
#include "modules/rtp_rtcp/include/rtcp_statistics.h"
|
|
|
|
|
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
|
|
|
|
#include "modules/rtp_rtcp/mocks/mock_network_link_rtcp_observer.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/byte_io.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/ntp_time_util.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/app.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/bye.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/compound_packet.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/congestion_control_feedback.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/dlrr.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/extended_reports.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/fir.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/nack.h"
|
|
|
|
|
@ -35,17 +46,21 @@
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/rapid_resync_request.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/receiver_report.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/remb.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/rtpfb.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/sdes.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/sender_report.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/tmmbr.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/transport_feedback.h"
|
|
|
|
|
#include "modules/rtp_rtcp/source/rtp_rtcp_interface.h"
|
|
|
|
|
#include "rtc_base/arraysize.h"
|
|
|
|
|
#include "rtc_base/fake_clock.h"
|
|
|
|
|
#include "rtc_base/buffer.h"
|
|
|
|
|
#include "rtc_base/random.h"
|
|
|
|
|
#include "rtc_base/time_utils.h"
|
|
|
|
|
#include "system_wrappers/include/clock.h"
|
|
|
|
|
#include "system_wrappers/include/ntp_time.h"
|
|
|
|
|
#include "test/explicit_key_value_config.h"
|
|
|
|
|
#include "test/gmock.h"
|
|
|
|
|
#include "test/gtest.h"
|
|
|
|
|
#include "test/scoped_key_value_config.h"
|
|
|
|
|
|
|
|
|
|
namespace webrtc {
|
|
|
|
|
namespace {
|
|
|
|
|
@ -66,7 +81,7 @@ using ::testing::SizeIs;
|
|
|
|
|
using ::testing::StrEq;
|
|
|
|
|
using ::testing::StrictMock;
|
|
|
|
|
using ::testing::UnorderedElementsAre;
|
|
|
|
|
using ::webrtc::test::ScopedKeyValueConfig;
|
|
|
|
|
using ::webrtc::test::ExplicitKeyValueConfig;
|
|
|
|
|
|
|
|
|
|
class MockRtcpPacketTypeCounterObserver : public RtcpPacketTypeCounterObserver {
|
|
|
|
|
public:
|
|
|
|
|
@ -143,9 +158,8 @@ constexpr TimeDelta kEpsilon = TimeDelta::Millis(1);
|
|
|
|
|
} // namespace
|
|
|
|
|
|
|
|
|
|
struct ReceiverMocks {
|
|
|
|
|
ReceiverMocks() : clock(1335900000) {}
|
|
|
|
|
|
|
|
|
|
SimulatedClock clock;
|
|
|
|
|
SimulatedClock clock{1335900000};
|
|
|
|
|
std::string field_trials;
|
|
|
|
|
// Callbacks to packet_type_counter_observer are frequent but most of the time
|
|
|
|
|
// are not interesting.
|
|
|
|
|
NiceMock<MockRtcpPacketTypeCounterObserver> packet_type_counter_observer;
|
|
|
|
|
@ -154,28 +168,30 @@ struct ReceiverMocks {
|
|
|
|
|
StrictMock<MockVideoBitrateAllocationObserver> bitrate_allocation_observer;
|
|
|
|
|
StrictMock<MockModuleRtpRtcp> rtp_rtcp_impl;
|
|
|
|
|
NiceMock<MockNetworkLinkRtcpObserver> network_link_rtcp_observer;
|
|
|
|
|
|
|
|
|
|
RtpRtcpInterface::Configuration config = {
|
|
|
|
|
.receiver_only = false,
|
|
|
|
|
.intra_frame_callback = &intra_frame_observer,
|
|
|
|
|
.rtcp_loss_notification_observer = &rtcp_loss_notification_observer,
|
|
|
|
|
.network_link_rtcp_observer = &network_link_rtcp_observer,
|
|
|
|
|
.bitrate_allocation_observer = &bitrate_allocation_observer,
|
|
|
|
|
.rtcp_packet_type_counter_observer = &packet_type_counter_observer,
|
|
|
|
|
.rtcp_report_interval_ms = kRtcpIntervalMs,
|
|
|
|
|
.local_media_ssrc = kReceiverMainSsrc,
|
|
|
|
|
.rtx_send_ssrc = kReceiverExtraSsrc};
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
RtpRtcpInterface::Configuration DefaultConfiguration(ReceiverMocks* mocks) {
|
|
|
|
|
RtpRtcpInterface::Configuration config;
|
|
|
|
|
config.clock = &mocks->clock;
|
|
|
|
|
config.receiver_only = false;
|
|
|
|
|
config.rtcp_packet_type_counter_observer =
|
|
|
|
|
&mocks->packet_type_counter_observer;
|
|
|
|
|
config.network_link_rtcp_observer = &mocks->network_link_rtcp_observer;
|
|
|
|
|
config.intra_frame_callback = &mocks->intra_frame_observer;
|
|
|
|
|
config.rtcp_loss_notification_observer =
|
|
|
|
|
&mocks->rtcp_loss_notification_observer;
|
|
|
|
|
config.bitrate_allocation_observer = &mocks->bitrate_allocation_observer;
|
|
|
|
|
config.rtcp_report_interval_ms = kRtcpIntervalMs;
|
|
|
|
|
config.local_media_ssrc = kReceiverMainSsrc;
|
|
|
|
|
config.rtx_send_ssrc = kReceiverExtraSsrc;
|
|
|
|
|
return config;
|
|
|
|
|
RTCPReceiver Create(ReceiverMocks& mocks) {
|
|
|
|
|
return RTCPReceiver(
|
|
|
|
|
CreateEnvironment(
|
|
|
|
|
&mocks.clock,
|
|
|
|
|
std::make_unique<test::ExplicitKeyValueConfig>(mocks.field_trials)),
|
|
|
|
|
mocks.config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, BrokenPacketIsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
|
|
|
|
|
const uint8_t bad_packet[] = {0, 0, 0, 0};
|
|
|
|
|
EXPECT_CALL(mocks.packet_type_counter_observer, RtcpPacketTypesCounterUpdated)
|
|
|
|
|
@ -185,7 +201,7 @@ TEST(RtcpReceiverTest, BrokenPacketIsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InvalidFeedbackPacketIsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
|
|
|
|
|
// Too short feedback packet.
|
|
|
|
|
const uint8_t bad_packet[] = {0x81, rtcp::Rtpfb::kPacketType, 0, 0};
|
|
|
|
|
@ -197,7 +213,7 @@ TEST(RtcpReceiverTest, InvalidFeedbackPacketIsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectSrPacket) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
EXPECT_FALSE(receiver.GetSenderReportStats());
|
|
|
|
|
@ -213,7 +229,7 @@ TEST(RtcpReceiverTest, InjectSrPacket) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectSrPacketFromUnknownSender) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::SenderReport sr;
|
|
|
|
|
@ -230,7 +246,7 @@ TEST(RtcpReceiverTest, InjectSrPacketFromUnknownSender) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectSrPacketCalculatesRTT) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const TimeDelta kRtt = TimeDelta::Millis(123);
|
|
|
|
|
@ -259,7 +275,7 @@ TEST(RtcpReceiverTest, InjectSrPacketCalculatesRTT) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectSrPacketCalculatesNegativeRTTAsOneMs) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const TimeDelta kRtt = TimeDelta::Millis(-13);
|
|
|
|
|
@ -289,7 +305,7 @@ TEST(RtcpReceiverTest, InjectSrPacketCalculatesNegativeRTTAsOneMs) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TwoReportBlocksWithLastOneWithoutLastSrCalculatesRtt) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const TimeDelta kRtt = TimeDelta::Millis(125);
|
|
|
|
|
@ -317,7 +333,7 @@ TEST(RtcpReceiverTest, TwoReportBlocksWithLastOneWithoutLastSrCalculatesRtt) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectRrPacket) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ReceiverReport rr;
|
|
|
|
|
@ -331,7 +347,7 @@ TEST(RtcpReceiverTest, InjectRrPacket) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ReportBlock rb;
|
|
|
|
|
@ -350,7 +366,7 @@ TEST(RtcpReceiverTest, InjectRrPacketWithReportBlockNotToUsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Timestamp now = mocks.clock.CurrentTime();
|
|
|
|
|
@ -371,7 +387,7 @@ TEST(RtcpReceiverTest, InjectRrPacketWithOneReportBlock) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectSrPacketWithOneReportBlock) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Timestamp now = mocks.clock.CurrentTime();
|
|
|
|
|
@ -395,7 +411,7 @@ TEST(RtcpReceiverTest, InjectRrPacketWithTwoReportBlocks) {
|
|
|
|
|
const uint32_t kCumLost[] = {13, 555};
|
|
|
|
|
const uint8_t kFracLost[] = {20, 11};
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Timestamp now = mocks.clock.CurrentTime();
|
|
|
|
|
@ -473,7 +489,7 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
const int32_t kCumLost[] = {13, 555};
|
|
|
|
|
const uint8_t kFracLost[] = {20, 11};
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ReportBlock rb1;
|
|
|
|
|
@ -525,7 +541,7 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnReportBlocks) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ReportBlock rb1;
|
|
|
|
|
@ -559,9 +575,8 @@ TEST(RtcpReceiverTest, GetRtt) {
|
|
|
|
|
const uint32_t kSentCompactNtp = 0x1234;
|
|
|
|
|
const uint32_t kDelayCompactNtp = 0x222;
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.network_link_rtcp_observer = &mocks.network_link_rtcp_observer;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
// No report block received.
|
|
|
|
|
@ -591,7 +606,7 @@ TEST(RtcpReceiverTest, GetRtt) {
|
|
|
|
|
// App packets are ignored.
|
|
|
|
|
TEST(RtcpReceiverTest, InjectApp) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::App app;
|
|
|
|
|
@ -606,9 +621,8 @@ TEST(RtcpReceiverTest, InjectApp) {
|
|
|
|
|
TEST(RtcpReceiverTest, InjectSdesWithOneChunk) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
MockCnameCallbackImpl callback;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.rtcp_cname_callback = &callback;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.rtcp_cname_callback = &callback;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const char kCname[] = "alice@host";
|
|
|
|
|
@ -621,7 +635,7 @@ TEST(RtcpReceiverTest, InjectSdesWithOneChunk) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectByePacketRemovesReportBlocks) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ReportBlock rb1;
|
|
|
|
|
@ -655,7 +669,7 @@ TEST(RtcpReceiverTest, InjectByePacketRemovesReportBlocks) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectByePacketRemovesReferenceTimeInfo) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ExtendedReports xr;
|
|
|
|
|
@ -674,7 +688,7 @@ TEST(RtcpReceiverTest, InjectByePacketRemovesReferenceTimeInfo) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectPliPacket) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Pli pli;
|
|
|
|
|
@ -691,7 +705,7 @@ TEST(RtcpReceiverTest, InjectPliPacket) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, PliPacketNotToUsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Pli pli;
|
|
|
|
|
@ -707,7 +721,7 @@ TEST(RtcpReceiverTest, PliPacketNotToUsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectFirPacket) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Fir fir;
|
|
|
|
|
@ -724,7 +738,7 @@ TEST(RtcpReceiverTest, InjectFirPacket) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, FirPacketNotToUsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Fir fir;
|
|
|
|
|
@ -736,7 +750,7 @@ TEST(RtcpReceiverTest, FirPacketNotToUsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ExtendedReports xr;
|
|
|
|
|
@ -747,7 +761,7 @@ TEST(RtcpReceiverTest, ExtendedReportsPacketWithZeroReportBlocksIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const NtpTime kNtp(0x10203, 0x40506);
|
|
|
|
|
@ -772,10 +786,9 @@ TEST(RtcpReceiverTest, InjectExtendedReportsReceiverReferenceTimePacket) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
// Allow calculate rtt using dlrr/rrtr, simulating media receiver side.
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::ExtendedReports xr;
|
|
|
|
|
@ -794,9 +807,8 @@ TEST(RtcpReceiverTest, ExtendedReportsDlrrPacketNotToUsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint32_t kLastRR = 0x12345;
|
|
|
|
|
@ -822,9 +834,8 @@ TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithSubBlock) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint32_t kLastRR = 0x12345;
|
|
|
|
|
@ -851,9 +862,8 @@ TEST(RtcpReceiverTest, InjectExtendedReportsDlrrPacketWithMultipleSubBlocks) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Rrtr rrtr;
|
|
|
|
|
@ -872,9 +882,8 @@ TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithMultipleReportBlocks) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Rrtr rrtr;
|
|
|
|
|
@ -904,9 +913,8 @@ TEST(RtcpReceiverTest, InjectExtendedReportsPacketWithUnknownReportBlock) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TestExtendedReportsRrRttInitiallyFalse) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
EXPECT_FALSE(receiver.GetAndResetXrRrRtt());
|
|
|
|
|
@ -919,9 +927,8 @@ TEST(RtcpReceiverTest, TestExtendedReportsRrRttInitiallyFalse) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, RttCalculatedAfterExtendedReportsDlrr) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Random rand(0x0123456789abcdef);
|
|
|
|
|
@ -951,9 +958,8 @@ TEST(RtcpReceiverTest, RttCalculatedAfterExtendedReportsDlrr) {
|
|
|
|
|
// the config struct.
|
|
|
|
|
TEST(RtcpReceiverTest, SetterEnablesReceiverRtt) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = false;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = false;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
receiver.SetNonSenderRttMeasurement(true);
|
|
|
|
|
|
|
|
|
|
@ -984,9 +990,8 @@ TEST(RtcpReceiverTest, SetterEnablesReceiverRtt) {
|
|
|
|
|
// the config struct.
|
|
|
|
|
TEST(RtcpReceiverTest, DoesntCalculateRttOnReceivedDlrr) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
receiver.SetNonSenderRttMeasurement(false);
|
|
|
|
|
|
|
|
|
|
@ -1015,9 +1020,8 @@ TEST(RtcpReceiverTest, DoesntCalculateRttOnReceivedDlrr) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, XrDlrrCalculatesNegativeRttAsOneMillisecond) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Random rand(0x0123456789abcdef);
|
|
|
|
|
@ -1046,9 +1050,8 @@ TEST(RtcpReceiverTest, XrDlrrCalculatesNegativeRttAsOneMillisecond) {
|
|
|
|
|
// Test receiver RTT stats with multiple measurements.
|
|
|
|
|
TEST(RtcpReceiverTest, ReceiverRttWithMultipleMeasurements) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Random rand(0x0123456789abcdef);
|
|
|
|
|
@ -1101,9 +1104,8 @@ TEST(RtcpReceiverTest, ReceiverRttWithMultipleMeasurements) {
|
|
|
|
|
// https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteoutboundrtpstreamstats-roundtriptime.
|
|
|
|
|
TEST(RtcpReceiverTest, ReceiverRttResetOnSrWithoutXr) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Random rand(0x0123456789abcdef);
|
|
|
|
|
@ -1145,9 +1147,8 @@ TEST(RtcpReceiverTest, ReceiverRttResetOnSrWithoutXr) {
|
|
|
|
|
// https://www.w3.org/TR/webrtc-stats/#dom-rtcremoteoutboundrtpstreamstats-roundtriptime.
|
|
|
|
|
TEST(RtcpReceiverTest, ReceiverRttResetOnDlrrWithZeroTimestamp) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = true;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
Random rand(0x0123456789abcdef);
|
|
|
|
|
@ -1184,9 +1185,8 @@ TEST(RtcpReceiverTest, ReceiverRttResetOnDlrrWithZeroTimestamp) {
|
|
|
|
|
// Check that the receiver RTT works correctly when the remote SSRC changes.
|
|
|
|
|
TEST(RtcpReceiverTest, ReceiverRttWithMultipleRemoteSsrcs) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
auto config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.non_sender_rtt_measurement = false;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.non_sender_rtt_measurement = false;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
receiver.SetNonSenderRttMeasurement(true);
|
|
|
|
|
|
|
|
|
|
@ -1238,7 +1238,7 @@ TEST(RtcpReceiverTest, ReceiverRttWithMultipleRemoteSsrcs) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ConsumeReceivedXrReferenceTimeInfoInitiallyEmpty) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
EXPECT_THAT(receiver.ConsumeReceivedXrReferenceTimeInfo(), IsEmpty());
|
|
|
|
|
@ -1246,7 +1246,7 @@ TEST(RtcpReceiverTest, ConsumeReceivedXrReferenceTimeInfoInitiallyEmpty) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ConsumeReceivedXrReferenceTimeInfo) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const NtpTime kNtp(0x10203, 0x40506);
|
|
|
|
|
@ -1273,7 +1273,7 @@ TEST(RtcpReceiverTest, ConsumeReceivedXrReferenceTimeInfo) {
|
|
|
|
|
TEST(RtcpReceiverTest,
|
|
|
|
|
ReceivedRrtrFromSameSsrcUpdatesReceivedReferenceTimeInfo) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const NtpTime kNtp1(0x10203, 0x40506);
|
|
|
|
|
@ -1303,7 +1303,7 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, StoresLastReceivedRrtrPerSsrc) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const size_t kNumBufferedReports = 1;
|
|
|
|
|
@ -1335,7 +1335,7 @@ TEST(RtcpReceiverTest, StoresLastReceivedRrtrPerSsrc) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ReceiveReportTimeout) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint16_t kSequenceNumber = 1234;
|
|
|
|
|
@ -1407,7 +1407,7 @@ TEST(RtcpReceiverTest, ReceiveReportTimeout) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
EXPECT_THAT(receiver.TmmbrReceived(), IsEmpty());
|
|
|
|
|
@ -1415,7 +1415,7 @@ TEST(RtcpReceiverTest, TmmbrReceivedWithNoIncomingPacket) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TmmbrPacketAccepted) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const DataRate kBitrate = DataRate::BitsPerSec(30'000);
|
|
|
|
|
@ -1443,7 +1443,7 @@ TEST(RtcpReceiverTest, TmmbrPacketAccepted) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint32_t kBitrateBps = 30000;
|
|
|
|
|
@ -1467,7 +1467,7 @@ TEST(RtcpReceiverTest, TmmbrPacketNotForUsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
auto tmmbr = std::make_unique<rtcp::Tmmbr>();
|
|
|
|
|
@ -1489,7 +1489,7 @@ TEST(RtcpReceiverTest, TmmbrPacketZeroRateIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, TmmbrThreeConstraintsTimeOut) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
// Inject 3 packets "from" kSenderSsrc, kSenderSsrc+1, kSenderSsrc+2.
|
|
|
|
|
@ -1531,9 +1531,8 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
VerifyBlockAndTimestampObtainedFromReportBlockDataObserver) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
MockReportBlockDataObserverImpl observer;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.report_block_data_observer = &observer;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.report_block_data_observer = &observer;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint8_t kFractionLoss = 3;
|
|
|
|
|
@ -1574,9 +1573,8 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
TEST(RtcpReceiverTest, VerifyRttObtainedFromReportBlockDataObserver) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
MockReportBlockDataObserverImpl observer;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
config.report_block_data_observer = &observer;
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.config.report_block_data_observer = &observer;
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
// To avoid issues with rounding due to different way to represent time units,
|
|
|
|
|
@ -1620,7 +1618,7 @@ TEST(RtcpReceiverTest, VerifyRttObtainedFromReportBlockDataObserver) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, GetReportBlockDataAfterOneReportBlock) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint16_t kSequenceNumber = 1234;
|
|
|
|
|
@ -1644,7 +1642,7 @@ TEST(RtcpReceiverTest, GetReportBlockDataAfterOneReportBlock) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, GetReportBlockDataAfterTwoReportBlocksOfSameSsrc) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint16_t kSequenceNumber1 = 1234;
|
|
|
|
|
@ -1682,7 +1680,7 @@ TEST(RtcpReceiverTest, GetReportBlockDataAfterTwoReportBlocksOfSameSsrc) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, GetReportBlockDataAfterTwoReportBlocksOfDifferentSsrcs) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint16_t kSequenceNumber1 = 1234;
|
|
|
|
|
@ -1722,12 +1720,11 @@ TEST(RtcpReceiverTest, GetReportBlockDataAfterTwoReportBlocksOfDifferentSsrcs) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnTransportFeedback) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::TransportFeedback packet;
|
|
|
|
|
packet.SetMediaSsrc(config.local_media_ssrc);
|
|
|
|
|
packet.SetMediaSsrc(mocks.config.local_media_ssrc);
|
|
|
|
|
packet.SetSenderSsrc(kSenderSsrc);
|
|
|
|
|
packet.SetBase(123, Timestamp::Millis(1));
|
|
|
|
|
packet.AddReceivedPacket(123, Timestamp::Millis(1));
|
|
|
|
|
@ -1744,11 +1741,9 @@ TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnTransportFeedback) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnCongestionControlFeedback) {
|
|
|
|
|
ScopedKeyValueConfig trials(
|
|
|
|
|
"WebRTC-RFC8888CongestionControlFeedback/Enabled/");
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.field_trials = "WebRTC-RFC8888CongestionControlFeedback/Enabled/";
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::CongestionControlFeedback packet({{
|
|
|
|
|
@ -1767,11 +1762,9 @@ TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnCongestionControlFeedback) {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, HandlesInvalidCongestionControlFeedback) {
|
|
|
|
|
ScopedKeyValueConfig trials(
|
|
|
|
|
"WebRTC-RFC8888CongestionControlFeedback/Enabled/");
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
mocks.field_trials = "WebRTC-RFC8888CongestionControlFeedback/Enabled/";
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::CongestionControlFeedback packet({{
|
|
|
|
|
@ -1794,12 +1787,11 @@ TEST(RtcpReceiverTest, HandlesInvalidCongestionControlFeedback) {
|
|
|
|
|
TEST(RtcpReceiverTest,
|
|
|
|
|
NotifiesNetworkLinkObserverOnTransportFeedbackOnRtxSsrc) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RtpRtcpInterface::Configuration config = DefaultConfiguration(&mocks);
|
|
|
|
|
RTCPReceiver receiver(config, &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::TransportFeedback packet;
|
|
|
|
|
packet.SetMediaSsrc(*config.rtx_send_ssrc);
|
|
|
|
|
packet.SetMediaSsrc(*mocks.config.rtx_send_ssrc);
|
|
|
|
|
packet.SetSenderSsrc(kSenderSsrc);
|
|
|
|
|
packet.SetBase(1, Timestamp::Millis(1));
|
|
|
|
|
packet.AddReceivedPacket(1, Timestamp::Millis(1));
|
|
|
|
|
@ -1811,7 +1803,7 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
TEST(RtcpReceiverTest,
|
|
|
|
|
DoesNotNotifyNetworkLinkObserverOnTransportFeedbackForUnregistedSsrc) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::TransportFeedback packet;
|
|
|
|
|
@ -1826,7 +1818,7 @@ TEST(RtcpReceiverTest,
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnRemb) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::Remb remb;
|
|
|
|
|
@ -1841,7 +1833,7 @@ TEST(RtcpReceiverTest, NotifiesNetworkLinkObserverOnRemb) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, HandlesInvalidTransportFeedback) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
// Send a compound packet with a TransportFeedback followed by something else.
|
|
|
|
|
@ -1875,7 +1867,7 @@ TEST(RtcpReceiverTest, HandlesInvalidTransportFeedback) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, Nack) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint16_t kNackList1[] = {1, 2, 3, 5};
|
|
|
|
|
@ -1930,7 +1922,7 @@ TEST(RtcpReceiverTest, Nack) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, NackNotForUsIgnored) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
const uint16_t kNackList1[] = {1, 2, 3, 5};
|
|
|
|
|
@ -1949,7 +1941,7 @@ TEST(RtcpReceiverTest, NackNotForUsIgnored) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ForceSenderReport) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
rtcp::RapidResyncRequest rr;
|
|
|
|
|
@ -1962,7 +1954,7 @@ TEST(RtcpReceiverTest, ForceSenderReport) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, ReceivesTargetBitrate) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
VideoBitrateAllocation expected_allocation;
|
|
|
|
|
@ -1996,7 +1988,7 @@ TEST(RtcpReceiverTest, ReceivesTargetBitrate) {
|
|
|
|
|
|
|
|
|
|
TEST(RtcpReceiverTest, HandlesIncorrectTargetBitrate) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
VideoBitrateAllocation expected_allocation;
|
|
|
|
|
@ -2019,7 +2011,7 @@ TEST(RtcpReceiverTest, HandlesIncorrectTargetBitrate) {
|
|
|
|
|
TEST(RtcpReceiverTest, ChangeLocalMediaSsrc) {
|
|
|
|
|
ReceiverMocks mocks;
|
|
|
|
|
// Construct a receiver with `kReceiverMainSsrc` (default) local media ssrc.
|
|
|
|
|
RTCPReceiver receiver(DefaultConfiguration(&mocks), &mocks.rtp_rtcp_impl);
|
|
|
|
|
RTCPReceiver receiver = Create(mocks);
|
|
|
|
|
receiver.SetRemoteSSRC(kSenderSsrc);
|
|
|
|
|
|
|
|
|
|
constexpr uint32_t kSecondarySsrc = kReceiverMainSsrc + 1;
|
|
|
|
|
|