From 81028796bc5b359c44a0b4a9d85c55e5db41f833 Mon Sep 17 00:00:00 2001 From: Jon Hjelle Date: Mon, 11 Jan 2016 13:16:13 -0800 Subject: Update API for Objective-C RTCMediaStreamTrack. R=tkchin@webrtc.org Review URL: https://codereview.webrtc.org/1527143002 . Patch from Jon Hjelle . Cr-Commit-Position: refs/heads/master@{#11208} --- webrtc/api/BUILD.gn | 5 +- webrtc/api/api.gyp | 3 + webrtc/api/objc/RTCMediaStreamTrack+Private.h | 45 +++++++++++ webrtc/api/objc/RTCMediaStreamTrack.h | 47 ++++++++++++ webrtc/api/objc/RTCMediaStreamTrack.mm | 105 ++++++++++++++++++++++++++ 5 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 webrtc/api/objc/RTCMediaStreamTrack+Private.h create mode 100644 webrtc/api/objc/RTCMediaStreamTrack.h create mode 100644 webrtc/api/objc/RTCMediaStreamTrack.mm (limited to 'webrtc') diff --git a/webrtc/api/BUILD.gn b/webrtc/api/BUILD.gn index 8652fae60f..157c79b3e9 100644 --- a/webrtc/api/BUILD.gn +++ b/webrtc/api/BUILD.gn @@ -19,10 +19,13 @@ if (is_ios) { "-Wobjc-missing-property-synthesis", ] sources = [ - # Add RTCIceCandidate when there's a BUILD.gn for peer connection APIs + # Add these when there's a BUILD.gn for peer connection APIs #"objc/RTCIceCandidate+Private.h", #"objc/RTCIceCandidate.h", #"objc/RTCIceCandidate.mm", + #"objc/RTCMediaStreamTrack+Private.h", + #"objc/RTCMediaStreamTrack.h", + #"objc/RTCMediaStreamTrack.mm", "objc/RTCIceServer+Private.h", "objc/RTCIceServer.h", "objc/RTCIceServer.mm", diff --git a/webrtc/api/api.gyp b/webrtc/api/api.gyp index e5a70e9625..ab1a047df2 100644 --- a/webrtc/api/api.gyp +++ b/webrtc/api/api.gyp @@ -28,6 +28,9 @@ 'objc/RTCMediaConstraints+Private.h', 'objc/RTCMediaConstraints.h', 'objc/RTCMediaConstraints.mm', + 'objc/RTCMediaStreamTrack+Private.h', + 'objc/RTCMediaStreamTrack.h', + 'objc/RTCMediaStreamTrack.mm', 'objc/RTCSessionDescription+Private.h', 'objc/RTCSessionDescription.h', 'objc/RTCSessionDescription.mm', diff --git a/webrtc/api/objc/RTCMediaStreamTrack+Private.h b/webrtc/api/objc/RTCMediaStreamTrack+Private.h new file mode 100644 index 0000000000..3e17e63cd3 --- /dev/null +++ b/webrtc/api/objc/RTCMediaStreamTrack+Private.h @@ -0,0 +1,45 @@ +/* + * Copyright 2015 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 "RTCMediaStreamTrack.h" + +#include "talk/app/webrtc/mediastreaminterface.h" +#include "webrtc/base/scoped_ptr.h" + +NS_ASSUME_NONNULL_BEGIN + +@interface RTCMediaStreamTrack () + +/** + * The native MediaStreamTrackInterface representation of this + * RTCMediaStreamTrack object. This is needed to pass to the underlying C++ + * APIs. + */ +@property(nonatomic, readonly) + rtc::scoped_refptr nativeTrack; + +/** + * Initialize an RTCMediaStreamTrack from a native MediaStreamTrackInterface. + */ +- (instancetype)initWithNativeTrack: + (rtc::scoped_refptr)nativeTrack + NS_DESIGNATED_INITIALIZER; + ++ (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState: + (RTCMediaStreamTrackState)state; + ++ (RTCMediaStreamTrackState)trackStateForNativeState: + (webrtc::MediaStreamTrackInterface::TrackState)nativeState; + ++ (NSString *)stringForState:(RTCMediaStreamTrackState)state; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/api/objc/RTCMediaStreamTrack.h b/webrtc/api/objc/RTCMediaStreamTrack.h new file mode 100644 index 0000000000..beb48d3b6f --- /dev/null +++ b/webrtc/api/objc/RTCMediaStreamTrack.h @@ -0,0 +1,47 @@ +/* + * Copyright 2015 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 + +/** + * Represents the state of the track. This exposes the same states in C++, + * which include two more states than are in the W3C spec. + */ +typedef NS_ENUM(NSInteger, RTCMediaStreamTrackState) { + RTCMediaStreamTrackStateInitializing, + RTCMediaStreamTrackStateLive, + RTCMediaStreamTrackStateEnded, + RTCMediaStreamTrackStateFailed, +}; + +NS_ASSUME_NONNULL_BEGIN + +@interface RTCMediaStreamTrack : NSObject + +/** + * The kind of track. For example, "audio" if this track represents an audio + * track and "video" if this track represents a video track. + */ +@property(nonatomic, readonly) NSString *kind; + +/** An identifier string. */ +@property(nonatomic, readonly) NSString *trackId; + +/** The enabled state of the track. */ +@property(nonatomic) BOOL isEnabled; + +/** The state of the track. */ +@property(nonatomic, readonly) RTCMediaStreamTrackState readyState; + +- (instancetype)init NS_UNAVAILABLE; + +@end + +NS_ASSUME_NONNULL_END diff --git a/webrtc/api/objc/RTCMediaStreamTrack.mm b/webrtc/api/objc/RTCMediaStreamTrack.mm new file mode 100644 index 0000000000..e5751b0746 --- /dev/null +++ b/webrtc/api/objc/RTCMediaStreamTrack.mm @@ -0,0 +1,105 @@ +/* + * Copyright 2015 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 "RTCMediaStreamTrack.h" + +#import "webrtc/api/objc/RTCMediaStreamTrack+Private.h" +#import "webrtc/base/objc/NSString+StdString.h" + +@implementation RTCMediaStreamTrack { + rtc::scoped_refptr _nativeTrack; +} + +- (NSString *)kind { + return [NSString stringForStdString:_nativeTrack->kind()]; +} + +- (NSString *)trackId { + return [NSString stringForStdString:_nativeTrack->id()]; +} + +- (BOOL)isEnabled { + return _nativeTrack->enabled(); +} + +- (void)setIsEnabled:(BOOL)isEnabled { + _nativeTrack->set_enabled(isEnabled); +} + +- (RTCMediaStreamTrackState)readyState { + return [[self class] trackStateForNativeState:_nativeTrack->state()]; +} + +- (NSString *)description { + NSString *readyState = [[self class] stringForState:self.readyState]; + return [NSString stringWithFormat:@"RTCMediaStreamTrack:\n%@\n%@\n%@\n%@", + self.kind, + self.trackId, + self.isEnabled ? @"enabled" : @"disabled", + readyState]; +} + +#pragma mark - Private + +- (rtc::scoped_refptr)nativeTrack { + return _nativeTrack; +} + +- (instancetype)initWithNativeTrack: + (rtc::scoped_refptr)nativeTrack { + NSParameterAssert(nativeTrack); + if (self = [super init]) { + _nativeTrack = nativeTrack; + } + return self; +} + ++ (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState: + (RTCMediaStreamTrackState)state { + switch (state) { + case RTCMediaStreamTrackStateInitializing: + return webrtc::MediaStreamTrackInterface::kInitializing; + case RTCMediaStreamTrackStateLive: + return webrtc::MediaStreamTrackInterface::kLive; + case RTCMediaStreamTrackStateEnded: + return webrtc::MediaStreamTrackInterface::kEnded; + case RTCMediaStreamTrackStateFailed: + return webrtc::MediaStreamTrackInterface::kFailed; + } +} + ++ (RTCMediaStreamTrackState)trackStateForNativeState: + (webrtc::MediaStreamTrackInterface::TrackState)nativeState { + switch (nativeState) { + case webrtc::MediaStreamTrackInterface::kInitializing: + return RTCMediaStreamTrackStateInitializing; + case webrtc::MediaStreamTrackInterface::kLive: + return RTCMediaStreamTrackStateLive; + case webrtc::MediaStreamTrackInterface::kEnded: + return RTCMediaStreamTrackStateEnded; + case webrtc::MediaStreamTrackInterface::kFailed: + return RTCMediaStreamTrackStateFailed; + } +} + ++ (NSString *)stringForState:(RTCMediaStreamTrackState)state { + switch (state) { + case RTCMediaStreamTrackStateInitializing: + return @"Initializing"; + case RTCMediaStreamTrackStateLive: + return @"Live"; + case RTCMediaStreamTrackStateEnded: + return @"Ended"; + case RTCMediaStreamTrackStateFailed: + return @"Failed"; + } +} + +@end -- cgit v1.2.3