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

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

Issue 2513063003: Add the OnAddTrack callback for Objective-C wrapper.
Patch Set: Created 4 years, 1 month 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 b4a873847de5bda226a1c72d23a48b7eff97f1bb..cdc8c42aeca3354a4fd74f6ab27338f2494e1956 100644
--- a/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm
+++ b/webrtc/sdk/objc/Framework/Classes/RTCPeerConnection.mm
@@ -127,8 +127,7 @@ void PeerConnectionDelegateAdapter::OnSignalingChange(
void PeerConnectionDelegateAdapter::OnAddStream(
rtc::scoped_refptr<MediaStreamInterface> stream) {
- RTCMediaStream *mediaStream =
- [[RTCMediaStream alloc] initWithNativeMediaStream:stream];
+ RTCMediaStream* mediaStream = GetOrCreateObjcStream(stream);
RTCPeerConnection *peer_connection = peer_connection_;
[peer_connection.delegate peerConnection:peer_connection
didAddStream:mediaStream];
@@ -200,6 +199,36 @@ void PeerConnectionDelegateAdapter::OnIceCandidatesRemoved(
didRemoveIceCandidates:ice_candidates];
}
+void PeerConnectionDelegateAdapter::OnAddTrack(
+ rtc::scoped_refptr<RtpReceiverInterface> receiver,
+ std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams) {
+ RTCRtpReceiver* rtpReceiver =
tkchin_webrtc 2016/11/22 20:41:34 * on right RTCRtpReceiver *rtpReceiver here and e
Zhi Huang 2016/11/22 23:38:42 Done.
+ [[RTCRtpReceiver alloc] initWithNativeRtpReceiver:receiver];
+ NSMutableArray* mediaStreams =
+ [NSMutableArray arrayWithCapacity:streams.size()];
+ for (const auto stream : streams) {
+ RTCMediaStream* mediaStream = GetOrCreateObjcStream(stream);
+ [mediaStreams addObject:mediaStream];
+ }
+ RTCPeerConnection* peer_connection = peer_connection_;
+ [peer_connection.delegate peerConnection:peer_connection
+ didAddTrack:rtpReceiver
+ attachedStreams:mediaStreams];
+}
+
+RTCMediaStream* PeerConnectionDelegateAdapter::GetOrCreateObjcStream(
tkchin_webrtc 2016/11/22 20:41:34 I'd suggest placing these streams refs on peerconn
Zhi Huang 2016/11/22 23:38:42 Ah, yes. This is a good point. Done.
+ rtc::scoped_refptr<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;
+}
+
} // namespace webrtc

Powered by Google App Engine
This is Rietveld 408576698