diff --git a/api/statstypes.cc b/api/statstypes.cc
index 29a171e..714d36b 100644
--- a/api/statstypes.cc
+++ b/api/statstypes.cc
@@ -460,6 +460,8 @@
       return "googComponent";
     case kStatsValueNameContentName:
       return "googContentName";
+    case kStatsValueNameContentType:
+      return "googContentType";
     case kStatsValueNameCpuLimitedResolution:
       return "googCpuLimitedResolution";
     case kStatsValueNameDecodingCTSG:
diff --git a/api/statstypes.h b/api/statstypes.h
index 1cc5cda..42e3601 100644
--- a/api/statstypes.h
+++ b/api/statstypes.h
@@ -108,7 +108,6 @@
     kStatsValueNameDataChannelId,
     kStatsValueNameFramesDecoded,
     kStatsValueNameFramesEncoded,
-    kStatsValueNameInterframeDelayMaxMs,  // Max over last 10 seconds.
     kStatsValueNameMediaType,
     kStatsValueNamePacketsLost,
     kStatsValueNamePacketsReceived,
@@ -149,6 +148,7 @@
     kStatsValueNameCodecName,
     kStatsValueNameComponent,
     kStatsValueNameContentName,
+    kStatsValueNameContentType,
     kStatsValueNameCpuLimitedResolution,
     kStatsValueNameCurrentDelayMs,
     kStatsValueNameDecodeMs,
@@ -184,6 +184,7 @@
     kStatsValueNameFrameWidthReceived,
     kStatsValueNameFrameWidthSent,
     kStatsValueNameInitiator,
+    kStatsValueNameInterframeDelayMaxMs,  // Max over last 10 seconds.
     kStatsValueNameIssuerId,
     kStatsValueNameJitterBufferMs,
     kStatsValueNameJitterReceived,
diff --git a/api/video/video_content_type.cc b/api/video/video_content_type.cc
index 278b57c..351cfee 100644
--- a/api/video/video_content_type.cc
+++ b/api/video/video_content_type.cc
@@ -90,5 +90,9 @@
   // Any 6-bit value is allowed.
   return value < (1 << kTotalBitsSize);
 }
+
+const char* ToString(const VideoContentType& content_type) {
+  return IsScreenshare(content_type) ? "screen" : "realtime";
+}
 }  // namespace videocontenttypehelpers
 }  // namespace webrtc
diff --git a/api/video/video_content_type.h b/api/video/video_content_type.h
index 6f6bbe8..8addb13 100644
--- a/api/video/video_content_type.h
+++ b/api/video/video_content_type.h
@@ -13,6 +13,8 @@
 
 #include <stdint.h>
 
+#include <string>
+
 namespace webrtc {
 
 enum class VideoContentType : uint8_t {
@@ -32,6 +34,8 @@
   bool IsScreenshare(const VideoContentType& content_type);
 
   bool IsValidContentType(uint8_t value);
+
+  const char* ToString(const VideoContentType& content_type);
 }  // namespace videocontenttypehelpers
 
 }  // namespace webrtc
diff --git a/call/video_receive_stream.h b/call/video_receive_stream.h
index ef1c715..e51184e 100644
--- a/call/video_receive_stream.h
+++ b/call/video_receive_stream.h
@@ -88,6 +88,8 @@
     int width = 0;
     int height = 0;
 
+    VideoContentType content_type = VideoContentType::UNSPECIFIED;
+
     int sync_offset_ms = std::numeric_limits<int>::max();
 
     uint32_t ssrc = 0;
diff --git a/media/base/mediachannel.h b/media/base/mediachannel.h
index 1ab4123..5aae309 100644
--- a/media/base/mediachannel.h
+++ b/media/base/mediachannel.h
@@ -771,6 +771,7 @@
         frames_decoded(0),
         frames_rendered(0),
         interframe_delay_max_ms(-1),
+        content_type(webrtc::VideoContentType::UNSPECIFIED),
         decode_ms(0),
         max_decode_ms(0),
         jitter_buffer_ms(0),
@@ -802,6 +803,8 @@
   rtc::Optional<uint64_t> qp_sum;
   int64_t interframe_delay_max_ms;
 
+  webrtc::VideoContentType content_type;
+
   // All stats below are gathered per-VideoReceiver, but some will be correlated
   // across MediaStreamTracks.  NOTE(hta): when sinking stats into per-SSRC
   // structures, reflect this in the new layout.
diff --git a/media/engine/webrtcvideoengine.cc b/media/engine/webrtcvideoengine.cc
index cb6f1ce..fd27be4 100644
--- a/media/engine/webrtcvideoengine.cc
+++ b/media/engine/webrtcvideoengine.cc
@@ -2418,6 +2418,8 @@
 
   info.interframe_delay_max_ms = stats.interframe_delay_max_ms;
 
+  info.content_type = stats.content_type;
+
   info.codec_name = GetCodecNameFromPayloadType(stats.current_payload_type);
 
   info.firs_sent = stats.rtcp_packet_type_counts.fir_packets;
diff --git a/pc/statscollector.cc b/pc/statscollector.cc
index 97bae3d..0458e82 100644
--- a/pc/statscollector.cc
+++ b/pc/statscollector.cc
@@ -272,6 +272,10 @@
 
   report->AddInt64(StatsReport::kStatsValueNameInterframeDelayMaxMs,
                    info.interframe_delay_max_ms);
+
+  report->AddString(
+      StatsReport::kStatsValueNameContentType,
+      webrtc::videocontenttypehelpers::ToString(info.content_type));
 }
 
 void ExtractStats(const cricket::VideoSenderInfo& info, StatsReport* report) {
diff --git a/video/receive_statistics_proxy.cc b/video/receive_statistics_proxy.cc
index 2448bad..ff4c6fe 100644
--- a/video/receive_statistics_proxy.cc
+++ b/video/receive_statistics_proxy.cc
@@ -501,6 +501,7 @@
   stats_.interframe_delay_max_ms =
       interframe_delay_max_moving_.Max(now_ms).value_or(-1);
   stats_.timing_frame_info = timing_frame_info_counter_.Max(now_ms);
+  stats_.content_type = last_content_type_;
   return stats_;
 }
 
diff --git a/video/receive_statistics_proxy_unittest.cc b/video/receive_statistics_proxy_unittest.cc
index 0b8b3a6..068b221 100644
--- a/video/receive_statistics_proxy_unittest.cc
+++ b/video/receive_statistics_proxy_unittest.cc
@@ -98,6 +98,21 @@
             statistics_proxy_->GetStats().qp_sum);
 }
 
+TEST_F(ReceiveStatisticsProxyTest, ReportsContentType) {
+  const std::string kRealtimeString("realtime");
+  const std::string kScreenshareString("screen");
+  EXPECT_EQ(kRealtimeString, videocontenttypehelpers::ToString(
+                            statistics_proxy_->GetStats().content_type));
+  statistics_proxy_->OnDecodedFrame(rtc::Optional<uint8_t>(3u),
+                                    VideoContentType::SCREENSHARE);
+  EXPECT_EQ(kScreenshareString, videocontenttypehelpers::ToString(
+                          statistics_proxy_->GetStats().content_type));
+  statistics_proxy_->OnDecodedFrame(rtc::Optional<uint8_t>(3u),
+                                    VideoContentType::UNSPECIFIED);
+  EXPECT_EQ(kRealtimeString, videocontenttypehelpers::ToString(
+                            statistics_proxy_->GetStats().content_type));
+}
+
 TEST_F(ReceiveStatisticsProxyTest, ReportsMaxInterframeDelay) {
   const int64_t kInterframeDelayMs1 = 100;
   const int64_t kInterframeDelayMs2 = 200;
