diff --git a/modules/rtp_rtcp/source/rtp_sender.cc b/modules/rtp_rtcp/source/rtp_sender.cc
index c28420c..add7c21 100644
--- a/modules/rtp_rtcp/source/rtp_sender.cc
+++ b/modules/rtp_rtcp/source/rtp_sender.cc
@@ -36,7 +36,6 @@
 namespace {
 // Max in the RFC 3550 is 255 bytes, we limit it to be modulus 32 for SRTP.
 constexpr size_t kMaxPaddingLength = 224;
-constexpr size_t kMinAudioPaddingLength = 50;
 constexpr int kSendSideDelayWindowMs = 1000;
 constexpr size_t kRtpHeaderLength = 12;
 constexpr uint16_t kMaxInitRtpSeqNumber = 32767;  // 2^15 -1.
@@ -482,21 +481,11 @@
 }
 
 size_t RTPSender::SendPadData(size_t bytes, int probe_cluster_id) {
-  size_t padding_bytes_in_packet;
-  if (audio_configured_) {
-    // Allow smaller padding packets for audio.
-    padding_bytes_in_packet = std::max(std::min(bytes, MaxPayloadSize()),
-                                       kMinAudioPaddingLength);
-    if (padding_bytes_in_packet > kMaxPaddingLength)
-      padding_bytes_in_packet = kMaxPaddingLength;
-  } else {
-    // Always send full padding packets. This is accounted for by the
-    // RtpPacketSender, which will make sure we don't send too much padding even
-    // if a single packet is larger than requested.
-    // We do this to avoid frequently sending small packets on higher bitrates.
-    padding_bytes_in_packet =
-        std::min(MaxPayloadSize(), kMaxPaddingLength);
-  }
+  // Always send full padding packets. This is accounted for by the
+  // RtpPacketSender, which will make sure we don't send too much padding even
+  // if a single packet is larger than requested.
+  size_t padding_bytes_in_packet =
+      std::min(MaxPayloadSize(), kMaxPaddingLength);
   size_t bytes_sent = 0;
   while (bytes_sent < bytes) {
     int64_t now_ms = clock_->TimeInMilliseconds();
@@ -513,15 +502,9 @@
       timestamp = last_rtp_timestamp_;
       capture_time_ms = capture_time_ms_;
       if (rtx_ == kRtxOff) {
-        if (payload_type_ == -1)
-          break;
         // Without RTX we can't send padding in the middle of frames.
-        // For audio marker bits doesn't mark the end of a frame and frames
-        // are usually a single packet, so for now we don't apply this rule
-        // for audio.
-        if (!audio_configured_ && !last_packet_marker_bit_) {
+        if (!last_packet_marker_bit_)
           break;
-        }
         ssrc = ssrc_;
         sequence_number = sequence_number_;
         ++sequence_number_;
@@ -813,7 +796,7 @@
 }
 
 size_t RTPSender::TimeToSendPadding(size_t bytes, int probe_cluster_id) {
-  if (bytes == 0)
+  if (audio_configured_ || bytes == 0)
     return 0;
   size_t bytes_sent = TrySendRedundantPayloads(bytes, probe_cluster_id);
   if (bytes_sent < bytes)
diff --git a/modules/rtp_rtcp/source/rtp_sender_unittest.cc b/modules/rtp_rtcp/source/rtp_sender_unittest.cc
index a6a886b..1b73b65 100644
--- a/modules/rtp_rtcp/source/rtp_sender_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_sender_unittest.cc
@@ -1491,29 +1491,4 @@
   SendGenericPayload();
 }
 
-TEST_F(RtpSenderTest, SendAudioPadding) {
-  MockTransport transport;
-  const bool kEnableAudio = true;
-  rtp_sender_.reset(new RTPSender(
-      kEnableAudio, &fake_clock_, &transport, &mock_paced_sender_, nullptr,
-      nullptr, nullptr, nullptr, nullptr, nullptr, &mock_rtc_event_log_,
-      nullptr, &retransmission_rate_limiter_, nullptr));
-  rtp_sender_->SetSendPayloadType(kPayload);
-  rtp_sender_->SetSequenceNumber(kSeqNum);
-  rtp_sender_->SetTimestampOffset(0);
-  rtp_sender_->SetSSRC(kSsrc);
-
-  const size_t kPaddingSize = 59;
-  EXPECT_CALL(transport, SendRtp(_, kPaddingSize + kRtpHeaderSize, _))
-      .WillOnce(testing::Return(true));
-  EXPECT_EQ(kPaddingSize, rtp_sender_->TimeToSendPadding(
-                              kPaddingSize, PacketInfo::kNotAProbe));
-
-  // Requested padding size is too small, will send a larger one.
-  const size_t kMinPaddingSize = 50;
-  EXPECT_CALL(transport, SendRtp(_, kMinPaddingSize + kRtpHeaderSize, _))
-      .WillOnce(testing::Return(true));
-  EXPECT_EQ(kMinPaddingSize, rtp_sender_->TimeToSendPadding(
-                                 kMinPaddingSize - 5, PacketInfo::kNotAProbe));
-}
 }  // namespace webrtc
