1 /* 2 * Copyright 2015 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #import "RTCMediaStreamTrack.h" 12 13 #import "webrtc/api/objc/RTCMediaStreamTrack+Private.h" 14 #import "webrtc/base/objc/NSString+StdString.h" 15 16 @implementation RTCMediaStreamTrack { 17 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> _nativeTrack; 18 } 19 20 - (NSString *)kind { 21 return [NSString stringForStdString:_nativeTrack->kind()]; 22 } 23 24 - (NSString *)trackId { 25 return [NSString stringForStdString:_nativeTrack->id()]; 26 } 27 28 - (BOOL)isEnabled { 29 return _nativeTrack->enabled(); 30 } 31 32 - (void)setIsEnabled:(BOOL)isEnabled { 33 _nativeTrack->set_enabled(isEnabled); 34 } 35 36 - (RTCMediaStreamTrackState)readyState { 37 return [[self class] trackStateForNativeState:_nativeTrack->state()]; 38 } 39 40 - (NSString *)description { 41 NSString *readyState = [[self class] stringForState:self.readyState]; 42 return [NSString stringWithFormat:@"RTCMediaStreamTrack:\n%@\n%@\n%@\n%@", 43 self.kind, 44 self.trackId, 45 self.isEnabled ? @"enabled" : @"disabled", 46 readyState]; 47 } 48 49 #pragma mark - Private 50 51 - (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack { 52 return _nativeTrack; 53 } 54 55 - (instancetype)initWithNativeTrack: 56 (rtc::scoped_refptr<webrtc::MediaStreamTrackInterface>)nativeTrack { 57 NSParameterAssert(nativeTrack); 58 if (self = [super init]) { 59 _nativeTrack = nativeTrack; 60 } 61 return self; 62 } 63 64 + (webrtc::MediaStreamTrackInterface::TrackState)nativeTrackStateForState: 65 (RTCMediaStreamTrackState)state { 66 switch (state) { 67 case RTCMediaStreamTrackStateInitializing: 68 return webrtc::MediaStreamTrackInterface::kInitializing; 69 case RTCMediaStreamTrackStateLive: 70 return webrtc::MediaStreamTrackInterface::kLive; 71 case RTCMediaStreamTrackStateEnded: 72 return webrtc::MediaStreamTrackInterface::kEnded; 73 case RTCMediaStreamTrackStateFailed: 74 return webrtc::MediaStreamTrackInterface::kFailed; 75 } 76 } 77 78 + (RTCMediaStreamTrackState)trackStateForNativeState: 79 (webrtc::MediaStreamTrackInterface::TrackState)nativeState { 80 switch (nativeState) { 81 case webrtc::MediaStreamTrackInterface::kInitializing: 82 return RTCMediaStreamTrackStateInitializing; 83 case webrtc::MediaStreamTrackInterface::kLive: 84 return RTCMediaStreamTrackStateLive; 85 case webrtc::MediaStreamTrackInterface::kEnded: 86 return RTCMediaStreamTrackStateEnded; 87 case webrtc::MediaStreamTrackInterface::kFailed: 88 return RTCMediaStreamTrackStateFailed; 89 } 90 } 91 92 + (NSString *)stringForState:(RTCMediaStreamTrackState)state { 93 switch (state) { 94 case RTCMediaStreamTrackStateInitializing: 95 return @"Initializing"; 96 case RTCMediaStreamTrackStateLive: 97 return @"Live"; 98 case RTCMediaStreamTrackStateEnded: 99 return @"Ended"; 100 case RTCMediaStreamTrackStateFailed: 101 return @"Failed"; 102 } 103 } 104 105 @end 106