diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp
index 68dc85b8e..f8d671f83 100644
--- a/trunk/src/app/srs_app_rtc_conn.cpp
+++ b/trunk/src/app/srs_app_rtc_conn.cpp
@@ -1142,6 +1142,10 @@ srs_error_t SrsRtcPublishStream::send_periodic_twcc()
 {
     srs_error_t err = srs_success;
 
+    if (!rtcp_twcc_.need_feedback()) {
+        return err;
+    }
+
     char pkt[kRtcpPacketSize];
     SrsBuffer *buffer = new SrsBuffer(pkt, sizeof(pkt));
     SrsAutoFree(SrsBuffer, buffer);
diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp
index d18d6186b..785d21eef 100644
--- a/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp
+++ b/trunk/src/kernel/srs_kernel_rtc_rtcp.cpp
@@ -801,6 +801,11 @@ srs_error_t SrsRtcpTWCC::recv_packet(uint16_t sn, srs_utime_t ts)
     return srs_success;
 }
 
+bool SrsRtcpTWCC::need_feedback()
+{
+    return recv_packets_.size() > 0;
+}
+
 srs_error_t SrsRtcpTWCC::decode(SrsBuffer *buffer)
 {
     /*
diff --git a/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp b/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp
index 781949887..c59759dd2 100644
--- a/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp
+++ b/trunk/src/kernel/srs_kernel_rtc_rtcp.hpp
@@ -299,6 +299,7 @@ public:
     void add_recv_delta(uint16_t delta);
 
     srs_error_t recv_packet(uint16_t sn, srs_utime_t ts);
+    bool need_feedback();
 
 // interface ISrsCodec
 public: