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

Side by Side Diff: content/renderer/media/rtc_peer_connection_handler.cc

Issue 2972003002: RTCPeerConnection.ontrack event added. (Closed)
Patch Set: Le merge Created 3 years, 5 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 unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW
« no previous file with comments | « content/renderer/media/remote_media_stream_impl.h ('k') | third_party/WebKit/Source/core/events/EventTypeNames.json5 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698