From d4bfbfc75ae99dfe648a86943ca3d5aa6b4a9cc8 Mon Sep 17 00:00:00 2001 From: tkchin Date: Tue, 30 Aug 2016 11:56:05 -0700 Subject: [PATCH] iOS: Add ability to specify audio constraints. NOTRY=True BUG= Review-Url: https://codereview.webrtc.org/2290583003 Cr-Commit-Position: refs/heads/master@{#13976} --- webrtc/sdk/BUILD.gn | 6 ++ .../Classes/RTCAudioSource+Private.h | 32 ++++++++ .../objc/Framework/Classes/RTCAudioSource.mm | 47 +++++++++++ .../Framework/Classes/RTCAudioTrack+Private.h | 1 + .../objc/Framework/Classes/RTCAudioTrack.mm | 31 +++++++- .../Classes/RTCMediaSource+Private.h | 42 ++++++++++ .../objc/Framework/Classes/RTCMediaSource.mm | 79 +++++++++++++++++++ .../Classes/RTCPeerConnectionFactory.mm | 29 +++++-- .../Classes/RTCVideoSource+Private.h | 12 ++- .../objc/Framework/Classes/RTCVideoSource.mm | 73 +++++------------ .../Framework/Headers/WebRTC/RTCAudioSource.h | 25 ++++++ .../Framework/Headers/WebRTC/RTCAudioTrack.h | 5 ++ .../Framework/Headers/WebRTC/RTCMediaSource.h | 34 ++++++++ .../Headers/WebRTC/RTCPeerConnectionFactory.h | 16 +++- .../Framework/Headers/WebRTC/RTCVideoSource.h | 13 +-- .../objc/Framework/Headers/WebRTC/WebRTC.h | 2 + webrtc/sdk/sdk.gyp | 6 ++ 17 files changed, 369 insertions(+), 84 deletions(-) create mode 100644 webrtc/sdk/objc/Framework/Classes/RTCAudioSource+Private.h create mode 100644 webrtc/sdk/objc/Framework/Classes/RTCAudioSource.mm create mode 100644 webrtc/sdk/objc/Framework/Classes/RTCMediaSource+Private.h create mode 100644 webrtc/sdk/objc/Framework/Classes/RTCMediaSource.mm create mode 100644 webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h create mode 100644 webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h diff --git a/webrtc/sdk/BUILD.gn b/webrtc/sdk/BUILD.gn index 0affad03a7..0f63127801 100644 --- a/webrtc/sdk/BUILD.gn +++ b/webrtc/sdk/BUILD.gn @@ -73,6 +73,8 @@ if (is_ios || (is_mac && mac_deployment_target == "10.7")) { sources = [ "objc/Framework/Classes/RTCAVFoundationVideoSource+Private.h", "objc/Framework/Classes/RTCAVFoundationVideoSource.mm", + "objc/Framework/Classes/RTCAudioSource+Private.h", + "objc/Framework/Classes/RTCAudioSource.mm", "objc/Framework/Classes/RTCAudioTrack+Private.h", "objc/Framework/Classes/RTCAudioTrack.mm", "objc/Framework/Classes/RTCConfiguration+Private.h", @@ -88,6 +90,8 @@ if (is_ios || (is_mac && mac_deployment_target == "10.7")) { "objc/Framework/Classes/RTCIceServer.mm", "objc/Framework/Classes/RTCMediaConstraints+Private.h", "objc/Framework/Classes/RTCMediaConstraints.mm", + "objc/Framework/Classes/RTCMediaSource+Private.h", + "objc/Framework/Classes/RTCMediaSource.mm", "objc/Framework/Classes/RTCMediaStream+Private.h", "objc/Framework/Classes/RTCMediaStream.mm", "objc/Framework/Classes/RTCMediaStreamTrack+Private.h", @@ -130,6 +134,7 @@ if (is_ios || (is_mac && mac_deployment_target == "10.7")) { "objc/Framework/Classes/avfoundationvideocapturer.h", "objc/Framework/Classes/avfoundationvideocapturer.mm", "objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h", + "objc/Framework/Headers/WebRTC/RTCAudioSource.h", "objc/Framework/Headers/WebRTC/RTCAudioTrack.h", "objc/Framework/Headers/WebRTC/RTCConfiguration.h", "objc/Framework/Headers/WebRTC/RTCDataChannel.h", @@ -137,6 +142,7 @@ if (is_ios || (is_mac && mac_deployment_target == "10.7")) { "objc/Framework/Headers/WebRTC/RTCIceCandidate.h", "objc/Framework/Headers/WebRTC/RTCIceServer.h", "objc/Framework/Headers/WebRTC/RTCMediaConstraints.h", + "objc/Framework/Headers/WebRTC/RTCMediaSource.h", "objc/Framework/Headers/WebRTC/RTCMediaStream.h", "objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h", "objc/Framework/Headers/WebRTC/RTCPeerConnection.h", diff --git a/webrtc/sdk/objc/Framework/Classes/RTCAudioSource+Private.h b/webrtc/sdk/objc/Framework/Classes/RTCAudioSource+Private.h new file mode 100644 index 0000000000..43aff02691 --- /dev/null +++ b/webrtc/sdk/objc/Framework/Classes/RTCAudioSource+Private.h @@ -0,0 +1,32 @@ +/* + * Copyright 2016 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 "WebRTC/RTCAudioSource.h" + +#import "RTCMediaSource+Private.h" + +@interface RTCAudioSource () + +/** + * The AudioSourceInterface object passed to this RTCAudioSource during + * construction. + */ +@property(nonatomic, readonly) rtc::scoped_refptr nativeAudioSource; + +/** Initialize an RTCAudioSource from a native AudioSourceInterface. */ +- (instancetype)initWithNativeAudioSource: + (rtc::scoped_refptr)nativeAudioSource + NS_DESIGNATED_INITIALIZER; + +- (instancetype)initWithNativeMediaSource: + (rtc::scoped_refptr)nativeMediaSource + type:(RTCMediaSourceType)type NS_UNAVAILABLE; + +@end diff --git a/webrtc/sdk/objc/Framework/Classes/RTCAudioSource.mm b/webrtc/sdk/objc/Framework/Classes/RTCAudioSource.mm new file mode 100644 index 0000000000..8975652440 --- /dev/null +++ b/webrtc/sdk/objc/Framework/Classes/RTCAudioSource.mm @@ -0,0 +1,47 @@ +/* + * Copyright 2016 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 "RTCAudioSource+Private.h" + +#include "webrtc/base/checks.h" + +@implementation RTCAudioSource { + rtc::scoped_refptr _nativeAudioSource; +} + +- (instancetype)initWithNativeAudioSource: + (rtc::scoped_refptr)nativeAudioSource { + RTC_DCHECK(nativeAudioSource); + if (self = [super initWithNativeMediaSource:nativeAudioSource + type:RTCMediaSourceTypeAudio]) { + _nativeAudioSource = nativeAudioSource; + } + return self; +} + +- (instancetype)initWithNativeMediaSource: + (rtc::scoped_refptr)nativeMediaSource + type:(RTCMediaSourceType)type { + RTC_NOTREACHED(); + return nil; +} + +- (NSString *)description { + NSString *stateString = [[self class] stringForState:self.state]; + return [NSString stringWithFormat:@"RTCAudioSource( %p ): %@", self, stateString]; +} + +#pragma mark - Private + +- (rtc::scoped_refptr)nativeAudioSource { + return _nativeAudioSource; +} + +@end diff --git a/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack+Private.h b/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack+Private.h index cb5f1865ae..ea14fb35ba 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack+Private.h +++ b/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack+Private.h @@ -23,6 +23,7 @@ NS_ASSUME_NONNULL_BEGIN /** Initialize an RTCAudioTrack with an id. */ - (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory + source:(RTCAudioSource *)source trackId:(NSString *)trackId; @end diff --git a/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack.mm b/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack.mm index 42542b8b8f..5fa2d464ff 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCAudioTrack.mm @@ -11,19 +11,30 @@ #import "RTCAudioTrack+Private.h" #import "NSString+StdString.h" +#import "RTCAudioSource+Private.h" #import "RTCMediaStreamTrack+Private.h" #import "RTCPeerConnectionFactory+Private.h" +#include "webrtc/base/checks.h" + @implementation RTCAudioTrack +@synthesize source = _source; + - (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory + source:(RTCAudioSource *)source trackId:(NSString *)trackId { - NSParameterAssert(factory); - NSParameterAssert(trackId.length); + RTC_DCHECK(factory); + RTC_DCHECK(source); + RTC_DCHECK(trackId.length); + std::string nativeId = [NSString stdStringForString:trackId]; rtc::scoped_refptr track = - factory.nativeFactory->CreateAudioTrack(nativeId, nullptr); - return [self initWithNativeTrack:track type:RTCMediaStreamTrackTypeAudio]; + factory.nativeFactory->CreateAudioTrack(nativeId, source.nativeAudioSource); + if ([self initWithNativeTrack:track type:RTCMediaStreamTrackTypeAudio]) { + _source = source; + } + return self; } - (instancetype)initWithNativeTrack: @@ -34,6 +45,18 @@ return [super initWithNativeTrack:nativeTrack type:type]; } + +- (RTCAudioSource *)source { + if (!_source) { + rtc::scoped_refptr source = + self.nativeAudioTrack->GetSource(); + if (source) { + _source = [[RTCAudioSource alloc] initWithNativeAudioSource:source.get()]; + } + } + return _source; +} + #pragma mark - Private - (rtc::scoped_refptr)nativeAudioTrack { diff --git a/webrtc/sdk/objc/Framework/Classes/RTCMediaSource+Private.h b/webrtc/sdk/objc/Framework/Classes/RTCMediaSource+Private.h new file mode 100644 index 0000000000..55d268a495 --- /dev/null +++ b/webrtc/sdk/objc/Framework/Classes/RTCMediaSource+Private.h @@ -0,0 +1,42 @@ +/* + * Copyright 2016 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 "WebRTC/RTCMediaSource.h" + +#include "webrtc/api/mediastreaminterface.h" + +NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(NSInteger, RTCMediaSourceType) { + RTCMediaSourceTypeAudio, + RTCMediaSourceTypeVideo, +}; + +@interface RTCMediaSource () + +@property(nonatomic, readonly) + rtc::scoped_refptr nativeMediaSource; + +- (instancetype)initWithNativeMediaSource: + (rtc::scoped_refptr)nativeMediaSource + type:(RTCMediaSourceType)type + NS_DESIGNATED_INITIALIZER; + ++ (webrtc::MediaSourceInterface::SourceState)nativeSourceStateForState: + (RTCSourceState)state; + ++ (RTCSourceState)sourceStateForNativeState: + (webrtc::MediaSourceInterface::SourceState)nativeState; + ++ (NSString *)stringForState:(RTCSourceState)state; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/sdk/objc/Framework/Classes/RTCMediaSource.mm b/webrtc/sdk/objc/Framework/Classes/RTCMediaSource.mm new file mode 100644 index 0000000000..996563b650 --- /dev/null +++ b/webrtc/sdk/objc/Framework/Classes/RTCMediaSource.mm @@ -0,0 +1,79 @@ +/* + * Copyright 2016 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 "RTCMediaSource+Private.h" + +#include "webrtc/base/checks.h" + +@implementation RTCMediaSource { + RTCMediaSourceType _type; +} + +@synthesize nativeMediaSource = _nativeMediaSource; + +- (instancetype)initWithNativeMediaSource: + (rtc::scoped_refptr)nativeMediaSource + type:(RTCMediaSourceType)type { + RTC_DCHECK(nativeMediaSource); + if (self = [super init]) { + _nativeMediaSource = nativeMediaSource; + _type = type; + } + return self; +} + +- (RTCSourceState)state { + return [[self class] sourceStateForNativeState:_nativeMediaSource->state()]; +} + +#pragma mark - Private + ++ (webrtc::MediaSourceInterface::SourceState)nativeSourceStateForState: + (RTCSourceState)state { + switch (state) { + case RTCSourceStateInitializing: + return webrtc::MediaSourceInterface::kInitializing; + case RTCSourceStateLive: + return webrtc::MediaSourceInterface::kLive; + case RTCSourceStateEnded: + return webrtc::MediaSourceInterface::kEnded; + case RTCSourceStateMuted: + return webrtc::MediaSourceInterface::kMuted; + } +} + ++ (RTCSourceState)sourceStateForNativeState: + (webrtc::MediaSourceInterface::SourceState)nativeState { + switch (nativeState) { + case webrtc::MediaSourceInterface::kInitializing: + return RTCSourceStateInitializing; + case webrtc::MediaSourceInterface::kLive: + return RTCSourceStateLive; + case webrtc::MediaSourceInterface::kEnded: + return RTCSourceStateEnded; + case webrtc::MediaSourceInterface::kMuted: + return RTCSourceStateMuted; + } +} + ++ (NSString *)stringForState:(RTCSourceState)state { + switch (state) { + case RTCSourceStateInitializing: + return @"Initializing"; + case RTCSourceStateLive: + return @"Live"; + case RTCSourceStateEnded: + return @"Ended"; + case RTCSourceStateMuted: + return @"Muted"; + } +} + +@end diff --git a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm index 0ac2ec4c8a..d5fd1df067 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnectionFactory.mm @@ -12,7 +12,9 @@ #import "NSString+StdString.h" #import "RTCAVFoundationVideoSource+Private.h" +#import "RTCAudioSource+Private.h" #import "RTCAudioTrack+Private.h" +#import "RTCMediaConstraints+Private.h" #import "RTCMediaStream+Private.h" #import "RTCPeerConnection+Private.h" #import "RTCVideoSource+Private.h" @@ -61,17 +63,34 @@ _nativeFactory->StopAecDump(); } +- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints { + std::unique_ptr nativeConstraints; + if (constraints) { + nativeConstraints = constraints.nativeConstraints; + } + rtc::scoped_refptr source = + _nativeFactory->CreateAudioSource(nativeConstraints.get()); + return [[RTCAudioSource alloc] initWithNativeAudioSource:source]; +} + +- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId { + RTCAudioSource *audioSource = [self audioSourceWithConstraints:nil]; + return [self audioTrackWithSource:audioSource trackId:trackId]; +} + +- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source + trackId:(NSString *)trackId { + return [[RTCAudioTrack alloc] initWithFactory:self + source:source + trackId:trackId]; +} + - (RTCAVFoundationVideoSource *)avFoundationVideoSourceWithConstraints: (nullable RTCMediaConstraints *)constraints { return [[RTCAVFoundationVideoSource alloc] initWithFactory:self constraints:constraints]; } -- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId { - return [[RTCAudioTrack alloc] initWithFactory:self - trackId:trackId]; -} - - (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source trackId:(NSString *)trackId { return [[RTCVideoTrack alloc] initWithFactory:self diff --git a/webrtc/sdk/objc/Framework/Classes/RTCVideoSource+Private.h b/webrtc/sdk/objc/Framework/Classes/RTCVideoSource+Private.h index 757c1746ef..f6e202cd9b 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCVideoSource+Private.h +++ b/webrtc/sdk/objc/Framework/Classes/RTCVideoSource+Private.h @@ -10,6 +10,8 @@ #import "WebRTC/RTCVideoSource.h" +#import "RTCMediaSource+Private.h" + #include "webrtc/api/mediastreaminterface.h" NS_ASSUME_NONNULL_BEGIN @@ -29,13 +31,9 @@ NS_ASSUME_NONNULL_BEGIN (rtc::scoped_refptr)nativeVideoSource NS_DESIGNATED_INITIALIZER; -+ (webrtc::MediaSourceInterface::SourceState)nativeSourceStateForState: - (RTCSourceState)state; - -+ (RTCSourceState)sourceStateForNativeState: - (webrtc::MediaSourceInterface::SourceState)nativeState; - -+ (NSString *)stringForState:(RTCSourceState)state; +- (instancetype)initWithNativeMediaSource: + (rtc::scoped_refptr)nativeMediaSource + type:(RTCMediaSourceType)type NS_UNAVAILABLE; @end diff --git a/webrtc/sdk/objc/Framework/Classes/RTCVideoSource.mm b/webrtc/sdk/objc/Framework/Classes/RTCVideoSource.mm index eddf5e0c68..83a8b79ebe 100644 --- a/webrtc/sdk/objc/Framework/Classes/RTCVideoSource.mm +++ b/webrtc/sdk/objc/Framework/Classes/RTCVideoSource.mm @@ -10,17 +10,32 @@ #import "RTCVideoSource+Private.h" +#include "webrtc/base/checks.h" + @implementation RTCVideoSource { rtc::scoped_refptr _nativeVideoSource; } -- (RTCSourceState)state { - return [[self class] sourceStateForNativeState:_nativeVideoSource->state()]; +- (instancetype)initWithNativeVideoSource: + (rtc::scoped_refptr)nativeVideoSource { + RTC_DCHECK(nativeVideoSource); + if (self = [super initWithNativeMediaSource:nativeVideoSource + type:RTCMediaSourceTypeVideo]) { + _nativeVideoSource = nativeVideoSource; + } + return self; +} + +- (instancetype)initWithNativeMediaSource: + (rtc::scoped_refptr)nativeMediaSource + type:(RTCMediaSourceType)type { + RTC_NOTREACHED(); + return nil; } - (NSString *)description { - return [NSString stringWithFormat:@"RTCVideoSource:\n%@", - [[self class] stringForState:self.state]]; + NSString *stateString = [[self class] stringForState:self.state]; + return [NSString stringWithFormat:@"RTCVideoSource( %p ): %@", self, stateString]; } #pragma mark - Private @@ -29,54 +44,4 @@ return _nativeVideoSource; } -- (instancetype)initWithNativeVideoSource: - (rtc::scoped_refptr)nativeVideoSource { - NSParameterAssert(nativeVideoSource); - if (self = [super init]) { - _nativeVideoSource = nativeVideoSource; - } - return self; -} - -+ (webrtc::MediaSourceInterface::SourceState)nativeSourceStateForState: - (RTCSourceState)state { - switch (state) { - case RTCSourceStateInitializing: - return webrtc::MediaSourceInterface::kInitializing; - case RTCSourceStateLive: - return webrtc::MediaSourceInterface::kLive; - case RTCSourceStateEnded: - return webrtc::MediaSourceInterface::kEnded; - case RTCSourceStateMuted: - return webrtc::MediaSourceInterface::kMuted; - } -} - -+ (RTCSourceState)sourceStateForNativeState: - (webrtc::MediaSourceInterface::SourceState)nativeState { - switch (nativeState) { - case webrtc::MediaSourceInterface::kInitializing: - return RTCSourceStateInitializing; - case webrtc::MediaSourceInterface::kLive: - return RTCSourceStateLive; - case webrtc::MediaSourceInterface::kEnded: - return RTCSourceStateEnded; - case webrtc::MediaSourceInterface::kMuted: - return RTCSourceStateMuted; - } -} - -+ (NSString *)stringForState:(RTCSourceState)state { - switch (state) { - case RTCSourceStateInitializing: - return @"Initializing"; - case RTCSourceStateLive: - return @"Live"; - case RTCSourceStateEnded: - return @"Ended"; - case RTCSourceStateMuted: - return @"Muted"; - } -} - @end diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h new file mode 100644 index 0000000000..a86f42bbb7 --- /dev/null +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioSource.h @@ -0,0 +1,25 @@ +/* + * Copyright 2016 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 + +#import +#import + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCAudioSource : RTCMediaSource + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h index a9f5fe2277..b83eede528 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCAudioTrack.h @@ -13,11 +13,16 @@ NS_ASSUME_NONNULL_BEGIN +@class RTCAudioSource; + RTC_EXPORT @interface RTCAudioTrack : RTCMediaStreamTrack - (instancetype)init NS_UNAVAILABLE; +/** The audio source for this audio track. */ +@property(nonatomic, readonly) RTCAudioSource *source; + @end NS_ASSUME_NONNULL_END diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h new file mode 100644 index 0000000000..6cfcb7d2ce --- /dev/null +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCMediaSource.h @@ -0,0 +1,34 @@ +/* + * Copyright 2016 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 + +#import + +typedef NS_ENUM(NSInteger, RTCSourceState) { + RTCSourceStateInitializing, + RTCSourceStateLive, + RTCSourceStateEnded, + RTCSourceStateMuted, +}; + +NS_ASSUME_NONNULL_BEGIN + +RTC_EXPORT +@interface RTCMediaSource : NSObject + +/** The current state of the RTCMediaSource. */ +@property(nonatomic, readonly) RTCSourceState state; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h index abf2373f3c..03279a3c7b 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h @@ -15,6 +15,7 @@ NS_ASSUME_NONNULL_BEGIN @class RTCAVFoundationVideoSource; +@class RTCAudioSource; @class RTCAudioTrack; @class RTCConfiguration; @class RTCMediaConstraints; @@ -29,13 +30,22 @@ RTC_EXPORT - (instancetype)init NS_DESIGNATED_INITIALIZER; +/** Initialize an RTCAudioSource with constraints. */ +- (RTCAudioSource *)audioSourceWithConstraints:(nullable RTCMediaConstraints *)constraints; + +/** Initialize an RTCAudioTrack with an id. Convenience ctor to use an audio source with no + * constraints. + */ +- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId; + +/** Initialize an RTCAudioTrack with a source and an id. */ +- (RTCAudioTrack *)audioTrackWithSource:(RTCAudioSource *)source + trackId:(NSString *)trackId; + /** Initialize an RTCAVFoundationVideoSource with constraints. */ - (RTCAVFoundationVideoSource *)avFoundationVideoSourceWithConstraints: (nullable RTCMediaConstraints *)constraints; -/** Initialize an RTCAudioTrack with an id. */ -- (RTCAudioTrack *)audioTrackWithTrackId:(NSString *)trackId; - /** Initialize an RTCVideoTrack with a source and an id. */ - (RTCVideoTrack *)videoTrackWithSource:(RTCVideoSource *)source trackId:(NSString *)trackId; diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h index e234c3e089..96bb6f3699 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/RTCVideoSource.h @@ -11,21 +11,12 @@ #import #import - -typedef NS_ENUM(NSInteger, RTCSourceState) { - RTCSourceStateInitializing, - RTCSourceStateLive, - RTCSourceStateEnded, - RTCSourceStateMuted, -}; +#import NS_ASSUME_NONNULL_BEGIN RTC_EXPORT -@interface RTCVideoSource : NSObject - -/** The current state of the RTCVideoSource. */ -@property(nonatomic, readonly) RTCSourceState state; +@interface RTCVideoSource : RTCMediaSource - (instancetype)init NS_UNAVAILABLE; diff --git a/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h b/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h index 27f6152931..502d59e050 100644 --- a/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h +++ b/webrtc/sdk/objc/Framework/Headers/WebRTC/WebRTC.h @@ -9,6 +9,7 @@ */ #import +#import #import #import #import @@ -23,6 +24,7 @@ #import #import #import +#import #import #import #import diff --git a/webrtc/sdk/sdk.gyp b/webrtc/sdk/sdk.gyp index 46d324e623..1aae9c5bab 100644 --- a/webrtc/sdk/sdk.gyp +++ b/webrtc/sdk/sdk.gyp @@ -108,6 +108,8 @@ 'sources': [ 'objc/Framework/Classes/RTCAVFoundationVideoSource+Private.h', 'objc/Framework/Classes/RTCAVFoundationVideoSource.mm', + 'objc/Framework/Classes/RTCAudioSource+Private.h', + 'objc/Framework/Classes/RTCAudioSource.mm', 'objc/Framework/Classes/RTCAudioTrack+Private.h', 'objc/Framework/Classes/RTCAudioTrack.mm', 'objc/Framework/Classes/RTCConfiguration+Private.h', @@ -123,6 +125,8 @@ 'objc/Framework/Classes/RTCIceServer.mm', 'objc/Framework/Classes/RTCMediaConstraints+Private.h', 'objc/Framework/Classes/RTCMediaConstraints.mm', + 'objc/Framework/Classes/RTCMediaSource+Private.h', + 'objc/Framework/Classes/RTCMediaSource.mm', 'objc/Framework/Classes/RTCMediaStream+Private.h', 'objc/Framework/Classes/RTCMediaStream.mm', 'objc/Framework/Classes/RTCMediaStreamTrack+Private.h', @@ -165,6 +169,7 @@ 'objc/Framework/Classes/avfoundationvideocapturer.h', 'objc/Framework/Classes/avfoundationvideocapturer.mm', 'objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h', + 'objc/Framework/Headers/WebRTC/RTCAudioSource.h', 'objc/Framework/Headers/WebRTC/RTCAudioTrack.h', 'objc/Framework/Headers/WebRTC/RTCConfiguration.h', 'objc/Framework/Headers/WebRTC/RTCDataChannel.h', @@ -172,6 +177,7 @@ 'objc/Framework/Headers/WebRTC/RTCIceCandidate.h', 'objc/Framework/Headers/WebRTC/RTCIceServer.h', 'objc/Framework/Headers/WebRTC/RTCMediaConstraints.h', + 'objc/Framework/Headers/WebRTC/RTCMediaSource.h', 'objc/Framework/Headers/WebRTC/RTCMediaStream.h', 'objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h', 'objc/Framework/Headers/WebRTC/RTCPeerConnection.h',