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