blob: 64e9204b32f2b8ad8ddb78050f113b5053cd133e [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
Yura Yaroshevich27676322018-01-02 14:44:35 +030013#import "RTCDtmfSender+Private.h"
tkchin9eeb6242016-04-27 01:54:20 -070014#import "RTCMediaStreamTrack+Private.h"
15#import "RTCRtpParameters+Private.h"
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020016#import "base/RTCLogging.h"
17#import "helpers/NSString+StdString.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 {
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +030022 RTCPeerConnectionFactory *_factory;
skvlad79b4b872016-04-08 17:28:55 -070023 rtc::scoped_refptr<webrtc::RtpSenderInterface> _nativeRtpSender;
24}
25
Yura Yaroshevich27676322018-01-02 14:44:35 +030026@synthesize dtmfSender = _dtmfSender;
27
skvladf3569c82016-04-29 15:30:16 -070028- (NSString *)senderId {
29 return [NSString stringForStdString:_nativeRtpSender->id()];
30}
31
skvlad79b4b872016-04-08 17:28:55 -070032- (RTCRtpParameters *)parameters {
33 return [[RTCRtpParameters alloc]
34 initWithNativeParameters:_nativeRtpSender->GetParameters()];
35}
36
skvladf3569c82016-04-29 15:30:16 -070037- (void)setParameters:(RTCRtpParameters *)parameters {
Zach Steinba37b4b2018-01-23 15:02:36 -080038 if (!_nativeRtpSender->SetParameters(parameters.nativeParameters).ok()) {
skvladf3569c82016-04-29 15:30:16 -070039 RTCLogError(@"RTCRtpSender(%p): Failed to set parameters: %@", self,
40 parameters);
41 }
skvlad79b4b872016-04-08 17:28:55 -070042}
43
44- (RTCMediaStreamTrack *)track {
45 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack(
46 _nativeRtpSender->track());
47 if (nativeTrack) {
Yura Yaroshevich01cee072018-07-11 15:35:40 +030048 return [RTCMediaStreamTrack mediaTrackForNativeTrack:nativeTrack factory:_factory];
skvlad79b4b872016-04-08 17:28:55 -070049 }
50 return nil;
51}
52
skvladf3569c82016-04-29 15:30:16 -070053- (void)setTrack:(RTCMediaStreamTrack *)track {
54 if (!_nativeRtpSender->SetTrack(track.nativeTrack)) {
55 RTCLogError(@"RTCRtpSender(%p): Failed to set track %@", self, track);
56 }
57}
58
59- (NSString *)description {
60 return [NSString stringWithFormat:@"RTCRtpSender {\n senderId: %@\n}",
61 self.senderId];
62}
63
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070064- (BOOL)isEqual:(id)object {
65 if (self == object) {
66 return YES;
67 }
68 if (object == nil) {
69 return NO;
70 }
71 if (![object isMemberOfClass:[self class]]) {
72 return NO;
73 }
74 RTCRtpSender *sender = (RTCRtpSender *)object;
75 return _nativeRtpSender == sender.nativeRtpSender;
76}
77
78- (NSUInteger)hash {
79 return (NSUInteger)_nativeRtpSender.get();
80}
81
82#pragma mark - Private
83
84- (rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
85 return _nativeRtpSender;
86}
87
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +030088- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
89 nativeRtpSender:(rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
90 NSParameterAssert(factory);
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070091 NSParameterAssert(nativeRtpSender);
92 if (self = [super init]) {
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +030093 _factory = factory;
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070094 _nativeRtpSender = nativeRtpSender;
Yura Yaroshevich27676322018-01-02 14:44:35 +030095 rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender(
96 _nativeRtpSender->GetDtmfSender());
97 if (nativeDtmfSender) {
98 _dtmfSender = [[RTCDtmfSender alloc] initWithNativeDtmfSender:nativeDtmfSender];
99 }
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700100 RTCLogInfo(@"RTCRtpSender(%p): created sender: %@", self, self.description);
101 }
102 return self;
103}
104
skvlad79b4b872016-04-08 17:28:55 -0700105@end