diff --git a/trunk/src/app/srs_app_rtc_conn.cpp b/trunk/src/app/srs_app_rtc_conn.cpp
index 57af15bc5..d8f03e26c 100644
--- a/trunk/src/app/srs_app_rtc_conn.cpp
+++ b/trunk/src/app/srs_app_rtc_conn.cpp
@@ -3090,8 +3090,23 @@ void video_track_generate_play_offer(SrsRtcTrackDescription* track, string mid,
 
     local_media_desc.extmaps_ = track->extmaps_;
 
-    local_media_desc.mid_ = mid; // Use transformed mid, not the mid of track.
-    local_sdp.groups_.push_back(local_media_desc.mid_);
+    // If mid not duplicated, use mid_ of track. Otherwise, use transformed mid.
+    if (true) {
+        bool mid_duplicated = false;
+        for (int i = 0; i < (int)local_sdp.groups_.size(); ++i) {
+            string& existed_mid = local_sdp.groups_.at(i);
+            if(existed_mid == track->mid_) {
+                mid_duplicated = true;
+                break;
+            }
+        }
+        if (mid_duplicated) {
+            local_media_desc.mid_ = mid;
+        } else {
+            local_media_desc.mid_ = track->mid_;
+        }
+        local_sdp.groups_.push_back(local_media_desc.mid_);
+    }
 
     if (track->direction_ == "recvonly") {
         local_media_desc.recvonly_ = true;
diff --git a/trunk/src/app/srs_app_rtc_source.hpp b/trunk/src/app/srs_app_rtc_source.hpp
index 5d866266f..63be91c8a 100644
--- a/trunk/src/app/srs_app_rtc_source.hpp
+++ b/trunk/src/app/srs_app_rtc_source.hpp
@@ -381,7 +381,7 @@ public:
     bool is_active_;
     // direction
     std::string direction_;
-    // TODO: FIXME: whether mid is needed?
+    // mid is used in BOUNDLE
     std::string mid_;
     // msid_: track stream id
     std::string msid_;