diff --git a/pc/rtc_stats_collector.cc b/pc/rtc_stats_collector.cc
index c180dd6..d6ade5b 100644
--- a/pc/rtc_stats_collector.cc
+++ b/pc/rtc_stats_collector.cc
@@ -92,15 +92,14 @@
   return sb.str();
 }
 
-std::string RTCRemoteInboundRtpStreamStatsIdFromSsrcs(
+std::string RTCRemoteInboundRtpStreamStatsIdFromSourceSsrc(
     cricket::MediaType media_type,
-    uint32_t sender_ssrc,
     uint32_t source_ssrc) {
   char buf[1024];
   rtc::SimpleStringBuilder sb(buf);
   sb << "RTCRemoteInboundRtp"
      << (media_type == cricket::MEDIA_TYPE_AUDIO ? "Audio" : "Video")
-     << "Stream_" << sender_ssrc << "_" << source_ssrc;
+     << "Stream_" << source_ssrc;
   return sb.str();
 }
 
@@ -408,10 +407,10 @@
   // for "remote-[outbound/inbound]-rtp" it refers to the local time when the
   // Report Block was received.
   auto remote_inbound = absl::make_unique<RTCRemoteInboundRtpStreamStats>(
-      RTCRemoteInboundRtpStreamStatsIdFromSsrcs(
-          media_type, report_block.sender_ssrc, report_block.source_ssrc),
+      RTCRemoteInboundRtpStreamStatsIdFromSourceSsrc(media_type,
+                                                     report_block.source_ssrc),
       /*timestamp=*/report_block_data.report_block_timestamp_utc_us());
-  remote_inbound->ssrc = report_block.sender_ssrc;
+  remote_inbound->ssrc = report_block.source_ssrc;
   remote_inbound->kind =
       media_type == cricket::MEDIA_TYPE_AUDIO ? "audio" : "video";
   remote_inbound->packets_lost = report_block.packets_lost;
diff --git a/pc/rtc_stats_collector_unittest.cc b/pc/rtc_stats_collector_unittest.cc
index 979db60..be4f2b9 100644
--- a/pc/rtc_stats_collector_unittest.cc
+++ b/pc/rtc_stats_collector_unittest.cc
@@ -2450,9 +2450,8 @@
   fake_clock_.SetTime(Timestamp::us(kReportBlockTimestampUtcUs));
 
   RTCPReportBlock report_block;
-  // The remote-inbound-rtp SSRC, "SSRC of sender of this report".
-  report_block.sender_ssrc = 8;
-  // The outbound-rtp SSRC, "SSRC of the RTP packet sender".
+  // The remote-inbound-rtp SSRC and the outbound-rtp SSRC is the same as the
+  // |source_ssrc|, "SSRC of the RTP packet sender".
   report_block.source_ssrc = 12;
   report_block.packets_lost = 7;
   ReportBlockData report_block_data;
@@ -2468,9 +2467,9 @@
   rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
 
   RTCRemoteInboundRtpStreamStats expected_remote_inbound_rtp(
-      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_8_12",
+      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12",
       kReportBlockTimestampUtcUs);
-  expected_remote_inbound_rtp.ssrc = 8;
+  expected_remote_inbound_rtp.ssrc = 12;
   expected_remote_inbound_rtp.kind = MediaTypeLowerCase();
   expected_remote_inbound_rtp.transport_id =
       "RTCTransport_TransportName_1";  // 1 for RTP (we have no RTCP transport)
@@ -2495,9 +2494,8 @@
   fake_clock_.SetTime(Timestamp::us(kReportBlockTimestampUtcUs));
 
   RTCPReportBlock report_block;
-  // The remote-inbound-rtp SSRC, "SSRC of sender of this report".
-  report_block.sender_ssrc = 8;
-  // The outbound-rtp SSRC, "SSRC of the RTP packet sender".
+  // The remote-inbound-rtp SSRC and the outbound-rtp SSRC is the same as the
+  // |source_ssrc|, "SSRC of the RTP packet sender".
   report_block.source_ssrc = 12;
   ReportBlockData report_block_data;
   report_block_data.SetReportBlock(report_block, kReportBlockTimestampUtcUs);
@@ -2511,7 +2509,7 @@
   rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
 
   std::string remote_inbound_rtp_id =
-      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_8_12";
+      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12";
   ASSERT_TRUE(report->Get(remote_inbound_rtp_id));
   auto& remote_inbound_rtp = report->Get(remote_inbound_rtp_id)
                                  ->cast_to<RTCRemoteInboundRtpStreamStats>();
@@ -2528,9 +2526,8 @@
   fake_clock_.SetTime(Timestamp::us(kReportBlockTimestampUtcUs));
 
   RTCPReportBlock report_block;
-  // The remote-inbound-rtp SSRC, "SSRC of sender of this report".
-  report_block.sender_ssrc = 8;
-  // The outbound-rtp SSRC, "SSRC of the RTP packet sender".
+  // The remote-inbound-rtp SSRC and the outbound-rtp SSRC is the same as the
+  // |source_ssrc|, "SSRC of the RTP packet sender".
   report_block.source_ssrc = 12;
   report_block.jitter = 5000;
   ReportBlockData report_block_data;
@@ -2546,7 +2543,7 @@
   rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
 
   std::string remote_inbound_rtp_id =
-      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_8_12";
+      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12";
   ASSERT_TRUE(report->Get(remote_inbound_rtp_id));
   auto& remote_inbound_rtp = report->Get(remote_inbound_rtp_id)
                                  ->cast_to<RTCRemoteInboundRtpStreamStats>();
@@ -2566,9 +2563,8 @@
   fake_clock_.SetTime(Timestamp::us(kReportBlockTimestampUtcUs));
 
   RTCPReportBlock report_block;
-  // The remote-inbound-rtp SSRC, "SSRC of sender of this report".
-  report_block.sender_ssrc = 8;
-  // The outbound-rtp SSRC, "SSRC of the RTP packet sender".
+  // The remote-inbound-rtp SSRC and the outbound-rtp SSRC is the same as the
+  // |source_ssrc|, "SSRC of the RTP packet sender".
   report_block.source_ssrc = 12;
   ReportBlockData report_block_data;
   report_block_data.SetReportBlock(report_block, kReportBlockTimestampUtcUs);
@@ -2588,7 +2584,7 @@
   rtc::scoped_refptr<const RTCStatsReport> report = stats_->GetStatsReport();
 
   std::string remote_inbound_rtp_id =
-      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_8_12";
+      "RTCRemoteInboundRtp" + MediaTypeUpperCase() + "Stream_12";
   ASSERT_TRUE(report->Get(remote_inbound_rtp_id));
   auto& remote_inbound_rtp = report->Get(remote_inbound_rtp_id)
                                  ->cast_to<RTCRemoteInboundRtpStreamStats>();
