This was originally part of a response to another thread where someone was talking about having lots of difficulties streaming from Argentina due to internet constraints but I decided to post it separately as it turned out longer than expected. It's aimed at inexperienced or new streamers who have some reason for needing to stream at low bandwidth.
Streaming at really high bitrates does have the benefit of using less CPU and having higher quality, but there are two issues to take into account. One is that your internet may be really lousy and another is that the viewers that your interested in streaming to may have lousy internet as well (they may even have internet usage quotas). Keep both of these in mind because it may not be worth paying a lot of money for a really fast internet plan if the community you're interested in streaming for has really bad internet (or low usage quotas). Very low bandwidth streams are doable, but they will have lower quality, there is no way around this. The point I want to get across though is that this isn't necessarily a bad thing and everyone has different circumstances. I've seen streamers streaming fairly watchable streams as low as 450kbps that suited their purposes.
There are several things that play into whether or not your internet is capable of streaming. The first ones are kind of obvious. Is your internet stable? Does it go out from time to time? Is it slow at some times of the day? Are there other people that use your internet?.. The not as obvious ones are bandwidth, latency (ping), and packet loss. If it helps you can use this analogy to think about it.
The first thing to do is get a general idea of your actual internet situation. Here are some tools for figuring out general bandwidth, latency, and packet loss.
http://www.speedtest.net/
http://pingtest.net/
http://testmy.net/upload
When using the tests at pingtest and speedtest it may be useful to select servers near the region you're going to be streaming to. This will tell you if your internet suffers from a lot of packet loss. It also gives you a ballpark estimate on your bandwidth.
For checking the latency to a streaming site's servers it's better to either look up a list of servers and ping them manually or use a tool like the one R1CH made for twitch.tv (or the plugin Faruton made).
http://www.teamliquid.net/forum/viewmes ... _id=326034
viewtopic.php?f=11&t=3226
Once you've got a general idea of your internet situation there's a couple things to ask yourself.
Am I likely to have a lot of dropped packets?
If yes, then test with some different servers, it's possible your connection is simply not reliable enough to stream. There are methods to check this using a command line tool that comes with windows called traceroute, but it's beyond the scope of this post (you can find info with google).
Is my latency likely to be unstable (listed as jitter in tests)?
High jitter is the next thing you want to look out for. You want this to be as low as possible. Anything over 20ms to the server you should try to avoid.
Is my latency to the server somewhere reasonable? (use R1ch's tool)
You also want this to be low, but even if it's somewhat high you can still stream as long as your jitter is low.
Assuming you have already attempted streaming and have been getting problematic results. First try switching streaming servers or services based on the ping info as explained above. Then try lowering your audio bitrate, AAC performs better than MP3 at low bitrates so don't worry if you find yourself having to set your bitrate really low (I wouldn't go lower than 64kbps though). Next you should start reducing your video bitrate until you get something stable (even if it comes out looking very low quality).
Don't depend solely on numbers you received from those test sites, recall that they were just for getting a general idea. Ultimately the only way to be sure is to actually go do a test stream. OBS can stream in either VBV-RateControl mode or constant bitrate mode, the way these work is kind of complex but it may help to think of them as just "variable bitrate" and "constant bitrate". This option can be changed in the encoding section by checking or unchecking the CBR (constant bitrate) option. The variable bitrate is a little harder to use for debugging because the bitrate you give it is actually more like an "average bitrate" (despite the fact that it's labeled Max Bitrate), while streaming in VBV mode OBS may at times output at a higher bitrate and at times at a lower bitrate. How far it deviates from this average is determined by the Buffer Size. Having a high Buffer Size in VBV mode may mean that at times your bandwidth can jump too high, choke your internet, and cause dropped frames. Typically when configuring VBV mode settings in a low bandwidth environment you will set the bitrate somewhere lower than the speed that internet bandwidth tests give you (like speedtest) and your Buffer Size equal or lower than your max bitrate. So for example if bandwidth tests told me that my bandwidth was around 600kbps my audio was using 96kbps, then I would set Max Bitrate to 400kbps and Buffer Size to 350kb. CBR mode is different, you only need to worry about the Max Bitrate and OBS will try to keep the bitrate below the Max Bitrate. CBR with padding may also help with other internet stability issues you may be having (since the bandwidth doesn't jump and drop wildly).
Once you have a working network configuration you can start changing settings to try and salvage quality. Make sure to keep track of your CPU usage with the task manager or some tool and do a test after every change. The first things I'd suggest are decreasing FPS (don't go lower than 25 fps) and decreasing the output resolution (I don't recommend going lower than 640x480 or 640x360). Doing this gives the encoder less to work with and increases quality. It's better to have less frames at higher quality than more frames at lower quality, similarly with pixels. Your quality won't be as good as someone streaming at 60fps at 1080p, but it will still be watchable. After this, if your CPU usage is low enough, you can try increasing the x264 preset. Go to the advanced tab in OBS and there will be a drop down for x264 CPU preset, each preset is a collection of encoder settings that work at different speeds and use a different amount of CPU. The quicker a preset is the less CPU it uses and the lower the quality will be. The default recommended setting in OBS is veryfast, you can increase this to faster for a noticeable increase in quality. I would not recommend increasing this further because as you increase it more and more you will notice the difference in quality less and less but the CPU usage will continue climbing. In other words, it's not worth it. Next you can try changing the quality balance on the encoding tab. This setting can have better or worse effects at different values for different people depending on what they're streaming and their configuration. Try increasing it some but do a test stream after each change and have someone check it, you may have a choppy output even though your CPU usage isn't maxed out.
If after all this you still aren't satisfied with your results then there really isn't a whole lot you can do besides hoping your internet situation gets better soon.
Streaming at really high bitrates does have the benefit of using less CPU and having higher quality, but there are two issues to take into account. One is that your internet may be really lousy and another is that the viewers that your interested in streaming to may have lousy internet as well (they may even have internet usage quotas). Keep both of these in mind because it may not be worth paying a lot of money for a really fast internet plan if the community you're interested in streaming for has really bad internet (or low usage quotas). Very low bandwidth streams are doable, but they will have lower quality, there is no way around this. The point I want to get across though is that this isn't necessarily a bad thing and everyone has different circumstances. I've seen streamers streaming fairly watchable streams as low as 450kbps that suited their purposes.
There are several things that play into whether or not your internet is capable of streaming. The first ones are kind of obvious. Is your internet stable? Does it go out from time to time? Is it slow at some times of the day? Are there other people that use your internet?.. The not as obvious ones are bandwidth, latency (ping), and packet loss. If it helps you can use this analogy to think about it.
If you're driving on a highway to the streaming server, then the latency is the speed limit, the bandwidth is the number of lanes there are, and the packet loss is the number of cars that get lost or crash on the way.
The first thing to do is get a general idea of your actual internet situation. Here are some tools for figuring out general bandwidth, latency, and packet loss.
http://www.speedtest.net/
http://pingtest.net/
http://testmy.net/upload
When using the tests at pingtest and speedtest it may be useful to select servers near the region you're going to be streaming to. This will tell you if your internet suffers from a lot of packet loss. It also gives you a ballpark estimate on your bandwidth.
For checking the latency to a streaming site's servers it's better to either look up a list of servers and ping them manually or use a tool like the one R1CH made for twitch.tv (or the plugin Faruton made).
http://www.teamliquid.net/forum/viewmes ... _id=326034
viewtopic.php?f=11&t=3226
Once you've got a general idea of your internet situation there's a couple things to ask yourself.
Am I likely to have a lot of dropped packets?
If yes, then test with some different servers, it's possible your connection is simply not reliable enough to stream. There are methods to check this using a command line tool that comes with windows called traceroute, but it's beyond the scope of this post (you can find info with google).
Is my latency likely to be unstable (listed as jitter in tests)?
High jitter is the next thing you want to look out for. You want this to be as low as possible. Anything over 20ms to the server you should try to avoid.
Is my latency to the server somewhere reasonable? (use R1ch's tool)
You also want this to be low, but even if it's somewhat high you can still stream as long as your jitter is low.
Assuming you have already attempted streaming and have been getting problematic results. First try switching streaming servers or services based on the ping info as explained above. Then try lowering your audio bitrate, AAC performs better than MP3 at low bitrates so don't worry if you find yourself having to set your bitrate really low (I wouldn't go lower than 64kbps though). Next you should start reducing your video bitrate until you get something stable (even if it comes out looking very low quality).
Don't depend solely on numbers you received from those test sites, recall that they were just for getting a general idea. Ultimately the only way to be sure is to actually go do a test stream. OBS can stream in either VBV-RateControl mode or constant bitrate mode, the way these work is kind of complex but it may help to think of them as just "variable bitrate" and "constant bitrate". This option can be changed in the encoding section by checking or unchecking the CBR (constant bitrate) option. The variable bitrate is a little harder to use for debugging because the bitrate you give it is actually more like an "average bitrate" (despite the fact that it's labeled Max Bitrate), while streaming in VBV mode OBS may at times output at a higher bitrate and at times at a lower bitrate. How far it deviates from this average is determined by the Buffer Size. Having a high Buffer Size in VBV mode may mean that at times your bandwidth can jump too high, choke your internet, and cause dropped frames. Typically when configuring VBV mode settings in a low bandwidth environment you will set the bitrate somewhere lower than the speed that internet bandwidth tests give you (like speedtest) and your Buffer Size equal or lower than your max bitrate. So for example if bandwidth tests told me that my bandwidth was around 600kbps my audio was using 96kbps, then I would set Max Bitrate to 400kbps and Buffer Size to 350kb. CBR mode is different, you only need to worry about the Max Bitrate and OBS will try to keep the bitrate below the Max Bitrate. CBR with padding may also help with other internet stability issues you may be having (since the bandwidth doesn't jump and drop wildly).
Once you have a working network configuration you can start changing settings to try and salvage quality. Make sure to keep track of your CPU usage with the task manager or some tool and do a test after every change. The first things I'd suggest are decreasing FPS (don't go lower than 25 fps) and decreasing the output resolution (I don't recommend going lower than 640x480 or 640x360). Doing this gives the encoder less to work with and increases quality. It's better to have less frames at higher quality than more frames at lower quality, similarly with pixels. Your quality won't be as good as someone streaming at 60fps at 1080p, but it will still be watchable. After this, if your CPU usage is low enough, you can try increasing the x264 preset. Go to the advanced tab in OBS and there will be a drop down for x264 CPU preset, each preset is a collection of encoder settings that work at different speeds and use a different amount of CPU. The quicker a preset is the less CPU it uses and the lower the quality will be. The default recommended setting in OBS is veryfast, you can increase this to faster for a noticeable increase in quality. I would not recommend increasing this further because as you increase it more and more you will notice the difference in quality less and less but the CPU usage will continue climbing. In other words, it's not worth it. Next you can try changing the quality balance on the encoding tab. This setting can have better or worse effects at different values for different people depending on what they're streaming and their configuration. Try increasing it some but do a test stream after each change and have someone check it, you may have a choppy output even though your CPU usage isn't maxed out.
If after all this you still aren't satisfied with your results then there really isn't a whole lot you can do besides hoping your internet situation gets better soon.