diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index de77d5f27..47536c92f 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -1241,6 +1241,7 @@ Basic.Settings.Advanced.StreamDelay.MemoryUsage="Estimated Memory Usage: %1 MB"
Basic.Settings.Advanced.Network="Network"
Basic.Settings.Advanced.Network.Disabled="The currently selected streaming protocol does not support changing network settings."
Basic.Settings.Advanced.Network.BindToIP="Bind to IP"
+Basic.Settings.Advanced.Network.IPFamily="IP Family"
Basic.Settings.Advanced.Network.EnableNewSocketLoop="Enable network optimizations"
Basic.Settings.Advanced.Network.EnableLowLatencyMode="Enable TCP pacing"
Basic.Settings.Advanced.Network.TCPPacing.Tooltip="Attempts to make RTMP output friendlier to other latency sensitive applications on the network by regulating the rate of transmission.\nIt may increase the risk of dropped frames on unstable connections."
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index bcd7c3657..73084dd25 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -7575,14 +7575,27 @@
-
- -
+
-
+
+
+ Basic.Settings.Advanced.Network.IPFamily
+
+
+ ipFamily
+
+
+
+ -
+
+
+ -
Basic.Settings.Advanced.Network.EnableNewSocketLoop
- -
+
-
false
@@ -7592,7 +7605,7 @@
- -
+
-
Qt::Horizontal
@@ -7605,7 +7618,7 @@
- -
+
-
Basic.Settings.Output.DynamicBitrate.TT
diff --git a/UI/window-basic-auto-config-test.cpp b/UI/window-basic-auto-config-test.cpp
index 44daae456..97c46db40 100644
--- a/UI/window-basic-auto-config-test.cpp
+++ b/UI/window-basic-auto-config-test.cpp
@@ -249,6 +249,10 @@ void AutoConfigTestPage::TestBandwidthThread()
config_get_string(main->Config(), "Output", "BindIP");
obs_data_set_string(output_settings, "bind_ip", bind_ip);
+ const char *ip_family =
+ config_get_string(main->Config(), "Output", "IPFamily");
+ obs_data_set_string(output_settings, "ip_family", ip_family);
+
/* -----------------------------------*/
/* determine which servers to test */
diff --git a/UI/window-basic-main-outputs.cpp b/UI/window-basic-main-outputs.cpp
index f7e62edc2..f576a7bb1 100644
--- a/UI/window-basic-main-outputs.cpp
+++ b/UI/window-basic-main-outputs.cpp
@@ -1198,6 +1198,8 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
config_get_bool(main->Config(), "Output", "DelayPreserve");
const char *bindIP =
config_get_string(main->Config(), "Output", "BindIP");
+ const char *ipFamily =
+ config_get_string(main->Config(), "Output", "IPFamily");
#ifdef _WIN32
bool enableNewSocketLoop = config_get_bool(main->Config(), "Output",
"NewSocketLoopEnable");
@@ -1209,6 +1211,7 @@ bool SimpleOutput::StartStreaming(obs_service_t *service)
OBSDataAutoRelease settings = obs_data_create();
obs_data_set_string(settings, "bind_ip", bindIP);
+ obs_data_set_string(settings, "ip_family", ipFamily);
#ifdef _WIN32
obs_data_set_bool(settings, "new_socket_loop_enabled",
enableNewSocketLoop);
@@ -2150,6 +2153,8 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
config_get_bool(main->Config(), "Output", "DelayPreserve");
const char *bindIP =
config_get_string(main->Config(), "Output", "BindIP");
+ const char *ipFamily =
+ config_get_string(main->Config(), "Output", "IPFamily");
#ifdef _WIN32
bool enableNewSocketLoop = config_get_bool(main->Config(), "Output",
"NewSocketLoopEnable");
@@ -2161,6 +2166,7 @@ bool AdvancedOutput::StartStreaming(obs_service_t *service)
OBSDataAutoRelease settings = obs_data_create();
obs_data_set_string(settings, "bind_ip", bindIP);
+ obs_data_set_string(settings, "ip_family", ipFamily);
#ifdef _WIN32
obs_data_set_bool(settings, "new_socket_loop_enabled",
enableNewSocketLoop);
diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp
index 80ff75d65..7ae63318f 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -1674,6 +1674,8 @@ bool OBSBasic::InitBasicConfigDefaults()
config_set_default_uint(basicConfig, "Output", "MaxRetries", 25);
config_set_default_string(basicConfig, "Output", "BindIP", "default");
+ config_set_default_string(basicConfig, "Output", "IPFamily",
+ "IPv4+IPv6");
config_set_default_bool(basicConfig, "Output", "NewSocketLoopEnable",
false);
config_set_default_bool(basicConfig, "Output", "LowLatencyEnable",
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index f29e92e50..13651e81d 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -628,6 +628,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->processPriority, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->confirmOnExit, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->bindToIP, COMBO_CHANGED, ADV_CHANGED);
+ HookWidget(ui->ipFamily, COMBO_CHANGED, ADV_CHANGED);
HookWidget(ui->enableNewSocketLoop, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->enableLowLatencyMode, CHECK_CHANGED, ADV_CHANGED);
HookWidget(ui->hotkeyFocusType, COMBO_CHANGED, ADV_CHANGED);
@@ -899,6 +900,17 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
ui->bindToIP->addItem(QT_UTF8(name), val);
}
+ // Add IP Family options
+ p = obs_properties_get(ppts, "ip_family");
+
+ count = obs_property_list_item_count(p);
+ for (size_t i = 0; i < count; i++) {
+ const char *name = obs_property_list_item_name(p, i);
+ const char *val = obs_property_list_item_string(p, i);
+
+ ui->ipFamily->addItem(QT_UTF8(name), val);
+ }
+
obs_properties_destroy(ppts);
InitStreamPage();
@@ -2897,7 +2909,8 @@ void OBSBasicSettings::LoadAdvancedSettings()
App()->GlobalConfig(), "General", "HotkeyFocusType");
bool dynBitrate =
config_get_bool(main->Config(), "Output", "DynamicBitrate");
-
+ const char *ipFamily =
+ config_get_string(main->Config(), "Output", "IPFamily");
bool confirmOnExit =
config_get_bool(GetGlobalConfig(), "General", "ConfirmOnExit");
ui->confirmOnExit->setChecked(confirmOnExit);
@@ -2936,6 +2949,7 @@ void OBSBasicSettings::LoadAdvancedSettings()
ui->sdrWhiteLevel->setValue(sdrWhiteLevel);
ui->hdrNominalPeakLevel->setValue(hdrNominalPeakLevel);
+ SetComboByValue(ui->ipFamily, ipFamily);
if (!SetComboByValue(ui->bindToIP, bindIP))
SetInvalidValue(ui->bindToIP, bindIP, bindIP);
@@ -3669,6 +3683,7 @@ void OBSBasicSettings::SaveAdvancedSettings()
SaveSpinBox(ui->reconnectRetryDelay, "Output", "RetryDelay");
SaveSpinBox(ui->reconnectMaxRetries, "Output", "MaxRetries");
SaveComboData(ui->bindToIP, "Output", "BindIP");
+ SaveComboData(ui->ipFamily, "Output", "IPFamily");
SaveCheckBox(ui->autoRemux, "Video", "AutoRemux");
SaveCheckBox(ui->dynBitrate, "Output", "DynamicBitrate");
@@ -6235,6 +6250,8 @@ void OBSBasicSettings::UpdateAdvNetworkGroup()
ui->bindToIPLabel->setVisible(enabled);
ui->bindToIP->setVisible(enabled);
ui->dynBitrate->setVisible(enabled);
+ ui->ipFamilyLabel->setVisible(enabled);
+ ui->ipFamily->setVisible(enabled);
#ifdef _WIN32
ui->enableNewSocketLoop->setVisible(enabled);
ui->enableLowLatencyMode->setVisible(enabled);