@@ -93,20 +93,6 @@ static const char kDefaultVideoSenderId[] = "defaultv0";
93
93
94
94
static const int REPORT_USAGE_PATTERN_DELAY_MS = 60000 ;
95
95
96
- // Check if we can send |new_stream| on a PeerConnection.
97
- bool CanAddLocalMediaStream (webrtc::StreamCollectionInterface* current_streams,
98
- webrtc::MediaStreamInterface* new_stream) {
99
- if (!new_stream || !current_streams) {
100
- return false ;
101
- }
102
- if (current_streams->find (new_stream->id ()) != nullptr ) {
103
- RTC_LOG (LS_ERROR) << " MediaStream with ID " << new_stream->id ()
104
- << " is already added." ;
105
- return false ;
106
- }
107
- return true ;
108
- }
109
-
110
96
111
97
uint32_t ConvertIceTransportTypeToCandidateFilter (
112
98
PeerConnectionInterface::IceTransportsType type) {
@@ -355,8 +341,6 @@ PeerConnection::PeerConnection(PeerConnectionFactory* factory,
355
341
: factory_(factory),
356
342
event_log_ (std::move(event_log)),
357
343
event_log_ptr_(event_log_.get()),
358
- local_streams_(StreamCollection::Create()),
359
- remote_streams_(StreamCollection::Create()),
360
344
call_(std::move(call)),
361
345
call_ptr_(call_.get()),
362
346
sdp_handler_(this ),
@@ -682,51 +666,23 @@ rtc::scoped_refptr<StreamCollectionInterface> PeerConnection::local_streams() {
682
666
RTC_CHECK (!IsUnifiedPlan ()) << " local_streams is not available with Unified "
683
667
" Plan SdpSemantics. Please use GetSenders "
684
668
" instead." ;
685
- return local_streams_ ;
669
+ return sdp_handler_. local_streams () ;
686
670
}
687
671
688
672
rtc::scoped_refptr<StreamCollectionInterface> PeerConnection::remote_streams () {
689
673
RTC_DCHECK_RUN_ON (signaling_thread ());
690
674
RTC_CHECK (!IsUnifiedPlan ()) << " remote_streams is not available with Unified "
691
675
" Plan SdpSemantics. Please use GetReceivers "
692
676
" instead." ;
693
- return remote_streams_ ;
677
+ return sdp_handler_. remote_streams () ;
694
678
}
695
679
696
680
bool PeerConnection::AddStream (MediaStreamInterface* local_stream) {
697
681
RTC_DCHECK_RUN_ON (signaling_thread ());
698
682
RTC_CHECK (!IsUnifiedPlan ()) << " AddStream is not available with Unified Plan "
699
683
" SdpSemantics. Please use AddTrack instead." ;
700
684
TRACE_EVENT0 (" webrtc" , " PeerConnection::AddStream" );
701
- if (IsClosed ()) {
702
- return false ;
703
- }
704
- if (!CanAddLocalMediaStream (local_streams_, local_stream)) {
705
- return false ;
706
- }
707
-
708
- local_streams_->AddStream (local_stream);
709
- MediaStreamObserver* observer = new MediaStreamObserver (local_stream);
710
- observer->SignalAudioTrackAdded .connect (this ,
711
- &PeerConnection::OnAudioTrackAdded);
712
- observer->SignalAudioTrackRemoved .connect (
713
- this , &PeerConnection::OnAudioTrackRemoved);
714
- observer->SignalVideoTrackAdded .connect (this ,
715
- &PeerConnection::OnVideoTrackAdded);
716
- observer->SignalVideoTrackRemoved .connect (
717
- this , &PeerConnection::OnVideoTrackRemoved);
718
- stream_observers_.push_back (std::unique_ptr<MediaStreamObserver>(observer));
719
-
720
- for (const auto & track : local_stream->GetAudioTracks ()) {
721
- AddAudioTrack (track.get (), local_stream);
722
- }
723
- for (const auto & track : local_stream->GetVideoTracks ()) {
724
- AddVideoTrack (track.get (), local_stream);
725
- }
726
-
727
- stats_->AddStream (local_stream);
728
- sdp_handler_.UpdateNegotiationNeeded ();
729
- return true ;
685
+ return sdp_handler_.AddStream (local_stream);
730
686
}
731
687
732
688
void PeerConnection::RemoveStream (MediaStreamInterface* local_stream) {
@@ -735,27 +691,7 @@ void PeerConnection::RemoveStream(MediaStreamInterface* local_stream) {
735
691
" Plan SdpSemantics. Please use RemoveTrack "
736
692
" instead." ;
737
693
TRACE_EVENT0 (" webrtc" , " PeerConnection::RemoveStream" );
738
- if (!IsClosed ()) {
739
- for (const auto & track : local_stream->GetAudioTracks ()) {
740
- RemoveAudioTrack (track.get (), local_stream);
741
- }
742
- for (const auto & track : local_stream->GetVideoTracks ()) {
743
- RemoveVideoTrack (track.get (), local_stream);
744
- }
745
- }
746
- local_streams_->RemoveStream (local_stream);
747
- stream_observers_.erase (
748
- std::remove_if (
749
- stream_observers_.begin (), stream_observers_.end (),
750
- [local_stream](const std::unique_ptr<MediaStreamObserver>& observer) {
751
- return observer->stream ()->id ().compare (local_stream->id ()) == 0 ;
752
- }),
753
- stream_observers_.end ());
754
-
755
- if (IsClosed ()) {
756
- return ;
757
- }
758
- sdp_handler_.UpdateNegotiationNeeded ();
694
+ sdp_handler_.RemoveStream (local_stream);
759
695
}
760
696
761
697
RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack (
@@ -2027,6 +1963,7 @@ rtc::scoped_refptr<RtpReceiverInterface> PeerConnection::RemoveAndStopReceiver(
2027
1963
2028
1964
void PeerConnection::AddAudioTrack (AudioTrackInterface* track,
2029
1965
MediaStreamInterface* stream) {
1966
+ RTC_DCHECK_RUN_ON (signaling_thread ());
2030
1967
RTC_DCHECK (!IsClosed ());
2031
1968
RTC_DCHECK (track);
2032
1969
RTC_DCHECK (stream);
@@ -2060,6 +1997,7 @@ void PeerConnection::AddAudioTrack(AudioTrackInterface* track,
2060
1997
// indefinitely, when we have unified plan SDP.
2061
1998
void PeerConnection::RemoveAudioTrack (AudioTrackInterface* track,
2062
1999
MediaStreamInterface* stream) {
2000
+ RTC_DCHECK_RUN_ON (signaling_thread ());
2063
2001
RTC_DCHECK (!IsClosed ());
2064
2002
auto sender = FindSenderForTrack (track);
2065
2003
if (!sender) {
@@ -2072,6 +2010,7 @@ void PeerConnection::RemoveAudioTrack(AudioTrackInterface* track,
2072
2010
2073
2011
void PeerConnection::AddVideoTrack (VideoTrackInterface* track,
2074
2012
MediaStreamInterface* stream) {
2013
+ RTC_DCHECK_RUN_ON (signaling_thread ());
2075
2014
RTC_DCHECK (!IsClosed ());
2076
2015
RTC_DCHECK (track);
2077
2016
RTC_DCHECK (stream);
@@ -2097,6 +2036,7 @@ void PeerConnection::AddVideoTrack(VideoTrackInterface* track,
2097
2036
2098
2037
void PeerConnection::RemoveVideoTrack (VideoTrackInterface* track,
2099
2038
MediaStreamInterface* stream) {
2039
+ RTC_DCHECK_RUN_ON (signaling_thread ());
2100
2040
RTC_DCHECK (!IsClosed ());
2101
2041
auto sender = FindSenderForTrack (track);
2102
2042
if (!sender) {
@@ -2262,13 +2202,13 @@ absl::optional<std::string> PeerConnection::GetDataMid() const {
2262
2202
}
2263
2203
2264
2204
void PeerConnection::OnRemoteSenderAdded (const RtpSenderInfo& sender_info,
2205
+ MediaStreamInterface* stream,
2265
2206
cricket::MediaType media_type) {
2266
2207
RTC_DCHECK_RUN_ON (signaling_thread ());
2267
2208
RTC_LOG (LS_INFO) << " Creating " << cricket::MediaTypeToString (media_type)
2268
2209
<< " receiver for track_id=" << sender_info.sender_id
2269
2210
<< " and stream_id=" << sender_info.stream_id ;
2270
2211
2271
- MediaStreamInterface* stream = remote_streams_->find (sender_info.stream_id );
2272
2212
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
2273
2213
CreateAudioReceiver (stream, sender_info);
2274
2214
} else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
@@ -2279,14 +2219,13 @@ void PeerConnection::OnRemoteSenderAdded(const RtpSenderInfo& sender_info,
2279
2219
}
2280
2220
2281
2221
void PeerConnection::OnRemoteSenderRemoved (const RtpSenderInfo& sender_info,
2222
+ MediaStreamInterface* stream,
2282
2223
cricket::MediaType media_type) {
2283
2224
RTC_DCHECK_RUN_ON (signaling_thread ());
2284
2225
RTC_LOG (LS_INFO) << " Removing " << cricket::MediaTypeToString (media_type)
2285
2226
<< " receiver for track_id=" << sender_info.sender_id
2286
2227
<< " and stream_id=" << sender_info.stream_id ;
2287
2228
2288
- MediaStreamInterface* stream = remote_streams_->find (sender_info.stream_id );
2289
-
2290
2229
rtc::scoped_refptr<RtpReceiverInterface> receiver;
2291
2230
if (media_type == cricket::MEDIA_TYPE_AUDIO) {
2292
2231
// When the MediaEngine audio channel is destroyed, the RemoteAudioSource
0 commit comments