浏览代码

Add auto-reconnect settings

jp9000 11 年之前
父节点
当前提交
d3e6148ae7

+ 5 - 2
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"

+ 79 - 6
obs/forms/OBSBasicSettings.ui

@@ -402,7 +402,7 @@
                    <item row="1" column="0">
                     <widget class="QLabel" name="label_19">
                      <property name="text">
-                      <string>Basic.Settings.Output.Simple.VideoBitrate</string>
+                      <string>Basic.Settings.Output.VideoBitrate</string>
                      </property>
                     </widget>
                    </item>
@@ -422,7 +422,7 @@
                    <item row="2" column="0">
                     <widget class="QLabel" name="label_20">
                      <property name="text">
-                      <string>Basic.Settings.Output.Simple.AudioBitrate</string>
+                      <string>Basic.Settings.Output.AudioBitrate</string>
                      </property>
                     </widget>
                    </item>
@@ -473,6 +473,47 @@
                      </item>
                     </widget>
                    </item>
+                   <item row="3" column="1">
+                    <widget class="QCheckBox" name="simpleOutReconnect">
+                     <property name="text">
+                      <string>Basic.Settings.Output.Reconnect</string>
+                     </property>
+                     <property name="checked">
+                      <bool>true</bool>
+                     </property>
+                    </widget>
+                   </item>
+                   <item row="4" column="1">
+                    <widget class="QSpinBox" name="simpleOutRetryDelay">
+                     <property name="maximum">
+                      <number>30</number>
+                     </property>
+                    </widget>
+                   </item>
+                   <item row="5" column="1">
+                    <widget class="QSpinBox" name="simpleOutMaxRetries">
+                     <property name="minimum">
+                      <number>1</number>
+                     </property>
+                     <property name="maximum">
+                      <number>10000</number>
+                     </property>
+                    </widget>
+                   </item>
+                   <item row="4" column="0">
+                    <widget class="QLabel" name="label_17">
+                     <property name="text">
+                      <string>Basic.Settings.Output.RetryDelay</string>
+                     </property>
+                    </widget>
+                   </item>
+                   <item row="5" column="0">
+                    <widget class="QLabel" name="label_22">
+                     <property name="text">
+                      <string>Basic.Settings.Output.MaxRetries</string>
+                     </property>
+                    </widget>
+                   </item>
                   </layout>
                  </widget>
                 </item>
@@ -1021,12 +1062,44 @@
    <slot>setCurrentIndex(int)</slot>
    <hints>
     <hint type="sourcelabel">
-     <x>250</x>
-     <y>39</y>
+     <x>586</x>
+     <y>38</y>
     </hint>
     <hint type="destinationlabel">
-     <x>250</x>
-     <y>39</y>
+     <x>401</x>
+     <y>79</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>simpleOutReconnect</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>simpleOutRetryDelay</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>422</x>
+     <y>168</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>420</x>
+     <y>188</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>simpleOutReconnect</sender>
+   <signal>clicked(bool)</signal>
+   <receiver>simpleOutMaxRetries</receiver>
+   <slot>setEnabled(bool)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>503</x>
+     <y>160</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>501</x>
+     <y>209</y>
     </hint>
    </hints>
   </connection>

+ 17 - 0
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++;
 

+ 25 - 0
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()

+ 2 - 0
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,