blob: b227025867dc7ddb6a41bc87c3de92ad9feb30db [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
22@implementation RTCRtpSender {
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +030023 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
skvlad79b4b872016-04-08 17:28:55 -070033- (RTCRtpParameters *)parameters {
34 return [[RTCRtpParameters alloc]
35 initWithNativeParameters:_nativeRtpSender->GetParameters()];
36}
37
skvladf3569c82016-04-29 15:30:16 -070038- (void)setParameters:(RTCRtpParameters *)parameters {
Zach Steinba37b4b2018-01-23 15:02:36 -080039 if (!_nativeRtpSender->SetParameters(parameters.nativeParameters).ok()) {
skvladf3569c82016-04-29 15:30:16 -070040 RTCLogError(@"RTCRtpSender(%p): Failed to set parameters: %@", self,
41 parameters);
42 }
skvlad79b4b872016-04-08 17:28:55 -070043}
44
45- (RTCMediaStreamTrack *)track {
46 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> nativeTrack(
47 _nativeRtpSender->track());
48 if (nativeTrack) {
Yura Yaroshevich01cee072018-07-11 15:35:40 +030049 return [RTCMediaStreamTrack mediaTrackForNativeTrack:nativeTrack factory:_factory];
skvlad79b4b872016-04-08 17:28:55 -070050 }
51 return nil;
52}
53
skvladf3569c82016-04-29 15:30:16 -070054- (void)setTrack:(RTCMediaStreamTrack *)track {
55 if (!_nativeRtpSender->SetTrack(track.nativeTrack)) {
56 RTCLogError(@"RTCRtpSender(%p): Failed to set track %@", self, track);
57 }
58}
59
60- (NSString *)description {
61 return [NSString stringWithFormat:@"RTCRtpSender {\n senderId: %@\n}",
62 self.senderId];
63}
64
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070065- (BOOL)isEqual:(id)object {
66 if (self == object) {
67 return YES;
68 }
69 if (object == nil) {
70 return NO;
71 }
72 if (![object isMemberOfClass:[self class]]) {
73 return NO;
74 }
75 RTCRtpSender *sender = (RTCRtpSender *)object;
76 return _nativeRtpSender == sender.nativeRtpSender;
77}
78
79- (NSUInteger)hash {
80 return (NSUInteger)_nativeRtpSender.get();
81}
82
Benjamin Wrightddf1a3e2018-10-02 10:20:58 -070083#pragma mark - Native
84
85- (void)setFrameEncryptor:(rtc::scoped_refptr<webrtc::FrameEncryptorInterface>)frameEncryptor {
86 _nativeRtpSender->SetFrameEncryptor(frameEncryptor);
87}
88
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070089#pragma mark - Private
90
91- (rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
92 return _nativeRtpSender;
93}
94
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +030095- (instancetype)initWithFactory:(RTCPeerConnectionFactory *)factory
96 nativeRtpSender:(rtc::scoped_refptr<webrtc::RtpSenderInterface>)nativeRtpSender {
97 NSParameterAssert(factory);
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -070098 NSParameterAssert(nativeRtpSender);
99 if (self = [super init]) {
Yura Yaroshevichef43aaf2018-07-09 19:16:32 +0300100 _factory = factory;
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700101 _nativeRtpSender = nativeRtpSender;
Yura Yaroshevich27676322018-01-02 14:44:35 +0300102 rtc::scoped_refptr<webrtc::DtmfSenderInterface> nativeDtmfSender(
103 _nativeRtpSender->GetDtmfSender());
104 if (nativeDtmfSender) {
105 _dtmfSender = [[RTCDtmfSender alloc] initWithNativeDtmfSender:nativeDtmfSender];
106 }
Taylor Brandstetterdb0cd9e2016-05-16 11:40:30 -0700107 RTCLogInfo(@"RTCRtpSender(%p): created sender: %@", self, self.description);
108 }
109 return self;
110}
111
skvlad79b4b872016-04-08 17:28:55 -0700112@end