From 546d7f98a5f1498c5865c12795b184d289b65668 Mon Sep 17 00:00:00 2001 From: Yura Yaroshevich Date: Wed, 28 Feb 2018 21:06:34 +0300 Subject: [PATCH] Added OnAddTrack to Objective C SDK. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Exposed native OnAddTrack event in Objective C SDK peer connection delegate via peerConnection:didAddReceiver:streams: Bug: webrtc:6112 Change-Id: Iccf33ab7844c9a774a6b54e49de011d100998f03 Reviewed-on: https://webrtc-review.googlesource.com/56980 Reviewed-by: Kári Helgason Commit-Queue: Kári Helgason Cr-Commit-Position: refs/heads/master@{#22253} --- .../RTCPeerConnection+Private.h | 3 +++ .../PeerConnection/RTCPeerConnection.mm | 19 +++++++++++++++++++ .../Headers/WebRTC/RTCPeerConnection.h | 6 ++++++ 3 files changed, 28 insertions(+) diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection+Private.h b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection+Private.h index 4b46dea435..eae72fbb00 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection+Private.h +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection+Private.h @@ -51,6 +51,9 @@ class PeerConnectionDelegateAdapter : public PeerConnectionObserver { void OnIceCandidatesRemoved( const std::vector& candidates) override; + void OnAddTrack(rtc::scoped_refptr receiver, + const std::vector>& streams) override; + private: __weak RTCPeerConnection *peer_connection_; }; diff --git a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection.mm b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection.mm index 08b90479e4..35e82158fd 100644 --- a/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection.mm +++ b/sdk/objc/Framework/Classes/PeerConnection/RTCPeerConnection.mm @@ -215,6 +215,25 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( didRemoveIceCandidates:ice_candidates]; } +void PeerConnectionDelegateAdapter::OnAddTrack( + rtc::scoped_refptr receiver, + const std::vector>& streams) { + RTCPeerConnection *peer_connection = peer_connection_; + if ([peer_connection.delegate + respondsToSelector:@selector(peerConnection:didAddReceiver:streams:)]) { + NSMutableArray *mediaStreams = [NSMutableArray arrayWithCapacity:streams.size()]; + for (const auto& nativeStream : streams) { + RTCMediaStream *mediaStream = [[RTCMediaStream alloc] initWithNativeMediaStream:nativeStream]; + [mediaStreams addObject:mediaStream]; + } + RTCRtpReceiver *rtpReceiver = [[RTCRtpReceiver alloc] initWithNativeRtpReceiver:receiver]; + + [peer_connection.delegate peerConnection:peer_connection + didAddReceiver:rtpReceiver + streams:mediaStreams]; + } +} + } // namespace webrtc diff --git a/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h b/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h index 8b69804a16..92c0d2f321 100644 --- a/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h +++ b/sdk/objc/Framework/Headers/WebRTC/RTCPeerConnection.h @@ -120,6 +120,12 @@ RTC_EXPORT - (void)peerConnection:(RTCPeerConnection *)peerConnection didStartReceivingOnTransceiver:(RTCRtpTransceiver *)transceiver; +/** Called when a receiver and its track are created. */ +@optional +- (void)peerConnection:(RTCPeerConnection *)peerConnection + didAddReceiver:(RTCRtpReceiver *)rtpReceiver + streams:(NSArray *)mediaStreams; + @end RTC_EXPORT