-
Notifications
You must be signed in to change notification settings - Fork 49
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fix RTX stops working after packet loss spike #566
Fix RTX stops working after packet loss spike #566
Conversation
@alexlapa great find! Super nice improvement! For sanity, I think we should change the impl a bit differently. It seems intuitive that the Having it prune on I would prefer you drop the pruning from both I'd also rename and change the signature of |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
See comment
And what your opinion on this?
|
@alexlapa i like it. There's some overlap with functions that can disable RTX depending on the SDP negotiation, but I think it's worth a PR. |
So i've noticed remote receivers sending PLIs too often even after minor packet loss. Debugging NACKs and RTXs showed that everything actually works fine for some time and at some point receivers start flooding SFU with NACKs for that same packets again and again and no RTXs are being sent at all which results in receiver ending up with a PLI request.
So whats going on is:
poll_packet_resend
always returningNone
because of this> 0.15
with the only option of it being fixed is if bytes transmitted sum becoming high enough which does not normally happen.So i believe that ratio recalculation is supposed to happen during the
ValueHistory::sum()
call.And here is before and after videos of how that works:
Before
before.webm
After
after.webm
On the after video tx sum drop is when SVC kicks in so ignore that.
Another thing is it would be great to be able to configure that
0.15
RTX cache drop ratio, mind if i do it in another PR?Probably as an additional argument toStreamTx::set_rtx_cache
, so it will befn set_rtx_cache(&mut self, max_packets: usize, max_age: Duration, rtx_cache_drop_ratio: Option<f32>)
withNone
completely disabling this mechanic.