diff --git a/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h b/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
index 75c3074..44a6484 100644
--- a/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
+++ b/modules/rtp_rtcp/mocks/mock_rtp_rtcp.h
@@ -33,6 +33,10 @@
               IncomingRtcpPacket,
               (const uint8_t* incoming_packet, size_t packet_length),
               (override));
+  MOCK_METHOD(void,
+              IncomingRtcpPacket,
+              (rtc::ArrayView<const uint8_t> packet),
+              (override));
   MOCK_METHOD(void, SetRemoteSSRC, (uint32_t ssrc), (override));
   MOCK_METHOD(void, SetLocalSsrc, (uint32_t ssrc), (override));
   MOCK_METHOD(void, SetMaxRtpPacketSize, (size_t size), (override));
diff --git a/modules/rtp_rtcp/source/nack_rtx_unittest.cc b/modules/rtp_rtcp/source/nack_rtx_unittest.cc
index 87c6e66..869e1cc 100644
--- a/modules/rtp_rtcp/source/nack_rtx_unittest.cc
+++ b/modules/rtp_rtcp/source/nack_rtx_unittest.cc
@@ -103,7 +103,7 @@
   }
 
   bool SendRtcp(const uint8_t* data, size_t len) override {
-    module_->IncomingRtcpPacket((const uint8_t*)data, len);
+    module_->IncomingRtcpPacket(rtc::MakeArrayView((const uint8_t*)data, len));
     return true;
   }
   int count_;
diff --git a/modules/rtp_rtcp/source/rtcp_receiver.h b/modules/rtp_rtcp/source/rtcp_receiver.h
index cdf4cba..696e0fb 100644
--- a/modules/rtp_rtcp/source/rtcp_receiver.h
+++ b/modules/rtp_rtcp/source/rtcp_receiver.h
@@ -98,7 +98,9 @@
 
   ~RTCPReceiver();
 
-  void IncomingPacket(const uint8_t* packet, size_t packet_size) {
+  [[deprecated("Use ArrayView verwsion")]] void IncomingPacket(
+      const uint8_t* packet,
+      size_t packet_size) {
     IncomingPacket(rtc::MakeArrayView(packet, packet_size));
   }
   void IncomingPacket(rtc::ArrayView<const uint8_t> packet);
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl.h b/modules/rtp_rtcp/source/rtp_rtcp_impl.h
index f164195..38a9bf0 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl.h
@@ -62,6 +62,9 @@
   // Called when we receive an RTCP packet.
   void IncomingRtcpPacket(const uint8_t* incoming_packet,
                           size_t incoming_packet_length) override;
+  void IncomingRtcpPacket(rtc::ArrayView<const uint8_t> packet) override {
+    IncomingRtcpPacket(packet.data(), packet.size());
+  }
 
   void SetRemoteSSRC(uint32_t ssrc) override;
   void SetLocalSsrc(uint32_t ssrc) override;
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc
index 31dd149..565e1ea 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2.cc
@@ -143,10 +143,10 @@
   return absl::nullopt;
 }
 
-void ModuleRtpRtcpImpl2::IncomingRtcpPacket(const uint8_t* rtcp_packet,
-                                            const size_t length) {
+void ModuleRtpRtcpImpl2::IncomingRtcpPacket(
+    rtc::ArrayView<const uint8_t> rtcp_packet) {
   RTC_DCHECK_RUN_ON(&rtcp_thread_checker_);
-  rtcp_receiver_.IncomingPacket(rtcp_packet, length);
+  rtcp_receiver_.IncomingPacket(rtcp_packet);
 }
 
 void ModuleRtpRtcpImpl2::RegisterSendPayloadFrequency(int payload_type,
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2.h b/modules/rtp_rtcp/source/rtp_rtcp_impl2.h
index e7a3ac0..b6071d9 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2.h
@@ -66,8 +66,14 @@
   // Receiver part.
 
   // Called when we receive an RTCP packet.
-  void IncomingRtcpPacket(const uint8_t* incoming_packet,
-                          size_t incoming_packet_length) override;
+  [[deprecated("Use ArrayView version")]] void IncomingRtcpPacket(
+      const uint8_t* incoming_packet,
+      size_t incoming_packet_length) override {
+    IncomingRtcpPacket(
+        rtc::MakeArrayView(incoming_packet, incoming_packet_length));
+  }
+  void IncomingRtcpPacket(
+      rtc::ArrayView<const uint8_t> incoming_packet) override;
 
   void SetRemoteSSRC(uint32_t ssrc) override;
 
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc b/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
index b793ba8..ceddc5f 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
+++ b/modules/rtp_rtcp/source/rtp_rtcp_impl2_unittest.cc
@@ -130,7 +130,7 @@
       Packet packet = std::move(rtcp_packets_.front());
       rtcp_packets_.pop_front();
       EXPECT_TRUE(receiver_);
-      receiver_->IncomingRtcpPacket(packet.data.data(), packet.data.size());
+      receiver_->IncomingRtcpPacket(packet.data);
     }
   }
   TaskQueueBase* GetAsTaskQueue() override {
@@ -372,7 +372,7 @@
     nack.SetMediaSsrc(sender ? kSenderSsrc : kReceiverSsrc);
     nack.SetPacketIds(list, kListLength);
     rtc::Buffer packet = nack.Build();
-    module->impl_->IncomingRtcpPacket(packet.data(), packet.size());
+    module->impl_->IncomingRtcpPacket(packet);
   }
 };
 
@@ -798,7 +798,7 @@
   sr.SetPacketCount(123u);
   sr.SetOctetCount(456u);
   auto raw_packet = sr.Build();
-  receiver_.impl_->IncomingRtcpPacket(raw_packet.data(), raw_packet.size());
+  receiver_.impl_->IncomingRtcpPacket(raw_packet);
   EXPECT_THAT(receiver_.impl_->GetSenderReportStats(), Eq(absl::nullopt));
 }
 
@@ -816,7 +816,7 @@
   sr.SetPacketCount(kPacketCount);
   sr.SetOctetCount(kOctetCount);
   auto raw_packet = sr.Build();
-  receiver_.impl_->IncomingRtcpPacket(raw_packet.data(), raw_packet.size());
+  receiver_.impl_->IncomingRtcpPacket(raw_packet);
 
   EXPECT_THAT(
       receiver_.impl_->GetSenderReportStats(),
diff --git a/modules/rtp_rtcp/source/rtp_rtcp_interface.h b/modules/rtp_rtcp/source/rtp_rtcp_interface.h
index 2024b30..4bcae06 100644
--- a/modules/rtp_rtcp/source/rtp_rtcp_interface.h
+++ b/modules/rtp_rtcp/source/rtp_rtcp_interface.h
@@ -186,8 +186,11 @@
   // Receiver functions
   // **************************************************************************
 
-  virtual void IncomingRtcpPacket(const uint8_t* incoming_packet,
-                                  size_t incoming_packet_length) = 0;
+  [[deprecated("Use ArrayView version")]] virtual void IncomingRtcpPacket(
+      const uint8_t* incoming_packet,
+      size_t incoming_packet_length) = 0;
+  virtual void IncomingRtcpPacket(
+      rtc::ArrayView<const uint8_t> incoming_packet) = 0;
 
   virtual void SetRemoteSSRC(uint32_t ssrc) = 0;
 
