diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index a7b091740..4ca1e4199 100644 --- a/obs/window-basic-main.cpp +++ b/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); diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index 2ea5f8504..a5fc82aa7 100644 --- a/obs/window-basic-main.hpp +++ b/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);