Index: webrtc/pc/trackmediainfomap.cc |
diff --git a/webrtc/pc/trackmediainfomap.cc b/webrtc/pc/trackmediainfomap.cc |
index 33880b9380bcf7e7751af58b60331d68c2fb6eb7..b5c5ac6a024e6cf46ea1002f14fa900d513d782a 100644 |
--- a/webrtc/pc/trackmediainfomap.cc |
+++ b/webrtc/pc/trackmediainfomap.cc |
@@ -34,7 +34,9 @@ void GetAudioAndVideoTrackBySsrc( |
std::map<uint32_t, AudioTrackInterface*>* local_audio_track_by_ssrc, |
std::map<uint32_t, VideoTrackInterface*>* local_video_track_by_ssrc, |
std::map<uint32_t, AudioTrackInterface*>* remote_audio_track_by_ssrc, |
- std::map<uint32_t, VideoTrackInterface*>* remote_video_track_by_ssrc) { |
+ std::map<uint32_t, VideoTrackInterface*>* remote_video_track_by_ssrc, |
+ AudioTrackInterface** unsignaled_audio_track, |
+ VideoTrackInterface** unsignaled_video_track) { |
RTC_DCHECK(local_audio_track_by_ssrc->empty()); |
RTC_DCHECK(local_video_track_by_ssrc->empty()); |
RTC_DCHECK(remote_audio_track_by_ssrc->empty()); |
@@ -80,6 +82,12 @@ void GetAudioAndVideoTrackBySsrc( |
RtpParameters params = rtp_receiver->GetParameters(); |
for (const RtpEncodingParameters& encoding : params.encodings) { |
if (!encoding.ssrc) { |
+ if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
+ *unsignaled_audio_track = static_cast<AudioTrackInterface*>(track); |
+ } else { |
+ RTC_DCHECK(media_type == cricket::MEDIA_TYPE_VIDEO); |
+ *unsignaled_video_track = static_cast<VideoTrackInterface*>(track); |
+ } |
continue; |
} |
if (media_type == cricket::MEDIA_TYPE_AUDIO) { |
@@ -110,12 +118,13 @@ TrackMediaInfoMap::TrackMediaInfoMap( |
std::map<uint32_t, VideoTrackInterface*> local_video_track_by_ssrc; |
std::map<uint32_t, AudioTrackInterface*> remote_audio_track_by_ssrc; |
std::map<uint32_t, VideoTrackInterface*> remote_video_track_by_ssrc; |
- GetAudioAndVideoTrackBySsrc(rtp_senders, |
- rtp_receivers, |
- &local_audio_track_by_ssrc, |
- &local_video_track_by_ssrc, |
- &remote_audio_track_by_ssrc, |
- &remote_video_track_by_ssrc); |
+ AudioTrackInterface* unsignaled_audio_track = nullptr; |
+ VideoTrackInterface* unsignaled_video_track = nullptr; |
+ GetAudioAndVideoTrackBySsrc( |
+ rtp_senders, rtp_receivers, &local_audio_track_by_ssrc, |
+ &local_video_track_by_ssrc, &remote_audio_track_by_ssrc, |
+ &remote_video_track_by_ssrc, &unsignaled_audio_track, |
+ &unsignaled_video_track); |
if (voice_media_info_) { |
for (auto& sender_info : voice_media_info_->senders) { |
AudioTrackInterface* associated_track = |
@@ -137,6 +146,9 @@ TrackMediaInfoMap::TrackMediaInfoMap( |
RTC_DCHECK(voice_info_by_remote_track_.find(associated_track) == |
voice_info_by_remote_track_.end()); |
voice_info_by_remote_track_[associated_track] = &receiver_info; |
+ } else if (unsignaled_audio_track) { |
+ audio_track_by_receiver_info_[&receiver_info] = unsignaled_audio_track; |
+ voice_info_by_remote_track_[unsignaled_audio_track] = &receiver_info; |
} |
} |
} |
@@ -161,6 +173,9 @@ TrackMediaInfoMap::TrackMediaInfoMap( |
RTC_DCHECK(video_info_by_remote_track_.find(associated_track) == |
video_info_by_remote_track_.end()); |
video_info_by_remote_track_[associated_track] = &receiver_info; |
+ } else if (unsignaled_video_track) { |
+ video_track_by_receiver_info_[&receiver_info] = unsignaled_video_track; |
+ video_info_by_remote_track_[unsignaled_video_track] = &receiver_info; |
} |
} |
} |