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

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

Issue 2023373002: Separating internal and external methods of RtpSender/RtpReceiver. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 years, 6 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 28 matching lines...) Expand all
39 #include "webrtc/p2p/client/basicportallocator.h" 39 #include "webrtc/p2p/client/basicportallocator.h"
40 #include "webrtc/pc/channelmanager.h" 40 #include "webrtc/pc/channelmanager.h"
41 #include "webrtc/system_wrappers/include/field_trial.h" 41 #include "webrtc/system_wrappers/include/field_trial.h"
42 42
43 namespace { 43 namespace {
44 44
45 using webrtc::DataChannel; 45 using webrtc::DataChannel;
46 using webrtc::MediaConstraintsInterface; 46 using webrtc::MediaConstraintsInterface;
47 using webrtc::MediaStreamInterface; 47 using webrtc::MediaStreamInterface;
48 using webrtc::PeerConnectionInterface; 48 using webrtc::PeerConnectionInterface;
49 using webrtc::RtpSender;
49 using webrtc::RtpSenderInterface; 50 using webrtc::RtpSenderInterface;
51 using webrtc::RtpSenderProxy;
52 using webrtc::RtpSenderProxyEx;
50 using webrtc::StreamCollection; 53 using webrtc::StreamCollection;
51 54
52 static const char kDefaultStreamLabel[] = "default"; 55 static const char kDefaultStreamLabel[] = "default";
53 static const char kDefaultAudioTrackLabel[] = "defaulta0"; 56 static const char kDefaultAudioTrackLabel[] = "defaulta0";
54 static const char kDefaultVideoTrackLabel[] = "defaultv0"; 57 static const char kDefaultVideoTrackLabel[] = "defaultv0";
55 58
56 // The min number of tokens must present in Turn host uri. 59 // The min number of tokens must present in Turn host uri.
57 // e.g. user@turn.example.org 60 // e.g. user@turn.example.org
58 static const size_t kTurnHostTokensNum = 2; 61 static const size_t kTurnHostTokensNum = 2;
59 // Number of tokens must be preset when TURN uri has transport param. 62 // Number of tokens must be preset when TURN uri has transport param.
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 343
341 bool IsValidOfferToReceiveMedia(int value) { 344 bool IsValidOfferToReceiveMedia(int value) {
342 typedef PeerConnectionInterface::RTCOfferAnswerOptions Options; 345 typedef PeerConnectionInterface::RTCOfferAnswerOptions Options;
343 return (value >= Options::kUndefined) && 346 return (value >= Options::kUndefined) &&
344 (value <= Options::kMaxOfferToReceiveMedia); 347 (value <= Options::kMaxOfferToReceiveMedia);
345 } 348 }
346 349
347 // Add the stream and RTP data channel info to |session_options|. 350 // Add the stream and RTP data channel info to |session_options|.
348 void AddSendStreams( 351 void AddSendStreams(
349 cricket::MediaSessionOptions* session_options, 352 cricket::MediaSessionOptions* session_options,
350 const std::vector<rtc::scoped_refptr<RtpSenderInterface>>& senders, 353 const std::vector<rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>>>& senders,
351 const std::map<std::string, rtc::scoped_refptr<DataChannel>>& 354 const std::map<std::string, rtc::scoped_refptr<DataChannel>>&
352 rtp_data_channels) { 355 rtp_data_channels) {
353 session_options->streams.clear(); 356 session_options->streams.clear();
354 for (const auto& sender : senders) { 357 for (const auto& sender : senders) {
355 session_options->AddSendStream(sender->media_type(), sender->id(), 358 session_options->AddSendStream(sender->media_type(), sender->id(),
356 sender->stream_id()); 359 sender->get()->stream_id());
357 } 360 }
358 361
359 // Check for data channels. 362 // Check for data channels.
360 for (const auto& kv : rtp_data_channels) { 363 for (const auto& kv : rtp_data_channels) {
361 const DataChannel* channel = kv.second; 364 const DataChannel* channel = kv.second;
362 if (channel->state() == DataChannel::kConnecting || 365 if (channel->state() == DataChannel::kConnecting ||
363 channel->state() == DataChannel::kOpen) { 366 channel->state() == DataChannel::kOpen) {
364 // |streamid| and |sync_label| are both set to the DataChannel label 367 // |streamid| and |sync_label| are both set to the DataChannel label
365 // here so they can be signaled the same way as MediaStreams and Tracks. 368 // here so they can be signaled the same way as MediaStreams and Tracks.
366 // For MediaStreams, the sync_label is the MediaStream label and the 369 // For MediaStreams, the sync_label is the MediaStream label and the
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 ice_gathering_state_(kIceGatheringNew), 513 ice_gathering_state_(kIceGatheringNew),
511 local_streams_(StreamCollection::Create()), 514 local_streams_(StreamCollection::Create()),
512 remote_streams_(StreamCollection::Create()) {} 515 remote_streams_(StreamCollection::Create()) {}
513 516
514 PeerConnection::~PeerConnection() { 517 PeerConnection::~PeerConnection() {
515 TRACE_EVENT0("webrtc", "PeerConnection::~PeerConnection"); 518 TRACE_EVENT0("webrtc", "PeerConnection::~PeerConnection");
516 RTC_DCHECK(signaling_thread()->IsCurrent()); 519 RTC_DCHECK(signaling_thread()->IsCurrent());
517 // Need to detach RTP senders/receivers from WebRtcSession, 520 // Need to detach RTP senders/receivers from WebRtcSession,
518 // since it's about to be destroyed. 521 // since it's about to be destroyed.
519 for (const auto& sender : senders_) { 522 for (const auto& sender : senders_) {
520 sender->Stop(); 523 sender->get()->Stop();
521 } 524 }
522 for (const auto& receiver : receivers_) { 525 for (const auto& receiver : receivers_) {
523 receiver->Stop(); 526 receiver->Stop();
524 } 527 }
525 } 528 }
526 529
527 bool PeerConnection::Initialize( 530 bool PeerConnection::Initialize(
528 const PeerConnectionInterface::RTCConfiguration& configuration, 531 const PeerConnectionInterface::RTCConfiguration& configuration,
529 std::unique_ptr<cricket::PortAllocator> allocator, 532 std::unique_ptr<cricket::PortAllocator> allocator,
530 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store, 533 std::unique_ptr<DtlsIdentityStoreInterface> dtls_identity_store,
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 << "Adding a track with two streams is not currently supported."; 682 << "Adding a track with two streams is not currently supported.";
680 return nullptr; 683 return nullptr;
681 } 684 }
682 // TODO(deadbeef): Support adding a track to two different senders. 685 // TODO(deadbeef): Support adding a track to two different senders.
683 if (FindSenderForTrack(track) != senders_.end()) { 686 if (FindSenderForTrack(track) != senders_.end()) {
684 LOG(LS_ERROR) << "Sender for track " << track->id() << " already exists."; 687 LOG(LS_ERROR) << "Sender for track " << track->id() << " already exists.";
685 return nullptr; 688 return nullptr;
686 } 689 }
687 690
688 // TODO(deadbeef): Support adding a track to multiple streams. 691 // TODO(deadbeef): Support adding a track to multiple streams.
689 rtc::scoped_refptr<RtpSenderInterface> new_sender; 692 rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender;
690 if (track->kind() == MediaStreamTrackInterface::kAudioKind) { 693 if (track->kind() == MediaStreamTrackInterface::kAudioKind) {
691 new_sender = RtpSenderProxy::Create( 694 new_sender = RtpSenderProxyEx<RtpSender>::Create(
692 signaling_thread(), 695 signaling_thread(),
693 new AudioRtpSender(static_cast<AudioTrackInterface*>(track), 696 new AudioRtpSender(static_cast<AudioTrackInterface*>(track),
694 session_.get(), stats_.get())); 697 session_.get(), stats_.get()));
695 if (!streams.empty()) { 698 if (!streams.empty()) {
696 new_sender->set_stream_id(streams[0]->label()); 699 new_sender->get()->set_stream_id(streams[0]->label());
697 } 700 }
698 const TrackInfo* track_info = FindTrackInfo( 701 const TrackInfo* track_info = FindTrackInfo(
699 local_audio_tracks_, new_sender->stream_id(), track->id()); 702 local_audio_tracks_, new_sender->get()->stream_id(), track->id());
700 if (track_info) { 703 if (track_info) {
701 new_sender->SetSsrc(track_info->ssrc); 704 new_sender->get()->SetSsrc(track_info->ssrc);
702 } 705 }
703 } else if (track->kind() == MediaStreamTrackInterface::kVideoKind) { 706 } else if (track->kind() == MediaStreamTrackInterface::kVideoKind) {
704 new_sender = RtpSenderProxy::Create( 707 new_sender = RtpSenderProxyEx<RtpSender>::Create(
705 signaling_thread(), 708 signaling_thread(),
706 new VideoRtpSender(static_cast<VideoTrackInterface*>(track), 709 new VideoRtpSender(static_cast<VideoTrackInterface*>(track),
707 session_.get())); 710 session_.get()));
708 if (!streams.empty()) { 711 if (!streams.empty()) {
709 new_sender->set_stream_id(streams[0]->label()); 712 new_sender->get()->set_stream_id(streams[0]->label());
710 } 713 }
711 const TrackInfo* track_info = FindTrackInfo( 714 const TrackInfo* track_info = FindTrackInfo(
712 local_video_tracks_, new_sender->stream_id(), track->id()); 715 local_video_tracks_, new_sender->get()->stream_id(), track->id());
713 if (track_info) { 716 if (track_info) {
714 new_sender->SetSsrc(track_info->ssrc); 717 new_sender->get()->SetSsrc(track_info->ssrc);
715 } 718 }
716 } else { 719 } else {
717 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << track->kind(); 720 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << track->kind();
718 return rtc::scoped_refptr<RtpSenderInterface>(); 721 return rtc::scoped_refptr<RtpSenderInterface>();
719 } 722 }
720 723
721 senders_.push_back(new_sender); 724 senders_.push_back(new_sender);
722 observer_->OnRenegotiationNeeded(); 725 observer_->OnRenegotiationNeeded();
723 return new_sender; 726 return new_sender;
724 } 727 }
725 728
726 bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) { 729 bool PeerConnection::RemoveTrack(RtpSenderInterface* sender) {
727 TRACE_EVENT0("webrtc", "PeerConnection::RemoveTrack"); 730 TRACE_EVENT0("webrtc", "PeerConnection::RemoveTrack");
728 if (IsClosed()) { 731 if (IsClosed()) {
729 return false; 732 return false;
730 } 733 }
731 734
732 auto it = std::find(senders_.begin(), senders_.end(), sender); 735 auto it = std::find(senders_.begin(), senders_.end(), sender);
733 if (it == senders_.end()) { 736 if (it == senders_.end()) {
734 LOG(LS_ERROR) << "Couldn't find sender " << sender->id() << " to remove."; 737 LOG(LS_ERROR) << "Couldn't find sender " << sender->id() << " to remove.";
735 return false; 738 return false;
736 } 739 }
737 (*it)->Stop(); 740 (*it)->get()->Stop();
738 senders_.erase(it); 741 senders_.erase(it);
739 742
740 observer_->OnRenegotiationNeeded(); 743 observer_->OnRenegotiationNeeded();
741 return true; 744 return true;
742 } 745 }
743 746
744 rtc::scoped_refptr<DtmfSenderInterface> PeerConnection::CreateDtmfSender( 747 rtc::scoped_refptr<DtmfSenderInterface> PeerConnection::CreateDtmfSender(
745 AudioTrackInterface* track) { 748 AudioTrackInterface* track) {
746 TRACE_EVENT0("webrtc", "PeerConnection::CreateDtmfSender"); 749 TRACE_EVENT0("webrtc", "PeerConnection::CreateDtmfSender");
747 if (!track) { 750 if (!track) {
(...skipping 11 matching lines...) Expand all
759 LOG(LS_ERROR) << "CreateDtmfSender failed on DtmfSender::Create."; 762 LOG(LS_ERROR) << "CreateDtmfSender failed on DtmfSender::Create.";
760 return NULL; 763 return NULL;
761 } 764 }
762 return DtmfSenderProxy::Create(signaling_thread(), sender.get()); 765 return DtmfSenderProxy::Create(signaling_thread(), sender.get());
763 } 766 }
764 767
765 rtc::scoped_refptr<RtpSenderInterface> PeerConnection::CreateSender( 768 rtc::scoped_refptr<RtpSenderInterface> PeerConnection::CreateSender(
766 const std::string& kind, 769 const std::string& kind,
767 const std::string& stream_id) { 770 const std::string& stream_id) {
768 TRACE_EVENT0("webrtc", "PeerConnection::CreateSender"); 771 TRACE_EVENT0("webrtc", "PeerConnection::CreateSender");
769 rtc::scoped_refptr<RtpSenderInterface> new_sender; 772 rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender;
770 if (kind == MediaStreamTrackInterface::kAudioKind) { 773 if (kind == MediaStreamTrackInterface::kAudioKind) {
771 new_sender = RtpSenderProxy::Create( 774 new_sender = RtpSenderProxyEx<RtpSender>::Create(
772 signaling_thread(), new AudioRtpSender(session_.get(), stats_.get())); 775 signaling_thread(), new AudioRtpSender(session_.get(), stats_.get()));
773 } else if (kind == MediaStreamTrackInterface::kVideoKind) { 776 } else if (kind == MediaStreamTrackInterface::kVideoKind) {
774 new_sender = RtpSenderProxy::Create(signaling_thread(), 777 new_sender = RtpSenderProxyEx<RtpSender>::Create(signaling_thread(),
775 new VideoRtpSender(session_.get())); 778 new VideoRtpSender(session_.get()));
776 } else { 779 } else {
777 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind; 780 LOG(LS_ERROR) << "CreateSender called with invalid kind: " << kind;
778 return new_sender; 781 return new_sender;
779 } 782 }
780 if (!stream_id.empty()) { 783 if (!stream_id.empty()) {
781 new_sender->set_stream_id(stream_id); 784 new_sender->get()->set_stream_id(stream_id);
782 } 785 }
783 senders_.push_back(new_sender); 786 senders_.push_back(new_sender);
784 return new_sender; 787 return new_sender;
785 } 788 }
786 789
787 std::vector<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::GetSenders() 790 std::vector<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::GetSenders()
788 const { 791 const {
789 return senders_; 792 std::vector<rtc::scoped_refptr<RtpSenderInterface>> ret;
793 for (const auto& sender : senders_) {
794 ret.push_back(sender.get());
795 }
796 return ret;
790 } 797 }
791 798
792 std::vector<rtc::scoped_refptr<RtpReceiverInterface>> 799 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>
793 PeerConnection::GetReceivers() const { 800 PeerConnection::GetReceivers() const {
794 return receivers_; 801 return receivers_;
795 } 802 }
796 803
797 bool PeerConnection::GetStats(StatsObserver* observer, 804 bool PeerConnection::GetStats(StatsObserver* observer,
798 MediaStreamTrackInterface* track, 805 MediaStreamTrackInterface* track,
799 StatsOutputLevel level) { 806 StatsOutputLevel level) {
(...skipping 573 matching lines...) Expand 10 before | Expand all | Expand 10 after
1373 } 1380 }
1374 observer_->OnSignalingChange(signaling_state_); 1381 observer_->OnSignalingChange(signaling_state_);
1375 } 1382 }
1376 1383
1377 void PeerConnection::OnAudioTrackAdded(AudioTrackInterface* track, 1384 void PeerConnection::OnAudioTrackAdded(AudioTrackInterface* track,
1378 MediaStreamInterface* stream) { 1385 MediaStreamInterface* stream) {
1379 auto sender = FindSenderForTrack(track); 1386 auto sender = FindSenderForTrack(track);
1380 if (sender != senders_.end()) { 1387 if (sender != senders_.end()) {
1381 // We already have a sender for this track, so just change the stream_id 1388 // We already have a sender for this track, so just change the stream_id
1382 // so that it's correct in the next call to CreateOffer. 1389 // so that it's correct in the next call to CreateOffer.
1383 (*sender)->set_stream_id(stream->label()); 1390 (*sender)->get()->set_stream_id(stream->label());
1384 return; 1391 return;
1385 } 1392 }
1386 1393
1387 // Normal case; we've never seen this track before. 1394 // Normal case; we've never seen this track before.
1388 rtc::scoped_refptr<RtpSenderInterface> new_sender = RtpSenderProxy::Create( 1395 rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender = RtpSenderProxyEx< RtpSender>::Create(
1389 signaling_thread(), 1396 signaling_thread(),
1390 new AudioRtpSender(track, stream->label(), session_.get(), stats_.get())); 1397 new AudioRtpSender(track, stream->label(), session_.get(), stats_.get()));
1391 senders_.push_back(new_sender); 1398 senders_.push_back(new_sender);
1392 // If the sender has already been configured in SDP, we call SetSsrc, 1399 // If the sender has already been configured in SDP, we call SetSsrc,
1393 // which will connect the sender to the underlying transport. This can 1400 // which will connect the sender to the underlying transport. This can
1394 // occur if a local session description that contains the ID of the sender 1401 // occur if a local session description that contains the ID of the sender
1395 // is set before AddStream is called. It can also occur if the local 1402 // is set before AddStream is called. It can also occur if the local
1396 // session description is not changed and RemoveStream is called, and 1403 // session description is not changed and RemoveStream is called, and
1397 // later AddStream is called again with the same stream. 1404 // later AddStream is called again with the same stream.
1398 const TrackInfo* track_info = 1405 const TrackInfo* track_info =
1399 FindTrackInfo(local_audio_tracks_, stream->label(), track->id()); 1406 FindTrackInfo(local_audio_tracks_, stream->label(), track->id());
1400 if (track_info) { 1407 if (track_info) {
1401 new_sender->SetSsrc(track_info->ssrc); 1408 new_sender->get()->SetSsrc(track_info->ssrc);
1402 } 1409 }
1403 } 1410 }
1404 1411
1405 // TODO(deadbeef): Don't destroy RtpSenders here; they should be kept around 1412 // TODO(deadbeef): Don't destroy RtpSenders here; they should be kept around
1406 // indefinitely, when we have unified plan SDP. 1413 // indefinitely, when we have unified plan SDP.
1407 void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track, 1414 void PeerConnection::OnAudioTrackRemoved(AudioTrackInterface* track,
1408 MediaStreamInterface* stream) { 1415 MediaStreamInterface* stream) {
1409 auto sender = FindSenderForTrack(track); 1416 auto sender = FindSenderForTrack(track);
1410 if (sender == senders_.end()) { 1417 if (sender == senders_.end()) {
1411 LOG(LS_WARNING) << "RtpSender for track with id " << track->id() 1418 LOG(LS_WARNING) << "RtpSender for track with id " << track->id()
1412 << " doesn't exist."; 1419 << " doesn't exist.";
1413 return; 1420 return;
1414 } 1421 }
1415 (*sender)->Stop(); 1422 (*sender)->get()->Stop();
1416 senders_.erase(sender); 1423 senders_.erase(sender);
1417 } 1424 }
1418 1425
1419 void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track, 1426 void PeerConnection::OnVideoTrackAdded(VideoTrackInterface* track,
1420 MediaStreamInterface* stream) { 1427 MediaStreamInterface* stream) {
1421 auto sender = FindSenderForTrack(track); 1428 auto sender = FindSenderForTrack(track);
1422 if (sender != senders_.end()) { 1429 if (sender != senders_.end()) {
1423 // We already have a sender for this track, so just change the stream_id 1430 // We already have a sender for this track, so just change the stream_id
1424 // so that it's correct in the next call to CreateOffer. 1431 // so that it's correct in the next call to CreateOffer.
1425 (*sender)->set_stream_id(stream->label()); 1432 (*sender)->get()->set_stream_id(stream->label());
1426 return; 1433 return;
1427 } 1434 }
1428 1435
1429 // Normal case; we've never seen this track before. 1436 // Normal case; we've never seen this track before.
1430 rtc::scoped_refptr<RtpSenderInterface> new_sender = RtpSenderProxy::Create( 1437 rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>> new_sender = RtpSenderProxyEx< RtpSender>::Create(
1431 signaling_thread(), 1438 signaling_thread(),
1432 new VideoRtpSender(track, stream->label(), session_.get())); 1439 new VideoRtpSender(track, stream->label(), session_.get()));
1433 senders_.push_back(new_sender); 1440 senders_.push_back(new_sender);
1434 const TrackInfo* track_info = 1441 const TrackInfo* track_info =
1435 FindTrackInfo(local_video_tracks_, stream->label(), track->id()); 1442 FindTrackInfo(local_video_tracks_, stream->label(), track->id());
1436 if (track_info) { 1443 if (track_info) {
1437 new_sender->SetSsrc(track_info->ssrc); 1444 new_sender->get()->SetSsrc(track_info->ssrc);
1438 } 1445 }
1439 } 1446 }
1440 1447
1441 void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track, 1448 void PeerConnection::OnVideoTrackRemoved(VideoTrackInterface* track,
1442 MediaStreamInterface* stream) { 1449 MediaStreamInterface* stream) {
1443 auto sender = FindSenderForTrack(track); 1450 auto sender = FindSenderForTrack(track);
1444 if (sender == senders_.end()) { 1451 if (sender == senders_.end()) {
1445 LOG(LS_WARNING) << "RtpSender for track with id " << track->id() 1452 LOG(LS_WARNING) << "RtpSender for track with id " << track->id()
1446 << " doesn't exist."; 1453 << " doesn't exist.";
1447 return; 1454 return;
1448 } 1455 }
1449 (*sender)->Stop(); 1456 (*sender)->get()->Stop();
1450 senders_.erase(sender); 1457 senders_.erase(sender);
1451 } 1458 }
1452 1459
1453 void PeerConnection::PostSetSessionDescriptionFailure( 1460 void PeerConnection::PostSetSessionDescriptionFailure(
1454 SetSessionDescriptionObserver* observer, 1461 SetSessionDescriptionObserver* observer,
1455 const std::string& error) { 1462 const std::string& error) {
1456 SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer); 1463 SetSessionDescriptionMsg* msg = new SetSessionDescriptionMsg(observer);
1457 msg->error = error; 1464 msg->error = error;
1458 signaling_thread()->Post(this, MSG_SET_SESSIONDESCRIPTION_FAILED, msg); 1465 signaling_thread()->Post(this, MSG_SET_SESSIONDESCRIPTION_FAILED, msg);
1459 } 1466 }
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
1732 current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc)); 1739 current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc));
1733 OnLocalTrackSeen(stream_label, track_id, params.first_ssrc(), media_type); 1740 OnLocalTrackSeen(stream_label, track_id, params.first_ssrc(), media_type);
1734 } 1741 }
1735 } 1742 }
1736 } 1743 }
1737 1744
1738 void PeerConnection::OnLocalTrackSeen(const std::string& stream_label, 1745 void PeerConnection::OnLocalTrackSeen(const std::string& stream_label,
1739 const std::string& track_id, 1746 const std::string& track_id,
1740 uint32_t ssrc, 1747 uint32_t ssrc,
1741 cricket::MediaType media_type) { 1748 cricket::MediaType media_type) {
1742 RtpSenderInterface* sender = FindSenderById(track_id); 1749 RtpSender* sender = FindSenderById(track_id);
1743 if (!sender) { 1750 if (!sender) {
1744 LOG(LS_WARNING) << "An unknown RtpSender with id " << track_id 1751 LOG(LS_WARNING) << "An unknown RtpSender with id " << track_id
1745 << " has been configured in the local description."; 1752 << " has been configured in the local description.";
1746 return; 1753 return;
1747 } 1754 }
1748 1755
1749 if (sender->media_type() != media_type) { 1756 if (sender->media_type() != media_type) {
1750 LOG(LS_WARNING) << "An RtpSender has been configured in the local" 1757 LOG(LS_WARNING) << "An RtpSender has been configured in the local"
1751 << " description with an unexpected media type."; 1758 << " description with an unexpected media type.";
1752 return; 1759 return;
1753 } 1760 }
1754 1761
1755 sender->set_stream_id(stream_label); 1762 sender->set_stream_id(stream_label);
1756 sender->SetSsrc(ssrc); 1763 sender->SetSsrc(ssrc);
1757 } 1764 }
1758 1765
1759 void PeerConnection::OnLocalTrackRemoved(const std::string& stream_label, 1766 void PeerConnection::OnLocalTrackRemoved(const std::string& stream_label,
1760 const std::string& track_id, 1767 const std::string& track_id,
1761 uint32_t ssrc, 1768 uint32_t ssrc,
1762 cricket::MediaType media_type) { 1769 cricket::MediaType media_type) {
1763 RtpSenderInterface* sender = FindSenderById(track_id); 1770 RtpSender* sender = FindSenderById(track_id);
1764 if (!sender) { 1771 if (!sender) {
1765 // This is the normal case. I.e., RemoveStream has been called and the 1772 // This is the normal case. I.e., RemoveStream has been called and the
1766 // SessionDescriptions has been renegotiated. 1773 // SessionDescriptions has been renegotiated.
1767 return; 1774 return;
1768 } 1775 }
1769 1776
1770 // A sender has been removed from the SessionDescription but it's still 1777 // A sender has been removed from the SessionDescription but it's still
1771 // associated with the PeerConnection. This only occurs if the SDP doesn't 1778 // associated with the PeerConnection. This only occurs if the SDP doesn't
1772 // match with the calls to CreateSender, AddStream and RemoveStream. 1779 // match with the calls to CreateSender, AddStream and RemoveStream.
1773 if (sender->media_type() != media_type) { 1780 if (sender->media_type() != media_type) {
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
1992 InternalCreateDataChannel(label, &config)); 1999 InternalCreateDataChannel(label, &config));
1993 if (!channel.get()) { 2000 if (!channel.get()) {
1994 LOG(LS_ERROR) << "Failed to create DataChannel from the OPEN message."; 2001 LOG(LS_ERROR) << "Failed to create DataChannel from the OPEN message.";
1995 return; 2002 return;
1996 } 2003 }
1997 2004
1998 observer_->OnDataChannel( 2005 observer_->OnDataChannel(
1999 DataChannelProxy::Create(signaling_thread(), channel)); 2006 DataChannelProxy::Create(signaling_thread(), channel));
2000 } 2007 }
2001 2008
2002 RtpSenderInterface* PeerConnection::FindSenderById(const std::string& id) { 2009 RtpSender* PeerConnection::FindSenderById(const std::string& id) {
2003 auto it = 2010 auto it =
2004 std::find_if(senders_.begin(), senders_.end(), 2011 std::find_if(senders_.begin(), senders_.end(),
2005 [id](const rtc::scoped_refptr<RtpSenderInterface>& sender) { 2012 [id](const rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>>& s ender) {
2006 return sender->id() == id; 2013 return sender->id() == id;
2007 }); 2014 });
2008 return it != senders_.end() ? it->get() : nullptr; 2015 return it != senders_.end() ? it->get()->get() : nullptr;
2009 } 2016 }
2010 2017
2011 std::vector<rtc::scoped_refptr<RtpSenderInterface>>::iterator 2018 std::vector<rtc::scoped_refptr<RtpSenderProxyEx<RtpSender>>>::iterator
2012 PeerConnection::FindSenderForTrack(MediaStreamTrackInterface* track) { 2019 PeerConnection::FindSenderForTrack(MediaStreamTrackInterface* track) {
2013 return std::find_if( 2020 return std::find_if(
2014 senders_.begin(), senders_.end(), 2021 senders_.begin(), senders_.end(),
2015 [track](const rtc::scoped_refptr<RtpSenderInterface>& sender) { 2022 [track](const rtc::scoped_refptr<RtpSenderInterface>& sender) {
2016 return sender->track() == track; 2023 return sender->track() == track;
2017 }); 2024 });
2018 } 2025 }
2019 2026
2020 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator 2027 std::vector<rtc::scoped_refptr<RtpReceiverInterface>>::iterator
2021 PeerConnection::FindReceiverForTrack(const std::string& track_id) { 2028 PeerConnection::FindReceiverForTrack(const std::string& track_id) {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2058 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const { 2065 DataChannel* PeerConnection::FindDataChannelBySid(int sid) const {
2059 for (const auto& channel : sctp_data_channels_) { 2066 for (const auto& channel : sctp_data_channels_) {
2060 if (channel->id() == sid) { 2067 if (channel->id() == sid) {
2061 return channel; 2068 return channel;
2062 } 2069 }
2063 } 2070 }
2064 return nullptr; 2071 return nullptr;
2065 } 2072 }
2066 2073
2067 } // namespace webrtc 2074 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698