Replace ArrayView with std::span in media/

Search&Replace MakeArrayView and ArrayView with std::span
Search&Replace include "api/array_view.h" with include <span>
Remove build dependencies on array_view target

In rtp_utils_unittest remove unnecessary span constants touched by rename above.

Bug: webrtc:439801349
Change-Id: I7cf2dd49622dd457455474aedc9bede3262d5df5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/455281
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#47103}
diff --git a/media/BUILD.gn b/media/BUILD.gn
index fbe70c9..9b026bf 100644
--- a/media/BUILD.gn
+++ b/media/BUILD.gn
@@ -69,7 +69,6 @@
     ":video_broadcaster",
     ":video_common",
     ":video_source_base",
-    "../api:array_view",
     "../api:audio_options_api",
     "../api:call_api",
     "../api:field_trials_view",
@@ -218,7 +217,6 @@
     "base/video_common.h",
   ]
   deps = [
-    "../api:array_view",
     "../rtc_base:stringutils",
     "../rtc_base:timeutils",
     "../rtc_base/system:rtc_export",
@@ -238,7 +236,6 @@
     ":rtc_media_config",
     ":stream_params",
     ":video_common",
-    "../api:array_view",
     "../api:audio_options_api",
     "../api:field_trials_view",
     "../api:rtc_error",
@@ -273,7 +270,6 @@
     ":media_channel",
     ":rtp_utils",
     ":stream_params",
-    "../api:array_view",
     "../api:audio_options_api",
     "../api:call_api",
     "../api:frame_transformer_interface",
@@ -416,7 +412,6 @@
   ]
   deps = [
     ":turn_utils",
-    "../api:array_view",
     "../modules/rtp_rtcp:rtp_rtcp_format",
     "../rtc_base:async_packet_socket",
     "../rtc_base:byte_order",
@@ -434,7 +429,6 @@
   ]
   deps = [
     ":rid_description",
-    "../api:array_view",
     "../rtc_base:checks",
     "../rtc_base:stringutils",
     "../rtc_base:unique_id_generator",
@@ -457,7 +451,6 @@
     "base/turn_utils.h",
   ]
   deps = [
-    "../api:array_view",
     "../api/transport:stun_types",
     "../rtc_base:byte_order",
     "../rtc_base/system:rtc_export",
@@ -486,7 +479,6 @@
   deps = [
     ":rtc_sdp_video_format_utils",
     ":video_common",
-    "../api:array_view",
     "../api:fec_controller_api",
     "../api:field_trials_view",
     "../api:scoped_refptr",
@@ -594,7 +586,6 @@
     ":rtc_media_config",
     ":rtp_utils",
     ":stream_params",
-    "../api:array_view",
     "../api:audio_options_api",
     "../api:call_api",
     "../api:field_trials_view",
@@ -731,7 +722,6 @@
     deps = [
       ":media_channel",
       ":rtc_data_sctp_transport_internal",
-      "../api:array_view",
       "../api:data_channel_interface",
       "../api:dtls_transport_interface",
       "../api:field_trials_view",
@@ -822,7 +812,6 @@
       ":rtp_utils",
       ":stream_params",
       ":video_common",
-      "../api:array_view",
       "../api:audio_options_api",
       "../api:call_api",
       "../api:fec_controller_api",
@@ -966,7 +955,6 @@
         ":stream_params",
         ":turn_utils",
         ":video_common",
-        "../api:array_view",
         "../api:audio_options_api",
         "../api:call_api",
         "../api:create_simulcast_test_fixture_api",
diff --git a/media/base/fake_network_interface.h b/media/base/fake_network_interface.h
index fa758aa..4573c43 100644
--- a/media/base/fake_network_interface.h
+++ b/media/base/fake_network_interface.h
@@ -15,10 +15,10 @@
 #include <cstdint>
 #include <map>
 #include <set>
+#include <span>
 #include <utility>
 #include <vector>
 
-#include "api/array_view.h"
 #include "api/environment/environment.h"
 #include "api/task_queue/pending_task_safety_flag.h"
 #include "api/task_queue/task_queue_base.h"
@@ -192,7 +192,7 @@
   void SetRtpSsrc(uint32_t ssrc, CopyOnWriteBuffer& buffer) {
     RTC_CHECK_GE(buffer.size(), 12);
     SetBE32(
-        ArrayView<uint8_t>(buffer.MutableData(), buffer.size()).subspan(8, 4),
+        std::span<uint8_t>(buffer.MutableData(), buffer.size()).subspan(8, 4),
         ssrc);
   }
 
diff --git a/media/base/media_channel_impl.cc b/media/base/media_channel_impl.cc
index d8f3b41..cb74a27 100644
--- a/media/base/media_channel_impl.cc
+++ b/media/base/media_channel_impl.cc
@@ -12,11 +12,11 @@
 
 #include <cstdint>
 #include <map>
+#include <span>
 #include <string>
 #include <utility>
 
 #include "absl/functional/any_invocable.h"
-#include "api/array_view.h"
 #include "api/audio_options.h"
 #include "api/call/transport.h"
 #include "api/media_stream_interface.h"
@@ -190,7 +190,7 @@
 }
 
 bool MediaChannelUtil::TransportForMediaChannels::SendRtcp(
-    ArrayView<const uint8_t> packet,
+    std::span<const uint8_t> packet,
     const PacketOptions& options) {
   auto send = [this, packet = CopyOnWriteBuffer(packet, kMaxRtpPacketLen),
                options]() mutable {
@@ -206,7 +206,7 @@
 }
 
 bool MediaChannelUtil::TransportForMediaChannels::SendRtp(
-    ArrayView<const uint8_t> packet,
+    std::span<const uint8_t> packet,
     const PacketOptions& options) {
   auto send = [this, packet = CopyOnWriteBuffer(packet, kMaxRtpPacketLen),
                options]() mutable {
diff --git a/media/base/media_channel_impl.h b/media/base/media_channel_impl.h
index 958018b..9826cdf 100644
--- a/media/base/media_channel_impl.h
+++ b/media/base/media_channel_impl.h
@@ -14,7 +14,8 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include "api/array_view.h"
+#include <span>
+
 #include "api/call/transport.h"
 #include "api/scoped_refptr.h"
 #include "api/sequence_checker.h"
@@ -89,9 +90,9 @@
     ~TransportForMediaChannels() override;
 
     // Implementation of Transport
-    bool SendRtp(ArrayView<const uint8_t> packet,
+    bool SendRtp(std::span<const uint8_t> packet,
                  const PacketOptions& options) override;
-    bool SendRtcp(ArrayView<const uint8_t> packet,
+    bool SendRtcp(std::span<const uint8_t> packet,
                   const PacketOptions& options) override;
 
     // Not implementation of Transport
diff --git a/media/base/media_engine.cc b/media/base/media_engine.cc
index ba0a91e..52da64d 100644
--- a/media/base/media_engine.cc
+++ b/media/base/media_engine.cc
@@ -14,12 +14,12 @@
 #include <cstdint>
 #include <memory>
 #include <optional>
+#include <span>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "absl/algorithm/container.h"
-#include "api/array_view.h"
 #include "api/field_trials_view.h"
 #include "api/rtc_error.h"
 #include "api/rtp_headers.h"
@@ -90,7 +90,7 @@
 }
 
 RTCError CheckScalabilityModeValues(const RtpParameters& rtp_parameters,
-                                    ArrayView<const Codec> send_codecs,
+                                    std::span<const Codec> send_codecs,
                                     std::optional<Codec> send_codec) {
   if (send_codecs.empty()) {
     // This is an audio sender or an extra check in the stack where the codec
@@ -161,7 +161,7 @@
 }
 
 RTCError CheckRtpParametersValues(const RtpParameters& rtp_parameters,
-                                  ArrayView<const Codec> send_codecs,
+                                  std::span<const Codec> send_codecs,
                                   std::optional<Codec> send_codec,
                                   const FieldTrialsView& field_trials) {
   bool has_scale_resolution_down_to = false;
@@ -280,7 +280,7 @@
 RTCError CheckRtpParametersInvalidModificationAndValues(
     const RtpParameters& old_rtp_parameters,
     const RtpParameters& rtp_parameters,
-    ArrayView<const Codec> send_codecs,
+    std::span<const Codec> send_codecs,
     std::optional<Codec> send_codec,
     const FieldTrialsView& field_trials) {
   if (rtp_parameters.encodings.size() != old_rtp_parameters.encodings.size()) {
diff --git a/media/base/media_engine.h b/media/base/media_engine.h
index fd1de06..0ac3277 100644
--- a/media/base/media_engine.h
+++ b/media/base/media_engine.h
@@ -14,9 +14,9 @@
 #include <cstdint>
 #include <memory>
 #include <optional>
+#include <span>
 #include <vector>
 
-#include "api/array_view.h"
 #include "api/audio/audio_device.h"
 #include "api/audio_codecs/audio_decoder_factory.h"
 #include "api/audio_codecs/audio_encoder_factory.h"
@@ -43,13 +43,13 @@
 // Checks that the scalability_mode value of each encoding is supported by at
 // least one video codec of the list. If the list is empty, no check is done.
 RTCError CheckScalabilityModeValues(const RtpParameters& new_parameters,
-                                    ArrayView<const Codec> send_codecs,
+                                    std::span<const Codec> send_codecs,
                                     std::optional<Codec> send_codec);
 
 // Checks the parameters have valid and supported values, and checks parameters
 // with CheckScalabilityModeValues().
 RTCError CheckRtpParametersValues(const RtpParameters& new_parameters,
-                                  ArrayView<const Codec> send_codecs,
+                                  std::span<const Codec> send_codecs,
                                   std::optional<Codec> send_codec,
                                   const FieldTrialsView& field_trials);
 
@@ -58,7 +58,7 @@
 RTCError CheckRtpParametersInvalidModificationAndValues(
     const RtpParameters& old_parameters,
     const RtpParameters& new_parameters,
-    ArrayView<const Codec> send_codecs,
+    std::span<const Codec> send_codecs,
     std::optional<Codec> send_codec,
     const FieldTrialsView& field_trials);
 
diff --git a/media/base/rtp_utils.cc b/media/base/rtp_utils.cc
index a6448d7..3a2002e 100644
--- a/media/base/rtp_utils.cc
+++ b/media/base/rtp_utils.cc
@@ -12,12 +12,13 @@
 
 #include <cstdint>
 #include <cstring>
+#include <span>
 #include <vector>
 
 // PacketTimeUpdateParams is defined in asyncpacketsocket.h.
 // TODO(sergeyu): Find more appropriate place for PacketTimeUpdateParams.
+
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "media/base/turn_utils.h"
 #include "modules/rtp_rtcp/source/rtp_util.h"
 #include "rtc_base/async_packet_socket.h"
@@ -73,7 +74,7 @@
 
 // Assumes `length` is actual packet length + tag length. Updates HMAC at end of
 // the RTP packet.
-void UpdateRtpAuthTag(ArrayView<uint8_t> rtp,
+void UpdateRtpAuthTag(std::span<uint8_t> rtp,
                       const PacketTimeUpdateParams& packet_time_params) {
   // If there is no key, return.
   if (packet_time_params.srtp_auth_key.empty()) {
@@ -148,7 +149,7 @@
   if (pl_type == kRtcpTypeSDES)
     return false;
   *value = GetBE32(
-      ArrayView<const uint8_t>(static_cast<const uint8_t*>(data) + 4, 4));
+      std::span<const uint8_t>(static_cast<const uint8_t*>(data) + 4, 4));
   return true;
 }
 
@@ -176,7 +177,7 @@
   RTC_CHECK_NOTREACHED();
 }
 
-RtpPacketType InferRtpPacketType(ArrayView<const uint8_t> packet) {
+RtpPacketType InferRtpPacketType(std::span<const uint8_t> packet) {
   if (IsRtcpPacket(packet)) {
     return RtpPacketType::kRtcp;
   }
@@ -186,7 +187,7 @@
   return RtpPacketType::kUnknown;
 }
 
-bool ValidateRtpHeader(ArrayView<const uint8_t> rtp, size_t* header_length) {
+bool ValidateRtpHeader(std::span<const uint8_t> rtp, size_t* header_length) {
   size_t length = rtp.size();
   if (header_length) {
     *header_length = 0;
@@ -238,7 +239,7 @@
 
 // ValidateRtpHeader() must be called before this method to make sure, we have
 // a sane rtp packet.
-bool UpdateRtpAbsSendTimeExtension(ArrayView<uint8_t> packet,
+bool UpdateRtpAbsSendTimeExtension(std::span<uint8_t> packet,
                                    int extension_id,
                                    uint64_t time_us) {
   //  0                   1                   2                   3
@@ -265,7 +266,7 @@
   uint8_t* rtp = packet.data();
   rtp += header_length_without_extension;
 
-  ArrayView<const uint8_t> extension_header =
+  std::span<const uint8_t> extension_header =
       packet.subspan(header_length_without_extension, kRtpExtensionHeaderLen);
 
   // Getting extension profile ID and length.
@@ -356,7 +357,7 @@
   return found;
 }
 
-bool ApplyPacketOptions(ArrayView<uint8_t> data,
+bool ApplyPacketOptions(std::span<uint8_t> data,
                         const PacketTimeUpdateParams& packet_time_params,
                         uint64_t time_us) {
   RTC_DCHECK(!data.empty());
diff --git a/media/base/rtp_utils.h b/media/base/rtp_utils.h
index b9fae21..a8f1a12 100644
--- a/media/base/rtp_utils.h
+++ b/media/base/rtp_utils.h
@@ -13,9 +13,9 @@
 
 #include <cstddef>
 #include <cstdint>
+#include <span>
 
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "rtc_base/async_packet_socket.h"
 #include "rtc_base/system/rtc_export.h"
 
@@ -45,7 +45,7 @@
 bool GetRtcpSsrc(const void* data, size_t len, uint32_t* value);
 
 // Checks the packet header to determine if it can be an RTP or RTCP packet.
-RtpPacketType InferRtpPacketType(ArrayView<const uint8_t> packet);
+RtpPacketType InferRtpPacketType(std::span<const uint8_t> packet);
 // True if |payload type| is 0-127.
 bool IsValidRtpPayloadType(int payload_type);
 
@@ -56,18 +56,18 @@
 absl::string_view RtpPacketTypeToString(RtpPacketType packet_type);
 
 // Verifies that a packet has a valid RTP header.
-bool RTC_EXPORT ValidateRtpHeader(ArrayView<const uint8_t> rtp,
+bool RTC_EXPORT ValidateRtpHeader(std::span<const uint8_t> rtp,
                                   size_t* header_length);
 
 // Helper method which updates the absolute send time extension if present.
-bool UpdateRtpAbsSendTimeExtension(ArrayView<uint8_t> rtp,
+bool UpdateRtpAbsSendTimeExtension(std::span<uint8_t> rtp,
                                    int extension_id,
                                    uint64_t time_us);
 
 // Applies specified `options` to the packet. It updates the absolute send time
 // extension header if it is present present then updates HMAC.
 bool RTC_EXPORT
-ApplyPacketOptions(ArrayView<uint8_t> data,
+ApplyPacketOptions(std::span<uint8_t> data,
                    const PacketTimeUpdateParams& packet_time_params,
                    uint64_t time_us);
 
diff --git a/media/base/rtp_utils_unittest.cc b/media/base/rtp_utils_unittest.cc
index af3263e..269e4d6 100644
--- a/media/base/rtp_utils_unittest.cc
+++ b/media/base/rtp_utils_unittest.cc
@@ -14,7 +14,6 @@
 #include <cstring>
 #include <vector>
 
-#include "api/array_view.h"
 #include "media/base/fake_rtp.h"
 #include "rtc_base/async_packet_socket.h"
 #include "test/gtest.h"
@@ -72,13 +71,6 @@
 // and in message `kRtpMsgWithTwoByteAbsSendTimeExtension`.
 static const int kAstIndexInTwoByteRtpMsg = 21;
 
-static const ArrayView<const uint8_t> kPcmuFrameArrayView =
-    MakeArrayView(kPcmuFrame, sizeof(kPcmuFrame));
-static const ArrayView<const uint8_t> kRtcpReportArrayView =
-    MakeArrayView(kRtcpReport, sizeof(kRtcpReport));
-static const ArrayView<const uint8_t> kInvalidPacketArrayView =
-    MakeArrayView(kInvalidPacket, sizeof(kInvalidPacket));
-
 TEST(RtpUtilsTest, GetRtcp) {
   int pt;
   EXPECT_TRUE(GetRtcpType(kRtcpReport, sizeof(kRtcpReport), &pt));
@@ -280,10 +272,9 @@
 }
 
 TEST(RtpUtilsTest, InferRtpPacketType) {
-  EXPECT_EQ(RtpPacketType::kRtp, InferRtpPacketType(kPcmuFrameArrayView));
-  EXPECT_EQ(RtpPacketType::kRtcp, InferRtpPacketType(kRtcpReportArrayView));
-  EXPECT_EQ(RtpPacketType::kUnknown,
-            InferRtpPacketType(kInvalidPacketArrayView));
+  EXPECT_EQ(RtpPacketType::kRtp, InferRtpPacketType(kPcmuFrame));
+  EXPECT_EQ(RtpPacketType::kRtcp, InferRtpPacketType(kRtcpReport));
+  EXPECT_EQ(RtpPacketType::kUnknown, InferRtpPacketType(kInvalidPacket));
 }
 
 }  // namespace webrtc
diff --git a/media/base/stream_params.cc b/media/base/stream_params.cc
index 4cae898..d330d9c 100644
--- a/media/base/stream_params.cc
+++ b/media/base/stream_params.cc
@@ -11,12 +11,12 @@
 #include "media/base/stream_params.h"
 
 #include <cstdint>
+#include <span>
 #include <string>
 #include <vector>
 
 #include "absl/algorithm/container.h"
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "media/base/rid_description.h"
 #include "rtc_base/checks.h"
 #include "rtc_base/strings/string_builder.h"
@@ -25,7 +25,7 @@
 namespace webrtc {
 namespace {
 
-void AppendSsrcs(ArrayView<const uint32_t> ssrcs, SimpleStringBuilder* sb) {
+void AppendSsrcs(std::span<const uint32_t> ssrcs, SimpleStringBuilder* sb) {
   *sb << "ssrcs:[";
   const char* delimiter = "";
   for (uint32_t ssrc : ssrcs) {
@@ -35,7 +35,7 @@
   *sb << "]";
 }
 
-void AppendSsrcGroups(ArrayView<const SsrcGroup> ssrc_groups,
+void AppendSsrcGroups(std::span<const SsrcGroup> ssrc_groups,
                       SimpleStringBuilder* sb) {
   *sb << "ssrc_groups:";
   const char* delimiter = "";
@@ -45,7 +45,7 @@
   }
 }
 
-void AppendStreamIds(ArrayView<const std::string> stream_ids,
+void AppendStreamIds(std::span<const std::string> stream_ids,
                      SimpleStringBuilder* sb) {
   *sb << "stream_ids:";
   const char* delimiter = "";
@@ -55,7 +55,7 @@
   }
 }
 
-void AppendRids(ArrayView<const RidDescription> rids, SimpleStringBuilder* sb) {
+void AppendRids(std::span<const RidDescription> rids, SimpleStringBuilder* sb) {
   *sb << "rids:[";
   const char* delimiter = "";
   for (const RidDescription& rid : rids) {
diff --git a/media/base/stream_params_unittest.cc b/media/base/stream_params_unittest.cc
index 49a8926..332022a 100644
--- a/media/base/stream_params_unittest.cc
+++ b/media/base/stream_params_unittest.cc
@@ -12,10 +12,10 @@
 
 #include <cstddef>
 #include <cstdint>
+#include <span>
 #include <string>
 #include <vector>
 
-#include "api/array_view.h"
 #include "media/base/test_utils.h"
 #include "rtc_base/unique_id_generator.h"
 #include "test/gmock.h"
@@ -29,7 +29,7 @@
 
 static webrtc::StreamParams CreateStreamParamsWithSsrcGroup(
     const std::string& semantics,
-    webrtc::ArrayView<const uint32_t> ssrcs_in) {
+    std::span<const uint32_t> ssrcs_in) {
   webrtc::StreamParams stream;
   std::vector<uint32_t> ssrcs(ssrcs_in.begin(), ssrcs_in.end());
   webrtc::SsrcGroup sg(semantics, ssrcs);
diff --git a/media/base/turn_utils.cc b/media/base/turn_utils.cc
index 77f0f18..b3e14bd 100644
--- a/media/base/turn_utils.cc
+++ b/media/base/turn_utils.cc
@@ -12,8 +12,8 @@
 
 #include <cstddef>
 #include <cstdint>
+#include <span>
 
-#include "api/array_view.h"
 #include "api/transport/stun.h"
 #include "rtc_base/byte_order.h"
 
@@ -32,7 +32,7 @@
     return false;
   }
 
-  uint16_t type = GetBE16(ArrayView<const uint8_t>(data, 2));
+  uint16_t type = GetBE16(std::span<const uint8_t>(data, 2));
   return (type == TURN_SEND_INDICATION);
 }
 
@@ -42,7 +42,7 @@
                       size_t packet_size,
                       size_t* content_position,
                       size_t* content_size) {
-  ArrayView<const uint8_t> data_view(packet, packet_size);
+  std::span<const uint8_t> data_view(packet, packet_size);
   if (IsTurnChannelData(packet, packet_size)) {
     // Turn Channel Message header format.
     //   0                   1                   2                   3
diff --git a/media/base/video_common.cc b/media/base/video_common.cc
index 053a250..38b5562 100644
--- a/media/base/video_common.cc
+++ b/media/base/video_common.cc
@@ -13,7 +13,6 @@
 #include <cstdint>
 #include <string>
 
-#include "api/array_view.h"
 #include "rtc_base/strings/string_builder.h"
 
 namespace webrtc {
diff --git a/media/engine/fake_webrtc_call.cc b/media/engine/fake_webrtc_call.cc
index 20ed986..a9c1a2c 100644
--- a/media/engine/fake_webrtc_call.cc
+++ b/media/engine/fake_webrtc_call.cc
@@ -13,6 +13,7 @@
 #include <cstdint>
 #include <map>
 #include <memory>
+#include <span>
 #include <string>
 #include <utility>
 #include <vector>
@@ -20,7 +21,6 @@
 #include "absl/algorithm/container.h"
 #include "absl/strings/string_view.h"
 #include "api/adaptation/resource.h"
-#include "api/array_view.h"
 #include "api/audio_codecs/audio_format.h"
 #include "api/call/audio_sink.h"
 #include "api/crypto/frame_decryptor_interface.h"
@@ -124,11 +124,11 @@
 }
 
 bool FakeAudioReceiveStream::VerifyLastPacket(
-    ArrayView<const uint8_t> data) const {
+    std::span<const uint8_t> data) const {
   return last_packet_ == Buffer(data.data(), data.size());
 }
 
-bool FakeAudioReceiveStream::DeliverRtp(ArrayView<const uint8_t> packet,
+bool FakeAudioReceiveStream::DeliverRtp(std::span<const uint8_t> packet,
                                         int64_t /* packet_time_us */) {
   ++received_packets_;
   last_packet_.SetData(packet);
@@ -295,7 +295,7 @@
   return stats_;
 }
 
-void FakeVideoSendStream::SetCsrcs(ArrayView<const uint32_t> csrcs) {}
+void FakeVideoSendStream::SetCsrcs(std::span<const uint32_t> csrcs) {}
 
 void FakeVideoSendStream::ReconfigureVideoEncoder(VideoEncoderConfig config) {
   ReconfigureVideoEncoder(std::move(config), nullptr);
diff --git a/media/engine/fake_webrtc_call.h b/media/engine/fake_webrtc_call.h
index e4dff9a..8bd0f0a 100644
--- a/media/engine/fake_webrtc_call.h
+++ b/media/engine/fake_webrtc_call.h
@@ -25,13 +25,13 @@
 #include <map>
 #include <memory>
 #include <optional>
+#include <span>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "absl/strings/string_view.h"
 #include "api/adaptation/resource.h"
-#include "api/array_view.h"
 #include "api/audio/audio_frame.h"
 #include "api/audio/audio_mixer.h"
 #include "api/audio_codecs/audio_format.h"
@@ -125,10 +125,10 @@
   const AudioReceiveStreamInterface::Config& GetConfig() const;
   void SetStats(const AudioReceiveStreamInterface::Stats& stats);
   int received_packets() const { return received_packets_; }
-  bool VerifyLastPacket(ArrayView<const uint8_t> data) const;
+  bool VerifyLastPacket(std::span<const uint8_t> data) const;
   const AudioSinkInterface* sink() const { return sink_; }
   float gain() const { return gain_; }
-  bool DeliverRtp(ArrayView<const uint8_t> packet, int64_t packet_time_us);
+  bool DeliverRtp(std::span<const uint8_t> packet, int64_t packet_time_us);
   bool started() const { return started_; }
   int base_mininum_playout_delay_ms() const {
     return base_mininum_playout_delay_ms_;
@@ -206,7 +206,7 @@
   int GetLastHeight() const;
   int64_t GetLastTimestamp() const;
   void SetStats(const VideoSendStream::Stats& stats) override;
-  void SetCsrcs(ArrayView<const uint32_t> csrcs) override;
+  void SetCsrcs(std::span<const uint32_t> csrcs) override;
   int num_encoder_reconfigurations() const {
     return num_encoder_reconfigurations_;
   }
diff --git a/media/engine/simulcast_encoder_adapter.cc b/media/engine/simulcast_encoder_adapter.cc
index 3e10c92..c25d0a5 100644
--- a/media/engine/simulcast_encoder_adapter.cc
+++ b/media/engine/simulcast_encoder_adapter.cc
@@ -19,6 +19,7 @@
 #include <memory>
 #include <numeric>
 #include <optional>
+#include <span>
 #include <string>
 #include <tuple>
 #include <utility>
@@ -26,7 +27,6 @@
 
 #include "absl/algorithm/container.h"
 #include "absl/base/nullability.h"
-#include "api/array_view.h"
 #include "api/environment/environment.h"
 #include "api/fec_controller_override.h"
 #include "api/field_trials_view.h"
@@ -131,7 +131,7 @@
 }
 
 void GetLowestAndHighestQualityStreamIndixes(
-    ArrayView<const SimulcastStream> streams,
+    std::span<const SimulcastStream> streams,
     int* lowest_quality_stream_idx,
     int* highest_quality_stream_idx) {
   const auto lowest_highest_quality_streams =
@@ -385,7 +385,7 @@
   int highest_quality_stream_idx = 0;
   if (!is_legacy_singlecast) {
     GetLowestAndHighestQualityStreamIndixes(
-        ArrayView<SimulcastStream>(codec_.simulcastStream,
+        std::span<SimulcastStream>(codec_.simulcastStream,
                                    total_streams_count_),
         &lowest_quality_stream_idx, &highest_quality_stream_idx);
   }
diff --git a/media/engine/webrtc_media_engine.cc b/media/engine/webrtc_media_engine.cc
index 96bacd8..4f586d5 100644
--- a/media/engine/webrtc_media_engine.cc
+++ b/media/engine/webrtc_media_engine.cc
@@ -11,12 +11,12 @@
 #include "media/engine/webrtc_media_engine.h"
 
 #include <algorithm>
+#include <span>
 #include <string>
 #include <vector>
 
 #include "absl/algorithm/container.h"
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "api/field_trials_view.h"
 #include "api/rtp_parameters.h"
 #include "api/transport/bitrate_settings.h"
@@ -30,7 +30,7 @@
 // Remove mutually exclusive extensions with lower priority.
 void DiscardRedundantExtensions(
     std::vector<RtpExtension>* extensions,
-    ArrayView<const char* const> extensions_decreasing_prio) {
+    std::span<const char* const> extensions_decreasing_prio) {
   RTC_DCHECK(extensions);
   bool found = false;
   for (const char* uri : extensions_decreasing_prio) {
diff --git a/media/engine/webrtc_video_engine.cc b/media/engine/webrtc_video_engine.cc
index fc04a6c..bb77667 100644
--- a/media/engine/webrtc_video_engine.cc
+++ b/media/engine/webrtc_video_engine.cc
@@ -19,6 +19,7 @@
 #include <memory>
 #include <optional>
 #include <set>
+#include <span>
 #include <string>
 #include <unordered_set>
 #include <utility>
@@ -29,7 +30,6 @@
 #include "absl/functional/bind_front.h"
 #include "absl/strings/match.h"
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "api/crypto/crypto_options.h"
 #include "api/crypto/frame_decryptor_interface.h"
 #include "api/environment/environment.h"
@@ -734,7 +734,7 @@
 }
 
 void ExtractCodecInformation(
-    ArrayView<const VideoCodecSettings> recv_codecs,
+    std::span<const VideoCodecSettings> recv_codecs,
     std::map<int, int>& rtx_associated_payload_types,
     std::set<int>& raw_payload_types,
     std::vector<VideoReceiveStreamInterface::Decoder>& decoders) {
diff --git a/media/engine/webrtc_voice_engine_unittest.cc b/media/engine/webrtc_voice_engine_unittest.cc
index 0d66c96..8195403 100644
--- a/media/engine/webrtc_voice_engine_unittest.cc
+++ b/media/engine/webrtc_voice_engine_unittest.cc
@@ -17,13 +17,13 @@
 #include <memory>
 #include <optional>
 #include <set>
+#include <span>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "absl/strings/match.h"
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "api/audio/audio_processing.h"
 #include "api/audio/builtin_audio_processing_builder.h"
 #include "api/audio_codecs/audio_format.h"
@@ -336,7 +336,7 @@
     EXPECT_FALSE(call_.GetAudioSendStream(kSsrcX));
   }
 
-  void DeliverPacket(ArrayView<const uint8_t> data) {
+  void DeliverPacket(std::span<const uint8_t> data) {
     RtpPacketReceived packet;
     packet.Parse(data);
     receive_channel_->OnPacketReceived(packet);
@@ -2779,7 +2779,7 @@
   uint8_t packets[4][sizeof(kPcmuFrame)];
   for (size_t i = 0; i < std::size(packets); ++i) {
     memcpy(packets[i], kPcmuFrame, sizeof(kPcmuFrame));
-    SetBE32(ArrayView<uint8_t>(packets[i] + 8, 4), static_cast<uint32_t>(i));
+    SetBE32(std::span<uint8_t>(packets[i] + 8, 4), static_cast<uint32_t>(i));
   }
 
   const FakeAudioReceiveStream& s1 = GetRecvStream(ssrc1);
@@ -2868,9 +2868,9 @@
   // Deliver a couple packets with unsignaled SSRCs.
   uint8_t packet[sizeof(kPcmuFrame)];
   memcpy(packet, kPcmuFrame, sizeof(kPcmuFrame));
-  SetBE32(ArrayView<uint8_t>(&packet[8], 4), 0x1234);
+  SetBE32(std::span<uint8_t>(&packet[8], 4), 0x1234);
   DeliverPacket(packet);
-  SetBE32(ArrayView<uint8_t>(&packet[8], 4), 0x5678);
+  SetBE32(std::span<uint8_t>(&packet[8], 4), 0x5678);
   DeliverPacket(packet);
 
   // Verify that the receive streams were created.
@@ -2892,7 +2892,7 @@
 
   // Note that SSRC = 0 is not supported.
   for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledRecvStreams); ++ssrc) {
-    SetBE32(ArrayView<uint8_t>(&packet[8], 4), ssrc);
+    SetBE32(std::span<uint8_t>(&packet[8], 4), ssrc);
     DeliverPacket(packet);
 
     // Verify we have one new stream for each loop iteration.
@@ -2903,7 +2903,7 @@
 
   // Sending on the same SSRCs again should not create new streams.
   for (uint32_t ssrc = 1; ssrc < (1 + kMaxUnsignaledRecvStreams); ++ssrc) {
-    SetBE32(ArrayView<uint8_t>(&packet[8], 4), ssrc);
+    SetBE32(std::span<uint8_t>(&packet[8], 4), ssrc);
     DeliverPacket(packet);
 
     EXPECT_EQ(kMaxUnsignaledRecvStreams, call_.GetAudioReceiveStreams().size());
@@ -2913,7 +2913,7 @@
 
   // Send on another SSRC, the oldest unsignaled stream (SSRC=1) is replaced.
   constexpr uint32_t kAnotherSsrc = 667;
-  SetBE32(ArrayView<uint8_t>(&packet[8], 4), kAnotherSsrc);
+  SetBE32(std::span<uint8_t>(&packet[8], 4), kAnotherSsrc);
   DeliverPacket(packet);
 
   const auto& streams = call_.GetAudioReceiveStreams();
@@ -2938,7 +2938,7 @@
 
   // Add a known stream, send packet and verify we got it.
   const uint32_t signaled_ssrc = 1;
-  SetBE32(ArrayView<uint8_t>(&packet[8], 4), signaled_ssrc);
+  SetBE32(std::span<uint8_t>(&packet[8], 4), signaled_ssrc);
   EXPECT_TRUE(AddRecvStream(signaled_ssrc));
   DeliverPacket(packet);
   EXPECT_TRUE(GetRecvStream(signaled_ssrc).VerifyLastPacket(packet));
@@ -2947,7 +2947,7 @@
   // Note that the first unknown SSRC cannot be 0, because we only support
   // creating receive streams for SSRC!=0.
   const uint32_t unsignaled_ssrc = 7011;
-  SetBE32(ArrayView<uint8_t>(&packet[8], 4), unsignaled_ssrc);
+  SetBE32(std::span<uint8_t>(&packet[8], 4), unsignaled_ssrc);
   DeliverPacket(packet);
   EXPECT_TRUE(GetRecvStream(unsignaled_ssrc).VerifyLastPacket(packet));
   EXPECT_EQ(2u, call_.GetAudioReceiveStreams().size());
@@ -2955,7 +2955,7 @@
   DeliverPacket(packet);
   EXPECT_EQ(2, GetRecvStream(unsignaled_ssrc).received_packets());
 
-  SetBE32(ArrayView<uint8_t>(&packet[8], 4), signaled_ssrc);
+  SetBE32(std::span<uint8_t>(&packet[8], 4), signaled_ssrc);
   DeliverPacket(packet);
   EXPECT_EQ(2, GetRecvStream(signaled_ssrc).received_packets());
   EXPECT_EQ(2u, call_.GetAudioReceiveStreams().size());
@@ -3420,7 +3420,7 @@
   // Spawn an unsignaled stream by sending a packet - gain should be 2.
   uint8_t pcmuFrame2[sizeof(kPcmuFrame)];
   memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
-  SetBE32(ArrayView<uint8_t>(&pcmuFrame2[8], 4), kSsrcX);
+  SetBE32(std::span<uint8_t>(&pcmuFrame2[8], 4), kSsrcX);
   DeliverPacket(pcmuFrame2);
   EXPECT_DOUBLE_EQ(2, GetRecvStream(kSsrcX).gain());
 
@@ -3482,7 +3482,7 @@
   // Spawn an unsignaled stream by sending a packet - delay should be 100.
   uint8_t pcmuFrame2[sizeof(kPcmuFrame)];
   memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
-  SetBE32(ArrayView<uint8_t>(&pcmuFrame2[8], 4), kSsrcX);
+  SetBE32(std::span<uint8_t>(&pcmuFrame2[8], 4), kSsrcX);
   DeliverPacket(pcmuFrame2);
   EXPECT_EQ(
       100, receive_channel_->GetBaseMinimumPlayoutDelayMs(kSsrcX).value_or(-1));
@@ -3659,7 +3659,7 @@
   // and the previous unsignaled stream should lose it.
   uint8_t pcmuFrame2[sizeof(kPcmuFrame)];
   memcpy(pcmuFrame2, kPcmuFrame, sizeof(kPcmuFrame));
-  SetBE32(ArrayView<uint8_t>(&pcmuFrame2[8], 4), kSsrcX);
+  SetBE32(std::span<uint8_t>(&pcmuFrame2[8], 4), kSsrcX);
   DeliverPacket(pcmuFrame2);
   if (kMaxUnsignaledRecvStreams > 1) {
     EXPECT_EQ(nullptr, GetRecvStream(kSsrc1).sink());
diff --git a/media/sctp/dcsctp_transport.cc b/media/sctp/dcsctp_transport.cc
index 63f3d52..03ffc69 100644
--- a/media/sctp/dcsctp_transport.cc
+++ b/media/sctp/dcsctp_transport.cc
@@ -17,12 +17,12 @@
 #include <limits>
 #include <memory>
 #include <optional>
+#include <span>
 #include <string>
 #include <utility>
 #include <vector>
 
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "api/data_channel_interface.h"
 #include "api/dtls_transport_interface.h"
 #include "api/environment/environment.h"
@@ -440,7 +440,7 @@
 }
 
 SendPacketStatus DcSctpTransport::SendPacketWithStatus(
-    ArrayView<const uint8_t> data) {
+    std::span<const uint8_t> data) {
   RTC_DCHECK_RUN_ON(network_thread_);
   RTC_DCHECK(socket_);
 
@@ -591,7 +591,7 @@
 }
 
 void DcSctpTransport::OnStreamsResetFailed(
-    ArrayView<const dcsctp::StreamID> outgoing_streams,
+    std::span<const dcsctp::StreamID> outgoing_streams,
     absl::string_view reason) {
   // TODO(orphis): Need a test to check for correct behavior
   for (auto& stream_id : outgoing_streams) {
@@ -603,7 +603,7 @@
 }
 
 void DcSctpTransport::OnStreamsResetPerformed(
-    ArrayView<const dcsctp::StreamID> outgoing_streams) {
+    std::span<const dcsctp::StreamID> outgoing_streams) {
   RTC_DCHECK_RUN_ON(network_thread_);
   for (auto& stream_id : outgoing_streams) {
     RTC_LOG(LS_INFO) << debug_name_
@@ -631,7 +631,7 @@
 }
 
 void DcSctpTransport::OnIncomingStreamsReset(
-    ArrayView<const dcsctp::StreamID> incoming_streams) {
+    std::span<const dcsctp::StreamID> incoming_streams) {
   RTC_DCHECK_RUN_ON(network_thread_);
   for (auto& stream_id : incoming_streams) {
     RTC_LOG(LS_INFO) << debug_name_
diff --git a/media/sctp/dcsctp_transport.h b/media/sctp/dcsctp_transport.h
index 143d4b3..bf945c9 100644
--- a/media/sctp/dcsctp_transport.h
+++ b/media/sctp/dcsctp_transport.h
@@ -16,11 +16,11 @@
 #include <functional>
 #include <memory>
 #include <optional>
+#include <span>
 #include <string>
 #include <vector>
 
 #include "absl/strings/string_view.h"
-#include "api/array_view.h"
 #include "api/dtls_transport_interface.h"
 #include "api/environment/environment.h"
 #include "api/field_trials_view.h"
@@ -83,7 +83,7 @@
  private:
   // dcsctp::DcSctpSocketCallbacks
   dcsctp::SendPacketStatus SendPacketWithStatus(
-      ArrayView<const uint8_t> data) override;
+      std::span<const uint8_t> data) override;
   std::unique_ptr<dcsctp::Timeout> CreateTimeout(
       TaskQueueBase::DelayPrecision precision) override;
   dcsctp::TimeMs TimeMillis() override;
@@ -96,12 +96,12 @@
   void OnConnected() override;
   void OnClosed() override;
   void OnConnectionRestarted() override;
-  void OnStreamsResetFailed(ArrayView<const dcsctp::StreamID> outgoing_streams,
+  void OnStreamsResetFailed(std::span<const dcsctp::StreamID> outgoing_streams,
                             absl::string_view reason) override;
   void OnStreamsResetPerformed(
-      ArrayView<const dcsctp::StreamID> outgoing_streams) override;
+      std::span<const dcsctp::StreamID> outgoing_streams) override;
   void OnIncomingStreamsReset(
-      ArrayView<const dcsctp::StreamID> incoming_streams) override;
+      std::span<const dcsctp::StreamID> incoming_streams) override;
 
   // Transport callbacks
   void ConnectTransportSignals();