| 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 b4a873847de5bda226a1c72d23a48b7eff97f1bb..708ffd32ea2671ebd663a0245803a534840b846e 100644
|
| --- a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm
|
| +++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm
|
| @@ -127,9 +127,8 @@ void PeerConnectionDelegateAdapter::OnSignalingChange(
|
|
|
| void PeerConnectionDelegateAdapter::OnAddStream(
|
| rtc::scoped_refptr<MediaStreamInterface> stream) {
|
| - RTCMediaStream *mediaStream =
|
| - [[RTCMediaStream alloc] initWithNativeMediaStream:stream];
|
| RTCPeerConnection *peer_connection = peer_connection_;
|
| + RTCMediaStream *mediaStream = [peer_connection GetOrCreateObjcStream:stream];
|
| [peer_connection.delegate peerConnection:peer_connection
|
| didAddStream:mediaStream];
|
| }
|
| @@ -200,6 +199,25 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
|
| didRemoveIceCandidates:ice_candidates];
|
| }
|
|
|
| +void PeerConnectionDelegateAdapter::OnAddTrack(
|
| + rtc::scoped_refptr<RtpReceiverInterface> receiver,
|
| + std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams) {
|
| + RTCRtpReceiver *rtpReceiver =
|
| + [[RTCRtpReceiver alloc] initWithNativeRtpReceiver:receiver];
|
| + NSMutableArray *mediaStreams =
|
| + [NSMutableArray arrayWithCapacity:streams.size()];
|
| +
|
| + RTCPeerConnection *peer_connection = peer_connection_;
|
| + for (const auto stream : streams) {
|
| + RTCMediaStream *mediaStream =
|
| + [peer_connection GetOrCreateObjcStream:stream];
|
| + [mediaStreams addObject:mediaStream];
|
| + }
|
| + [peer_connection.delegate peerConnection:peer_connection
|
| + didAddTrack:rtpReceiver
|
| + attachedStreams:mediaStreams];
|
| +}
|
| +
|
| } // namespace webrtc
|
|
|
|
|
| @@ -208,6 +226,7 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
|
| std::unique_ptr<webrtc::PeerConnectionDelegateAdapter> _observer;
|
| rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection;
|
| BOOL _hasStartedRtcEventLog;
|
| + NSMutableDictionary *_nativeToObjcMediaStream;
|
| }
|
|
|
| @synthesize delegate = _delegate;
|
| @@ -237,6 +256,7 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
|
| }
|
| _localStreams = [[NSMutableArray alloc] init];
|
| _delegate = delegate;
|
| + _nativeToObjcMediaStream = [NSMutableDictionary dictionary];
|
| }
|
| return self;
|
| }
|
| @@ -585,6 +605,19 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
|
| }
|
| }
|
|
|
| +- (RTCMediaStream *)GetOrCreateObjcStream:
|
| + (rtc::scoped_refptr<webrtc::MediaStreamInterface>)stream {
|
| + RTCMediaStream *mediaStream =
|
| + _nativeToObjcMediaStream[[NSNumber numberWithLong:(long)stream.get()]];
|
| + if (!mediaStream) {
|
| + mediaStream =
|
| + [[RTCMediaStream alloc] initWithNativeMediaStream:stream.get()];
|
| + _nativeToObjcMediaStream[[NSNumber numberWithLong:(long)stream.get()]] =
|
| + mediaStream;
|
| + }
|
| + return mediaStream;
|
| +}
|
| +
|
| - (rtc::scoped_refptr<webrtc::PeerConnectionInterface>)nativePeerConnection {
|
| return _peerConnection;
|
| }
|
|
|