diff --git a/build/data/obs-studio/locale/en.txt b/build/data/obs-studio/locale/en.txt
index decf1911d3a447e917afc85ba2248b2858bc05c1..ce500756939085c0cdb6a7632ed81f2c2d63e774 100644
--- a/build/data/obs-studio/locale/en.txt
+++ b/build/data/obs-studio/locale/en.txt
@@ -170,8 +170,11 @@ Basic.Settings.Output.Mode="Output Mode"
Basic.Settings.Output.Mode.Simple="Simple (Stream and/or record)"
Basic.Settings.Output.Mode.Advanced="Advanced (Custom output type)"
Basic.Settings.Output.Simple.SavePath="FLV Recording Path"
-Basic.Settings.Output.Simple.VideoBitrate="Video Bitrate"
-Basic.Settings.output.Simple.AudioBitrate="Audio Bitrate"
+Basic.Settings.Output.VideoBitrate="Video Bitrate"
+Basic.Settings.Output.AudioBitrate="Audio Bitrate"
+Basic.Settings.Output.Reconnect="Automatically Reconnect"
+Basic.Settings.Output.RetryDelay="Retry Delay (seconds)"
+Basic.Settings.Output.MaxRetries="Maximum Retries"
# basic mode 'video' settings
Basic.Settings.Video="Video"
diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui
index 4c4df69cddf091e0424b5202a1d5c5b178984901..000426d8a057f98c5a3445bb168e151b73686ca6 100644
--- a/obs/forms/OBSBasicSettings.ui
+++ b/obs/forms/OBSBasicSettings.ui
@@ -402,7 +402,7 @@
-
- Basic.Settings.Output.Simple.VideoBitrate
+ Basic.Settings.Output.VideoBitrate
@@ -422,7 +422,7 @@
-
- Basic.Settings.Output.Simple.AudioBitrate
+ Basic.Settings.Output.AudioBitrate
@@ -473,6 +473,47 @@
+ -
+
+
+ Basic.Settings.Output.Reconnect
+
+
+ true
+
+
+
+ -
+
+
+ 30
+
+
+
+ -
+
+
+ 1
+
+
+ 10000
+
+
+
+ -
+
+
+ Basic.Settings.Output.RetryDelay
+
+
+
+ -
+
+
+ Basic.Settings.Output.MaxRetries
+
+
+
@@ -1021,12 +1062,44 @@
setCurrentIndex(int)
- 250
- 39
+ 586
+ 38
- 250
- 39
+ 401
+ 79
+
+
+
+
+ simpleOutReconnect
+ clicked(bool)
+ simpleOutRetryDelay
+ setEnabled(bool)
+
+
+ 422
+ 168
+
+
+ 420
+ 188
+
+
+
+
+ simpleOutReconnect
+ clicked(bool)
+ simpleOutMaxRetries
+ setEnabled(bool)
+
+
+ 503
+ 160
+
+
+ 501
+ 209
diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp
index 1d10183a29e38658268c8b26538d816161125004..6975394b3c2d370452bac7e3745e997be8cda4b2 100644
--- a/obs/window-basic-main.cpp
+++ b/obs/window-basic-main.cpp
@@ -391,6 +391,11 @@ bool OBSBasic::InitBasicConfigDefaults()
config_set_default_uint (basicConfig, "SimpleOutput", "VBitrate",
2500);
config_set_default_uint (basicConfig, "SimpleOutput", "ABitrate", 128);
+ config_set_default_bool (basicConfig, "SimpleOutput", "Reconnect",
+ true);
+ config_set_default_uint (basicConfig, "SimpleOutput", "RetryDelay", 2);
+ config_set_default_uint (basicConfig, "SimpleOutput", "MaxRetries",
+ 20);
config_set_default_uint (basicConfig, "Video", "BaseCX", cx);
config_set_default_uint (basicConfig, "Video", "BaseCY", cy);
@@ -1758,6 +1763,18 @@ void OBSBasic::on_streamButton_clicked()
obs_output_set_audio_encoder(streamOutput, aac);
obs_output_set_service(streamOutput, service);
+ bool reconnect = config_get_bool(basicConfig, "SimpleOutput",
+ "Reconnect");
+ int retryDelay = config_get_uint(basicConfig, "SimpleOutput",
+ "RetryDelay");
+ int maxRetries = config_get_uint(basicConfig, "SimpleOutput",
+ "MaxRetries");
+ if (!reconnect)
+ maxRetries = 0;
+
+ obs_output_set_reconnect_settings(streamOutput, retryDelay,
+ maxRetries);
+
if (obs_output_start(streamOutput)) {
activeRefs++;
diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp
index 08d46bb759e017c4c9bdab6bf42bd529baf3aa67..4b9d4d35a1d0e58ec24d5d337bbaa411eaa2a7b1 100644
--- a/obs/window-basic-settings.cpp
+++ b/obs/window-basic-settings.cpp
@@ -110,6 +110,7 @@ void OBSBasicSettings::HookWidget(QWidget *widget, const char *signal,
#define COMBO_CHANGED SIGNAL(currentIndexChanged(int))
#define EDIT_CHANGED SIGNAL(textChanged(const QString &))
#define CBEDIT_CHANGED SIGNAL(editTextChanged(const QString &))
+#define CHECK_CHANGED SIGNAL(clicked(bool))
#define SCROLL_CHANGED SIGNAL(valueChanged(int))
#define GENERAL_CHANGED SLOT(GeneralChanged())
@@ -146,6 +147,9 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->simpleOutputPath, EDIT_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutputVBitrate, SCROLL_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->simpleOutputABitrate, COMBO_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutReconnect, CHECK_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutRetryDelay, SCROLL_CHANGED, OUTPUTS_CHANGED);
+ HookWidget(ui->simpleOutMaxRetries, SCROLL_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->channelSetup, COMBO_CHANGED, AUDIO_RESTART);
HookWidget(ui->sampleRate, COMBO_CHANGED, AUDIO_RESTART);
HookWidget(ui->desktopAudioDevice1, COMBO_CHANGED, AUDIO_CHANGED);
@@ -191,6 +195,14 @@ void OBSBasicSettings::SaveComboData(QComboBox *widget, const char *section,
}
}
+void OBSBasicSettings::SaveCheckBox(QCheckBox *widget, const char *section,
+ const char *value)
+{
+ if (WidgetChanged(widget))
+ config_set_bool(main->Config(), section, value,
+ widget->isChecked());
+}
+
void OBSBasicSettings::SaveEdit(QLineEdit *widget, const char *section,
const char *value)
{
@@ -423,12 +435,22 @@ void OBSBasicSettings::LoadSimpleOutputSettings()
"VBitrate");
int audioBitrate = config_get_uint(main->Config(), "SimpleOutput",
"ABitrate");
+ bool reconnect = config_get_bool(main->Config(), "SimpleOutput",
+ "Reconnect");
+ int retryDelay = config_get_uint(main->Config(), "SimpleOutput",
+ "RetryDelay");
+ int maxRetries = config_get_uint(main->Config(), "SimpleOutput",
+ "MaxRetries");
ui->simpleOutputPath->setText(path);
ui->simpleOutputVBitrate->setValue(videoBitrate);
SetComboByName(ui->simpleOutputABitrate,
std::to_string(audioBitrate).c_str());
+
+ ui->simpleOutReconnect->setChecked(reconnect);
+ ui->simpleOutRetryDelay->setValue(retryDelay);
+ ui->simpleOutMaxRetries->setValue(maxRetries);
}
void OBSBasicSettings::LoadOutputSettings()
@@ -598,6 +620,9 @@ void OBSBasicSettings::SaveOutputSettings()
SaveSpinBox(ui->simpleOutputVBitrate, "SimpleOutput", "VBitrate");
SaveCombo(ui->simpleOutputABitrate, "SimpleOutput", "ABitrate");
SaveEdit(ui->simpleOutputPath, "SimpleOutput", "FilePath");
+ SaveCheckBox(ui->simpleOutReconnect, "SimpleOutput", "Reconnect");
+ SaveSpinBox(ui->simpleOutRetryDelay, "SimpleOutput", "RetryDelay");
+ SaveSpinBox(ui->simpleOutMaxRetries, "SimpleOutput", "MaxRetries");
}
void OBSBasicSettings::SaveAudioSettings()
diff --git a/obs/window-basic-settings.hpp b/obs/window-basic-settings.hpp
index eaf5d682ff723356f44d470b628cafe7ca774ea9..627798446e154213384e14e2c043172054374b01 100644
--- a/obs/window-basic-settings.hpp
+++ b/obs/window-basic-settings.hpp
@@ -51,6 +51,8 @@ private:
const char *value);
void SaveComboData(QComboBox *widget, const char *section,
const char *value);
+ void SaveCheckBox(QCheckBox *widget, const char *section,
+ const char *value);
void SaveEdit(QLineEdit *widget, const char *section,
const char *value);
void SaveSpinBox(QSpinBox *widget, const char *section,