diff --git a/media/engine/webrtc_voice_engine.cc b/media/engine/webrtc_voice_engine.cc index 81c517ab31..be1f3a778a 100644 --- a/media/engine/webrtc_voice_engine.cc +++ b/media/engine/webrtc_voice_engine.cc @@ -1877,7 +1877,7 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) { if (role() == MediaChannel::Role::kBoth) { // In legacy kBoth mode, the MediaChannel takes the responsibility for // telling the receiver about the local SSRC. - // In kSend mode, this is the caller's responsibility. + // In kSend mode, this happens via a callback. // At this point the stream's local SSRC has been updated. If it is the // first send stream, make sure that all the receive streams are updated @@ -1888,6 +1888,12 @@ bool WebRtcVoiceMediaChannel::AddSendStream(const StreamParams& sp) { call_->OnLocalSsrcUpdated(kv.second->stream(), ssrc); } } + } else if (ssrc_list_changed_callback_) { + std::set ssrcs_in_use; + for (auto it : send_streams_) { + ssrcs_in_use.insert(it.first); + } + ssrc_list_changed_callback_(ssrcs_in_use); } send_streams_[ssrc]->SetSend(send_); diff --git a/pc/peer_connection_mediachannel_split_unittest.cc b/pc/peer_connection_mediachannel_split_unittest.cc index a6b9640269..97e5ecdc40 100644 --- a/pc/peer_connection_mediachannel_split_unittest.cc +++ b/pc/peer_connection_mediachannel_split_unittest.cc @@ -173,6 +173,32 @@ TEST_P(PeerConnectionMediaChannelSplitTest, VideoPacketLossCausesNack) { EXPECT_TRUE_WAIT(NacksReceivedCount(*caller()) > 0, kDefaultTimeout); } +// Test that we can get capture start ntp time. +TEST_P(PeerConnectionMediaChannelSplitTest, + GetCaptureStartNtpTimeWithOldStatsApi) { + ASSERT_TRUE(CreatePeerConnectionWrappers()); + ConnectFakeSignaling(); + caller()->AddAudioTrack(); + + callee()->AddAudioTrack(); + + // Do offer/answer, wait for the callee to receive some frames. + caller()->CreateAndSetAndSignalOffer(); + ASSERT_TRUE_WAIT(SignalingStateStable(), kDefaultTimeout); + + // Get the remote audio track created on the receiver, so they can be used as + // GetStats filters. + auto receivers = callee()->pc()->GetReceivers(); + ASSERT_EQ(1u, receivers.size()); + auto remote_audio_track = receivers[0]->track(); + + // Get the audio output level stats. Note that the level is not available + // until an RTCP packet has been received. + EXPECT_TRUE_WAIT(callee()->OldGetStatsForTrack(remote_audio_track.get()) + ->CaptureStartNtpTime() > 0, + 2 * kMaxWaitForFramesMs); +} + INSTANTIATE_TEST_SUITE_P(PeerConnectionMediaChannelSplitTest, PeerConnectionMediaChannelSplitTest, Values("WebRTC-SplitMediaChannel/Disabled/",