Chromium Code Reviews| 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; |
| } |