diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index 5a9cc0d62..2b6b1fc12 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -957,6 +957,8 @@ Basic.Settings.Stream.Recommended.MaxVideoBitrate="Maximum Video Bitrate: %1 kbp
Basic.Settings.Stream.Recommended.MaxAudioBitrate="Maximum Audio Bitrate: %1 kbps"
Basic.Settings.Stream.Recommended.MaxResolution="Maximum Resolution: %1"
Basic.Settings.Stream.Recommended.MaxFPS="Maximum FPS: %1"
+Basic.Settings.Stream.SpecifyCustomServer="Specify Custom Server..."
+Basic.Settings.Stream.ServiceCustomServer="Custom Server"
# basic mode 'output' settings
Basic.Settings.Output="Output"
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index cf0e4fbd5..504c48ed9 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -1271,6 +1271,19 @@
-
+
+
+ Basic.Settings.Stream.ServiceCustomServer
+
+
+ serviceCustomServer
+
+
+
+ -
+
+
+ -
Basic.AutoConfig.StreamPage.StreamKey
@@ -1283,7 +1296,7 @@
- -
+
-
@@ -1334,7 +1347,7 @@
- -
+
-
Qt::Horizontal
@@ -1347,7 +1360,7 @@
- -
+
-
8
@@ -1390,21 +1403,21 @@
- -
+
-
Basic.Settings.Stream.BandwidthTestMode
- -
+
-
Basic.Settings.Stream.Custom.UseAuthentication
- -
+
-
Basic.Settings.Stream.Custom.Username
@@ -1414,10 +1427,10 @@
- -
+
-
- -
+
-
Basic.Settings.Stream.Custom.Password
@@ -1427,7 +1440,7 @@
- -
+
-
@@ -1459,10 +1472,10 @@
- -
+
-
- -
+
-
Basic.Settings.Stream.TTVAddon
@@ -1472,14 +1485,14 @@
- -
+
-
Basic.Settings.Stream.IgnoreRecommended
- -
+
-
@@ -1492,7 +1505,7 @@
- -
+
-
-
@@ -1516,14 +1529,14 @@
- -
+
-
Basic.AutoConfig.StreamPage.ConnectedAccount
- -
+
-
-
diff --git a/UI/window-basic-settings-stream.cpp b/UI/window-basic-settings-stream.cpp
index e28c5b189..04cc3a3bb 100644
--- a/UI/window-basic-settings-stream.cpp
+++ b/UI/window-basic-settings-stream.cpp
@@ -1,5 +1,6 @@
#include
#include
+#include
#include "window-basic-settings.hpp"
#include "obs-frontend-api.h"
@@ -20,6 +21,13 @@
#include "youtube-api-wrappers.hpp"
#endif
+static const QUuid &CustomServerUUID()
+{
+ static const QUuid uuid = QUuid::fromString(
+ QT_UTF8("{241da255-70f2-4bbb-bef7-509695bf8e65}"));
+ return uuid;
+}
+
struct QCef;
struct QCefCookieManager;
@@ -108,6 +116,8 @@ void OBSBasicSettings::LoadStream1Settings()
const char *service = obs_data_get_string(settings, "service");
const char *server = obs_data_get_string(settings, "server");
const char *key = obs_data_get_string(settings, "key");
+ bool use_custom_server =
+ obs_data_get_bool(settings, "using_custom_server");
protocol = QT_UTF8(obs_service_get_protocol(service_obj));
const char *bearer_token =
obs_data_get_string(settings, "bearer_token");
@@ -148,7 +158,13 @@ void OBSBasicSettings::LoadStream1Settings()
UpdateServerList();
if (is_rtmp_common) {
- int idx = ui->server->findData(server);
+ int idx = -1;
+ if (use_custom_server) {
+ idx = ui->server->findData(CustomServerUUID());
+ } else {
+ idx = ui->server->findData(QString::fromUtf8(server));
+ }
+
if (idx == -1) {
if (server && *server)
ui->server->insertItem(0, server, server);
@@ -157,6 +173,9 @@ void OBSBasicSettings::LoadStream1Settings()
ui->server->setCurrentIndex(idx);
}
+ if (use_custom_server)
+ ui->serviceCustomServer->setText(server);
+
if (is_whip)
ui->key->setText(bearer_token);
else
@@ -223,9 +242,19 @@ void OBSBasicSettings::SaveStream1Settings()
obs_data_set_string(settings, "service",
QT_TO_UTF8(ui->service->currentText()));
obs_data_set_string(settings, "protocol", QT_TO_UTF8(protocol));
- obs_data_set_string(
- settings, "server",
- QT_TO_UTF8(ui->server->currentData().toString()));
+ if (ui->server->currentData() == CustomServerUUID()) {
+ obs_data_set_bool(settings, "using_custom_server",
+ true);
+
+ obs_data_set_string(
+ settings, "server",
+ QT_TO_UTF8(ui->serviceCustomServer->text()));
+ } else {
+ obs_data_set_string(
+ settings, "server",
+ QT_TO_UTF8(
+ ui->server->currentData().toString()));
+ }
} else {
obs_data_set_string(
settings, "server",
@@ -675,6 +704,12 @@ void OBSBasicSettings::UpdateServerList()
ui->server->addItem(name, server);
}
+ if (serviceName == "Twitch") {
+ ui->server->addItem(
+ QTStr("Basic.Settings.Stream.SpecifyCustomServer"),
+ CustomServerUUID());
+ }
+
obs_properties_destroy(props);
}
@@ -887,6 +922,19 @@ void OBSBasicSettings::on_useAuth_toggled()
ui->authPwWidget->setVisible(use_auth);
}
+bool OBSBasicSettings::IsCustomServer()
+{
+ return ui->server->currentData() == QVariant{CustomServerUUID()};
+}
+
+void OBSBasicSettings::on_server_currentIndexChanged(int /*index*/)
+{
+ auto server_is_custom = IsCustomServer();
+
+ ui->serviceCustomServerLabel->setVisible(server_is_custom);
+ ui->serviceCustomServer->setVisible(server_is_custom);
+}
+
void OBSBasicSettings::UpdateVodTrackSetting()
{
bool enableForCustomServer = config_get_bool(
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index 3a719d130..775d13098 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -411,6 +411,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->service, COMBO_CHANGED, STREAM1_CHANGED);
HookWidget(ui->server, COMBO_CHANGED, STREAM1_CHANGED);
HookWidget(ui->customServer, EDIT_CHANGED, STREAM1_CHANGED);
+ HookWidget(ui->serviceCustomServer, EDIT_CHANGED, STREAM1_CHANGED);
HookWidget(ui->key, EDIT_CHANGED, STREAM1_CHANGED);
HookWidget(ui->bandwidthTestEnable, CHECK_CHANGED, STREAM1_CHANGED);
HookWidget(ui->twitchAddonDropdown, COMBO_CHANGED, STREAM1_CHANGED);
diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp
index e15c25934..51830c63f 100644
--- a/UI/window-basic-settings.hpp
+++ b/UI/window-basic-settings.hpp
@@ -296,6 +296,8 @@ private:
/* Appearance */
void InitAppearancePage();
+ bool IsCustomServer();
+
private slots:
void RecreateOutputResolutionWidget();
bool UpdateResFPSLimits();
@@ -306,6 +308,7 @@ private slots:
void on_disconnectAccount_clicked();
void on_useStreamKey_clicked();
void on_useAuth_toggled();
+ void on_server_currentIndexChanged(int index);
void on_hotkeyFilterReset_clicked();
void on_hotkeyFilterSearch_textChanged(const QString text);