diff --git a/sdk/BUILD.gn b/sdk/BUILD.gn
index 18232c8..e28bdcc 100644
--- a/sdk/BUILD.gn
+++ b/sdk/BUILD.gn
@@ -991,12 +991,6 @@
         "objc/api/peerconnection/RTCRtcpParameters+Private.h",
         "objc/api/peerconnection/RTCRtcpParameters.h",
         "objc/api/peerconnection/RTCRtcpParameters.mm",
-        "objc/api/peerconnection/RTCRtpCapabilities+Private.h",
-        "objc/api/peerconnection/RTCRtpCapabilities.h",
-        "objc/api/peerconnection/RTCRtpCapabilities.mm",
-        "objc/api/peerconnection/RTCRtpCodecCapability+Private.h",
-        "objc/api/peerconnection/RTCRtpCodecCapability.h",
-        "objc/api/peerconnection/RTCRtpCodecCapability.mm",
         "objc/api/peerconnection/RTCRtpCodecParameters+Private.h",
         "objc/api/peerconnection/RTCRtpCodecParameters.h",
         "objc/api/peerconnection/RTCRtpCodecParameters.mm",
@@ -1315,8 +1309,6 @@
           "objc/api/peerconnection/RTCPeerConnectionFactory.h",
           "objc/api/peerconnection/RTCPeerConnectionFactoryOptions.h",
           "objc/api/peerconnection/RTCRtcpParameters.h",
-          "objc/api/peerconnection/RTCRtpCapabilities.h",
-          "objc/api/peerconnection/RTCRtpCodecCapability.h",
           "objc/api/peerconnection/RTCRtpCodecParameters.h",
           "objc/api/peerconnection/RTCRtpEncodingParameters.h",
           "objc/api/peerconnection/RTCRtpHeaderExtension.h",
@@ -1431,8 +1423,6 @@
           "objc/api/peerconnection/RTCPeerConnectionFactory.h",
           "objc/api/peerconnection/RTCPeerConnectionFactoryOptions.h",
           "objc/api/peerconnection/RTCRtcpParameters.h",
-          "objc/api/peerconnection/RTCRtpCapabilities.h",
-          "objc/api/peerconnection/RTCRtpCodecCapability.h",
           "objc/api/peerconnection/RTCRtpCodecParameters.h",
           "objc/api/peerconnection/RTCRtpEncodingParameters.h",
           "objc/api/peerconnection/RTCRtpHeaderExtension.h",
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
index 41d1ab1..5575af9 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
@@ -23,8 +23,6 @@
 @class RTC_OBJC_TYPE(RTCVideoSource);
 @class RTC_OBJC_TYPE(RTCVideoTrack);
 @class RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions);
-@class RTC_OBJC_TYPE(RTCRtpCapabilities);
-typedef NS_ENUM(NSInteger, RTCRtpMediaType);
 @protocol RTC_OBJC_TYPE
 (RTCPeerConnectionDelegate);
 @protocol RTC_OBJC_TYPE
@@ -101,12 +99,6 @@
                     (id<RTC_OBJC_TYPE(RTCSSLCertificateVerifier)>)certificateVerifier
                            delegate:(nullable id<RTC_OBJC_TYPE(RTCPeerConnectionDelegate)>)delegate;
 
-/** Returns the capabilities of an RTP sender for a specific mediaType. */
-- (RTC_OBJC_TYPE(RTCRtpCapabilities) *)rtpSenderCapabilitiesFor:(RTCRtpMediaType)mediaType;
-
-/** Returns the capabilities of an RTP receiver for a specific mediaType. */
-- (RTC_OBJC_TYPE(RTCRtpCapabilities) *)rtpReceiverCapabilitiesFor:(RTCRtpMediaType)mediaType;
-
 /** Set the options to be used for subsequently created RTCPeerConnections */
 - (void)setOptions:(nonnull RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions) *)options;
 
diff --git a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
index 92e237e..15f9eb9 100644
--- a/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
+++ b/sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
@@ -19,10 +19,6 @@
 #import "RTCMediaConstraints+Private.h"
 #import "RTCMediaStream+Private.h"
 #import "RTCPeerConnection+Private.h"
-#import "RTCRtpCapabilities+Private.h"
-#import "RTCRtpCodecCapability+Private.h"
-#import "RTCRtpReceiver+Private.h"
-#import "RTCRtpSender+Private.h"
 #import "RTCVideoSource+Private.h"
 #import "RTCVideoTrack+Private.h"
 #import "base/RTCLogging.h"
@@ -303,18 +299,6 @@
                                                                delegate:delegate];
 }
 
-- (RTC_OBJC_TYPE(RTCRtpCapabilities) *)rtpSenderCapabilitiesFor:(RTCRtpMediaType)mediaType {
-  webrtc::RtpCapabilities capabilities = _nativeFactory->GetRtpSenderCapabilities(
-      [RTCRtpReceiver nativeMediaTypeForMediaType:mediaType]);
-  return [[RTCRtpCapabilities alloc] initWithNativeCapabilities:capabilities];
-}
-
-- (RTC_OBJC_TYPE(RTCRtpCapabilities) *)rtpReceiverCapabilitiesFor:(RTCRtpMediaType)mediaType {
-  webrtc::RtpCapabilities capabilities = _nativeFactory->GetRtpReceiverCapabilities(
-      [RTCRtpReceiver nativeMediaTypeForMediaType:mediaType]);
-  return [[RTCRtpCapabilities alloc] initWithNativeCapabilities:capabilities];
-}
-
 - (void)setOptions:(nonnull RTC_OBJC_TYPE(RTCPeerConnectionFactoryOptions) *)options {
   RTC_DCHECK(options != nil);
   _nativeFactory->SetOptions(options.nativeOptions);
diff --git a/sdk/objc/api/peerconnection/RTCRtpCapabilities+Private.h b/sdk/objc/api/peerconnection/RTCRtpCapabilities+Private.h
deleted file mode 100644
index 3ccfe58..0000000
--- a/sdk/objc/api/peerconnection/RTCRtpCapabilities+Private.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- *  Copyright 2023 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import "RTCRtpCapabilities.h"
-
-#include "api/rtp_parameters.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface RTC_OBJC_TYPE (RTCRtpCapabilities)
-()
-
-    /** Returns the equivalent native RtpCapabilities structure. */
-    @property(nonatomic, readonly) webrtc::RtpCapabilities nativeCapabilities;
-
-/** Initialize the object with a native RtpCapabilities structure. */
-- (instancetype)initWithNativeCapabilities:(const webrtc::RtpCapabilities &)nativeCapabilities
-    NS_DESIGNATED_INITIALIZER;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/api/peerconnection/RTCRtpCapabilities.h b/sdk/objc/api/peerconnection/RTCRtpCapabilities.h
deleted file mode 100644
index ebeb8ed..0000000
--- a/sdk/objc/api/peerconnection/RTCRtpCapabilities.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Copyright 2023 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "RTCMacros.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@class RTC_OBJC_TYPE(RTCRtpCodecCapability);
-
-RTC_OBJC_EXPORT
-@interface RTC_OBJC_TYPE (RTCRtpCapabilities) : NSObject
-
-- (instancetype)init NS_UNAVAILABLE;
-
-@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpCodecCapability) *> *codecs;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/api/peerconnection/RTCRtpCapabilities.mm b/sdk/objc/api/peerconnection/RTCRtpCapabilities.mm
deleted file mode 100644
index 5005e5b..0000000
--- a/sdk/objc/api/peerconnection/RTCRtpCapabilities.mm
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  Copyright 2023 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import "RTCRtpCapabilities+Private.h"
-#import "RTCRtpCodecCapability+Private.h"
-
-#import "RTCMediaStreamTrack.h"
-#import "helpers/NSString+StdString.h"
-
-#include "media/base/media_constants.h"
-#include "rtc_base/checks.h"
-
-@implementation RTC_OBJC_TYPE (RTCRtpCapabilities)
-
-@synthesize nativeCapabilities = _nativeCapabilities;
-
-- (instancetype)initWithNativeCapabilities:(const webrtc::RtpCapabilities &)nativeCapabilities {
-  if (self = [super init]) {
-    _nativeCapabilities = nativeCapabilities;
-  }
-
-  return self;
-}
-
-- (NSArray<RTC_OBJC_TYPE(RTCRtpCodecCapability) *> *)codecs {
-  NSMutableArray *result = [NSMutableArray array];
-
-  for (auto &element : _nativeCapabilities.codecs) {
-    RTCRtpCodecCapability *object =
-        [[RTCRtpCodecCapability alloc] initWithNativeCodecCapability:element];
-    [result addObject:object];
-  }
-
-  return result;
-}
-
-@end
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecCapability+Private.h b/sdk/objc/api/peerconnection/RTCRtpCodecCapability+Private.h
deleted file mode 100644
index ee578d7..0000000
--- a/sdk/objc/api/peerconnection/RTCRtpCodecCapability+Private.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- *  Copyright 2023 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import "RTCRtpCodecCapability.h"
-
-#include "api/rtp_parameters.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface RTC_OBJC_TYPE (RTCRtpCodecCapability)
-()
-
-    @property(nonatomic, readonly) webrtc::RtpCodecCapability nativeCodecCapability;
-
-- (instancetype)initWithNativeCodecCapability:
-    (const webrtc::RtpCodecCapability &)nativeCodecCapability NS_DESIGNATED_INITIALIZER;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecCapability.h b/sdk/objc/api/peerconnection/RTCRtpCodecCapability.h
deleted file mode 100644
index 0d60761..0000000
--- a/sdk/objc/api/peerconnection/RTCRtpCodecCapability.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Copyright 2023 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import <Foundation/Foundation.h>
-
-#import "RTCMacros.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef NS_ENUM(NSInteger, RTCRtpMediaType);
-
-RTC_OBJC_EXPORT
-@interface RTC_OBJC_TYPE (RTCRtpCodecCapability) : NSObject
-
-/** Build MIME "type/subtype" string from name and kind. */
-@property(nonatomic, readonly) NSString *mimeType;
-
-/** Used to identify the codec. Equivalent to MIME subtype. */
-@property(nonatomic, copy) NSString *name;
-
-/** The media type of this codec. Equivalent to MIME top-level type. */
-@property(nonatomic, assign) RTCRtpMediaType kind;
-
-/** Clock rate in Hertz. If unset, the codec is applicable to any clock rate. */
-@property(nonatomic, copy, nullable) NSNumber *clockRate;
-
-/** Default payload type for this codec. Mainly needed for codecs that use
- *  that have statically assigned payload types.
- */
-@property(nonatomic, copy, nullable) NSNumber *preferredPayloadType;
-
-/** The number of audio channels supported. Unused for video codecs. */
-@property(nonatomic, copy, nullable) NSNumber *numChannels;
-
-/**Codec-specific parameters that must be signaled to the remote party.
- *
- * Corresponds to "a=fmtp" parameters in SDP.
- *
- * Contrary to ORTC, these parameters are named using all lowercase strings.
- * This helps make the mapping to SDP simpler, if an application is using SDP.
- * Boolean values are represented by the string "1".
- */
-@property(nonatomic, copy) NSDictionary<NSString *, NSString *> *parameters;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm b/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm
deleted file mode 100644
index bb48ade..0000000
--- a/sdk/objc/api/peerconnection/RTCRtpCodecCapability.mm
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- *  Copyright 2023 The WebRTC project authors. All Rights Reserved.
- *
- *  Use of this source code is governed by a BSD-style license
- *  that can be found in the LICENSE file in the root of the source
- *  tree. An additional intellectual property rights grant can be found
- *  in the file PATENTS.  All contributing project authors may
- *  be found in the AUTHORS file in the root of the source tree.
- */
-
-#import "RTCRtpCodecCapability+Private.h"
-
-#import "RTCRtpReceiver+Private.h"
-
-#import "RTCMediaStreamTrack.h"
-#import "helpers/NSString+StdString.h"
-
-#include "media/base/media_constants.h"
-#include "rtc_base/checks.h"
-
-@implementation RTC_OBJC_TYPE (RTCRtpCodecCapability)
-
-@synthesize nativeCodecCapability = _nativeCodecCapability;
-
-- (instancetype)init {
-  return [self initWithNativeCodecCapability:webrtc::RtpCodecCapability()];
-}
-
-- (instancetype)initWithNativeCodecCapability:
-    (const webrtc::RtpCodecCapability &)nativeCodecCapability {
-  if (self = [super init]) {
-    _nativeCodecCapability = nativeCodecCapability;
-  }
-
-  return self;
-}
-
-- (NSString *)mimeType {
-  return [NSString stringWithUTF8String:_nativeCodecCapability.mime_type().c_str()];
-}
-
-- (NSString *)name {
-  return [NSString stringWithUTF8String:_nativeCodecCapability.name.c_str()];
-}
-
-- (void)setName:(NSString *)name {
-  _nativeCodecCapability.name = std::string([name UTF8String]);
-}
-
-- (RTCRtpMediaType)kind {
-  return [RTCRtpReceiver mediaTypeForNativeMediaType:_nativeCodecCapability.kind];
-}
-
-- (void)setKind:(RTCRtpMediaType)kind {
-  _nativeCodecCapability.kind = [RTCRtpReceiver nativeMediaTypeForMediaType:kind];
-}
-
-- (NSNumber *)clockRate {
-  if (!_nativeCodecCapability.clock_rate) {
-    return nil;
-  }
-
-  return [NSNumber numberWithInt:*_nativeCodecCapability.clock_rate];
-}
-
-- (void)setClockRate:(NSNumber *)clockRate {
-  if (clockRate == nil) {
-    _nativeCodecCapability.clock_rate = absl::optional<int>();
-    return;
-  }
-
-  _nativeCodecCapability.clock_rate = absl::optional<int>(clockRate.intValue);
-}
-
-- (NSNumber *)preferredPayloadType {
-  if (!_nativeCodecCapability.preferred_payload_type) {
-    return nil;
-  }
-
-  return [NSNumber numberWithInt:*_nativeCodecCapability.preferred_payload_type];
-}
-
-- (void)setPreferredPayloadType:(NSNumber *)preferredPayloadType {
-  if (preferredPayloadType == nil) {
-    _nativeCodecCapability.preferred_payload_type = absl::optional<int>();
-    return;
-  }
-
-  _nativeCodecCapability.preferred_payload_type =
-      absl::optional<int>(preferredPayloadType.intValue);
-}
-
-- (NSNumber *)numChannels {
-  if (!_nativeCodecCapability.num_channels) {
-    return nil;
-  }
-
-  return [NSNumber numberWithInt:*_nativeCodecCapability.num_channels];
-}
-
-- (void)setNumChannels:(NSNumber *)numChannels {
-  if (numChannels == nil) {
-    _nativeCodecCapability.num_channels = absl::optional<int>();
-    return;
-  }
-
-  _nativeCodecCapability.num_channels = absl::optional<int>(numChannels.intValue);
-}
-
-- (NSDictionary<NSString *, NSString *> *)parameters {
-  NSMutableDictionary *result = [NSMutableDictionary dictionary];
-  auto _parameters = _nativeCodecCapability.parameters;
-  for (auto it = _parameters.begin(); it != _parameters.end(); ++it) {
-    [result setObject:[NSString stringForStdString:it->second]
-               forKey:[NSString stringForStdString:it->first]];
-  }
-
-  return result;
-}
-
-- (void)setParameters:(NSDictionary<NSString *, NSString *> *)parameters {
-  std::map<std::string, std::string> _parameters;
-  for (NSString *paramKey in parameters.allKeys) {
-    std::string key = [NSString stdStringForString:paramKey];
-    std::string value = [NSString stdStringForString:parameters[paramKey]];
-    _parameters[key] = value;
-  }
-
-  _nativeCodecCapability.parameters = _parameters;
-}
-
-@end
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver.h b/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
index a10a260..fd59013 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver.h
@@ -16,8 +16,6 @@
 
 NS_ASSUME_NONNULL_BEGIN
 
-@class RTC_OBJC_TYPE(RTCRtpCodecCapability);
-
 extern NSString *const kRTCRtpTransceiverErrorDomain;
 
 /** https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiverdirection */
@@ -106,13 +104,6 @@
  */
 @property(nonatomic, readonly) RTCRtpTransceiverDirection direction;
 
-/** The codecPreferences indicates any overridden codec preferences, which
- *  will be used in calls to createOffer and createAnswer. An empty array
- *  indicates that the default codec preferences will be used.
- *  https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-setcodecpreferences
- */
-@property(nonatomic, readonly) NSArray<RTC_OBJC_TYPE(RTCRtpCodecCapability) *> *codecPreferences;
-
 /** The currentDirection attribute indicates the current direction negotiated
  *  for this transceiver. If this transceiver has never been represented in an
  *  offer/answer exchange, or if the transceiver is stopped, the value is not
@@ -134,15 +125,6 @@
  */
 - (void)setDirection:(RTCRtpTransceiverDirection)direction error:(NSError **)error;
 
-/** The setCodecPreferences method will reject attempts to set codecs not
- *  matching codecs found in sender or receiver capabilities for kind, where
- *  kind is the mediaType of the RTCRtpTransceiver on which the method is
- *  called.
- *  https://w3c.github.io/webrtc-pc/#dom-rtcrtptransceiver-setcodecpreferences
- */
-- (void)setCodecPreferences:(NSArray<RTC_OBJC_TYPE(RTCRtpCodecCapability) *> *)codecPreferences
-                      error:(NSError **)error;
-
 @end
 
 RTC_OBJC_EXPORT
diff --git a/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm b/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
index 36834ea..ae1cf79 100644
--- a/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
+++ b/sdk/objc/api/peerconnection/RTCRtpTransceiver.mm
@@ -10,8 +10,6 @@
 
 #import "RTCRtpTransceiver+Private.h"
 
-#import "RTCRtpCodecCapability+Private.h"
-#import "RTCRtpCodecCapability.h"
 #import "RTCRtpEncodingParameters+Private.h"
 #import "RTCRtpParameters+Private.h"
 #import "RTCRtpReceiver+Private.h"
@@ -67,40 +65,6 @@
   }
 }
 
-- (NSArray<RTC_OBJC_TYPE(RTCRtpCodecCapability) *> *)codecPreferences {
-  NSMutableArray *result = [NSMutableArray array];
-  std::vector<webrtc::RtpCodecCapability> capabilities = _nativeRtpTransceiver->codec_preferences();
-
-  for (auto &element : capabilities) {
-    RTCRtpCodecCapability *object =
-        [[RTCRtpCodecCapability alloc] initWithNativeCodecCapability:element];
-    [result addObject:object];
-  }
-
-  return result;
-}
-
-- (void)setCodecPreferences:(NSArray<RTC_OBJC_TYPE(RTCRtpCodecCapability) *> *)codecPreferences
-                      error:(NSError **)error {
-  std::vector<webrtc::RtpCodecCapability> objects;
-
-  for (RTCRtpCodecCapability *object in codecPreferences) {
-    objects.push_back(object.nativeCodecCapability);
-  }
-
-  webrtc::RTCError nativeError = _nativeRtpTransceiver->SetCodecPreferences(
-      rtc::ArrayView<webrtc::RtpCodecCapability>(objects.data(), objects.size()));
-
-  if (!nativeError.ok() && error) {
-    *error = [NSError errorWithDomain:kRTCRtpTransceiverErrorDomain
-                                 code:static_cast<int>(nativeError.type())
-                             userInfo:@{
-                               @"message" : [NSString stringWithCString:nativeError.message()
-                                                               encoding:NSUTF8StringEncoding]
-                             }];
-  }
-}
-
 @synthesize sender = _sender;
 @synthesize receiver = _receiver;
 
