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 de7608c3b9941dd1acffc6b8e8dc0d5c52211379..834af3c122ab9cfb01c912a217010c46882940ee 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]; |
} |
@@ -141,6 +140,7 @@ void PeerConnectionDelegateAdapter::OnRemoveStream( |
RTCPeerConnection *peer_connection = peer_connection_; |
[peer_connection.delegate peerConnection:peer_connection |
didRemoveStream:mediaStream]; |
+ [peer_connection removeObjcStream:stream]; |
} |
void PeerConnectionDelegateAdapter::OnDataChannel( |
@@ -200,6 +200,25 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( |
didRemoveIceCandidates:ice_candidates]; |
} |
+void PeerConnectionDelegateAdapter::OnAddTrack( |
tkchin_webrtc
2017/02/15 23:43:48
strange that the method is OnAddTrack but it gives
Taylor Brandstetter
2017/02/16 01:07:06
That's what's in the spec (it's called "ontrack" t
|
+ rtc::scoped_refptr<RtpReceiverInterface> receiver, |
+ const std::vector<rtc::scoped_refptr<MediaStreamInterface>>& streams) { |
+ RTCRtpReceiver *rtpReceiver = |
tkchin_webrtc
2017/02/15 23:43:47
use C++ style in C++ methods
Zhi Huang
2017/02/21 04:55:50
Done.
|
+ [[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 |
tkchin_webrtc
2017/02/15 23:43:48
ObjC naming usually follows type (so I'd expect pe
Zhi Huang
2017/02/21 04:55:50
Done.
|
+ attachedStreams:mediaStreams]; |
+} |
+ |
} // namespace webrtc |
@@ -209,6 +228,7 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( |
rtc::scoped_refptr<webrtc::PeerConnectionInterface> _peerConnection; |
std::unique_ptr<webrtc::MediaConstraints> _nativeConstraints; |
BOOL _hasStartedRtcEventLog; |
+ NSMutableDictionary *_nativeToObjcMediaStream; |
tkchin_webrtc
2017/02/15 23:43:48
NSMutableDictionary<NSNumber, RTCMediaStream *> *_
Zhi Huang
2017/02/21 04:55:50
Done.
|
} |
@synthesize delegate = _delegate; |
@@ -238,6 +258,7 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( |
} |
_localStreams = [[NSMutableArray alloc] init]; |
_delegate = delegate; |
+ _nativeToObjcMediaStream = [NSMutableDictionary dictionary]; |
} |
return self; |
} |
@@ -588,6 +609,23 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved( |
} |
} |
+- (RTCMediaStream *)getOrCreateObjcStream: |
tkchin_webrtc
2017/02/15 23:43:48
"get" prefix is forbidden in ObjC style
- (RTCMed
Zhi Huang
2017/02/21 04:55:50
Done.
|
+ (rtc::scoped_refptr<webrtc::MediaStreamInterface>)stream { |
+ RTCMediaStream *mediaStream = |
+ _nativeToObjcMediaStream[[NSNumber numberWithLong:(long)stream.get()]]; |
tkchin_webrtc
2017/02/15 23:43:48
Is there anything better than pointer value to use
Taylor Brandstetter
2017/02/16 01:07:06
They have an ID field which should be unique withi
|
+ if (!mediaStream) { |
+ mediaStream = |
+ [[RTCMediaStream alloc] initWithNativeMediaStream:stream.get()]; |
+ _nativeToObjcMediaStream[[NSNumber numberWithLong:(long)stream.get()]] = |
+ mediaStream; |
+ } |
+ return mediaStream; |
+} |
+ |
+- (void)removeObjcStream:(rtc::scoped_refptr<webrtc::MediaStreamInterface>)stream { |
tkchin_webrtc
2017/02/15 23:43:47
nit:
- (void)removeNativeMediaStream:(rtc::scoped_
Zhi Huang
2017/02/21 04:55:50
Done.
|
+ [_nativeToObjcMediaStream removeObjectForKey:[NSNumber numberWithLong:(long)stream.get()]]; |
+} |
+ |
- (rtc::scoped_refptr<webrtc::PeerConnectionInterface>)nativePeerConnection { |
return _peerConnection; |
} |