diff --git a/media/base/media_constants.cc b/media/base/media_constants.cc
index 5abb744..8c2c3bc 100644
--- a/media/base/media_constants.cc
+++ b/media/base/media_constants.cc
@@ -14,7 +14,7 @@
 
 const int kVideoCodecClockrate = 90000;
 const int kDataCodecClockrate = 90000;
-const int kDataMaxBandwidth = 30720;  // bps
+const int kRtpDataMaxBandwidth = 30720;  // bps
 
 const float kHighSystemCpuThreshold = 0.85f;
 const float kLowSystemCpuThreshold = 0.65f;
diff --git a/media/base/media_constants.h b/media/base/media_constants.h
index 37e177a..ec656a9 100644
--- a/media/base/media_constants.h
+++ b/media/base/media_constants.h
@@ -21,7 +21,7 @@
 
 extern const int kVideoCodecClockrate;
 extern const int kDataCodecClockrate;
-extern const int kDataMaxBandwidth;  // bps
+extern const int kRtpDataMaxBandwidth;  // bps
 
 // Default CPU thresholds.
 extern const float kHighSystemCpuThreshold;
diff --git a/media/base/rtp_data_engine.cc b/media/base/rtp_data_engine.cc
index 0303cd3..f05dffa 100644
--- a/media/base/rtp_data_engine.cc
+++ b/media/base/rtp_data_engine.cc
@@ -62,7 +62,7 @@
 void RtpDataMediaChannel::Construct() {
   sending_ = false;
   receiving_ = false;
-  send_limiter_.reset(new rtc::DataRateLimiter(kDataMaxBandwidth / 8, 1.0));
+  send_limiter_.reset(new rtc::DataRateLimiter(kRtpDataMaxBandwidth / 8, 1.0));
 }
 
 RtpDataMediaChannel::~RtpDataMediaChannel() {
@@ -245,7 +245,7 @@
 
 bool RtpDataMediaChannel::SetMaxSendBandwidth(int bps) {
   if (bps <= 0) {
-    bps = kDataMaxBandwidth;
+    bps = kRtpDataMaxBandwidth;
   }
   send_limiter_.reset(new rtc::DataRateLimiter(bps / 8, 1.0));
   RTC_LOG(LS_INFO) << "RtpDataMediaChannel::SetSendBandwidth to " << bps
diff --git a/pc/media_session.cc b/pc/media_session.cc
index 8c757cd..558cf32 100644
--- a/pc/media_session.cc
+++ b/pc/media_session.cc
@@ -2377,7 +2377,7 @@
     return false;
   }
 
-  data->set_bandwidth(kDataMaxBandwidth);
+  data->set_bandwidth(kRtpDataMaxBandwidth);
   SetMediaProtocol(secure_transport, data.get());
   desc->AddContent(media_description_options.mid, MediaProtocolType::kRtp,
                    media_description_options.stopped, std::move(data));
@@ -2773,8 +2773,8 @@
     return false;
   }
 
-  if (!rejected) {
-    data_answer->set_bandwidth(kDataMaxBandwidth);
+  if (!rejected && session_options.data_channel_type == DCT_RTP) {
+    data_answer->set_bandwidth(kRtpDataMaxBandwidth);
   } else {
     // RFC 3264
     // The answer MUST contain the same number of m-lines as the offer.
diff --git a/pc/media_session_unittest.cc b/pc/media_session_unittest.cc
index e1ff313..5a9002b 100644
--- a/pc/media_session_unittest.cc
+++ b/pc/media_session_unittest.cc
@@ -958,7 +958,7 @@
   EXPECT_EQ(MEDIA_TYPE_DATA, dcd->type());
   EXPECT_EQ(f1_.rtp_data_codecs(), dcd->codecs());
   EXPECT_EQ(0U, dcd->first_ssrc());  // no sender is attached.
-  EXPECT_EQ(cricket::kDataMaxBandwidth,
+  EXPECT_EQ(cricket::kRtpDataMaxBandwidth,
             dcd->bandwidth());   // default bandwidth (auto)
   EXPECT_TRUE(dcd->rtcp_mux());  // rtcp-mux defaults on
   ASSERT_CRYPTO(dcd, 1U, kDefaultSrtpCryptoSuite);
@@ -2483,7 +2483,7 @@
   ASSERT_EQ(1U, data_streams[1].ssrcs.size());
   EXPECT_NE(0U, data_streams[1].ssrcs[0]);
 
-  EXPECT_EQ(cricket::kDataMaxBandwidth,
+  EXPECT_EQ(cricket::kRtpDataMaxBandwidth,
             dcd->bandwidth());   // default bandwidth (auto)
   EXPECT_TRUE(dcd->rtcp_mux());  // rtcp-mux defaults on
   ASSERT_CRYPTO(dcd, 1U, kDefaultSrtpCryptoSuite);
@@ -2843,7 +2843,7 @@
   ASSERT_EQ(1U, data_streams[1].ssrcs.size());
   EXPECT_NE(0U, data_streams[1].ssrcs[0]);
 
-  EXPECT_EQ(cricket::kDataMaxBandwidth,
+  EXPECT_EQ(cricket::kRtpDataMaxBandwidth,
             dcd->bandwidth());   // default bandwidth (auto)
   EXPECT_TRUE(dcd->rtcp_mux());  // rtcp-mux defaults on
 
diff --git a/pc/webrtc_sdp.cc b/pc/webrtc_sdp.cc
index 2f9b631..9643dcc 100644
--- a/pc/webrtc_sdp.cc
+++ b/pc/webrtc_sdp.cc
@@ -3044,11 +3044,11 @@
       // the first place and provides another way to get around the limitation.
       if (media_type == cricket::MEDIA_TYPE_DATA &&
           cricket::IsRtpProtocol(protocol) &&
-          (b > cricket::kDataMaxBandwidth / 1000 ||
+          (b > cricket::kRtpDataMaxBandwidth / 1000 ||
            bandwidth_type == kTransportSpecificBandwidth)) {
         rtc::StringBuilder description;
         description << "RTP-based data channels may not send more than "
-                    << cricket::kDataMaxBandwidth / 1000 << "kbps.";
+                    << cricket::kRtpDataMaxBandwidth / 1000 << "kbps.";
         return ParseFailed(line, description.str(), error);
       }
       // Convert values. Prevent integer overflow.
