blob: 1ca9360ab8434c0d1aebeb9e91f41a75541a7eef [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"
Benjamin Wrightddf1a3e2018-10-02 10:20:58 -070016#import "RTCRtpSender+Native.h"
Anders Carlsson7bca8ca2018-08-30 09:30:29 +020017#import "base/RTCLogging.h"
18#import "helpers/NSString+StdString.h"
skvlad79b4b872016-04-08 17:28:55 -070019
Steve Anton10542f22019-01-11 09:11:00 -080020#include "api/media_stream_interface.h"
skvlad79b4b872016-04-08 17:28:55 -070021
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020022@implementation RTC_OBJC_TYPE (RTCRtpSender) {
23 RTC_OBJC_TYPE(RTCPeerConnectionFactory) * _factory;
skvlad79b4b872016-04-08 17:28:55 -070024 rtc::scoped_refptr<webrtc::RtpSenderInterface> _nativeRtpSender;
25}
26
Yura Yaroshevich27676322018-01-02 14:44:35 +030027@synthesize dtmfSender = _dtmfSender;
28
skvladf3569c82016-04-29 15:30:16 -070029- (NSString *)senderId {
30 return [NSString stringForStdString:_nativeRtpSender->id()];
31}
32
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020033- (RTC_OBJC_TYPE(RTCRtpParameters) *)parameters {
34 return [[RTC_OBJC_TYPE(RTCRtpParameters) alloc]
skvlad79b4b872016-04-08 17:28:55 -070035 initWithNativeParameters:_nativeRtpSender->GetParameters()];
36}
37
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020038- (void)setParameters:(RTC_OBJC_TYPE(RTCRtpParameters) *)parameters {
Zach Steinba37b4b2018-01-23 15:02:36 -080039 if (!_nativeRtpSender->SetParameters(parameters.nativeParameters).ok()) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020040 RTCLogError(@"RTC_OBJC_TYPE(RTCRtpSender)(%p): Failed to set parameters: %@", self, parameters);
skvladf3569c82016-04-29 15:30:16 -070041 }
skvlad79b4b872016-04-08 17:28:55 -070042}
43
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020044- (RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
skvlad79b4b872016-04-08 17:28:55 -070045 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack(
46 _nativeRtpSender->track());
47 if (nativeTrack) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020048 return [RTC_OBJC_TYPE(RTCMediaStreamTrack) mediaTrackForNativeTrack:nativeTrack
49 factory:_factory];
skvlad79b4b872016-04-08 17:28:55 -070050 }
51 return nil;
52}
53
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020054- (void)setTrack:(RTC_OBJC_TYPE(RTCMediaStreamTrack) *)track {
skvladf3569c82016-04-29 15:30:16 -070055 if (!_nativeRtpSender->SetTrack(track.nativeTrack)) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020056 RTCLogError(@"RTC_OBJC_TYPE(RTCRtpSender)(%p): Failed to set track %@", self, track);
skvladf3569c82016-04-29 15:30:16 -070057 }
58}
59
Cyril Lashkevichfa77ba62019-10-08 13:06:15 +000060- (NSArray<NSString *> *)streamIds {
61 std::vector<std::string> nativeStreamIds = _nativeRtpSender->stream_ids();
62 NSMutableArray *streamIds = [NSMutableArray arrayWithCapacity:nativeStreamIds.size()];
63 for (const auto &s : nativeStreamIds) {
64 [streamIds addObject:[NSString stringForStdString:s]];
65 }
66 return streamIds;
67}
68
69- (void)setStreamIds:(NSArray<NSString *> *)streamIds {
70 std::vector<std::string> nativeStreamIds;
71 for (NSString *streamId in streamIds) {
72 nativeStreamIds.push_back([streamId UTF8String]);
73 }
74 _nativeRtpSender->SetStreams(nativeStreamIds);
75}
76
skvladf3569c82016-04-29 15:30:16 -070077- (NSString *)description {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020078 return [NSString
79 stringWithFormat:@"RTC_OBJC_TYPE(RTCRtpSender) {\n senderId: %@\n}", self.senderId];
skvladf3569c82016-04-29 15:30:16 -070080}
81
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070082- (BOOL)isEqual:(id)object {
83 if (self == object) {
84 return YES;
85 }
86 if (object == nil) {
87 return NO;
88 }
89 if (![object isMemberOfClass:[self class]]) {
90 return NO;
91 }
Mirko Bonadeia81e9c82020-05-04 16:14:32 +020092 RTC_OBJC_TYPE(RTCRtpSender) *sender = (RTC_OBJC_TYPE(RTCRtpSender) *)object;
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070093 return _nativeRtpSender == sender.nativeRtpSender;
94}
95
96- (NSUInteger)hash {
97 return (NSUInteger)_nativeRtpSender.get();
98}
99
Benjamin Wrightddf1a3e2018-10-02 10:20:58 -0700100#pragma mark - Native
101
102- (void)setFrameEncryptor:(rtc::scoped_refptr<webrtc::FrameEncryptorInterface>)frameEncryptor {
103 _nativeRtpSender->SetFrameEncryptor(frameEncryptor);
104}
105
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700106#pragma mark - Private
107
108- (rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
109 return _nativeRtpSender;
110}
111
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200112- (instancetype)initWithFactory:(RTC_OBJC_TYPE(RTCPeerConnectionFactory) *)factory
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +0300113 nativeRtpSender:(rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
114 NSParameterAssert(factory);
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700115 NSParameterAssert(nativeRtpSender);
116 if (self = [super init]) {
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +0300117 _factory = factory;
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700118 _nativeRtpSender = nativeRtpSender;
Yura Yaroshevich27676322018-01-02 14:44:35 +0300119 rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender(
120 _nativeRtpSender->GetDtmfSender());
121 if (nativeDtmfSender) {
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200122 _dtmfSender =
123 [[RTC_OBJC_TYPE(RTCDtmfSender) alloc] initWithNativeDtmfSender:nativeDtmfSender];
Yura Yaroshevich27676322018-01-02 14:44:35 +0300124 }
Mirko Bonadeia81e9c82020-05-04 16:14:32 +0200125 RTCLogInfo(@"RTC_OBJC_TYPE(RTCRtpSender)(%p): created sender: %@", self, self.description);
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700126 }
127 return self;
128}
129
skvlad79b4b872016-04-08 17:28:55 -0700130@end