Index: talk/app/webrtc/peerconnection.cc |
diff --git a/talk/app/webrtc/peerconnection.cc b/talk/app/webrtc/peerconnection.cc |
index 4c54d6f5feb62c2b4f1b5f25da091ac30d8e4439..5c6876f9a9a3220b0b5e617bc3ce677edb47eeae 100644 |
--- a/talk/app/webrtc/peerconnection.cc |
+++ b/talk/app/webrtc/peerconnection.cc |
@@ -614,6 +614,14 @@ void PeerConnection::SetLocalDescription( |
PostSetSessionDescriptionFailure(observer, error); |
return; |
} |
+ |
+ // This is necessary because an audio/video channel may have been previously |
+ // destroyed by removing it from the remote description, which would NOT |
+ // destroy the local handler. So upon receiving a new local description, |
+ // we may need to tell that local track handler to connect the capturer |
+ // to the now re-created audio/video channel. |
+ stream_handler_container_->RestartLocalTracks(); |
+ |
SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer); |
signaling_thread()->Post(this, MSG_SET_SESSIONDESCRIPTION_SUCCESS, msg); |
} |
@@ -637,6 +645,14 @@ void PeerConnection::SetRemoteDescription( |
PostSetSessionDescriptionFailure(observer, error); |
return; |
} |
+ |
+ // This is necessary because an audio/video channel may have been previously |
+ // destroyed by removing it from the local description, which would NOT |
+ // destroy the remote handler. So upon receiving a new remote description, |
+ // we may need to tell that remote track handler to connect the renderer |
+ // to the now re-created audio/video channel. |
+ stream_handler_container_->RestartRemoteTracks(); |
+ |
SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer); |
signaling_thread()->Post(this, MSG_SET_SESSIONDESCRIPTION_SUCCESS, msg); |
} |