Преглед на файлове

Temporary fix to allow file output

jp9000 преди 11 години
родител
ревизия
1388b749c9
променени са 2 файла, в които са добавени 53 реда и са изтрити 44 реда
  1. 49 44
      obs/window-basic-main.cpp
  2. 4 0
      obs/window-basic-main.hpp

+ 49 - 44
obs/window-basic-main.cpp

@@ -811,6 +811,51 @@ static void OBSOutputStop(void *data, calldata_t params)
 			Q_ARG(int, code));
 }
 
+void OBSBasic::TempFileOutput(const char *path, int vBitrate, int aBitrate)
+{
+	obs_data_t data = obs_data_create();
+	obs_data_setstring(data, "filename", path);
+	obs_data_setint(data, "audio_bitrate", aBitrate);
+	obs_data_setint(data, "video_bitrate", vBitrate);
+
+	outputTest = obs_output_create("ffmpeg_output", "test", data);
+	obs_data_release(data);
+}
+
+void OBSBasic::TempStreamOutput(const char *url, const char *key,
+		int vBitrate, int aBitrate)
+{
+	obs_data_t aac_settings    = obs_data_create();
+	obs_data_t x264_settings   = obs_data_create();
+	obs_data_t output_settings = obs_data_create();
+	stringstream ss;
+
+	ss << "filler=1:crf=0:bitrate=" << vBitrate;
+
+	obs_data_setint(aac_settings, "bitrate", aBitrate);
+
+	obs_data_setint(x264_settings, "bitrate", vBitrate);
+	obs_data_setint(x264_settings, "buffer_size", vBitrate);
+	obs_data_setint(x264_settings, "keyint_sec", 2);
+	obs_data_setstring(x264_settings, "x264opts", ss.str().c_str());
+
+	obs_data_setstring(output_settings, "path", url);
+	obs_data_setstring(output_settings, "key", key);
+
+	aac  = obs_audio_encoder_create("ffmpeg_aac", "blabla1",
+			aac_settings, obs_audio());
+	x264 = obs_video_encoder_create("obs_x264", "blabla2",
+			x264_settings, obs_video());
+	outputTest = obs_output_create("rtmp_output", "test", output_settings);
+
+	obs_output_set_video_encoder(outputTest, x264);
+	obs_output_set_audio_encoder(outputTest, aac);
+
+	obs_data_release(aac_settings);
+	obs_data_release(x264_settings);
+	obs_data_release(output_settings);
+}
+
 /* TODO: lots of temporary code */
 void OBSBasic::on_streamButton_clicked()
 {
@@ -836,50 +881,10 @@ void OBSBasic::on_streamButton_clicked()
 		aac        = nullptr;
 		x264       = nullptr;
 
-#if 0
-		string fullURL = url;
-		if (key && *key)
-			fullURL = fullURL + "/" + key;
-
-		obs_data_t data = obs_data_create();
-		obs_data_setstring(data, "filename", fullURL.c_str());
-		obs_data_setint(data, "audio_bitrate", aBitrate);
-		obs_data_setint(data, "video_bitrate", vBitrate);
-
-		outputTest = obs_output_create("ffmpeg_output", "test", data);
-		obs_data_release(data);
-#else
-		obs_data_t aac_settings    = obs_data_create();
-		obs_data_t x264_settings   = obs_data_create();
-		obs_data_t output_settings = obs_data_create();
-		stringstream ss;
-
-		ss << "filler=1:crf=0:bitrate=" << vBitrate;
-
-		obs_data_setint(aac_settings, "bitrate", aBitrate);
-
-		obs_data_setint(x264_settings, "bitrate", vBitrate);
-		obs_data_setint(x264_settings, "buffer_size", vBitrate);
-		obs_data_setint(x264_settings, "keyint_sec", 2);
-		obs_data_setstring(x264_settings, "x264opts", ss.str().c_str());
-
-		obs_data_setstring(output_settings, "path", url);
-		obs_data_setstring(output_settings, "key", key);
-
-		aac  = obs_audio_encoder_create("ffmpeg_aac", "blabla1",
-				aac_settings, obs_audio());
-		x264 = obs_video_encoder_create("obs_x264", "blabla2",
-				x264_settings, obs_video());
-		outputTest = obs_output_create("rtmp_output", "test",
-				output_settings);
-
-		obs_output_set_video_encoder(outputTest, x264);
-		obs_output_set_audio_encoder(outputTest, aac);
-
-		obs_data_release(aac_settings);
-		obs_data_release(x264_settings);
-		obs_data_release(output_settings);
-#endif
+		if (strstr(url, "rtmp://") != NULL)
+			TempStreamOutput(url, key, vBitrate, aBitrate);
+		else
+			TempFileOutput(url, vBitrate, aBitrate);
 
 		if (!outputTest) {
 			OutputStop(OBS_OUTPUT_FAIL);

+ 4 - 0
obs/window-basic-main.hpp

@@ -62,6 +62,10 @@ private:
 	void UpdateSources(OBSScene scene);
 	void InsertSceneItem(obs_sceneitem_t item);
 
+	void TempFileOutput(const char *path, int vBitrate, int aBitrate);
+	void TempStreamOutput(const char *url, const char *key,
+			int vBitrate, int aBitrate);
+
 public slots:
 	void OutputStart();
 	void OutputStop(int errorcode);