Index: webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm |
diff --git a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm |
index 9a488fdf49423874d3b5e7c2b08a99d6e1fa7ef2..3fcc652e69b3d69b66c21d366e6223f4e787f6f7 100644 |
--- a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm |
+++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm |
@@ -25,6 +25,7 @@ |
#include <memory> |
+#include "webrtc/api/jsepicecandidate.h" |
#include "webrtc/base/checks.h" |
NSString * const kRTCPeerConnectionErrorDomain = |
@@ -182,6 +183,23 @@ void PeerConnectionDelegateAdapter::OnIceCandidate( |
[peer_connection.delegate peerConnection:peer_connection |
didGenerateIceCandidate:iceCandidate]; |
} |
+ |
+void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( |
+ const std::vector<cricket::Candidate>& candidates) { |
+ NSMutableArray* ice_candidates = |
+ [NSMutableArray arrayWithCapacity:candidates.size()]; |
+ for (const auto& candidate : candidates) { |
+ std::unique_ptr<JsepIceCandidate> candidate_wrapper( |
+ new JsepIceCandidate(candidate.transport_name(), -1, candidate)); |
+ RTCIceCandidate* ice_candidate = [[RTCIceCandidate alloc] |
+ initWithNativeCandidate:candidate_wrapper.get()]; |
+ [ice_candidates addObject:ice_candidate]; |
+ } |
+ RTCPeerConnection* peer_connection = peer_connection_; |
+ [peer_connection.delegate peerConnection:peer_connection |
+ didRemoveIceCandidates:ice_candidates]; |
+} |
+ |
} // namespace webrtc |
@@ -273,6 +291,22 @@ void PeerConnectionDelegateAdapter::OnIceCandidate( |
_peerConnection->AddIceCandidate(iceCandidate.get()); |
} |
+- (void)removeIceCandidates:(NSArray<RTCIceCandidate *> *)iceCandidates { |
+ std::vector<cricket::Candidate> candidates; |
+ for (RTCIceCandidate *iceCandidate in iceCandidates) { |
+ std::unique_ptr<const webrtc::IceCandidateInterface> candidate( |
+ iceCandidate.nativeCandidate); |
+ if (candidate) { |
+ candidates.push_back(candidate->candidate()); |
+ // Need to fill the transport name from the sdp_mid. |
+ candidates.back().set_transport_name(candidate->sdp_mid()); |
+ } |
+ } |
+ if (!candidates.empty()) { |
+ _peerConnection->RemoveIceCandidates(candidates); |
+ } |
+} |
+ |
- (void)addStream:(RTCMediaStream *)stream { |
if (!_peerConnection->AddStream(stream.nativeMediaStream)) { |
RTCLogError(@"Failed to add stream: %@", stream); |