Chromium Code Reviews| Index: webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc |
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc |
| index a6c7647be5e9e3b0d301b450425ecffd7a451dac..22efb4e5f428d19d85bc59c06758adbd76157b9d 100644 |
| --- a/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc |
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_rtcp_impl.cc |
| @@ -12,6 +12,7 @@ |
| #include <string.h> |
| +#include <algorithm> |
| #include <set> |
| #include <string> |
| @@ -26,6 +27,11 @@ |
| #endif |
| namespace webrtc { |
| +namespace { |
| +const int64_t kRtpRtcpMaxIdleTimeProcessMs = 5; |
| +const int64_t kRtpRtcpRttProcessTimeMs = 1000; |
| +const int64_t kRtpRtcpBitrateProcessTimeMs = 10; |
| +} // namespace |
| RTPExtensionType StringToRtpExtensionType(const std::string& extension) { |
| if (extension == RtpExtension::kTimestampOffsetUri) |
| @@ -89,9 +95,13 @@ ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration) |
| this), |
| clock_(configuration.clock), |
| audio_(configuration.audio), |
| - last_process_time_(configuration.clock->TimeInMilliseconds()), |
| - last_bitrate_process_time_(configuration.clock->TimeInMilliseconds()), |
| - last_rtt_process_time_(configuration.clock->TimeInMilliseconds()), |
| + keepalive_config_(configuration.keepalive_config), |
| + last_process_time_(clock_->TimeInMilliseconds()), |
| + 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_(0), |
| nack_last_time_sent_full_prev_(0), |
| @@ -118,6 +128,11 @@ ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration) |
| configuration.overhead_observer)); |
| // 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. |
| @@ -130,24 +145,37 @@ ModuleRtpRtcpImpl::ModuleRtpRtcpImpl(const Configuration& configuration) |
| // Returns the number of milliseconds until the module want a worker thread |
| // to call Process. |
| int64_t ModuleRtpRtcpImpl::TimeUntilNextProcess() { |
| - const int64_t now = clock_->TimeInMilliseconds(); |
| - const int64_t kRtpRtcpMaxIdleTimeProcessMs = 5; |
| - return kRtpRtcpMaxIdleTimeProcessMs - (now - last_process_time_); |
| + return std::max<int64_t>(0, |
| + next_process_time_ - clock_->TimeInMilliseconds()); |
| } |
| // Process any pending tasks such as timeouts (non time critical events). |
| void ModuleRtpRtcpImpl::Process() { |
| const int64_t now = clock_->TimeInMilliseconds(); |
| last_process_time_ = now; |
|
åsapersson
2017/06/30 15:09:13
is last_process_time_ still needed?
sprang_webrtc
2017/06/30 16:20:59
No, cleaned up.
|
| + next_process_time_ = last_process_time_ + kRtpRtcpMaxIdleTimeProcessMs; |
| if (rtp_sender_) { |
| - const int64_t kRtpRtcpBitrateProcessTimeMs = 10; |
| if (now >= last_bitrate_process_time_ + kRtpRtcpBitrateProcessTimeMs) { |
| rtp_sender_->ProcessBitrate(); |
| last_bitrate_process_time_ = now; |
| + 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(); |
|
åsapersson
2017/06/30 15:09:13
check if last_send_time_ms is set?
sprang_webrtc
2017/06/30 16:20:59
There's no need, since if it's not set it will ret
|
| + 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_); |
| } |
| } |
| - const int64_t kRtpRtcpRttProcessTimeMs = 1000; |
| + |
| bool process_rtt = now >= last_rtt_process_time_ + kRtpRtcpRttProcessTimeMs; |
| if (rtcp_sender_.Sending()) { |
| // Process RTT if we have received a receiver report and we haven't |
| @@ -201,6 +229,8 @@ void ModuleRtpRtcpImpl::Process() { |
| // Get processed rtt. |
| if (process_rtt) { |
| last_rtt_process_time_ = now; |
| + next_process_time_ = std::min( |
| + next_process_time_, last_rtt_process_time_ + kRtpRtcpRttProcessTimeMs); |
| if (rtt_stats_) { |
| // Make sure we have a valid RTT before setting. |
| int64_t last_rtt = rtt_stats_->LastProcessedRtt(); |