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,