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);