diff --git a/webrtc/pc/peerconnection_integrationtest.cc b/webrtc/pc/peerconnection_integrationtest.cc
index ad1a12c..e6c3cf1 100644
--- a/webrtc/pc/peerconnection_integrationtest.cc
+++ b/webrtc/pc/peerconnection_integrationtest.cc
@@ -116,6 +116,18 @@
   desc->set_msid_supported(false);
 }
 
+int FindFirstMediaStatsIndexByKind(
+    const std::string& kind,
+    const std::vector<const webrtc::RTCMediaStreamTrackStats*>&
+        media_stats_vec) {
+  for (size_t i = 0; i < media_stats_vec.size(); i++) {
+    if (media_stats_vec[i]->kind.ValueToString() == kind) {
+      return i;
+    }
+  }
+  return -1;
+}
+
 class SignalingMessageReceiver {
  public:
   virtual void ReceiveSdpMessage(const std::string& type,
@@ -1926,9 +1938,31 @@
   ASSERT_EQ(1U, inbound_stream_stats.size());
   ASSERT_TRUE(inbound_stream_stats[0]->bytes_received.is_defined());
   ASSERT_GT(*inbound_stream_stats[0]->bytes_received, 0U);
-  // TODO(deadbeef): Test that track_id is defined. This is not currently
-  // working since SSRCs are used to match RtpReceivers (and their tracks) with
-  // received stream stats in TrackMediaInfoMap.
+  ASSERT_TRUE(inbound_stream_stats[0]->track_id.is_defined());
+}
+
+// Test that we can successfully get the media related stats (audio level
+// etc.) for the unsignaled stream.
+TEST_F(PeerConnectionIntegrationTest,
+       GetMediaStatsForUnsignaledStreamWithNewStatsApi) {
+  ASSERT_TRUE(CreatePeerConnectionWrappers());
+  ConnectFakeSignaling();
+  caller()->AddAudioVideoMediaStream();
+  // Remove SSRCs and MSIDs from the received offer SDP.
+  callee()->SetReceivedSdpMunger(RemoveSsrcsAndMsids);
+  caller()->CreateAndSetAndSignalOffer();
+  ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout);
+  // Wait for one audio frame to be received by the callee.
+  ExpectNewFramesReceivedWithWait(0, 0, 1, 1, kMaxWaitForFramesMs);
+
+  rtc::scoped_refptr<const webrtc::RTCStatsReport> report =
+      callee()->NewGetStats();
+  ASSERT_NE(nullptr, report);
+
+  auto media_stats = report->GetStatsOfType<webrtc::RTCMediaStreamTrackStats>();
+  auto audio_index = FindFirstMediaStatsIndexByKind("audio", media_stats);
+  ASSERT_GE(audio_index, 0);
+  EXPECT_TRUE(media_stats[audio_index]->audio_level.is_defined());
 }
 
 // Test that DTLS 1.0 is used if both sides only support DTLS 1.0.
diff --git a/webrtc/pc/trackmediainfomap.cc b/webrtc/pc/trackmediainfomap.cc
index 33880b9..b5c5ac6 100644
--- a/webrtc/pc/trackmediainfomap.cc
+++ b/webrtc/pc/trackmediainfomap.cc
@@ -34,7 +34,9 @@
     std::map<uint32_t, AudioTrackInterface*>* local_audio_track_by_ssrc,
     std::map<uint32_t, VideoTrackInterface*>* local_video_track_by_ssrc,
     std::map<uint32_t, AudioTrackInterface*>* remote_audio_track_by_ssrc,
-    std::map<uint32_t, VideoTrackInterface*>* remote_video_track_by_ssrc) {
+    std::map<uint32_t, VideoTrackInterface*>* remote_video_track_by_ssrc,
+    AudioTrackInterface** unsignaled_audio_track,
+    VideoTrackInterface** unsignaled_video_track) {
   RTC_DCHECK(local_audio_track_by_ssrc->empty());
   RTC_DCHECK(local_video_track_by_ssrc->empty());
   RTC_DCHECK(remote_audio_track_by_ssrc->empty());
@@ -80,6 +82,12 @@
     RtpParameters params = rtp_receiver->GetParameters();
     for (const RtpEncodingParameters& encoding : params.encodings) {
       if (!encoding.ssrc) {
+        if (media_type == cricket::MEDIA_TYPE_AUDIO) {
+          *unsignaled_audio_track = static_cast<AudioTrackInterface*>(track);
+        } else {
+          RTC_DCHECK(media_type == cricket::MEDIA_TYPE_VIDEO);
+          *unsignaled_video_track = static_cast<VideoTrackInterface*>(track);
+        }
         continue;
       }
       if (media_type == cricket::MEDIA_TYPE_AUDIO) {
@@ -110,12 +118,13 @@
   std::map<uint32_t, VideoTrackInterface*> local_video_track_by_ssrc;
   std::map<uint32_t, AudioTrackInterface*> remote_audio_track_by_ssrc;
   std::map<uint32_t, VideoTrackInterface*> remote_video_track_by_ssrc;
-  GetAudioAndVideoTrackBySsrc(rtp_senders,
-                              rtp_receivers,
-                              &local_audio_track_by_ssrc,
-                              &local_video_track_by_ssrc,
-                              &remote_audio_track_by_ssrc,
-                              &remote_video_track_by_ssrc);
+  AudioTrackInterface* unsignaled_audio_track = nullptr;
+  VideoTrackInterface* unsignaled_video_track = nullptr;
+  GetAudioAndVideoTrackBySsrc(
+      rtp_senders, rtp_receivers, &local_audio_track_by_ssrc,
+      &local_video_track_by_ssrc, &remote_audio_track_by_ssrc,
+      &remote_video_track_by_ssrc, &unsignaled_audio_track,
+      &unsignaled_video_track);
   if (voice_media_info_) {
     for (auto& sender_info : voice_media_info_->senders) {
       AudioTrackInterface* associated_track =
@@ -137,6 +146,9 @@
         RTC_DCHECK(voice_info_by_remote_track_.find(associated_track) ==
                    voice_info_by_remote_track_.end());
         voice_info_by_remote_track_[associated_track] = &receiver_info;
+      } else if (unsignaled_audio_track) {
+        audio_track_by_receiver_info_[&receiver_info] = unsignaled_audio_track;
+        voice_info_by_remote_track_[unsignaled_audio_track] = &receiver_info;
       }
     }
   }
@@ -161,6 +173,9 @@
         RTC_DCHECK(video_info_by_remote_track_.find(associated_track) ==
                    video_info_by_remote_track_.end());
         video_info_by_remote_track_[associated_track] = &receiver_info;
+      } else if (unsignaled_video_track) {
+        video_track_by_receiver_info_[&receiver_info] = unsignaled_video_track;
+        video_info_by_remote_track_[unsignaled_video_track] = &receiver_info;
       }
     }
   }
