Skip to content

Commit dcbdacb

Browse files
authored
change extension for recording output (#1425)
1 parent 1b4b89d commit dcbdacb

1 file changed

Lines changed: 31 additions & 12 deletions

File tree

obs-studio-server/source/nodeobs_service.cpp

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
#include "util-crashmanager.h"
3434
#endif
3535

36+
std::string GetFormatExt(const std::string container);
37+
3638
std::vector<obs_output_t *> streamingOutput = {nullptr, nullptr};
3739

3840
obs_output_t *recordingOutput = nullptr;
@@ -1517,7 +1519,7 @@ void OBS_service::stopRecording(void)
15171519
void 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)
19121914
void 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

Comments
 (0)