Index: webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
diff --git a/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc b/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
index a2c9ae39adc6bbdc2d16b4f960c7ce2e65f3baa0..feefe3d1ac302da62ff8bf3d0f8a5e89a3bf844e 100644 |
--- a/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
+++ b/webrtc/modules/rtp_rtcp/source/flexfec_sender.cc |
@@ -65,17 +65,21 @@ FlexfecSender::FlexfecSender( |
uint32_t protected_media_ssrc, |
const std::vector<RtpExtension>& rtp_header_extensions, |
rtc::ArrayView<const RtpExtensionSize> extension_sizes, |
+ const RtpState* rtp_state, |
Clock* clock) |
: clock_(clock), |
random_(clock_->TimeInMicroseconds()), |
last_generated_packet_ms_(-1), |
payload_type_(payload_type), |
- // Initialize the timestamp offset and RTP sequence numbers randomly. |
- // (This is not intended to be cryptographically strong.) |
- timestamp_offset_(random_.Rand<uint32_t>()), |
+ // Reset RTP state if this is not the first time we are operating. |
+ // Otherwise, randomize the initial timestamp offset and RTP sequence |
+ // numbers. (This is not intended to be cryptographically strong.) |
+ timestamp_offset_(rtp_state ? rtp_state->start_timestamp |
+ : random_.Rand<uint32_t>()), |
ssrc_(ssrc), |
protected_media_ssrc_(protected_media_ssrc), |
- seq_num_(random_.Rand(1, kMaxInitRtpSeqNumber)), |
+ seq_num_(rtp_state ? rtp_state->sequence_number |
+ : random_.Rand(1, kMaxInitRtpSeqNumber)), |
ulpfec_generator_(ForwardErrorCorrection::CreateFlexfec()), |
rtp_header_extension_map_(RegisterBweExtensions(rtp_header_extensions)), |
header_extensions_size_( |
@@ -154,4 +158,11 @@ size_t FlexfecSender::MaxPacketOverhead() const { |
return header_extensions_size_ + kFlexfecMaxHeaderSize; |
} |
+RtpState FlexfecSender::GetRtpState() { |
+ RtpState rtp_state; |
+ rtp_state.sequence_number = seq_num_; |
+ rtp_state.start_timestamp = timestamp_offset_; |
+ return rtp_state; |
+} |
+ |
} // namespace webrtc |