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

Side by Side Diff: webrtc/api/peerconnection.cc

Issue 1816143002: Removed MediaStreamTrackInterface::set_state (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@track_state_listen_on_source2
Patch Set: Created 4 years, 9 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 /* 1 /*
2 * Copyright 2012 The WebRTC project authors. All Rights Reserved. 2 * Copyright 2012 The WebRTC project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 session_options->AddSendStream(cricket::MEDIA_TYPE_DATA, streamid, 371 session_options->AddSendStream(cricket::MEDIA_TYPE_DATA, streamid,
372 sync_label); 372 sync_label);
373 } 373 }
374 } 374 }
375 } 375 }
376 376
377 } // namespace 377 } // namespace
378 378
379 namespace webrtc { 379 namespace webrtc {
380 380
381 // Factory class for creating remote MediaStreams and MediaStreamTracks.
382 class RemoteMediaStreamFactory {
383 public:
384 explicit RemoteMediaStreamFactory(rtc::Thread* signaling_thread)
385 : signaling_thread_(signaling_thread) {}
386
387 rtc::scoped_refptr<MediaStreamInterface> CreateMediaStream(
388 const std::string& stream_label) {
389 return MediaStreamProxy::Create(signaling_thread_,
390 MediaStream::Create(stream_label));
391 }
392
393 AudioTrackInterface* AddAudioTrack(uint32_t ssrc,
394 AudioProviderInterface* provider,
395 webrtc::MediaStreamInterface* stream,
396 const std::string& track_id) {
397 return AddTrack<AudioTrackInterface, AudioTrack, AudioTrackProxy>(
398 stream, track_id, RemoteAudioSource::Create(ssrc, provider));
399 }
400
401 private:
402 template <typename TI, typename T, typename TP, typename S>
403 TI* AddTrack(MediaStreamInterface* stream,
404 const std::string& track_id,
405 const S& source) {
406 rtc::scoped_refptr<TI> track(
407 TP::Create(signaling_thread_, T::Create(track_id, source)));
408 track->set_state(webrtc::MediaStreamTrackInterface::kLive);
409 if (stream->AddTrack(track)) {
410 return track;
411 }
412 return nullptr;
413 }
414
415 rtc::Thread* signaling_thread_;
416 };
417
418 bool ExtractMediaSessionOptions( 381 bool ExtractMediaSessionOptions(
419 const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options, 382 const PeerConnectionInterface::RTCOfferAnswerOptions& rtc_options,
420 bool is_offer, 383 bool is_offer,
421 cricket::MediaSessionOptions* session_options) { 384 cricket::MediaSessionOptions* session_options) {
422 typedef PeerConnectionInterface::RTCOfferAnswerOptions RTCOfferAnswerOptions; 385 typedef PeerConnectionInterface::RTCOfferAnswerOptions RTCOfferAnswerOptions;
423 if (!IsValidOfferToReceiveMedia(rtc_options.offer_to_receive_audio) || 386 if (!IsValidOfferToReceiveMedia(rtc_options.offer_to_receive_audio) ||
424 !IsValidOfferToReceiveMedia(rtc_options.offer_to_receive_video)) { 387 !IsValidOfferToReceiveMedia(rtc_options.offer_to_receive_video)) {
425 return false; 388 return false;
426 } 389 }
427 390
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 portallocator_flags |= cricket::PORTALLOCATOR_DISABLE_TCP; 565 portallocator_flags |= cricket::PORTALLOCATOR_DISABLE_TCP;
603 LOG(LS_INFO) << "TCP candidates are disabled."; 566 LOG(LS_INFO) << "TCP candidates are disabled.";
604 } 567 }
605 568
606 port_allocator_->set_flags(portallocator_flags); 569 port_allocator_->set_flags(portallocator_flags);
607 // No step delay is used while allocating ports. 570 // No step delay is used while allocating ports.
608 port_allocator_->set_step_delay(cricket::kMinimumStepDelay); 571 port_allocator_->set_step_delay(cricket::kMinimumStepDelay);
609 572
610 media_controller_.reset(factory_->CreateMediaController(media_config)); 573 media_controller_.reset(factory_->CreateMediaController(media_config));
611 574
612 remote_stream_factory_.reset(
613 new RemoteMediaStreamFactory(factory_->signaling_thread()));
614
615 session_.reset( 575 session_.reset(
616 new WebRtcSession(media_controller_.get(), factory_->signaling_thread(), 576 new WebRtcSession(media_controller_.get(), factory_->signaling_thread(),
617 factory_->worker_thread(), port_allocator_.get())); 577 factory_->worker_thread(), port_allocator_.get()));
618 stats_.reset(new StatsCollector(this)); 578 stats_.reset(new StatsCollector(this));
619 579
620 // Initialize the WebRtcSession. It creates transport channels etc. 580 // Initialize the WebRtcSession. It creates transport channels etc.
621 if (!session_->Initialize(factory_->options(), std::move(dtls_identity_store), 581 if (!session_->Initialize(factory_->options(), std::move(dtls_identity_store),
622 configuration)) { 582 configuration)) {
623 return false; 583 return false;
624 } 584 }
(...skipping 689 matching lines...) Expand 10 before | Expand all | Expand 10 after
1314 sctp_data_channels_to_free_.clear(); 1274 sctp_data_channels_to_free_.clear();
1315 break; 1275 break;
1316 } 1276 }
1317 default: 1277 default:
1318 RTC_DCHECK(false && "Not implemented"); 1278 RTC_DCHECK(false && "Not implemented");
1319 break; 1279 break;
1320 } 1280 }
1321 } 1281 }
1322 1282
1323 void PeerConnection::CreateAudioReceiver(MediaStreamInterface* stream, 1283 void PeerConnection::CreateAudioReceiver(MediaStreamInterface* stream,
1324 AudioTrackInterface* audio_track, 1284 const std::string& track_id,
1325 uint32_t ssrc) { 1285 uint32_t ssrc) {
1326 receivers_.push_back(RtpReceiverProxy::Create( 1286 receivers_.push_back(RtpReceiverProxy::Create(
1327 signaling_thread(), 1287 signaling_thread(),
1328 new AudioRtpReceiver(audio_track, ssrc, session_.get()))); 1288 new AudioRtpReceiver(stream, track_id, ssrc, session_.get())));
1329 } 1289 }
1330 1290
1331 void PeerConnection::CreateVideoReceiver(MediaStreamInterface* stream, 1291 void PeerConnection::CreateVideoReceiver(MediaStreamInterface* stream,
1332 const std::string& track_id, 1292 const std::string& track_id,
1333 uint32_t ssrc) { 1293 uint32_t ssrc) {
1334 VideoRtpReceiver* video_receiver = new VideoRtpReceiver( 1294 receivers_.push_back(RtpReceiverProxy::Create(
1335 stream, track_id, factory_->worker_thread(), ssrc, session_.get()); 1295 signaling_thread(),
1336 receivers_.push_back( 1296 new VideoRtpReceiver(stream, track_id, factory_->worker_thread(), ssrc,
1337 RtpReceiverProxy::Create(signaling_thread(), video_receiver)); 1297 session_.get())));
1338 } 1298 }
1339 1299
1340 // TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote 1300 // TODO(deadbeef): Keep RtpReceivers around even if track goes away in remote
1341 // description. 1301 // description.
1342 void PeerConnection::DestroyAudioReceiver(MediaStreamInterface* stream, 1302 void PeerConnection::DestroyAudioReceiver(const std::string& track_id) {
1343 AudioTrackInterface* audio_track) { 1303 auto it = FindReceiverForTrack(track_id);
1344 auto it = FindReceiverForTrack(audio_track);
1345 if (it == receivers_.end()) { 1304 if (it == receivers_.end()) {
1346 LOG(LS_WARNING) << "RtpReceiver for track with id " << audio_track->id() 1305 LOG(LS_WARNING) << "RtpReceiver for track with id " << track_id
1347 << " doesn't exist."; 1306 << " doesn't exist.";
1348 } else { 1307 } else {
1349 (*it)->Stop(); 1308 (*it)->Stop();
1350 receivers_.erase(it); 1309 receivers_.erase(it);
1351 } 1310 }
1352 } 1311 }
1353 1312
1354 void PeerConnection::DestroyVideoReceiver(MediaStreamInterface* stream, 1313 void PeerConnection::DestroyVideoReceiver(const std::string& track_id) {
1355 VideoTrackInterface* video_track) { 1314 auto it = FindReceiverForTrack(track_id);
1356 auto it = FindReceiverForTrack(video_track);
1357 if (it == receivers_.end()) { 1315 if (it == receivers_.end()) {
1358 LOG(LS_WARNING) << "RtpReceiver for track with id " << video_track->id() 1316 LOG(LS_WARNING) << "RtpReceiver for track with id " << track_id
1359 << " doesn't exist."; 1317 << " doesn't exist.";
1360 } else { 1318 } else {
1361 (*it)->Stop(); 1319 (*it)->Stop();
1362 receivers_.erase(it); 1320 receivers_.erase(it);
1363 } 1321 }
1364 } 1322 }
1365 1323
1366 void PeerConnection::OnIceConnectionChange( 1324 void PeerConnection::OnIceConnectionChange(
1367 PeerConnectionInterface::IceConnectionState new_state) { 1325 PeerConnectionInterface::IceConnectionState new_state) {
1368 RTC_DCHECK(signaling_thread()->IsCurrent()); 1326 RTC_DCHECK(signaling_thread()->IsCurrent());
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
1633 // The sync_label is the MediaStream label and the |stream.id| is the 1591 // The sync_label is the MediaStream label and the |stream.id| is the
1634 // track id. 1592 // track id.
1635 const std::string& stream_label = params.sync_label; 1593 const std::string& stream_label = params.sync_label;
1636 const std::string& track_id = params.id; 1594 const std::string& track_id = params.id;
1637 uint32_t ssrc = params.first_ssrc(); 1595 uint32_t ssrc = params.first_ssrc();
1638 1596
1639 rtc::scoped_refptr<MediaStreamInterface> stream = 1597 rtc::scoped_refptr<MediaStreamInterface> stream =
1640 remote_streams_->find(stream_label); 1598 remote_streams_->find(stream_label);
1641 if (!stream) { 1599 if (!stream) {
1642 // This is a new MediaStream. Create a new remote MediaStream. 1600 // This is a new MediaStream. Create a new remote MediaStream.
1643 stream = remote_stream_factory_->CreateMediaStream(stream_label); 1601 stream = MediaStreamProxy::Create(rtc::Thread::Current(),
1602 MediaStream::Create(stream_label));
1644 remote_streams_->AddStream(stream); 1603 remote_streams_->AddStream(stream);
1645 new_streams->AddStream(stream); 1604 new_streams->AddStream(stream);
1646 } 1605 }
1647 1606
1648 const TrackInfo* track_info = 1607 const TrackInfo* track_info =
1649 FindTrackInfo(*current_tracks, stream_label, track_id); 1608 FindTrackInfo(*current_tracks, stream_label, track_id);
1650 if (!track_info) { 1609 if (!track_info) {
1651 current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc)); 1610 current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc));
1652 OnRemoteTrackSeen(stream_label, track_id, ssrc, media_type); 1611 OnRemoteTrackSeen(stream_label, track_id, ssrc, media_type);
1653 } 1612 }
1654 } 1613 }
1655 1614
1656 // Add default track if necessary. 1615 // Add default track if necessary.
1657 if (default_track_needed) { 1616 if (default_track_needed) {
1658 rtc::scoped_refptr<MediaStreamInterface> default_stream = 1617 rtc::scoped_refptr<MediaStreamInterface> default_stream =
1659 remote_streams_->find(kDefaultStreamLabel); 1618 remote_streams_->find(kDefaultStreamLabel);
1660 if (!default_stream) { 1619 if (!default_stream) {
1661 // Create the new default MediaStream. 1620 // Create the new default MediaStream.
1662 default_stream = 1621 default_stream = MediaStreamProxy::Create(
1663 remote_stream_factory_->CreateMediaStream(kDefaultStreamLabel); 1622 rtc::Thread::Current(), MediaStream::Create(kDefaultStreamLabel));
1664 remote_streams_->AddStream(default_stream); 1623 remote_streams_->AddStream(default_stream);
1665 new_streams->AddStream(default_stream); 1624 new_streams->AddStream(default_stream);
1666 } 1625 }
1667 std::string default_track_id = (media_type == cricket::MEDIA_TYPE_AUDIO) 1626 std::string default_track_id = (media_type == cricket::MEDIA_TYPE_AUDIO)
1668 ? kDefaultAudioTrackLabel 1627 ? kDefaultAudioTrackLabel
1669 : kDefaultVideoTrackLabel; 1628 : kDefaultVideoTrackLabel;
1670 const TrackInfo* default_track_info = 1629 const TrackInfo* default_track_info =
1671 FindTrackInfo(*current_tracks, kDefaultStreamLabel, default_track_id); 1630 FindTrackInfo(*current_tracks, kDefaultStreamLabel, default_track_id);
1672 if (!default_track_info) { 1631 if (!default_track_info) {
1673 current_tracks->push_back( 1632 current_tracks->push_back(
1674 TrackInfo(kDefaultStreamLabel, default_track_id, 0)); 1633 TrackInfo(kDefaultStreamLabel, default_track_id, 0));
1675 OnRemoteTrackSeen(kDefaultStreamLabel, default_track_id, 0, media_type); 1634 OnRemoteTrackSeen(kDefaultStreamLabel, default_track_id, 0, media_type);
1676 } 1635 }
1677 } 1636 }
1678 } 1637 }
1679 1638
1680 void PeerConnection::OnRemoteTrackSeen(const std::string& stream_label, 1639 void PeerConnection::OnRemoteTrackSeen(const std::string& stream_label,
1681 const std::string& track_id, 1640 const std::string& track_id,
1682 uint32_t ssrc, 1641 uint32_t ssrc,
1683 cricket::MediaType media_type) { 1642 cricket::MediaType media_type) {
1684 MediaStreamInterface* stream = remote_streams_->find(stream_label); 1643 MediaStreamInterface* stream = remote_streams_->find(stream_label);
1685 1644
1686 if (media_type == cricket::MEDIA_TYPE_AUDIO) { 1645 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
1687 AudioTrackInterface* audio_track = remote_stream_factory_->AddAudioTrack( 1646 CreateAudioReceiver(stream, track_id, ssrc);
1688 ssrc, session_.get(), stream, track_id);
1689 CreateAudioReceiver(stream, audio_track, ssrc);
1690 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { 1647 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
1691 CreateVideoReceiver(stream, track_id, ssrc); 1648 CreateVideoReceiver(stream, track_id, ssrc);
1692 } else { 1649 } else {
1693 RTC_DCHECK(false && "Invalid media type"); 1650 RTC_DCHECK(false && "Invalid media type");
1694 } 1651 }
1695 } 1652 }
1696 1653
1697 void PeerConnection::OnRemoteTrackRemoved(const std::string& stream_label, 1654 void PeerConnection::OnRemoteTrackRemoved(const std::string& stream_label,
1698 const std::string& track_id, 1655 const std::string& track_id,
1699 cricket::MediaType media_type) { 1656 cricket::MediaType media_type) {
1700 MediaStreamInterface* stream = remote_streams_->find(stream_label); 1657 MediaStreamInterface* stream = remote_streams_->find(stream_label);
1701 1658
1702 if (media_type == cricket::MEDIA_TYPE_AUDIO) { 1659 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
1660 DestroyAudioReceiver(track_id);
1703 rtc::scoped_refptr<AudioTrackInterface> audio_track = 1661 rtc::scoped_refptr<AudioTrackInterface> audio_track =
1704 stream->FindAudioTrack(track_id); 1662 stream->FindAudioTrack(track_id);
1705 if (audio_track) { 1663 if (audio_track) {
1706 audio_track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
1707 stream->RemoveTrack(audio_track); 1664 stream->RemoveTrack(audio_track);
1708 DestroyAudioReceiver(stream, audio_track);
1709 } 1665 }
1710 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) { 1666 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
1667 // Stopping or destroying a VideoRtpReceiver will end the
1668 // VideoRtpReceiver::track().
1669 DestroyVideoReceiver(track_id);
1711 rtc::scoped_refptr<VideoTrackInterface> video_track = 1670 rtc::scoped_refptr<VideoTrackInterface> video_track =
1712 stream->FindVideoTrack(track_id); 1671 stream->FindVideoTrack(track_id);
1713 if (video_track) { 1672 if (video_track) {
1673 // There's no guarantee the track is still available, e.g. the track may
1674 // have been removed from the stream by an application.
1714 stream->RemoveTrack(video_track); 1675 stream->RemoveTrack(video_track);
1715 // Stopping or destroying a VideoRtpReceiver will end the
1716 // VideoRtpReceiver::track().
1717 DestroyVideoReceiver(stream, video_track);
1718 } 1676 }
1719 } else { 1677 } else {
1720 ASSERT(false && "Invalid media type"); 1678 ASSERT(false && "Invalid media type");
1721 } 1679 }
1722 } 1680 }
1723 1681
1724 void PeerConnection::UpdateEndedRemoteMediaStreams() { 1682 void PeerConnection::UpdateEndedRemoteMediaStreams() {
1725 std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams_to_remove; 1683 std::vector<rtc::scoped_refptr<MediaStreamInterface>> streams_to_remove;
1726 for (size_t i = 0; i < remote_streams_->count(); ++i) { 1684 for (size_t i = 0; i < remote_streams_->count(); ++i) {
1727 MediaStreamInterface* stream = remote_streams_->at(i); 1685 MediaStreamInterface* stream = remote_streams_->at(i);
1728 if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) { 1686 if (stream->GetAudioTracks().empty() && stream->GetVideoTracks().empty()) {
1729 streams_to_remove.push_back(stream); 1687 streams_to_remove.push_back(stream);
1730 } 1688 }
1731 } 1689 }
1732 1690
1733 for (const auto& stream : streams_to_remove) { 1691 for (const auto& stream : streams_to_remove) {
1734 remote_streams_->RemoveStream(stream); 1692 remote_streams_->RemoveStream(stream);
1735 observer_->OnRemoveStream(stream); 1693 observer_->OnRemoveStream(stream);
1736 } 1694 }
1737 } 1695 }
1738 1696
1739 void PeerConnection::EndRemoteTracks(cricket::MediaType media_type) { 1697 void PeerConnection::EndRemoteTracks(cricket::MediaType media_type) {
1740 TrackInfos* current_tracks = GetRemoteTracks(media_type); 1698 TrackInfos* current_tracks = GetRemoteTracks(media_type);
1741 for (TrackInfos::iterator track_it = current_tracks->begin(); 1699 for (TrackInfos::iterator track_it = current_tracks->begin();
1742 track_it != current_tracks->end(); ++track_it) { 1700 track_it != current_tracks->end(); ++track_it) {
1743 const TrackInfo& info = *track_it; 1701 const TrackInfo& info = *track_it;
1744 MediaStreamInterface* stream = remote_streams_->find(info.stream_label);
1745 if (media_type == cricket::MEDIA_TYPE_AUDIO) { 1702 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
1746 AudioTrackInterface* track = stream->FindAudioTrack(info.track_id); 1703 DestroyAudioReceiver(info.track_id);
1747 // There's no guarantee the track is still available, e.g. the track may
1748 // have been removed from the stream by javascript.
1749 if (track) {
1750 track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
1751 }
1752 } 1704 }
1753 if (media_type == cricket::MEDIA_TYPE_VIDEO) { 1705 if (media_type == cricket::MEDIA_TYPE_VIDEO) {
1754 VideoTrackInterface* track = stream->FindVideoTrack(info.track_id); 1706 DestroyVideoReceiver(info.track_id);
1755 // There's no guarantee the track is still available, e.g. the track may
1756 // have been removed from the stream by javascript.
1757 if (track) {
1758 track->set_state(webrtc::MediaStreamTrackInterface::kEnded);
1759 }
1760 } 1707 }
1761 } 1708 }
1762 } 1709 }
1763 1710
1764 void PeerConnection::UpdateLocalTracks( 1711 void PeerConnection::UpdateLocalTracks(
1765 const std::vector<cricket::StreamParams>& streams, 1712 const std::vector<cricket::StreamParams>& streams,
1766 cricket::MediaType media_type) { 1713 cricket::MediaType media_type) {
1767 TrackInfos* current_tracks = GetLocalTracks(media_type); 1714 TrackInfos* current_tracks = GetLocalTracks(media_type);
1768 1715
1769 // Find removed tracks. I.e., tracks where the track id, stream label or ssrc 1716 // Find removed tracks. I.e., tracks where the track id, stream label or ssrc
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
2075 std::vector<rtc::scoped_refptr<RtpSenderInterface>>::iterator 2022 std::vector<rtc::scoped_refptr<RtpSenderInterface>>::iterator
2076 PeerConnection::FindSenderForTrack(MediaStreamTrackInterface* track) { 2023 PeerConnection::FindSenderForTrack(MediaStreamTrackInterface* track) {
2077 return std::find_if( 2024 return std::find_if(
2078 senders_.begin(), senders_.end(), 2025 senders_.begin(), senders_.end(),
2079 [track](const rtc::scoped_refptr<RtpSenderInterface>& sender) { 2026 [track](const rtc::scoped_refptr<RtpSenderInterface>& sender) {
2080 return sender->track() == track; 2027 return sender->track() == track;
2081 }); 2028 });
2082 } 2029 }
2083 2030
2084 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator 2031 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator
2085 PeerConnection::FindReceiverForTrack(MediaStreamTrackInterface* track) { 2032 PeerConnection::FindReceiverForTrack(const std::string& track_id) {
2086 return std::find_if( 2033 return std::find_if(
2087 receivers_.begin(), receivers_.end(), 2034 receivers_.begin(), receivers_.end(),
2088 [track](const rtc::scoped_refptr<RtpReceiverInterface>& receiver) { 2035 [track_id](const rtc::scoped_refptr<RtpReceiverInterface>& receiver) {
2089 return receiver->track() == track; 2036 return receiver->id() == track_id;
2090 }); 2037 });
2091 } 2038 }
2092 2039
2093 PeerConnection::TrackInfos* PeerConnection::GetRemoteTracks( 2040 PeerConnection::TrackInfos* PeerConnection::GetRemoteTracks(
2094 cricket::MediaType media_type) { 2041 cricket::MediaType media_type) {
2095 RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO || 2042 RTC_DCHECK(media_type == cricket::MEDIA_TYPE_AUDIO ||
2096 media_type == cricket::MEDIA_TYPE_VIDEO); 2043 media_type == cricket::MEDIA_TYPE_VIDEO);
2097 return (media_type == cricket::MEDIA_TYPE_AUDIO) ? &remote_audio_tracks_ 2044 return (media_type == cricket::MEDIA_TYPE_AUDIO) ? &remote_audio_tracks_
2098 : &remote_video_tracks_; 2045 : &remote_video_tracks_;
2099 } 2046 }
(...skipping 22 matching lines...) Expand all
2122 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { 2069 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const {
2123 for (const auto& channel : sctp_data_channels_) { 2070 for (const auto& channel : sctp_data_channels_) {
2124 if (channel->id() == sid) { 2071 if (channel->id() == sid) {
2125 return channel; 2072 return channel;
2126 } 2073 }
2127 } 2074 }
2128 return nullptr; 2075 return nullptr;
2129 } 2076 }
2130 2077
2131 } // namespace webrtc 2078 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698