Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1582)

Unified Diff: webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm

Issue 2513063003: Add the OnAddTrack callback for Objective-C wrapper.
Patch Set: Remove the stream entry from the dictionary when the stream is removed. Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}

Powered by Google App Engine
This is Rietveld 408576698