OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/renderer/media/rtc_peer_connection_handler.h" | 5 #include "content/renderer/media/rtc_peer_connection_handler.h" |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 1664 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1675 webrtc_receivers = native_peer_connection_->GetReceivers(); | 1675 webrtc_receivers = native_peer_connection_->GetReceivers(); |
1676 std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> web_receivers; | 1676 std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> web_receivers; |
1677 for (size_t i = 0; i < webrtc_receivers.size(); ++i) { | 1677 for (size_t i = 0; i < webrtc_receivers.size(); ++i) { |
1678 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track = | 1678 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track = |
1679 webrtc_receivers[i]->track(); | 1679 webrtc_receivers[i]->track(); |
1680 DCHECK(webrtc_track); | 1680 DCHECK(webrtc_track); |
1681 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> | 1681 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> |
1682 track_adapter = | 1682 track_adapter = |
1683 track_adapter_map_->GetRemoteTrackAdapter(webrtc_track->id()); | 1683 track_adapter_map_->GetRemoteTrackAdapter(webrtc_track->id()); |
1684 DCHECK(track_adapter); | 1684 DCHECK(track_adapter); |
| 1685 DCHECK(track_adapter->is_initialized()); |
1685 // Create a reference to the receiver. Multiple |RTCRtpReceiver|s can | 1686 // Create a reference to the receiver. Multiple |RTCRtpReceiver|s can |
1686 // reference the same webrtc track, see |id|. | 1687 // reference the same webrtc track, see |id|. |
1687 web_receivers.push_back(base::MakeUnique<RTCRtpReceiver>( | 1688 web_receivers.push_back(base::MakeUnique<RTCRtpReceiver>( |
1688 webrtc_receivers[i].get(), std::move(track_adapter))); | 1689 webrtc_receivers[i].get(), std::move(track_adapter))); |
1689 } | 1690 } |
1690 | 1691 |
1691 // |blink::WebVector|'s size must be known at construction, that is why | 1692 // |blink::WebVector|'s size must be known at construction, that is why |
1692 // |web_vectors| uses |std::vector| and needs to be moved before returning. | 1693 // |web_vectors| uses |std::vector| and needs to be moved before returning. |
1693 blink::WebVector<std::unique_ptr<blink::WebRTCRtpReceiver>> result( | 1694 blink::WebVector<std::unique_ptr<blink::WebRTCRtpReceiver>> result( |
1694 web_receivers.size()); | 1695 web_receivers.size()); |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1944 if (peer_connection_tracker_) { | 1945 if (peer_connection_tracker_) { |
1945 peer_connection_tracker_->TrackAddStream( | 1946 peer_connection_tracker_->TrackAddStream( |
1946 this, stream_ptr->webkit_stream(), | 1947 this, stream_ptr->webkit_stream(), |
1947 PeerConnectionTracker::SOURCE_REMOTE); | 1948 PeerConnectionTracker::SOURCE_REMOTE); |
1948 } | 1949 } |
1949 | 1950 |
1950 PerSessionWebRTCAPIMetrics::GetInstance()->IncrementStreamCounter(); | 1951 PerSessionWebRTCAPIMetrics::GetInstance()->IncrementStreamCounter(); |
1951 | 1952 |
1952 track_metrics_.AddStream(MediaStreamTrackMetrics::RECEIVED_STREAM, | 1953 track_metrics_.AddStream(MediaStreamTrackMetrics::RECEIVED_STREAM, |
1953 stream_ptr->webrtc_stream().get()); | 1954 stream_ptr->webrtc_stream().get()); |
1954 if (!is_closed_) | 1955 if (!is_closed_) { |
1955 client_->DidAddRemoteStream(stream_ptr->webkit_stream()); | 1956 // Get receivers for the tracks in this stream. The result is a subset of |
| 1957 // |RTCPeerConnectionHandler::GetReceivers|. We can't invoke that here |
| 1958 // because creating receivers for remote streams that have not been |
| 1959 // processed on both threads yet might grab track adapters that have not |
| 1960 // been initialized yet. |
| 1961 // TODO(hbos): Helper function instead of duplicate code! |
| 1962 std::vector<rtc::scoped_refptr<webrtc::RtpReceiverInterface>> |
| 1963 webrtc_receivers = native_peer_connection_->GetReceivers(); |
| 1964 std::vector<std::unique_ptr<blink::WebRTCRtpReceiver>> stream_web_receivers; |
| 1965 for (auto& webrtc_receiver : webrtc_receivers) { |
| 1966 rtc::scoped_refptr<webrtc::MediaStreamTrackInterface> webrtc_track = |
| 1967 webrtc_receiver->track(); |
| 1968 DCHECK(webrtc_track); |
| 1969 bool is_stream_receiver = false; |
| 1970 if (webrtc_track->kind() == |
| 1971 webrtc::MediaStreamTrackInterface::kAudioKind) { |
| 1972 for (const auto& track : |
| 1973 stream_ptr->webrtc_stream()->GetAudioTracks()) { |
| 1974 if (webrtc_track == track) { |
| 1975 is_stream_receiver = true; |
| 1976 break; |
| 1977 } |
| 1978 } |
| 1979 } else { |
| 1980 for (const auto& track : |
| 1981 stream_ptr->webrtc_stream()->GetVideoTracks()) { |
| 1982 if (webrtc_track == track) { |
| 1983 is_stream_receiver = true; |
| 1984 break; |
| 1985 } |
| 1986 } |
| 1987 } |
| 1988 if (is_stream_receiver) { |
| 1989 std::unique_ptr<WebRtcMediaStreamTrackAdapterMap::AdapterRef> |
| 1990 track_adapter = |
| 1991 track_adapter_map_->GetRemoteTrackAdapter(webrtc_track->id()); |
| 1992 DCHECK(track_adapter); |
| 1993 DCHECK(track_adapter->is_initialized()); |
| 1994 // Create a reference to the receiver. Multiple |RTCRtpReceiver|s can |
| 1995 // reference the same webrtc track, see |id|. |
| 1996 stream_web_receivers.push_back(base::MakeUnique<RTCRtpReceiver>( |
| 1997 webrtc_receiver.get(), std::move(track_adapter))); |
| 1998 } |
| 1999 } |
| 2000 blink::WebVector<std::unique_ptr<blink::WebRTCRtpReceiver>> result( |
| 2001 stream_web_receivers.size()); |
| 2002 for (size_t i = 0; i < stream_web_receivers.size(); ++i) { |
| 2003 result[i] = std::move(stream_web_receivers[i]); |
| 2004 } |
| 2005 client_->DidAddRemoteStream(stream_ptr->webkit_stream(), &result); |
| 2006 } |
1956 } | 2007 } |
1957 | 2008 |
1958 void RTCPeerConnectionHandler::OnRemoveStream( | 2009 void RTCPeerConnectionHandler::OnRemoveStream( |
1959 const scoped_refptr<webrtc::MediaStreamInterface>& stream) { | 2010 const scoped_refptr<webrtc::MediaStreamInterface>& stream) { |
1960 DCHECK(thread_checker_.CalledOnValidThread()); | 2011 DCHECK(thread_checker_.CalledOnValidThread()); |
1961 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnRemoveStreamImpl"); | 2012 TRACE_EVENT0("webrtc", "RTCPeerConnectionHandler::OnRemoveStreamImpl"); |
1962 auto it = remote_streams_.find(stream.get()); | 2013 auto it = remote_streams_.find(stream.get()); |
1963 if (it == remote_streams_.end()) { | 2014 if (it == remote_streams_.end()) { |
1964 NOTREACHED() << "Stream not found"; | 2015 NOTREACHED() << "Stream not found"; |
1965 return; | 2016 return; |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2107 } | 2158 } |
2108 | 2159 |
2109 void RTCPeerConnectionHandler::ResetUMAStats() { | 2160 void RTCPeerConnectionHandler::ResetUMAStats() { |
2110 DCHECK(thread_checker_.CalledOnValidThread()); | 2161 DCHECK(thread_checker_.CalledOnValidThread()); |
2111 num_local_candidates_ipv6_ = 0; | 2162 num_local_candidates_ipv6_ = 0; |
2112 num_local_candidates_ipv4_ = 0; | 2163 num_local_candidates_ipv4_ = 0; |
2113 ice_connection_checking_start_ = base::TimeTicks(); | 2164 ice_connection_checking_start_ = base::TimeTicks(); |
2114 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); | 2165 memset(ice_state_seen_, 0, sizeof(ice_state_seen_)); |
2115 } | 2166 } |
2116 } // namespace content | 2167 } // namespace content |
OLD | NEW |