Removes rtp level keep alive support.
This is not used in practice as there's functionality on
other levels that serves the same purpose.
Bug: None
Change-Id: I0488dc42459b07607363eba0f2b06f4c50f7cda4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/125520
Reviewed-by: Stefan Holmer <stefan@webrtc.org>
Commit-Queue: Sebastian Jansson <srte@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#27061}
diff --git a/api/ortc/rtp_transport_interface.h b/api/ortc/rtp_transport_interface.h
index ec71216..ac43831 100644
--- a/api/ortc/rtp_transport_interface.h
+++ b/api/ortc/rtp_transport_interface.h
@@ -26,12 +26,8 @@
struct RtpTransportParameters final {
RtcpParameters rtcp;
- // Enabled periodic sending of keep-alive packets, that help prevent timeouts
- // on the network level, such as NAT bindings. See RFC6263 section 4.6.
- RtpKeepAliveConfig keepalive;
-
bool operator==(const RtpTransportParameters& o) const {
- return rtcp == o.rtcp && keepalive == o.keepalive;
+ return rtcp == o.rtcp;
}
bool operator!=(const RtpTransportParameters& o) const {
return !(*this == o);
diff --git a/api/rtp_headers.h b/api/rtp_headers.h
index 8ab560c..04c3853 100644
--- a/api/rtp_headers.h
+++ b/api/rtp_headers.h
@@ -171,23 +171,6 @@
kNetworkDown,
};
-struct RtpKeepAliveConfig final {
- // If no packet has been sent for |timeout_interval_ms|, send a keep-alive
- // packet. The keep-alive packet is an empty (no payload) RTP packet with a
- // payload type of 20 as long as the other end has not negotiated the use of
- // this value. If this value has already been negotiated, then some other
- // unused static payload type from table 5 of RFC 3551 shall be used and set
- // in |payload_type|.
- int64_t timeout_interval_ms = -1;
- uint8_t payload_type = 20;
-
- bool operator==(const RtpKeepAliveConfig& o) const {
- return timeout_interval_ms == o.timeout_interval_ms &&
- payload_type == o.payload_type;
- }
- bool operator!=(const RtpKeepAliveConfig& o) const { return !(*this == o); }
-};
-
} // namespace webrtc
#endif // API_RTP_HEADERS_H_
diff --git a/call/rtp_transport_controller_send_interface.h b/call/rtp_transport_controller_send_interface.h
index 5262cc8..18a6326 100644
--- a/call/rtp_transport_controller_send_interface.h
+++ b/call/rtp_transport_controller_send_interface.h
@@ -48,7 +48,6 @@
class RateLimiter;
class RtcpBandwidthObserver;
class RtpPacketSender;
-struct RtpKeepAliveConfig;
class SendDelayStats;
class SendStatisticsProxy;
class TransportFeedbackObserver;
diff --git a/call/rtp_video_sender.cc b/call/rtp_video_sender.cc
index 9dc3003..4446e64 100644
--- a/call/rtp_video_sender.cc
+++ b/call/rtp_video_sender.cc
@@ -74,7 +74,6 @@
RtcEventLog* event_log,
RateLimiter* retransmission_rate_limiter,
OverheadObserver* overhead_observer,
- RtpKeepAliveConfig keepalive_config,
FrameEncryptorInterface* frame_encryptor,
const CryptoOptions& crypto_options) {
RTC_DCHECK_GT(rtp_config.ssrcs.size(), 0);
@@ -100,7 +99,6 @@
configuration.event_log = event_log;
configuration.retransmission_rate_limiter = retransmission_rate_limiter;
configuration.overhead_observer = overhead_observer;
- configuration.keepalive_config = keepalive_config;
configuration.frame_encryptor = frame_encryptor;
configuration.require_frame_encryption =
crypto_options.sframe.require_frame_encryption;
@@ -247,8 +245,6 @@
event_log,
retransmission_limiter,
this,
- // TODO(srte): Remove this argument.
- RtpKeepAliveConfig(),
frame_encryptor,
crypto_options)),
rtp_config_(rtp_config),
diff --git a/modules/rtp_rtcp/include/rtp_rtcp.h b/modules/rtp_rtcp/include/rtp_rtcp.h
index 34ccfeb..9ae6ddb 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp.h
@@ -97,8 +97,6 @@
OverheadObserver* overhead_observer = nullptr;
RtcpAckObserver* ack_observer = nullptr;
- RtpKeepAliveConfig keepalive_config;
-
int rtcp_report_interval_ms = 0;
// Update network2 instead of pacer_exit field of video timing extension.
diff --git a/modules/rtp_rtcp/include/rtp_rtcp_defines.h b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
index b648942..a4e75ba 100644
--- a/modules/rtp_rtcp/include/rtp_rtcp_defines.h
+++ b/modules/rtp_rtcp/include/rtp_rtcp_defines.h
@@ -97,7 +97,7 @@
enum KeyFrameRequestMethod { kKeyFrameReqPliRtcp, kKeyFrameReqFirRtcp };
-enum RtpRtcpPacketType { kPacketRtp = 0, kPacketKeepAlive = 1 };
+enum RtpRtcpPacketType { kPacketRtp = 0 };
enum RtxMode {
kRtxOff = 0x0,
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
index 6d1c9e2..9a0fc7c 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.cc
@@ -82,12 +82,10 @@
: kDefaultVideoReportInterval),
this),
clock_(configuration.clock),
- keepalive_config_(configuration.keepalive_config),
last_bitrate_process_time_(clock_->TimeInMilliseconds()),
last_rtt_process_time_(clock_->TimeInMilliseconds()),
next_process_time_(clock_->TimeInMilliseconds() +
kRtpRtcpMaxIdleTimeProcessMs),
- next_keepalive_time_(-1),
packet_overhead_(28), // IPV4 UDP.
nack_last_time_sent_full_ms_(0),
nack_last_seq_number_sent_(0),
@@ -119,11 +117,6 @@
// Make sure rtcp sender use same timestamp offset as rtp sender.
rtcp_sender_.SetTimestampOffset(rtp_sender_->TimestampOffset());
-
- if (keepalive_config_.timeout_interval_ms != -1) {
- next_keepalive_time_ =
- clock_->TimeInMilliseconds() + keepalive_config_.timeout_interval_ms;
- }
}
// Set default packet size limit.
@@ -154,20 +147,6 @@
next_process_time_ =
std::min(next_process_time_, now + kRtpRtcpBitrateProcessTimeMs);
}
- if (keepalive_config_.timeout_interval_ms > 0 &&
- now >= next_keepalive_time_) {
- int64_t last_send_time_ms = rtp_sender_->LastTimestampTimeMs();
- // If no packet has been sent, |last_send_time_ms| will be 0, and so the
- // keep-alive will be triggered as expected.
- if (now >= last_send_time_ms + keepalive_config_.timeout_interval_ms) {
- rtp_sender_->SendKeepAlive(keepalive_config_.payload_type);
- next_keepalive_time_ = now + keepalive_config_.timeout_interval_ms;
- } else {
- next_keepalive_time_ =
- last_send_time_ms + keepalive_config_.timeout_interval_ms;
- }
- next_process_time_ = std::min(next_process_time_, next_keepalive_time_);
- }
}
bool process_rtt = now >= last_rtt_process_time_ + kRtpRtcpRttProcessTimeMs;
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index 4b1c927..3c7e4ef 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -320,11 +320,9 @@
Clock* const clock_;
- const RtpKeepAliveConfig keepalive_config_;
int64_t last_bitrate_process_time_;
int64_t last_rtt_process_time_;
int64_t next_process_time_;
- int64_t next_keepalive_time_;
uint16_t packet_overhead_;
// Send side
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
index 98067b2..84db79a 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl_unittest.cc
@@ -60,9 +60,7 @@
clock_(nullptr),
delay_ms_(0),
rtp_packets_sent_(0),
- rtcp_packets_sent_(0),
- keepalive_payload_type_(0),
- num_keepalive_sent_(0) {}
+ rtcp_packets_sent_(0) {}
void SetRtpRtcpModule(ModuleRtpRtcpImpl* receiver) { receiver_ = receiver; }
void SimulateNetworkDelay(int64_t delay_ms, SimulatedClock* clock) {
@@ -76,8 +74,6 @@
std::unique_ptr<RtpHeaderParser> parser(RtpHeaderParser::Create());
EXPECT_TRUE(parser->Parse(static_cast<const uint8_t*>(data), len, &header));
++rtp_packets_sent_;
- if (header.payloadType == keepalive_payload_type_)
- ++num_keepalive_sent_;
last_rtp_header_ = header;
return true;
}
@@ -94,10 +90,6 @@
++rtcp_packets_sent_;
return true;
}
- void SetKeepalivePayloadType(uint8_t payload_type) {
- keepalive_payload_type_ = payload_type;
- }
- size_t NumKeepaliveSent() { return num_keepalive_sent_; }
size_t NumRtcpSent() { return rtcp_packets_sent_; }
ModuleRtpRtcpImpl* receiver_;
SimulatedClock* clock_;
@@ -106,8 +98,6 @@
size_t rtcp_packets_sent_;
RTPHeader last_rtp_header_;
std::vector<uint16_t> last_nack_list_;
- uint8_t keepalive_payload_type_;
- size_t num_keepalive_sent_;
};
class RtpRtcpModule : public RtcpPacketTypeCounterObserver {
@@ -127,7 +117,6 @@
RtcpRttStatsTestImpl rtt_stats_;
std::unique_ptr<ModuleRtpRtcpImpl> impl_;
uint32_t remote_ssrc_;
- RtpKeepAliveConfig keepalive_config_;
int rtcp_report_interval_ms_ = 0;
void SetRemoteSsrc(uint32_t ssrc) {
@@ -157,12 +146,6 @@
std::vector<uint16_t> LastNackListSent() {
return transport_.last_nack_list_;
}
- void SetKeepaliveConfigAndReset(const RtpKeepAliveConfig& config) {
- keepalive_config_ = config;
- // Need to create a new module impl, since it's configured at creation.
- CreateModuleImpl();
- transport_.SetKeepalivePayloadType(config.payload_type);
- }
void SetRtcpReportIntervalAndReset(int rtcp_report_interval_ms) {
rtcp_report_interval_ms_ = rtcp_report_interval_ms;
CreateModuleImpl();
@@ -177,7 +160,6 @@
config.receive_statistics = receive_statistics_.get();
config.rtcp_packet_type_counter_observer = this;
config.rtt_stats = &rtt_stats_;
- config.keepalive_config = keepalive_config_;
config.rtcp_report_interval_ms = rtcp_report_interval_ms_;
impl_.reset(new ModuleRtpRtcpImpl(config));
@@ -569,60 +551,6 @@
EXPECT_EQ(75, sender_.RtcpReceived().UniqueNackRequestsInPercent());
}
-TEST_F(RtpRtcpImplTest, SendsKeepaliveAfterTimout) {
- const int kTimeoutMs = 1500;
-
- RtpKeepAliveConfig config;
- config.timeout_interval_ms = kTimeoutMs;
-
- // Recreate sender impl with new configuration, and redo setup.
- sender_.SetKeepaliveConfigAndReset(config);
- SetUp();
-
- // Initial process call.
- sender_.impl_->Process();
- EXPECT_EQ(0U, sender_.transport_.NumKeepaliveSent());
-
- // After one time, a single keep-alive packet should be sent.
- clock_.AdvanceTimeMilliseconds(kTimeoutMs);
- sender_.impl_->Process();
- EXPECT_EQ(1U, sender_.transport_.NumKeepaliveSent());
-
- // Process for the same timestamp again, no new packet should be sent.
- sender_.impl_->Process();
- EXPECT_EQ(1U, sender_.transport_.NumKeepaliveSent());
-
- // Move ahead to the last ms before a keep-alive is expected, no action.
- clock_.AdvanceTimeMilliseconds(kTimeoutMs - 1);
- sender_.impl_->Process();
- EXPECT_EQ(1U, sender_.transport_.NumKeepaliveSent());
-
- // Move the final ms, timeout relative last KA. Should create new keep-alive.
- clock_.AdvanceTimeMilliseconds(1);
- sender_.impl_->Process();
- EXPECT_EQ(2U, sender_.transport_.NumKeepaliveSent());
-
- // Move ahead to the last ms before Christmas.
- clock_.AdvanceTimeMilliseconds(kTimeoutMs - 1);
- sender_.impl_->Process();
- EXPECT_EQ(2U, sender_.transport_.NumKeepaliveSent());
-
- // Send actual payload data, no keep-alive expected.
- SendFrame(&sender_, sender_video_.get(), 0);
- sender_.impl_->Process();
- EXPECT_EQ(2U, sender_.transport_.NumKeepaliveSent());
-
- // Move ahead as far as possible again, timeout now relative payload. No KA.
- clock_.AdvanceTimeMilliseconds(kTimeoutMs - 1);
- sender_.impl_->Process();
- EXPECT_EQ(2U, sender_.transport_.NumKeepaliveSent());
-
- // Timeout relative payload, send new keep-alive.
- clock_.AdvanceTimeMilliseconds(1);
- sender_.impl_->Process();
- EXPECT_EQ(3U, sender_.transport_.NumKeepaliveSent());
-}
-
TEST_F(RtpRtcpImplTest, ConfigurableRtcpReportInterval) {
const int kVideoReportInterval = 3000;
diff --git a/modules/rtp_rtcp/source/rtp_sender.cc b/modules/rtp_rtcp/source/rtp_sender.cc
index 197f52b..9f3cefc 100644
--- a/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/modules/rtp_rtcp/source/rtp_sender.cc
@@ -1229,21 +1229,6 @@
return last_timestamp_time_ms_;
}
-void RTPSender::SendKeepAlive(uint8_t payload_type) {
- std::unique_ptr<RtpPacketToSend> packet = AllocatePacket();
- packet->SetPayloadType(payload_type);
- // Set marker bit and timestamps in the same manner as plain padding packets.
- packet->SetMarker(false);
- {
- rtc::CritScope lock(&send_critsect_);
- packet->SetTimestamp(last_rtp_timestamp_);
- packet->set_capture_time_ms(capture_time_ms_);
- }
- AssignSequenceNumber(packet.get());
- SendToNetwork(std::move(packet), StorageType::kDontRetransmit,
- RtpPacketSender::Priority::kLowPriority);
-}
-
void RTPSender::SetRtt(int64_t rtt_ms) {
packet_history_.SetRtt(rtt_ms);
flexfec_packet_history_.SetRtt(rtt_ms);
diff --git a/modules/rtp_rtcp/source/rtp_sender.h b/modules/rtp_rtcp/source/rtp_sender.h
index f08eb89..eca86ee 100644
--- a/modules/rtp_rtcp/source/rtp_sender.h
+++ b/modules/rtp_rtcp/source/rtp_sender.h
@@ -171,7 +171,6 @@
RtpState GetRtxRtpState() const;
int64_t LastTimestampTimeMs() const;
- void SendKeepAlive(uint8_t payload_type);
void SetRtt(int64_t rtt_ms);
diff --git a/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_unittest.cc
index 1c74e7e..3f3f221 100644
--- a/modules/rtp_rtcp/source/rtp_sender_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_unittest.cc
@@ -1759,40 +1759,6 @@
SendGenericPacket();
}
-TEST_P(RtpSenderTest, SendsKeepAlive) {
- MockTransport transport;
- rtp_sender_.reset(
- new RTPSender(false, &fake_clock_, &transport, nullptr, absl::nullopt,
- nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
- nullptr, &retransmission_rate_limiter_, nullptr, false,
- nullptr, false, false, FieldTrialBasedConfig()));
- rtp_sender_->SetSequenceNumber(kSeqNum);
- rtp_sender_->SetTimestampOffset(0);
- rtp_sender_->SetSSRC(kSsrc);
-
- const uint8_t kKeepalivePayloadType = 20;
- RTC_CHECK_NE(kKeepalivePayloadType, kPayload);
-
- EXPECT_CALL(transport, SendRtp(_, _, _))
- .WillOnce(
- Invoke([&kKeepalivePayloadType](const uint8_t* packet, size_t len,
- const PacketOptions& options) {
- webrtc::RTPHeader rtp_header;
- RtpUtility::RtpHeaderParser parser(packet, len);
- EXPECT_TRUE(parser.Parse(&rtp_header, nullptr));
- EXPECT_FALSE(rtp_header.markerBit);
- EXPECT_EQ(0U, rtp_header.paddingLength);
- EXPECT_EQ(kKeepalivePayloadType, rtp_header.payloadType);
- EXPECT_EQ(kSeqNum, rtp_header.sequenceNumber);
- EXPECT_EQ(kSsrc, rtp_header.ssrc);
- EXPECT_EQ(0u, len - rtp_header.headerLength);
- return true;
- }));
-
- rtp_sender_->SendKeepAlive(kKeepalivePayloadType);
- EXPECT_EQ(kSeqNum + 1, rtp_sender_->SequenceNumber());
-}
-
INSTANTIATE_TEST_SUITE_P(WithAndWithoutOverhead,
RtpSenderTest,
::testing::Bool());
diff --git a/pc/rtp_transport.cc b/pc/rtp_transport.cc
index 0b076f7..650015e 100644
--- a/pc/rtp_transport.cc
+++ b/pc/rtp_transport.cc
@@ -169,12 +169,6 @@
LOG_AND_RETURN_ERROR(RTCErrorType::INVALID_STATE,
"Disabling RTCP muxing is not allowed.");
}
- if (parameters.keepalive != parameters_.keepalive) {
- // TODO(sprang): Wire up support for keep-alive (only ORTC support for now).
- LOG_AND_RETURN_ERROR(
- RTCErrorType::INVALID_MODIFICATION,
- "RTP keep-alive parameters not supported by this channel.");
- }
RtpTransportParameters new_parameters = parameters;
diff --git a/pc/rtp_transport_unittest.cc b/pc/rtp_transport_unittest.cc
index f617445..54f182d 100644
--- a/pc/rtp_transport_unittest.cc
+++ b/pc/rtp_transport_unittest.cc
@@ -52,17 +52,6 @@
EXPECT_EQ(transport.GetParameters().rtcp.cname, kName);
}
-TEST(RtpTransportTest, SetRtpTransportKeepAliveNotSupported) {
- // Tests that we warn users that keep-alive isn't supported yet.
- // TODO(sprang): Wire up keep-alive and remove this test.
- RtpTransport transport(kMuxDisabled);
- RtpTransportParameters params;
- params.keepalive.timeout_interval_ms = 1;
- auto result = transport.SetParameters(params);
- EXPECT_FALSE(result.ok());
- EXPECT_EQ(RTCErrorType::INVALID_MODIFICATION, result.type());
-}
-
class SignalObserver : public sigslot::has_slots<> {
public:
explicit SignalObserver(RtpTransport* transport) {
diff --git a/test/call_test.cc b/test/call_test.cc
index 44df9cb..8d8a9d3 100644
--- a/test/call_test.cc
+++ b/test/call_test.cc
@@ -705,9 +705,6 @@
const uint32_t CallTest::kReceiverLocalAudioSsrc = 0x1234567;
const int CallTest::kNackRtpHistoryMs = 1000;
-const uint8_t CallTest::kDefaultKeepalivePayloadType =
- RtpKeepAliveConfig().payload_type;
-
const std::map<uint8_t, MediaType> CallTest::payload_type_map_ = {
{CallTest::kVideoSendPayloadType, MediaType::VIDEO},
{CallTest::kFakeVideoSendPayloadType, MediaType::VIDEO},
@@ -716,8 +713,7 @@
{CallTest::kRtxRedPayloadType, MediaType::VIDEO},
{CallTest::kUlpfecPayloadType, MediaType::VIDEO},
{CallTest::kFlexfecPayloadType, MediaType::VIDEO},
- {CallTest::kAudioSendPayloadType, MediaType::AUDIO},
- {CallTest::kDefaultKeepalivePayloadType, MediaType::ANY}};
+ {CallTest::kAudioSendPayloadType, MediaType::AUDIO}};
BaseTest::BaseTest() {}
diff --git a/test/call_test.h b/test/call_test.h
index 052d4c6..dcdb03b 100644
--- a/test/call_test.h
+++ b/test/call_test.h
@@ -67,7 +67,6 @@
static const uint32_t kReceiverLocalVideoSsrc;
static const uint32_t kReceiverLocalAudioSsrc;
static const int kNackRtpHistoryMs;
- static const uint8_t kDefaultKeepalivePayloadType;
static const std::map<uint8_t, MediaType> payload_type_map_;
protected:
diff --git a/video/video_send_stream_impl_unittest.cc b/video/video_send_stream_impl_unittest.cc
index 53846bf..a84b129 100644
--- a/video/video_send_stream_impl_unittest.cc
+++ b/video/video_send_stream_impl_unittest.cc
@@ -144,7 +144,6 @@
CallStats call_stats_;
SendStatisticsProxy stats_proxy_;
PacketRouter packet_router_;
- RtpKeepAliveConfig keepalive_config_;
};
TEST_F(VideoSendStreamImplTest, RegistersAsBitrateObserverOnStart) {