diff --git a/modules/rtp_rtcp/source/flexfec_receiver.cc b/modules/rtp_rtcp/source/flexfec_receiver.cc
index 9f30a72..7f2cc0c 100644
--- a/modules/rtp_rtcp/source/flexfec_receiver.cc
+++ b/modules/rtp_rtcp/source/flexfec_receiver.cc
@@ -149,7 +149,12 @@
   RTC_DCHECK_RUN_ON(&sequence_checker_);
 
   // Decode.
-  erasure_code_->DecodeFec(received_packet, &recovered_packets_);
+  ForwardErrorCorrection::DecodeFecResult decode_result =
+      erasure_code_->DecodeFec(received_packet, &recovered_packets_);
+
+  if (decode_result.num_recovered_packets == 0) {
+    return;
+  }
 
   // Return recovered packets through callback.
   for (const auto& recovered_packet : recovered_packets_) {
diff --git a/modules/rtp_rtcp/source/forward_error_correction.cc b/modules/rtp_rtcp/source/forward_error_correction.cc
index ee99bb9..15a0801 100644
--- a/modules/rtp_rtcp/source/forward_error_correction.cc
+++ b/modules/rtp_rtcp/source/forward_error_correction.cc
@@ -665,8 +665,10 @@
   return true;
 }
 
-void ForwardErrorCorrection::AttemptRecovery(
+size_t ForwardErrorCorrection::AttemptRecovery(
     RecoveredPacketList* recovered_packets) {
+  size_t num_recovered_packets = 0;
+
   auto fec_packet_it = received_fec_packets_.begin();
   while (fec_packet_it != received_fec_packets_.end()) {
     // Search for each FEC packet's protected media packets.
@@ -683,6 +685,8 @@
         continue;
       }
 
+      ++num_recovered_packets;
+
       auto* recovered_packet_ptr = recovered_packet.get();
       // Add recovered packet to the list of recovered packets and update any
       // FEC packets covering this packet with a pointer to the data.
@@ -708,6 +712,8 @@
       fec_packet_it++;
     }
   }
+
+  return num_recovered_packets;
 }
 
 int ForwardErrorCorrection::NumCoveredPacketsMissing(
@@ -758,8 +764,9 @@
   return (packet[8] << 24) + (packet[9] << 16) + (packet[10] << 8) + packet[11];
 }
 
-void ForwardErrorCorrection::DecodeFec(const ReceivedPacket& received_packet,
-                                       RecoveredPacketList* recovered_packets) {
+ForwardErrorCorrection::DecodeFecResult ForwardErrorCorrection::DecodeFec(
+    const ReceivedPacket& received_packet,
+    RecoveredPacketList* recovered_packets) {
   RTC_DCHECK(recovered_packets);
 
   const size_t max_media_packets = fec_header_reader_->MaxMediaPackets();
@@ -782,7 +789,10 @@
   }
 
   InsertPacket(received_packet, recovered_packets);
-  AttemptRecovery(recovered_packets);
+
+  DecodeFecResult decode_result;
+  decode_result.num_recovered_packets = AttemptRecovery(recovered_packets);
+  return decode_result;
 }
 
 size_t ForwardErrorCorrection::MaxPacketOverhead() const {
diff --git a/modules/rtp_rtcp/source/forward_error_correction.h b/modules/rtp_rtcp/source/forward_error_correction.h
index ff6c459..84278a8 100644
--- a/modules/rtp_rtcp/source/forward_error_correction.h
+++ b/modules/rtp_rtcp/source/forward_error_correction.h
@@ -229,8 +229,13 @@
   //                            list will be valid until the next call to
   //                            DecodeFec().
   //
-  void DecodeFec(const ReceivedPacket& received_packet,
-                 RecoveredPacketList* recovered_packets);
+  struct DecodeFecResult {
+    // Number of recovered media packets using FEC.
+    size_t num_recovered_packets = 0;
+  };
+
+  DecodeFecResult DecodeFec(const ReceivedPacket& received_packet,
+                            RecoveredPacketList* recovered_packets);
 
   // Get the number of generated FEC packets, given the number of media packets
   // and the protection factor.
@@ -302,7 +307,7 @@
 
   // Attempt to recover missing packets, using the internally stored
   // received FEC packets.
-  void AttemptRecovery(RecoveredPacketList* recovered_packets);
+  size_t AttemptRecovery(RecoveredPacketList* recovered_packets);
 
   // Initializes headers and payload before the XOR operation
   // that recovers a packet.
diff --git a/modules/rtp_rtcp/source/ulpfec_receiver.cc b/modules/rtp_rtcp/source/ulpfec_receiver.cc
index 4452bdb..7f74a18 100644
--- a/modules/rtp_rtcp/source/ulpfec_receiver.cc
+++ b/modules/rtp_rtcp/source/ulpfec_receiver.cc
@@ -192,6 +192,7 @@
       received_packets;
   received_packets.swap(received_packets_);
   RtpHeaderExtensionMap* last_recovered_extension_map = nullptr;
+  size_t num_recovered_packets = 0;
 
   for (const auto& received_packet : received_packets) {
     // Send received media packet to VCM.
@@ -217,11 +218,17 @@
       // different set of the RTP header extensions and thus different byte
       // representation than the original packet, That will corrupt
       // FEC calculation.
-      fec_->DecodeFec(*received_packet, &recovered_packets_);
+      ForwardErrorCorrection::DecodeFecResult decode_result =
+          fec_->DecodeFec(*received_packet, &recovered_packets_);
       last_recovered_extension_map = &received_packet->extensions;
+      num_recovered_packets += decode_result.num_recovered_packets;
     }
   }
 
+  if (num_recovered_packets == 0) {
+    return;
+  }
+
   // Send any recovered media packets to VCM.
   for (const auto& recovered_packet : recovered_packets_) {
     if (recovered_packet->returned) {
