blob: ed007cf9526210ecfc9322a71fd89a4003796226 [file] [log] [blame]
skvlad79b4b872016-04-08 17:28:55 -07001/*
2 * Copyright 2016 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
tkchin9eeb6242016-04-27 01:54:20 -070011#import "RTCRtpSender+Private.h"
skvlad79b4b872016-04-08 17:28:55 -070012
skvladf3569c82016-04-29 15:30:16 -070013#import "NSString+StdString.h"
Yura Yaroshevich27676322018-01-02 14:44:35 +030014#import "RTCDtmfSender+Private.h"
tkchin9eeb6242016-04-27 01:54:20 -070015#import "RTCMediaStreamTrack+Private.h"
16#import "RTCRtpParameters+Private.h"
skvladf3569c82016-04-29 15:30:16 -070017#import "WebRTC/RTCLogging.h"
skvlad79b4b872016-04-08 17:28:55 -070018
Mirko Bonadei92ea95e2017-09-15 06:47:31 +020019#include "api/mediastreaminterface.h"
skvlad79b4b872016-04-08 17:28:55 -070020
21@implementation RTCRtpSender {
22 rtc::scoped_refptr<webrtc::RtpSenderInterface> _nativeRtpSender;
23}
24
Yura Yaroshevich27676322018-01-02 14:44:35 +030025@synthesize dtmfSender = _dtmfSender;
26
skvladf3569c82016-04-29 15:30:16 -070027- (NSString *)senderId {
28 return [NSString stringForStdString:_nativeRtpSender->id()];
29}
30
skvlad79b4b872016-04-08 17:28:55 -070031- (RTCRtpParameters *)parameters {
32 return [[RTCRtpParameters alloc]
33 initWithNativeParameters:_nativeRtpSender->GetParameters()];
34}
35
skvladf3569c82016-04-29 15:30:16 -070036- (void)setParameters:(RTCRtpParameters *)parameters {
Zach Steinba37b4b2018-01-23 15:02:36 -080037 if (!_nativeRtpSender->SetParameters(parameters.nativeParameters).ok()) {
skvladf3569c82016-04-29 15:30:16 -070038 RTCLogError(@"RTCRtpSender(%p): Failed to set parameters: %@", self,
39 parameters);
40 }
skvlad79b4b872016-04-08 17:28:55 -070041}
42
43- (RTCMediaStreamTrack *)track {
44 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack(
45 _nativeRtpSender->track());
46 if (nativeTrack) {
47 return [[RTCMediaStreamTrack alloc] initWithNativeTrack:nativeTrack];
48 }
49 return nil;
50}
51
skvladf3569c82016-04-29 15:30:16 -070052- (void)setTrack:(RTCMediaStreamTrack *)track {
53 if (!_nativeRtpSender->SetTrack(track.nativeTrack)) {
54 RTCLogError(@"RTCRtpSender(%p): Failed to set track %@", self, track);
55 }
56}
57
58- (NSString *)description {
59 return [NSString stringWithFormat:@"RTCRtpSender {\n senderId: %@\n}",
60 self.senderId];
61}
62
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070063- (BOOL)isEqual:(id)object {
64 if (self == object) {
65 return YES;
66 }
67 if (object == nil) {
68 return NO;
69 }
70 if (![object isMemberOfClass:[self class]]) {
71 return NO;
72 }
73 RTCRtpSender *sender = (RTCRtpSender *)object;
74 return _nativeRtpSender == sender.nativeRtpSender;
75}
76
77- (NSUInteger)hash {
78 return (NSUInteger)_nativeRtpSender.get();
79}
80
81#pragma mark - Private
82
83- (rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
84 return _nativeRtpSender;
85}
86
87- (instancetype)initWithNativeRtpSender:
88 (rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
89 NSParameterAssert(nativeRtpSender);
90 if (self = [super init]) {
91 _nativeRtpSender = nativeRtpSender;
Yura Yaroshevich27676322018-01-02 14:44:35 +030092 rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender(
93 _nativeRtpSender->GetDtmfSender());
94 if (nativeDtmfSender) {
95 _dtmfSender = [[RTCDtmfSender alloc] initWithNativeDtmfSender:nativeDtmfSender];
96 }
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070097 RTCLogInfo(@"RTCRtpSender(%p): created sender: %@", self, self.description);
98 }
99 return self;
100}
101
skvlad79b4b872016-04-08 17:28:55 -0700102@end