@@ -93,20 +93,6 @@ static const char kDefaultVideoSenderId[] = "defaultv0";
9393
9494static const int REPORT_USAGE_PATTERN_DELAY_MS = 60000 ;
9595
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-
11096
11197uint32_t ConvertIceTransportTypeToCandidateFilter (
11298 PeerConnectionInterface::IceTransportsType type) {
@@ -355,8 +341,6 @@ PeerConnection::PeerConnection(PeerConnectionFactory* factory,
355341 : factory_(factory),
356342 event_log_ (std::move(event_log)),
357343 event_log_ptr_(event_log_.get()),
358- local_streams_(StreamCollection::Create()),
359- remote_streams_(StreamCollection::Create()),
360344 call_(std::move(call)),
361345 call_ptr_(call_.get()),
362346 sdp_handler_(this ),
@@ -682,51 +666,23 @@ rtc::scoped_refptr<StreamCollectionInterface> PeerConnection::local_streams() {
682666 RTC_CHECK (!IsUnifiedPlan ()) << " local_streams is not available with Unified "
683667 " Plan SdpSemantics. Please use GetSenders "
684668 " instead." ;
685- return local_streams_ ;
669+ return sdp_handler_. local_streams () ;
686670}
687671
688672rtc::scoped_refptr<StreamCollectionInterface> PeerConnection::remote_streams () {
689673 RTC_DCHECK_RUN_ON (signaling_thread ());
690674 RTC_CHECK (!IsUnifiedPlan ()) << " remote_streams is not available with Unified "
691675 " Plan SdpSemantics. Please use GetReceivers "
692676 " instead." ;
693- return remote_streams_ ;
677+ return sdp_handler_. remote_streams () ;
694678}
695679
696680bool PeerConnection::AddStream (MediaStreamInterface* local_stream) {
697681 RTC_DCHECK_RUN_ON (signaling_thread ());
698682 RTC_CHECK (!IsUnifiedPlan ()) << " AddStream is not available with Unified Plan "
699683 " SdpSemantics. Please use AddTrack instead." ;
700684 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);
730686}
731687
732688void PeerConnection::RemoveStream (MediaStreamInterface* local_stream) {
@@ -735,27 +691,7 @@ void PeerConnection::RemoveStream(MediaStreamInterface* local_stream) {
735691 " Plan SdpSemantics. Please use RemoveTrack "
736692 " instead." ;
737693 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);
759695}
760696
761697RTCErrorOr<rtc::scoped_refptr<RtpSenderInterface>> PeerConnection::AddTrack (
@@ -2027,6 +1963,7 @@ rtc::scoped_refptr<RtpReceiverInterface> PeerConnection::RemoveAndStopReceiver(
20271963
20281964void PeerConnection::AddAudioTrack (AudioTrackInterface* track,
20291965 MediaStreamInterface* stream) {
1966+ RTC_DCHECK_RUN_ON (signaling_thread ());
20301967 RTC_DCHECK (!IsClosed ());
20311968 RTC_DCHECK (track);
20321969 RTC_DCHECK (stream);
@@ -2060,6 +1997,7 @@ void PeerConnection::AddAudioTrack(AudioTrackInterface* track,
20601997// indefinitely, when we have unified plan SDP.
20611998void PeerConnection::RemoveAudioTrack (AudioTrackInterface* track,
20621999 MediaStreamInterface* stream) {
2000+ RTC_DCHECK_RUN_ON (signaling_thread ());
20632001 RTC_DCHECK (!IsClosed ());
20642002 auto sender = FindSenderForTrack (track);
20652003 if (!sender) {
@@ -2072,6 +2010,7 @@ void PeerConnection::RemoveAudioTrack(AudioTrackInterface* track,
20722010
20732011void PeerConnection::AddVideoTrack (VideoTrackInterface* track,
20742012 MediaStreamInterface* stream) {
2013+ RTC_DCHECK_RUN_ON (signaling_thread ());
20752014 RTC_DCHECK (!IsClosed ());
20762015 RTC_DCHECK (track);
20772016 RTC_DCHECK (stream);
@@ -2097,6 +2036,7 @@ void PeerConnection::AddVideoTrack(VideoTrackInterface* track,
20972036
20982037void PeerConnection::RemoveVideoTrack (VideoTrackInterface* track,
20992038 MediaStreamInterface* stream) {
2039+ RTC_DCHECK_RUN_ON (signaling_thread ());
21002040 RTC_DCHECK (!IsClosed ());
21012041 auto sender = FindSenderForTrack (track);
21022042 if (!sender) {
@@ -2262,13 +2202,13 @@ absl::optional<std::string> PeerConnection::GetDataMid() const {
22622202}
22632203
22642204void PeerConnection::OnRemoteSenderAdded (const RtpSenderInfo& sender_info,
2205+ MediaStreamInterface* stream,
22652206 cricket::MediaType media_type) {
22662207 RTC_DCHECK_RUN_ON (signaling_thread ());
22672208 RTC_LOG (LS_INFO) << " Creating " << cricket::MediaTypeToString (media_type)
22682209 << " receiver for track_id=" << sender_info.sender_id
22692210 << " and stream_id=" << sender_info.stream_id ;
22702211
2271- MediaStreamInterface* stream = remote_streams_->find (sender_info.stream_id );
22722212 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
22732213 CreateAudioReceiver (stream, sender_info);
22742214 } else if (media_type == cricket::MEDIA_TYPE_VIDEO) {
@@ -2279,14 +2219,13 @@ void PeerConnection::OnRemoteSenderAdded(const RtpSenderInfo& sender_info,
22792219}
22802220
22812221void PeerConnection::OnRemoteSenderRemoved (const RtpSenderInfo& sender_info,
2222+ MediaStreamInterface* stream,
22822223 cricket::MediaType media_type) {
22832224 RTC_DCHECK_RUN_ON (signaling_thread ());
22842225 RTC_LOG (LS_INFO) << " Removing " << cricket::MediaTypeToString (media_type)
22852226 << " receiver for track_id=" << sender_info.sender_id
22862227 << " and stream_id=" << sender_info.stream_id ;
22872228
2288- MediaStreamInterface* stream = remote_streams_->find (sender_info.stream_id );
2289-
22902229 rtc::scoped_refptr<RtpReceiverInterface> receiver;
22912230 if (media_type == cricket::MEDIA_TYPE_AUDIO) {
22922231 // When the MediaEngine audio channel is destroyed, the RemoteAudioSource
0 commit comments