Remove WebRTC-ExcludeTransportSequenceNumberFromFec.
Bug: webrtc:11503 Change-Id: I5e0b7038286d9501a617e002b70638f34ac556ac Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/173580 Reviewed-by: Christoffer Rodbro <crodbro@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Reviewed-by: Harald Alvestrand <hta@webrtc.org> Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org> Cr-Commit-Position: refs/heads/master@{#31072}
This commit is contained in:

committed by
Commit Bot

parent
2136b569eb
commit
3ebb6e93f4
@ -45,22 +45,6 @@ namespace {
|
|||||||
constexpr size_t kRedForFecHeaderLength = 1;
|
constexpr size_t kRedForFecHeaderLength = 1;
|
||||||
constexpr int64_t kMaxUnretransmittableFrameIntervalMs = 33 * 4;
|
constexpr int64_t kMaxUnretransmittableFrameIntervalMs = 33 * 4;
|
||||||
|
|
||||||
// This is experimental field trial to exclude transport sequence number from
|
|
||||||
// FEC packets and should only be used in conjunction with datagram transport.
|
|
||||||
// Datagram transport removes transport sequence numbers from RTP packets and
|
|
||||||
// uses datagram feedback loop to re-generate RTCP feedback packets, but FEC
|
|
||||||
// contorol packets are calculated before sequence number is removed and as a
|
|
||||||
// result recovered packets will be corrupt unless we also remove transport
|
|
||||||
// sequence number during FEC calculation.
|
|
||||||
//
|
|
||||||
// TODO(sukhanov): We need to find a better way to implement FEC with datagram
|
|
||||||
// transport, probably moving FEC to datagram integration layter. We should
|
|
||||||
// also remove special field trial once we switch datagram path from
|
|
||||||
// RTCConfiguration flags to field trial and use the same field trial for FEC
|
|
||||||
// workaround.
|
|
||||||
const char kExcludeTransportSequenceNumberFromFecFieldTrial[] =
|
|
||||||
"WebRTC-ExcludeTransportSequenceNumberFromFec";
|
|
||||||
|
|
||||||
void BuildRedPayload(const RtpPacketToSend& media_packet,
|
void BuildRedPayload(const RtpPacketToSend& media_packet,
|
||||||
RtpPacketToSend* red_packet) {
|
RtpPacketToSend* red_packet) {
|
||||||
uint8_t* red_payload = red_packet->AllocatePayload(
|
uint8_t* red_payload = red_packet->AllocatePayload(
|
||||||
@ -151,10 +135,6 @@ RTPSenderVideo::RTPSenderVideo(const Config& config)
|
|||||||
generic_descriptor_auth_experiment_(!absl::StartsWith(
|
generic_descriptor_auth_experiment_(!absl::StartsWith(
|
||||||
config.field_trials->Lookup("WebRTC-GenericDescriptorAuth"),
|
config.field_trials->Lookup("WebRTC-GenericDescriptorAuth"),
|
||||||
"Disabled")),
|
"Disabled")),
|
||||||
exclude_transport_sequence_number_from_fec_experiment_(absl::StartsWith(
|
|
||||||
config.field_trials->Lookup(
|
|
||||||
kExcludeTransportSequenceNumberFromFecFieldTrial),
|
|
||||||
"Enabled")),
|
|
||||||
absolute_capture_time_sender_(config.clock),
|
absolute_capture_time_sender_(config.clock),
|
||||||
frame_transformer_delegate_(
|
frame_transformer_delegate_(
|
||||||
config.frame_transformer
|
config.frame_transformer
|
||||||
@ -613,24 +593,6 @@ bool RTPSenderVideo::SendVideo(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (protect_packet && fec_generator_) {
|
if (protect_packet && fec_generator_) {
|
||||||
if (red_enabled() &&
|
|
||||||
exclude_transport_sequence_number_from_fec_experiment_) {
|
|
||||||
// See comments at the top of the file why experiment
|
|
||||||
// "WebRTC-kExcludeTransportSequenceNumberFromFec" is needed in
|
|
||||||
// conjunction with datagram transport.
|
|
||||||
// TODO(sukhanov): We may also need to implement it for flexfec_sender
|
|
||||||
// if we decide to keep this approach in the future.
|
|
||||||
uint16_t transport_senquence_number;
|
|
||||||
if (packet->GetExtension<webrtc::TransportSequenceNumber>(
|
|
||||||
&transport_senquence_number)) {
|
|
||||||
if (!packet->RemoveExtension(webrtc::TransportSequenceNumber::kId)) {
|
|
||||||
RTC_NOTREACHED()
|
|
||||||
<< "Failed to remove transport sequence number, packet="
|
|
||||||
<< packet->ToString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fec_generator_->AddPacketAndGenerateFec(*packet);
|
fec_generator_->AddPacketAndGenerateFec(*packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,8 +211,6 @@ class RTPSenderVideo {
|
|||||||
// Set to true if the generic descriptor should be authenticated.
|
// Set to true if the generic descriptor should be authenticated.
|
||||||
const bool generic_descriptor_auth_experiment_;
|
const bool generic_descriptor_auth_experiment_;
|
||||||
|
|
||||||
const bool exclude_transport_sequence_number_from_fec_experiment_;
|
|
||||||
|
|
||||||
AbsoluteCaptureTimeSender absolute_capture_time_sender_;
|
AbsoluteCaptureTimeSender absolute_capture_time_sender_;
|
||||||
|
|
||||||
const rtc::scoped_refptr<RTPSenderVideoFrameTransformerDelegate>
|
const rtc::scoped_refptr<RTPSenderVideoFrameTransformerDelegate>
|
||||||
|
@ -77,11 +77,6 @@ DatagramRtpTransport::DatagramRtpTransport(
|
|||||||
"datagram transport connection";
|
"datagram transport connection";
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO(sukhanov): Add CHECK to make sure that field trial
|
|
||||||
// WebRTC-ExcludeTransportSequenceNumberFromFecFieldTrial is enabled.
|
|
||||||
// If feedback loop is translation is enabled, FEC packets must exclude
|
|
||||||
// transport sequence numbers, otherwise recovered packets will be corrupt.
|
|
||||||
|
|
||||||
RTC_DCHECK(ice_transport_);
|
RTC_DCHECK(ice_transport_);
|
||||||
RTC_DCHECK(datagram_transport_);
|
RTC_DCHECK(datagram_transport_);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user