Implement RTCRemoteInboundRtpStreamStats for both audio and video.

This implements the essentials of RTCRemoteInboundRtpStreamStats. This
includes:
- ssrc
- transportId
- codecId
- packetsLost
- jitter
- localId
- roundTripTime
https://w3c.github.io/webrtc-stats/#remoteinboundrtpstats-dict*

The following members are not implemented because they require more
work...
- From RTCReceivedRtpStreamStats: packetsReceived, packetsDiscarded,
  packetsRepaired, burstPacketsLost, burstPacketsDiscarded,
  burstLossCount, burstDiscardCount, burstLossRate, burstDiscardRate,
  gapLossRate and gapDiscardRate.
- From RTCRemoteInboundRtpStreamStats: fractionLost.

Bug: webrtc:10455, webrtc:10456
Change-Id: If2ab0da7105d8c93bba58e14aa93bd22ffe57f1d
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/138067
Commit-Queue: Henrik Boström <hbos@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#28073}
diff --git a/api/stats/rtcstats_objects.h b/api/stats/rtcstats_objects.h
index cbcc8fa..64bfa19 100644
--- a/api/stats/rtcstats_objects.h
+++ b/api/stats/rtcstats_objects.h
@@ -468,6 +468,46 @@
   RTCStatsMember<std::string> content_type;
 };
 
+// TODO(https://crbug.com/webrtc/10671): Refactor the stats dictionaries to have
+// the same hierarchy as in the spec; implement RTCReceivedRtpStreamStats.
+// Several metrics are shared between "outbound-rtp", "remote-inbound-rtp",
+// "inbound-rtp" and "remote-outbound-rtp". In the spec there is a hierarchy of
+// dictionaries that minimizes defining the same metrics in multiple places.
+// From JavaScript this hierarchy is not observable and the spec's hierarchy is
+// purely editorial. In C++ non-final classes in the hierarchy could be used to
+// refer to different stats objects within the hierarchy.
+// https://w3c.github.io/webrtc-stats/#remoteinboundrtpstats-dict*
+class RTC_EXPORT RTCRemoteInboundRtpStreamStats final : public RTCStats {
+ public:
+  WEBRTC_RTCSTATS_DECL();
+
+  RTCRemoteInboundRtpStreamStats(const std::string& id, int64_t timestamp_us);
+  RTCRemoteInboundRtpStreamStats(std::string&& id, int64_t timestamp_us);
+  RTCRemoteInboundRtpStreamStats(const RTCRemoteInboundRtpStreamStats& other);
+  ~RTCRemoteInboundRtpStreamStats() override;
+
+  // In the spec RTCRemoteInboundRtpStreamStats inherits from RTCRtpStreamStats
+  // and RTCReceivedRtpStreamStats. The members here are listed based on where
+  // they are defined in the spec.
+  // RTCRtpStreamStats
+  RTCStatsMember<uint32_t> ssrc;
+  RTCStatsMember<std::string> kind;
+  RTCStatsMember<std::string> transport_id;
+  RTCStatsMember<std::string> codec_id;
+  // RTCReceivedRtpStreamStats
+  RTCStatsMember<int32_t> packets_lost;
+  RTCStatsMember<double> jitter;
+  // TODO(hbos): The following RTCReceivedRtpStreamStats metrics should also be
+  // implemented: packetsReceived, packetsDiscarded, packetsRepaired,
+  // burstPacketsLost, burstPacketsDiscarded, burstLossCount, burstDiscardCount,
+  // burstLossRate, burstDiscardRate, gapLossRate and gapDiscardRate.
+  // RTCRemoteInboundRtpStreamStats
+  RTCStatsMember<std::string> local_id;
+  RTCStatsMember<double> round_trip_time;
+  // TODO(hbos): The following RTCRemoteInboundRtpStreamStats metric should also
+  // be implemented: fractionLost.
+};
+
 // https://w3c.github.io/webrtc-stats/#dom-rtcmediasourcestats
 class RTC_EXPORT RTCMediaSourceStats : public RTCStats {
  public: