diff --git a/src/video_engine/vie_channel.cc b/src/video_engine/vie_channel.cc index 0d6d2d9d7e..926c6fce43 100644 --- a/src/video_engine/vie_channel.cc +++ b/src/video_engine/vie_channel.cc @@ -679,15 +679,33 @@ bool ViEChannel::EnableRemb(bool enable) { } int ViEChannel::SetSendTimestampOffsetStatus(bool enable, int id) { + int error = 0; if (enable) { + // Enable the extension, but disable possible old id to avoid errors. send_timestamp_extension_id_ = id; - return rtp_rtcp_->RegisterSendRtpHeaderExtension( - kRtpExtensionTransmissionTimeOffset, id); - } else { - send_timestamp_extension_id_ = kInvalidRtpExtensionId; - return rtp_rtcp_->DeregisterSendRtpHeaderExtension( + rtp_rtcp_->DeregisterSendRtpHeaderExtension( kRtpExtensionTransmissionTimeOffset); + error = rtp_rtcp_->RegisterSendRtpHeaderExtension( + kRtpExtensionTransmissionTimeOffset, id); + for (std::list::iterator it = simulcast_rtp_rtcp_.begin(); + it != simulcast_rtp_rtcp_.end(); it++) { + (*it)->DeregisterSendRtpHeaderExtension( + kRtpExtensionTransmissionTimeOffset); + error |= (*it)->RegisterSendRtpHeaderExtension( + kRtpExtensionTransmissionTimeOffset, id); + } + } else { + // Disable the extension. + send_timestamp_extension_id_ = kInvalidRtpExtensionId; + rtp_rtcp_->DeregisterSendRtpHeaderExtension( + kRtpExtensionTransmissionTimeOffset); + for (std::list::iterator it = simulcast_rtp_rtcp_.begin(); + it != simulcast_rtp_rtcp_.end(); it++) { + (*it)->DeregisterSendRtpHeaderExtension( + kRtpExtensionTransmissionTimeOffset); + } } + return error; } int ViEChannel::SetReceiveTimestampOffsetStatus(bool enable, int id) {