3333#include " util-crashmanager.h"
3434#endif
3535
36+ std::string GetFormatExt (const std::string container);
37+
3638std::vector<obs_output_t *> streamingOutput = {nullptr , nullptr };
3739
3840obs_output_t *recordingOutput = nullptr ;
@@ -1517,7 +1519,7 @@ void OBS_service::stopRecording(void)
15171519void OBS_service::updateReplayBufferOutput (bool isSimpleMode, bool useStreamEncoder)
15181520{
15191521 const char *path;
1520- const char * format;
1522+ std::string format;
15211523 const char *mux;
15221524 bool noSpace;
15231525 const char *fileNameFormat;
@@ -1549,7 +1551,7 @@ void OBS_service::updateReplayBufferOutput(bool isSimpleMode, bool useStreamEnco
15491551 rbTime = config_get_int (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecRBTime" );
15501552 rbSize = config_get_int (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecRBSize" );
15511553 }
1552-
1554+ format = GetFormatExt (format);
15531555 std::string f;
15541556 if (rbPrefix && *rbPrefix) {
15551557 f += rbPrefix;
@@ -1567,7 +1569,7 @@ void OBS_service::updateReplayBufferOutput(bool isSimpleMode, bool useStreamEnco
15671569 obs_data_t *settings = obs_data_create ();
15681570 obs_data_set_string (settings, " directory" , path);
15691571 obs_data_set_string (settings, " format" , f.c_str ());
1570- obs_data_set_string (settings, " extension" , format);
1572+ obs_data_set_string (settings, " extension" , format. c_str () );
15711573 obs_data_set_bool (settings, " allow_spaces" , !noSpace);
15721574 obs_data_set_int (settings, " max_time_sec" , rbTime);
15731575 obs_data_set_int (settings, " max_size_mb" , usingRecordingPreset ? rbSize : 0 );
@@ -1912,7 +1914,7 @@ void OBS_service::updateService(StreamServiceId serviceId)
19121914void OBS_service::updateFfmpegOutput (bool isSimpleMode, obs_output_t *output)
19131915{
19141916 const char *path;
1915- const char * format;
1917+ std::string format;
19161918 const char *mux;
19171919 bool noSpace;
19181920 const char *fileNameFormat;
@@ -1932,7 +1934,7 @@ void OBS_service::updateFfmpegOutput(bool isSimpleMode, obs_output_t *output)
19321934 overwriteIfExists = config_get_bool (ConfigManager::getInstance ().getBasic (), " Output" , " OverwriteIfExists" );
19331935 noSpace = config_get_bool (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecFileNameWithoutSpace" );
19341936 }
1935-
1937+ format = GetFormatExt (format);
19361938 std::string initialPath;
19371939 if (path != nullptr ) {
19381940 initialPath = path;
@@ -1949,15 +1951,20 @@ void OBS_service::updateFfmpegOutput(bool isSimpleMode, obs_output_t *output)
19491951 if (lastChar != ' /' && lastChar != ' \\ ' )
19501952 strPath += " /" ;
19511953
1952- if (fileNameFormat != NULL && format != NULL )
1953- strPath += GenerateSpecifiedFilename (ffmpegOutput ? " avi" : format, noSpace, fileNameFormat, 0 , 0 );
1954+ if (fileNameFormat != NULL && format. size () )
1955+ strPath += GenerateSpecifiedFilename (ffmpegOutput ? " avi" : format. c_str () , noSpace, fileNameFormat, 0 , 0 );
19541956
19551957 if (!overwriteIfExists)
19561958 FindBestFilename (strPath, noSpace);
19571959
19581960 if (strPath.size () > 0 ) {
19591961 obs_data_t *settings = obs_data_create ();
19601962 obs_data_set_string (settings, ffmpegOutput ? " url" : " path" , strPath.c_str ());
1963+ obs_data_set_string (settings, " extension" , format.c_str ());
1964+ obs_data_set_string (settings, " directory" , path);
1965+ obs_data_set_string (settings, " format" , fileNameFormat);
1966+ obs_data_set_bool (settings, " allow_spaces" , !noSpace);
1967+ obs_data_set_bool (settings, " allow_overwrite" , overwriteIfExists);
19611968
19621969 if (config_get_bool (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecSplitFile" )) {
19631970 const char *splitFileType = config_get_string (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecSplitFileType" );
@@ -1968,15 +1975,12 @@ void OBS_service::updateFfmpegOutput(bool isSimpleMode, obs_output_t *output)
19681975 obs_data_set_int (settings, " max_size_mb" ,
19691976 config_get_int (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecSplitFileSize" ));
19701977
1971- obs_data_set_string (settings, " directory" , path);
1972- obs_data_set_string (settings, " format" , fileNameFormat);
1973- obs_data_set_string (settings, " extension" , format);
1974- obs_data_set_bool (settings, " allow_spaces" , !noSpace);
1975- obs_data_set_bool (settings, " allow_overwrite" , overwriteIfExists);
19761978 obs_data_set_bool (settings, " split_file" , true );
19771979
19781980 obs_data_set_bool (settings, " reset_timestamps" ,
19791981 config_get_bool (ConfigManager::getInstance ().getBasic (), " AdvOut" , " RecSplitFileResetTimestamps" ));
1982+ } else {
1983+ obs_data_set_bool (settings, " split_file" , false );
19801984 }
19811985
19821986 obs_output_update (output, settings);
@@ -2986,3 +2990,18 @@ void OBS_service::setupVodTrack(bool isSimpleMode)
29862990 }
29872991 }
29882992}
2993+
2994+ std::string GetFormatExt (const std::string container)
2995+ {
2996+ std::string ext = container;
2997+ if (ext == " fragmented_mp4" )
2998+ ext = " mp4" ;
2999+ else if (ext == " fragmented_mov" )
3000+ ext = " mov" ;
3001+ else if (ext == " hls" )
3002+ ext = " m3u8" ;
3003+ else if (ext == " mpegts" )
3004+ ext = " ts" ;
3005+
3006+ return ext;
3007+ }
0 commit comments