UI: Add dynamic bitrate support to the UI

Adds dynamic bitrate support (marked as beta) to the advanced settings
for now.
This commit is contained in:
jp9000 2019-08-15 08:50:09 -07:00
parent aa4d1d0cd1
commit 8ee0480138
4 changed files with 31 additions and 7 deletions

View File

@ -675,6 +675,9 @@ Basic.Settings.Output.Encoder="Encoder"
Basic.Settings.Output.SelectDirectory="Select Recording Directory"
Basic.Settings.Output.SelectFile="Select Recording File"
Basic.Settings.Output.EnforceBitrate="Enforce streaming service bitrate limits"
Basic.Settings.Output.DynamicBitrate="Dynamically change bitrate to manage congestion"
Basic.Settings.Output.DynamicBitrate.Beta="Dynamically change bitrate to manage congestion (Beta)"
Basic.Settings.Output.DynamicBitrate.TT="Instead of dropping frames to reduce congestion, dynamically changes bitrate on the fly. Note that this can increase delay to viewers if there is significant sudden congestion. When the bitrate drops, it can take up to a few minutes to restore."
Basic.Settings.Output.Mode="Output Mode"
Basic.Settings.Output.Mode.Simple="Simple"
Basic.Settings.Output.Mode.Adv="Advanced"

View File

@ -152,7 +152,7 @@
<x>0</x>
<y>0</y>
<width>803</width>
<height>954</height>
<height>977</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_19">
@ -4443,9 +4443,9 @@
<property name="geometry">
<rect>
<x>0</x>
<y>-114</y>
<y>0</y>
<width>803</width>
<height>761</height>
<height>781</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_23">
@ -5072,14 +5072,14 @@
<item row="0" column="1">
<widget class="QComboBox" name="bindToIP"/>
</item>
<item row="1" column="1">
<item row="2" column="1">
<widget class="QCheckBox" name="enableNewSocketLoop">
<property name="text">
<string>Basic.Settings.Advanced.Network.EnableNewSocketLoop</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="3" column="1">
<widget class="QCheckBox" name="enableLowLatencyMode">
<property name="enabled">
<bool>false</bool>
@ -5089,7 +5089,7 @@
</property>
</widget>
</item>
<item row="1" column="0">
<item row="2" column="0">
<spacer name="horizontalSpacer_7">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@ -5097,11 +5097,21 @@
<property name="sizeHint" stdset="0">
<size>
<width>170</width>
<height>20</height>
<height>1</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="dynBitrate">
<property name="toolTip">
<string>Basic.Settings.Output.DynamicBitrate.TT</string>
</property>
<property name="text">
<string>Basic.Settings.Output.DynamicBitrate.Beta</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@ -784,6 +784,8 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
"NewSocketLoopEnable");
bool enableLowLatencyMode =
config_get_bool(main->Config(), "Output", "LowLatencyEnable");
bool enableDynBitrate =
config_get_bool(main->Config(), "Output", "DynamicBitrate");
obs_data_t *settings = obs_data_create();
obs_data_set_string(settings, "bind_ip", bindIP);
@ -791,6 +793,7 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
enableNewSocketLoop);
obs_data_set_bool(settings, "low_latency_mode_enabled",
enableLowLatencyMode);
obs_data_set_bool(settings, "dyn_bitrate", enableDynBitrate);
obs_output_update(streamOutput, settings);
obs_data_release(settings);
@ -1576,6 +1579,8 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
"NewSocketLoopEnable");
bool enableLowLatencyMode =
config_get_bool(main->Config(), "Output", "LowLatencyEnable");
bool enableDynBitrate =
config_get_bool(main->Config(), "Output", "DynamicBitrate");
obs_data_t *settings = obs_data_create();
obs_data_set_string(settings, "bind_ip", bindIP);
@ -1583,6 +1588,7 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
enableNewSocketLoop);
obs_data_set_bool(settings, "low_latency_mode_enabled",
enableLowLatencyMode);
obs_data_set_bool(settings, "dyn_bitrate", enableDynBitrate);
obs_output_update(streamOutput, settings);
obs_data_release(settings);

View File

@ -466,6 +466,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->enableLowLatencyMode, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->hotkeyFocusType, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->autoRemux, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->dynBitrate, CHECK_CHANGED, ADV_CHANGED);
/* clang-format on */
#define ADD_HOTKEY_FOCUS_TYPE(s) \
@ -2264,6 +2265,8 @@ void OBSBasicSettings::LoadAdvancedSettings()
bool autoRemux = config_get_bool(main->Config(), "Video", "AutoRemux");
const char *hotkeyFocusType = config_get_string(
App()->GlobalConfig(), "General", "HotkeyFocusType");
bool dynBitrate =
config_get_bool(main->Config(), "Output", "DynamicBitrate");
loading = true;
@ -2291,6 +2294,7 @@ void OBSBasicSettings::LoadAdvancedSettings()
ui->streamDelayPreserve->setChecked(preserveDelay);
ui->streamDelayEnable->setChecked(enableDelay);
ui->autoRemux->setChecked(autoRemux);
ui->dynBitrate->setChecked(dynBitrate);
SetComboByName(ui->colorFormat, videoColorFormat);
SetComboByName(ui->colorSpace, videoColorSpace);
@ -2987,6 +2991,7 @@ void OBSBasicSettings::SaveAdvancedSettings()
SaveSpinBox(ui->reconnectMaxRetries, "Output", "MaxRetries");
SaveComboData(ui->bindToIP, "Output", "BindIP");
SaveCheckBox(ui->autoRemux, "Video", "AutoRemux");
SaveCheckBox(ui->dynBitrate, "Output", "DynamicBitrate");
#if defined(_WIN32) || defined(__APPLE__) || HAVE_PULSEAUDIO
QString newDevice = ui->monitoringDevice->currentData().toString();