diff --git a/modules/rtp_rtcp/BUILD.gn b/modules/rtp_rtcp/BUILD.gn
index 261446c..82bd16d 100644
--- a/modules/rtp_rtcp/BUILD.gn
+++ b/modules/rtp_rtcp/BUILD.gn
@@ -34,9 +34,6 @@
     "../../rtc_base:rtc_base_approved",
     "../../system_wrappers",
   ]
-
-  # TODO(crbug.com/webrtc/1348): Fix this warning.
-  configs += [ "//build/config/compiler:no_size_t_to_int_warning" ]
 }
 
 rtc_static_library("rtp_rtcp") {
diff --git a/modules/rtp_rtcp/include/rtp_header_extension_map.h b/modules/rtp_rtcp/include/rtp_header_extension_map.h
index dcb48b6..59ab582 100644
--- a/modules/rtp_rtcp/include/rtp_header_extension_map.h
+++ b/modules/rtp_rtcp/include/rtp_header_extension_map.h
@@ -29,23 +29,23 @@
 class RtpHeaderExtensionMap {
  public:
   static constexpr RTPExtensionType kInvalidType = kRtpExtensionNone;
-  static constexpr uint8_t kInvalidId = 0;
+  static constexpr int kInvalidId = 0;
 
   RtpHeaderExtensionMap();
   explicit RtpHeaderExtensionMap(rtc::ArrayView<const RtpExtension> extensions);
 
   template <typename Extension>
-  bool Register(uint8_t id) {
+  bool Register(int id) {
     return Register(id, Extension::kId, Extension::kUri);
   }
-  bool RegisterByType(uint8_t id, RTPExtensionType type);
-  bool RegisterByUri(uint8_t id, const std::string& uri);
+  bool RegisterByType(int id, RTPExtensionType type);
+  bool RegisterByUri(int id, const std::string& uri);
 
   bool IsRegistered(RTPExtensionType type) const {
     return GetId(type) != kInvalidId;
   }
   // Return kInvalidType if not found.
-  RTPExtensionType GetType(uint8_t id) const {
+  RTPExtensionType GetType(int id) const {
     RTC_DCHECK_GE(id, kMinId);
     RTC_DCHECK_LE(id, kMaxId);
     return types_[id];
@@ -61,15 +61,15 @@
       rtc::ArrayView<const RtpExtensionSize> extensions) const;
 
   // TODO(danilchap): Remove use of the functions below.
-  int32_t Register(RTPExtensionType type, uint8_t id) {
+  int32_t Register(RTPExtensionType type, int id) {
     return RegisterByType(id, type) ? 0 : -1;
   }
   int32_t Deregister(RTPExtensionType type);
 
  private:
-  static constexpr uint8_t kMinId = 1;
-  static constexpr uint8_t kMaxId = 14;
-  bool Register(uint8_t id, RTPExtensionType type, const char* uri);
+  static constexpr int kMinId = 1;
+  static constexpr int kMaxId = 14;
+  bool Register(int id, RTPExtensionType type, const char* uri);
 
   RTPExtensionType types_[kMaxId + 1];
   uint8_t ids_[kRtpExtensionNumberOfExtensions];
diff --git a/modules/rtp_rtcp/source/rtp_header_extension_map.cc b/modules/rtp_rtcp/source/rtp_header_extension_map.cc
index 3d48ef0..6cdcc1f 100644
--- a/modules/rtp_rtcp/source/rtp_header_extension_map.cc
+++ b/modules/rtp_rtcp/source/rtp_header_extension_map.cc
@@ -51,9 +51,9 @@
 }  // namespace
 
 constexpr RTPExtensionType RtpHeaderExtensionMap::kInvalidType;
-constexpr uint8_t RtpHeaderExtensionMap::kInvalidId;
-constexpr uint8_t RtpHeaderExtensionMap::kMinId;
-constexpr uint8_t RtpHeaderExtensionMap::kMaxId;
+constexpr int RtpHeaderExtensionMap::kInvalidId;
+constexpr int RtpHeaderExtensionMap::kMinId;
+constexpr int RtpHeaderExtensionMap::kMaxId;
 
 RtpHeaderExtensionMap::RtpHeaderExtensionMap() {
   for (auto& type : types_)
@@ -69,7 +69,7 @@
     RegisterByUri(extension.id, extension.uri);
 }
 
-bool RtpHeaderExtensionMap::RegisterByType(uint8_t id, RTPExtensionType type) {
+bool RtpHeaderExtensionMap::RegisterByType(int id, RTPExtensionType type) {
   for (const ExtensionInfo& extension : kExtensions)
     if (type == extension.type)
       return Register(id, extension.type, extension.uri);
@@ -77,12 +77,12 @@
   return false;
 }
 
-bool RtpHeaderExtensionMap::RegisterByUri(uint8_t id, const std::string& uri) {
+bool RtpHeaderExtensionMap::RegisterByUri(int id, const std::string& uri) {
   for (const ExtensionInfo& extension : kExtensions)
     if (uri == extension.uri)
       return Register(id, extension.type, extension.uri);
   LOG(LS_WARNING) << "Unknown extension uri:'" << uri
-                  << "', id: " << static_cast<int>(id) << '.';
+                  << "', id: " << id << '.';
   return false;
 }
 
@@ -114,7 +114,7 @@
   return 0;
 }
 
-bool RtpHeaderExtensionMap::Register(uint8_t id,
+bool RtpHeaderExtensionMap::Register(int id,
                                      RTPExtensionType type,
                                      const char* uri) {
   RTC_DCHECK_GT(type, kRtpExtensionNone);
@@ -122,19 +122,19 @@
 
   if (id < kMinId || id > kMaxId) {
     LOG(LS_WARNING) << "Failed to register extension uri:'" << uri
-                    << "' with invalid id:" << static_cast<int>(id) << ".";
+                    << "' with invalid id:" << id << ".";
     return false;
   }
 
   if (GetType(id) == type) {  // Same type/id pair already registered.
     LOG(LS_VERBOSE) << "Reregistering extension uri:'" << uri
-                    << "', id:" << static_cast<int>(id);
+                    << "', id:" << id;
     return true;
   }
 
   if (GetType(id) != kInvalidType) {  // |id| used by another extension type.
     LOG(LS_WARNING) << "Failed to register extension uri:'" << uri
-                    << "', id:" << static_cast<int>(id)
+                    << "', id:" << id
                     << ". Id already in use by extension type "
                     << static_cast<int>(GetType(id));
     return false;
@@ -142,7 +142,8 @@
   RTC_DCHECK(!IsRegistered(type));
 
   types_[id] = type;
-  ids_[type] = id;
+  // There is a run-time check above id fits into uint8_t.
+  ids_[type] = static_cast<uint8_t>(id);
   return true;
 }
 
diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc
index 7df6005..ba0a6ae 100644
--- a/modules/rtp_rtcp/source/rtp_packet.cc
+++ b/modules/rtp_rtcp/source/rtp_packet.cc
@@ -19,6 +19,7 @@
 #include "webrtc/rtc_base/checks.h"
 #include "webrtc/rtc_base/logging.h"
 #include "webrtc/rtc_base/random.h"
+#include "webrtc/rtc_base/safe_conversions.h"
 
 namespace webrtc {
 namespace rtp {
@@ -30,7 +31,7 @@
 constexpr size_t kDefaultPacketSize = 1500;
 }  // namespace
 
-constexpr size_t Packet::kMaxExtensionHeaders;
+constexpr int Packet::kMaxExtensionHeaders;
 constexpr int Packet::kMinExtensionId;
 constexpr int Packet::kMaxExtensionId;
 
@@ -78,7 +79,7 @@
 Packet::~Packet() {}
 
 void Packet::IdentifyExtensions(const ExtensionManager& extensions) {
-  for (size_t i = 0; i < kMaxExtensionHeaders; ++i)
+  for (int i = 0; i < kMaxExtensionHeaders; ++i)
     extension_entries_[i].type = extensions.GetType(i + 1);
 }
 
@@ -242,7 +243,7 @@
   RTC_DCHECK_LE(csrcs.size(), 0x0fu);
   RTC_DCHECK_LE(kFixedHeaderSize + 4 * csrcs.size(), capacity());
   payload_offset_ = kFixedHeaderSize + 4 * csrcs.size();
-  WriteAt(0, (data()[0] & 0xF0) | csrcs.size());
+  WriteAt(0, (data()[0] & 0xF0) | rtc::dchecked_cast<uint8_t>(csrcs.size()));
   size_t offset = kFixedHeaderSize;
   for (uint32_t csrc : csrcs) {
     ByteWriter<uint32_t>::WriteBigEndian(WriteAt(offset), csrc);
@@ -328,12 +329,14 @@
                                          kOneByteExtensionId);
   }
 
-  WriteAt(extensions_offset + extensions_size_, (id << 4) | (length - 1));
+  uint8_t one_byte_header = rtc::dchecked_cast<uint8_t>(id) << 4;
+  one_byte_header |= rtc::dchecked_cast<uint8_t>(length - 1);
+  WriteAt(extensions_offset + extensions_size_, one_byte_header);
 
-  extension_entry->offset =
-      extensions_offset + extensions_size_ + kOneByteHeaderSize;
-  extension_entry->length = length;
-  extensions_size_ = new_extensions_size;
+  extension_entry->offset = rtc::dchecked_cast<uint16_t>(
+      extensions_offset + extensions_size_ + kOneByteHeaderSize);
+  extension_entry->length = rtc::dchecked_cast<uint8_t>(length);
+  extensions_size_ = rtc::dchecked_cast<uint16_t>(new_extensions_size);
 
   // Update header length field.
   uint16_t extensions_words = (extensions_size_ + 3) / 4;  // Wrap up to 32bit.
@@ -497,8 +500,9 @@
         }
 
         extensions_size_ += kOneByteHeaderSize;
-        extension_entries_[idx].offset = extension_offset + extensions_size_;
-        extension_entries_[idx].length = length;
+        extension_entries_[idx].offset =
+            rtc::dchecked_cast<uint16_t>(extension_offset + extensions_size_);
+        extension_entries_[idx].length = rtc::dchecked_cast<uint16_t>(length);
         extensions_size_ += length;
       }
     }
@@ -527,7 +531,7 @@
 
 rtc::ArrayView<uint8_t> Packet::AllocateExtension(ExtensionType type,
                                                   size_t length) {
-  for (size_t i = 0; i < kMaxExtensionHeaders; ++i) {
+  for (int i = 0; i < kMaxExtensionHeaders; ++i) {
     if (extension_entries_[i].type == type) {
       int extension_id = i + 1;
       return AllocateRawExtension(extension_id, length);
diff --git a/modules/rtp_rtcp/source/rtp_packet.h b/modules/rtp_rtcp/source/rtp_packet.h
index 5a02f6c..09a1887 100644
--- a/modules/rtp_rtcp/source/rtp_packet.h
+++ b/modules/rtp_rtcp/source/rtp_packet.h
@@ -26,7 +26,7 @@
  public:
   using ExtensionType = RTPExtensionType;
   using ExtensionManager = RtpHeaderExtensionMap;
-  static constexpr size_t kMaxExtensionHeaders = 14;
+  static constexpr int kMaxExtensionHeaders = 14;
   static constexpr int kMinExtensionId = 1;
   static constexpr int kMaxExtensionId = 14;
 
diff --git a/modules/rtp_rtcp/source/rtp_packet_received.cc b/modules/rtp_rtcp/source/rtp_packet_received.cc
index 82a4f68..0d3fdd1 100644
--- a/modules/rtp_rtcp/source/rtp_packet_received.cc
+++ b/modules/rtp_rtcp/source/rtp_packet_received.cc
@@ -13,6 +13,7 @@
 #include <vector>
 
 #include "webrtc/modules/rtp_rtcp/source/rtp_header_extensions.h"
+#include "webrtc/rtc_base/safe_conversions.h"
 
 namespace webrtc {
 
@@ -23,7 +24,7 @@
   header->timestamp = Timestamp();
   header->ssrc = Ssrc();
   std::vector<uint32_t> csrcs = Csrcs();
-  header->numCSRCs = csrcs.size();
+  header->numCSRCs = rtc::dchecked_cast<uint8_t>(csrcs.size());
   for (size_t i = 0; i < csrcs.size(); ++i) {
     header->arrOfCSRCs[i] = csrcs[i];
   }
