Index: talk/app/webrtc/mediastreamsignaling.cc |
diff --git a/talk/app/webrtc/mediastreamsignaling.cc b/talk/app/webrtc/mediastreamsignaling.cc |
index 1f5f14fd7b55a3e6641349058f03ed1c38bfdb4a..e18180baabd8b654cd0e557cfc638b79888695f6 100644 |
--- a/talk/app/webrtc/mediastreamsignaling.cc |
+++ b/talk/app/webrtc/mediastreamsignaling.cc |
@@ -359,7 +359,8 @@ bool MediaStreamSignaling::AddLocalStream(MediaStreamInterface* local_stream) { |
(*it)->id()); |
if (track_info) { |
OnLocalTrackSeen(track_info->stream_label, track_info->track_id, |
- track_info->ssrc, cricket::MEDIA_TYPE_AUDIO); |
+ track_info->ssrc, cricket::MEDIA_TYPE_AUDIO, |
+ track_info->mid); |
} |
} |
@@ -371,7 +372,8 @@ bool MediaStreamSignaling::AddLocalStream(MediaStreamInterface* local_stream) { |
(*it)->id()); |
if (track_info) { |
OnLocalTrackSeen(track_info->stream_label, track_info->track_id, |
- track_info->ssrc, cricket::MEDIA_TYPE_VIDEO); |
+ track_info->ssrc, cricket::MEDIA_TYPE_VIDEO, |
+ track_info->mid); |
} |
} |
return true; |
@@ -471,10 +473,14 @@ void MediaStreamSignaling::OnRemoteDescriptionChanged( |
const cricket::AudioContentDescription* desc = |
static_cast<const cricket::AudioContentDescription*>( |
audio_content->description); |
- UpdateRemoteStreamsList(desc->streams(), desc->type(), new_streams); |
+ UpdateRemoteStreamsList(desc->streams(), desc->type(), audio_content->name, |
+ new_streams); |
remote_info_.default_audio_track_needed = |
MediaContentDirectionHasSend(desc->direction()) && |
desc->streams().empty(); |
+ if (remote_info_.default_audio_track_needed) { |
+ remote_info_.default_audio_mid = audio_content->name; |
+ } |
} |
// Find all video rtp streams and create corresponding remote VideoTracks |
@@ -484,10 +490,14 @@ void MediaStreamSignaling::OnRemoteDescriptionChanged( |
const cricket::VideoContentDescription* desc = |
static_cast<const cricket::VideoContentDescription*>( |
video_content->description); |
- UpdateRemoteStreamsList(desc->streams(), desc->type(), new_streams); |
+ UpdateRemoteStreamsList(desc->streams(), desc->type(), video_content->name, |
+ new_streams); |
remote_info_.default_video_track_needed = |
MediaContentDirectionHasSend(desc->direction()) && |
desc->streams().empty(); |
+ if (remote_info_.default_video_track_needed) { |
+ remote_info_.default_video_mid = video_content->name; |
+ } |
} |
// Update the DataChannels with the information from the remote peer. |
@@ -530,7 +540,8 @@ void MediaStreamSignaling::OnLocalDescriptionChanged( |
const cricket::AudioContentDescription* audio_desc = |
static_cast<const cricket::AudioContentDescription*>( |
audio_content->description); |
- UpdateLocalTracks(audio_desc->streams(), audio_desc->type()); |
+ UpdateLocalTracks(audio_desc->streams(), audio_desc->type(), |
+ audio_content->name); |
} |
const cricket::ContentInfo* video_content = |
@@ -542,7 +553,8 @@ void MediaStreamSignaling::OnLocalDescriptionChanged( |
const cricket::VideoContentDescription* video_desc = |
static_cast<const cricket::VideoContentDescription*>( |
video_content->description); |
- UpdateLocalTracks(video_desc->streams(), video_desc->type()); |
+ UpdateLocalTracks(video_desc->streams(), video_desc->type(), |
+ video_content->name); |
} |
const cricket::ContentInfo* data_content = |
@@ -587,6 +599,7 @@ void MediaStreamSignaling::OnDataChannelClose() { |
void MediaStreamSignaling::UpdateRemoteStreamsList( |
const cricket::StreamParamsVec& streams, |
cricket::MediaType media_type, |
+ const std::string& mid, |
StreamCollection* new_streams) { |
TrackInfos* current_tracks = GetRemoteTracks(media_type); |
@@ -626,8 +639,9 @@ void MediaStreamSignaling::UpdateRemoteStreamsList( |
const TrackInfo* track_info = FindTrackInfo(*current_tracks, stream_label, |
track_id); |
if (!track_info) { |
- current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc)); |
- OnRemoteTrackSeen(stream_label, track_id, it->first_ssrc(), media_type); |
+ current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc, mid)); |
+ OnRemoteTrackSeen(stream_label, track_id, it->first_ssrc(), media_type, |
+ mid); |
} |
} |
} |
@@ -635,17 +649,18 @@ void MediaStreamSignaling::UpdateRemoteStreamsList( |
void MediaStreamSignaling::OnRemoteTrackSeen(const std::string& stream_label, |
const std::string& track_id, |
uint32 ssrc, |
- cricket::MediaType media_type) { |
+ cricket::MediaType media_type, |
+ const std::string& mid) { |
MediaStreamInterface* stream = remote_streams_->find(stream_label); |
if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
AudioTrackInterface* audio_track = |
remote_stream_factory_->AddAudioTrack(stream, track_id); |
- stream_observer_->OnAddRemoteAudioTrack(stream, audio_track, ssrc); |
+ stream_observer_->OnAddRemoteAudioTrack(stream, audio_track, ssrc, mid); |
} else if (media_type == cricket::MEDIA_TYPE_VIDEO) { |
VideoTrackInterface* video_track = |
remote_stream_factory_->AddVideoTrack(stream, track_id); |
- stream_observer_->OnAddRemoteVideoTrack(stream, video_track, ssrc); |
+ stream_observer_->OnAddRemoteVideoTrack(stream, video_track, ssrc, mid); |
} else { |
ASSERT(false && "Invalid media type"); |
} |
@@ -736,17 +751,21 @@ void MediaStreamSignaling::MaybeCreateDefaultStream() { |
if (remote_info_.default_audio_track_needed && |
default_remote_stream->GetAudioTracks().size() == 0) { |
remote_audio_tracks_.push_back(TrackInfo(kDefaultStreamLabel, |
- kDefaultAudioTrackLabel, 0)); |
+ kDefaultAudioTrackLabel, 0, |
+ remote_info_.default_audio_mid)); |
OnRemoteTrackSeen(kDefaultStreamLabel, kDefaultAudioTrackLabel, 0, |
- cricket::MEDIA_TYPE_AUDIO); |
+ cricket::MEDIA_TYPE_AUDIO, |
+ remote_info_.default_audio_mid); |
} |
if (remote_info_.default_video_track_needed && |
default_remote_stream->GetVideoTracks().size() == 0) { |
remote_video_tracks_.push_back(TrackInfo(kDefaultStreamLabel, |
- kDefaultVideoTrackLabel, 0)); |
+ kDefaultVideoTrackLabel, 0, |
+ remote_info_.default_video_mid)); |
OnRemoteTrackSeen(kDefaultStreamLabel, kDefaultVideoTrackLabel, 0, |
- cricket::MEDIA_TYPE_VIDEO); |
+ cricket::MEDIA_TYPE_VIDEO, |
+ remote_info_.default_video_mid); |
} |
if (default_created) { |
stream_observer_->OnAddRemoteStream(default_remote_stream); |
@@ -774,7 +793,8 @@ MediaStreamSignaling::TrackInfos* MediaStreamSignaling::GetLocalTracks( |
void MediaStreamSignaling::UpdateLocalTracks( |
const std::vector<cricket::StreamParams>& streams, |
- cricket::MediaType media_type) { |
+ cricket::MediaType media_type, |
+ const std::string& mid) { |
TrackInfos* current_tracks = GetLocalTracks(media_type); |
// Find removed tracks. Ie tracks where the track id, stream label or ssrc |
@@ -806,18 +826,18 @@ void MediaStreamSignaling::UpdateLocalTracks( |
stream_label, |
track_id); |
if (!track_info) { |
- current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc)); |
- OnLocalTrackSeen(stream_label, track_id, it->first_ssrc(), |
- media_type); |
+ current_tracks->push_back(TrackInfo(stream_label, track_id, ssrc, mid)); |
+ OnLocalTrackSeen(stream_label, track_id, it->first_ssrc(), media_type, |
+ mid); |
} |
} |
} |
-void MediaStreamSignaling::OnLocalTrackSeen( |
- const std::string& stream_label, |
- const std::string& track_id, |
- uint32 ssrc, |
- cricket::MediaType media_type) { |
+void MediaStreamSignaling::OnLocalTrackSeen(const std::string& stream_label, |
+ const std::string& track_id, |
+ uint32 ssrc, |
+ cricket::MediaType media_type, |
+ const std::string& mid) { |
MediaStreamInterface* stream = local_streams_->find(stream_label); |
if (!stream) { |
LOG(LS_WARNING) << "An unknown local MediaStream with label " |
@@ -832,7 +852,7 @@ void MediaStreamSignaling::OnLocalTrackSeen( |
<< track_id << " has been configured."; |
return; |
} |
- stream_observer_->OnAddLocalAudioTrack(stream, audio_track, ssrc); |
+ stream_observer_->OnAddLocalAudioTrack(stream, audio_track, ssrc, mid); |
} else if (media_type == cricket::MEDIA_TYPE_VIDEO) { |
VideoTrackInterface* video_track = stream->FindVideoTrack(track_id); |
if (!video_track) { |
@@ -840,7 +860,7 @@ void MediaStreamSignaling::OnLocalTrackSeen( |
<< track_id << " has been configured."; |
return; |
} |
- stream_observer_->OnAddLocalVideoTrack(stream, video_track, ssrc); |
+ stream_observer_->OnAddLocalVideoTrack(stream, video_track, ssrc, mid); |
} else { |
ASSERT(false && "Invalid media type"); |
} |