Problem using SimulcastConsumer on piped transports

I see the bug!!!

In PipeConsumer::GetRtcp():

if (static_cast<float>((now - this->lastRtcpSentTime) * 1.15) < this->maxRtcpInterval)
  return;

// do stuff

this->lastRtcpSentTime = now;

Since the Transport calls this method in a loop for each stream in the consumer (there are 3 in this Pipeconsumer) just the first one is used. The others are ignored because the condition does not match.

2 Likes

Why using such limitation?

XxxxConsumer::GetRtcp() is called by the Transport.cpp when the RTCP timer of the transport expires. However the Consumer has this in the constructor:

// Set the RTCP report generation interval.
if (this->kind == RTC::Media::Kind::AUDIO)
	this->maxRtcpInterval = RTC::RTCP::MaxAudioIntervalMs;
else
	this->maxRtcpInterval = RTC::RTCP::MaxVideoIntervalMs;

BTW fixed in v3 branch and released in 3.1.7. So many thanks!

2 Likes

Thanks!

1 Like

Good catch @ibc! Thanks a lot for the report @vpalmisano!