What are the disadvantages of these 3 advanced network settings?

Destroy666

Member
I'm talking about these:
- "Dynamically change bitrate to manage congestion (Beta)" - well, here the obvious one is "beta" and potential unstability, I don't know how likely problems are to appear though.
- "Enable network optimizations"
- "Enable TCP pacing"

They're all disabled by default, even though random guides/videos often recommend enabling them and trying if it helps with connection issues. But what if my connection issues are rare (but possible to happen), let's say? Do these settings influence other parts of the hardware/system, such as CPU, in any significant way? Is there anything else that I'm missing and that could go wrong after enabling them? If not, why are they disabled by default?
 

koala

Active Member
It's difficult to explain if you're not looking at the code.

These optimizations are all not universal. They might help with one thing, but it's unclear if they don't worsen others. They don't work with every output type (https, rtmps). Some optimization hasn't a completely finished implementation. That doesn't mean it is unstable (crashes), but it isn't simply as universal as it should be and intended to be.
So they aren't enabled as default to be on the safe side, and let the user use them at his own risk.

What they don't do is influence CPU usage. They only subtly change the behavior how OBS sends out data.

I recommend you enable an optimization if it looks as if it could help with an existing network issue, and disable them again if the issue didn't improve.
 

Destroy666

Member
I see, thanks. So they basically just affect networking itself and depend on a bunch of factors related to it that are hard to specify any accurately?
 

koala

Active Member
They all operate on the finished encoded data stream that is about to be sent to the streaming provider. They are all about how to send this data. You might think: "Well, um, why not just call the OS function send_data() and just send the data?" It's because there are subtle things that can happen. For example, on network congestion. With congestion, you have to throw away frames that will overflow your buffer. But what frames? If you drop an I frame, you destroy any dependent P and B frames as well. So if you drop an I frame, you have to drop every dependent P and B frame as well. If you still send these P and B frames, you fill the bandwidth with nothing the client can decode. The bitrate change optimization tries to avoid this situation by reducing the bitrate the encoder will operate on - it's a feedback from the output to the encoder.
The TCP pacing optimization, as far as I understand, tries to send data at some fixed pacing. As steady as possible, not as fast as possible. This can help to avoid congestion for other applications, especially real time applications, by allowing other data packets slip between the streaming data packets. Could help fps streamers, but read the caveat in the OBS UI - not advisable if you don't have a steady and stable internet connection.

The only optimization not accurately specified is the "Network optimizations". If I look into the code, it uses a different approach of asynchronously send data from the internal data buffer. It's supposed to perform better with sending, but if it really improves what it is supposed to improve, I don't know.
 
Top