Bug 1591199: Fix a race where sRD(offer) could mute a track, then an RTP packet could arrive that unmutes it before negotiation completed, this time without needing to stop the conduit and send a bunch of extra RTCP BYEs. r=mjf

Differential Revision: https://phabricator.services.mozilla.com/D59521

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Byron Campen [:bwc] 2020-01-17 20:42:31 +00:00
Родитель 38683c83e0
Коммит 3a032d2e6e
1 изменённых файлов: 17 добавлений и 2 удалений

Просмотреть файл

@ -253,6 +253,8 @@ void TransceiverImpl::SetReceiveTrackMuted(bool aMuted) {
return; return;
} }
MOZ_MTLOG(ML_DEBUG, mPCHandle << "[" << mMid << "]: " << __FUNCTION__
<< " aMuted=" << aMuted);
// This sets the muted state for mReceiveTrack and all its clones. // This sets the muted state for mReceiveTrack and all its clones.
static_cast<RemoteTrackSource&>(mReceiveTrack->GetSource()).SetMuted(aMuted); static_cast<RemoteTrackSource&>(mReceiveTrack->GetSource()).SetMuted(aMuted);
} }
@ -449,6 +451,13 @@ void TransceiverImpl::SyncWithJS(dom::RTCRtpTransceiver& aJsTransceiver,
} }
} }
// If a SRD has unset the receive bit, stop the receive pipeline so incoming
// RTP does not unmute the receive track.
if (!mJsepTransceiver->mRecvTrack.GetRemoteSetSendBit() ||
!mJsepTransceiver->mRecvTrack.GetActive()) {
mReceivePipeline->Stop();
}
// mid from JSEP // mid from JSEP
if (mJsepTransceiver->IsAssociated()) { if (mJsepTransceiver->IsAssociated()) {
aJsTransceiver.SetMid( aJsTransceiver.SetMid(
@ -980,9 +989,15 @@ void TransceiverImpl::GetRtpSources(
audio_conduit->GetRtpSources(aTimeNow, outSources); audio_conduit->GetRtpSources(aTimeNow, outSources);
} }
void TransceiverImpl::OnRtcpBye() { SetReceiveTrackMuted(true); } void TransceiverImpl::OnRtcpBye() {
MOZ_MTLOG(ML_DEBUG, mPCHandle << "[" << mMid << "]: " << __FUNCTION__);
SetReceiveTrackMuted(true);
}
void TransceiverImpl::OnRtcpTimeout() { SetReceiveTrackMuted(true); } void TransceiverImpl::OnRtcpTimeout() {
MOZ_MTLOG(ML_DEBUG, mPCHandle << "[" << mMid << "]: " << __FUNCTION__);
SetReceiveTrackMuted(true);
}
void TransceiverImpl::InsertAudioLevelForContributingSource( void TransceiverImpl::InsertAudioLevelForContributingSource(
const uint32_t aSource, const int64_t aTimestamp, const uint32_t aSource, const int64_t aTimestamp,