Skip to content

Commit

Permalink
Expose getCapabilities/setCodecPreferences for objc
Browse files Browse the repository at this point in the history
Bug: None
Change-Id: I31cf22bae595cf2b995ff648523d25485106fcd5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/305200
Reviewed-by: Magnus Jedvert <[email protected]>
Reviewed-by: Peter Hanspers <[email protected]>
Commit-Queue: Peter Hanspers <[email protected]>
Cr-Commit-Position: refs/heads/main@{#40841}
  • Loading branch information
davidliu authored and saghul committed Oct 15, 2023
1 parent 7385b43 commit 0c4b9fd
Show file tree
Hide file tree
Showing 11 changed files with 402 additions and 0 deletions.
10 changes: 10 additions & 0 deletions sdk/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -991,6 +991,12 @@ if (is_ios || is_mac) {
"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",
Expand Down Expand Up @@ -1309,6 +1315,8 @@ if (is_ios || is_mac) {
"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",
Expand Down Expand Up @@ -1423,6 +1431,8 @@ if (is_ios || is_mac) {
"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",
Expand Down
8 changes: 8 additions & 0 deletions sdk/objc/api/peerconnection/RTCPeerConnectionFactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ NS_ASSUME_NONNULL_BEGIN
@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
Expand Down Expand Up @@ -99,6 +101,12 @@ RTC_OBJC_EXPORT
(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;

Expand Down
16 changes: 16 additions & 0 deletions sdk/objc/api/peerconnection/RTCPeerConnectionFactory.mm
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@
#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"
Expand Down Expand Up @@ -303,6 +307,18 @@ - (instancetype)initWithNativeAudioEncoderFactory:
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);
Expand Down
29 changes: 29 additions & 0 deletions sdk/objc/api/peerconnection/RTCRtpCapabilities+Private.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
/*
* 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
28 changes: 28 additions & 0 deletions sdk/objc/api/peerconnection/RTCRtpCapabilities.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* 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
44 changes: 44 additions & 0 deletions sdk/objc/api/peerconnection/RTCRtpCapabilities.mm
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* 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
27 changes: 27 additions & 0 deletions sdk/objc/api/peerconnection/RTCRtpCodecCapability+Private.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* 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
54 changes: 54 additions & 0 deletions sdk/objc/api/peerconnection/RTCRtpCodecCapability.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
/*
* 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
Loading

0 comments on commit 0c4b9fd

Please sign in to comment.