mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-03-04 22:56:11 -05:00
Merge pull request #5371 from norihiro/automatic-file-splitting
Automatic file splitting
This commit is contained in:
@@ -109,6 +109,20 @@ static void OBSRecordStopping(void *data, calldata_t *params)
|
||||
UNUSED_PARAMETER(params);
|
||||
}
|
||||
|
||||
static void OBSRecordFileChanged(void *data, calldata_t *params)
|
||||
{
|
||||
BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
|
||||
const char *next_file = calldata_string(params, "next_file");
|
||||
|
||||
QString arg_last_file =
|
||||
QString::fromUtf8(output->lastRecordingPath.c_str());
|
||||
|
||||
QMetaObject::invokeMethod(output->main, "RecordingFileChanged",
|
||||
Q_ARG(QString, arg_last_file));
|
||||
|
||||
output->lastRecordingPath = next_file;
|
||||
}
|
||||
|
||||
static void OBSStartReplayBuffer(void *data, calldata_t *params)
|
||||
{
|
||||
BasicOutputHandler *output = static_cast<BasicOutputHandler *>(data);
|
||||
@@ -1300,6 +1314,8 @@ AdvancedOutput::AdvancedOutput(OBSBasic *main_) : BasicOutputHandler(main_)
|
||||
OBSStopRecording, this);
|
||||
recordStopping.Connect(obs_output_get_signal_handler(fileOutput),
|
||||
"stopping", OBSRecordStopping, this);
|
||||
recordFileChanged.Connect(obs_output_get_signal_handler(fileOutput),
|
||||
"file_changed", OBSRecordFileChanged, this);
|
||||
}
|
||||
|
||||
void AdvancedOutput::UpdateStreamSettings()
|
||||
@@ -1823,6 +1839,11 @@ bool AdvancedOutput::StartRecording()
|
||||
const char *filenameFormat;
|
||||
bool noSpace = false;
|
||||
bool overwriteIfExists = false;
|
||||
bool splitFile;
|
||||
const char *splitFileType;
|
||||
int splitFileTime;
|
||||
int splitFileSize;
|
||||
bool splitFileResetTimestamps;
|
||||
|
||||
if (!useStreamEncoder) {
|
||||
if (!ffmpegOutput) {
|
||||
@@ -1852,6 +1873,8 @@ bool AdvancedOutput::StartRecording()
|
||||
ffmpegRecording
|
||||
? "FFFileNameWithoutSpace"
|
||||
: "RecFileNameWithoutSpace");
|
||||
splitFile = config_get_bool(main->Config(), "AdvOut",
|
||||
"RecSplitFile");
|
||||
|
||||
string strPath = GetRecordingFilename(path, recFormat, noSpace,
|
||||
overwriteIfExists,
|
||||
@@ -1862,6 +1885,38 @@ bool AdvancedOutput::StartRecording()
|
||||
obs_data_set_string(settings, ffmpegRecording ? "url" : "path",
|
||||
strPath.c_str());
|
||||
|
||||
if (splitFile) {
|
||||
splitFileType = config_get_string(
|
||||
main->Config(), "AdvOut", "RecSplitFileType");
|
||||
splitFileTime =
|
||||
(astrcmpi(splitFileType, "Time") == 0)
|
||||
? config_get_int(main->Config(),
|
||||
"AdvOut",
|
||||
"RecSplitFileTime")
|
||||
: 0;
|
||||
splitFileSize =
|
||||
(astrcmpi(splitFileType, "Size") == 0)
|
||||
? config_get_int(main->Config(),
|
||||
"AdvOut",
|
||||
"RecSplitFileSize")
|
||||
: 0;
|
||||
splitFileResetTimestamps =
|
||||
config_get_bool(main->Config(), "AdvOut",
|
||||
"RecSplitFileResetTimestamps");
|
||||
obs_data_set_string(settings, "directory", path);
|
||||
obs_data_set_string(settings, "format", filenameFormat);
|
||||
obs_data_set_string(settings, "extension", recFormat);
|
||||
obs_data_set_bool(settings, "allow_spaces", !noSpace);
|
||||
obs_data_set_bool(settings, "allow_overwrite",
|
||||
overwriteIfExists);
|
||||
obs_data_set_int(settings, "max_time_sec",
|
||||
splitFileTime);
|
||||
obs_data_set_int(settings, "max_size_mb",
|
||||
splitFileSize);
|
||||
obs_data_set_bool(settings, "reset_timestamps",
|
||||
splitFileResetTimestamps);
|
||||
}
|
||||
|
||||
obs_output_update(fileOutput, settings);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user