Index: content/renderer/media/rtc_peer_connection_handler.cc |
diff --git a/content/renderer/media/rtc_peer_connection_handler.cc b/content/renderer/media/rtc_peer_connection_handler.cc |
index 21792a54db860f09bce7b3b634930adb18a6085e..1fb95e1bceb7114a4ff9657bf0fa29063e3b206e 100644 |
--- a/content/renderer/media/rtc_peer_connection_handler.cc |
+++ b/content/renderer/media/rtc_peer_connection_handler.cc |
@@ -1698,6 +1698,43 @@ RTCPeerConnectionHandler::GetReceivers() { |
return result; |
} |
+std::unique_ptr<blink::WebRTCRtpSender> RTCPeerConnectionHandler::AddTrack( |
+ const blink::WebMediaStreamTrack& track, |
+ const blink::WebVector<blink::WebMediaStream>& streams) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ |
+ // Get or create the associated track and stream adapters. |
+ std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> track_adapter = |
+ track_adapter_map_->GetOrCreateLocalTrackAdapter(track); |
+ std::vector<std::unique_ptr<WebRtcMediaStreamAdapterMap::AdapterRef>> |
+ stream_adapters(streams.size()); |
+ std::vector<webrtc::MediaStreamInterface*> webrtc_streams(streams.size()); |
+ for (size_t i = 0; i < streams.size(); ++i) { |
+ stream_adapters[i] = |
+ stream_adapter_map_->GetOrCreateLocalStreamAdapter(streams[i]); |
+ webrtc_streams[i] = stream_adapters[i]->adapter().webrtc_media_stream(); |
+ } |
+ |
+ rtc::scoped_refptr<webrtc::RtpSenderInterface> webrtc_sender = |
+ native_peer_connection_->AddTrack(track_adapter->webrtc_track(), |
+ webrtc_streams); |
+ if (!webrtc_sender) |
+ return nullptr; |
+ return base::MakeUnique<RTCRtpSender>(std::move(webrtc_sender), |
+ std::move(track_adapter), |
+ std::move(stream_adapters)); |
+} |
+ |
+bool RTCPeerConnectionHandler::RemoveTrack(blink::WebRTCRtpSender* web_sender) { |
+ DCHECK(thread_checker_.CalledOnValidThread()); |
+ RTCRtpSender* sender = static_cast<RTCRtpSender*>(web_sender); |
+ if (!native_peer_connection_->RemoveTrack(sender->webrtc_rtp_sender())) { |
+ return false; |
+ } |
+ sender->OnRemoved(); |
+ return true; |
+} |
+ |
void RTCPeerConnectionHandler::CloseClientPeerConnection() { |
DCHECK(thread_checker_.CalledOnValidThread()); |
if (!is_closed_) |