Skip to content

Commit f7ce23c

Browse files
committed
Randomize segment names to not overwrite segments on two app instances
1 parent d42a85d commit f7ce23c

File tree

2 files changed

+9
-4
lines changed

2 files changed

+9
-4
lines changed

Source/BetaHubBugReporter/Private/BH_VideoEncoder.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include "HAL/PlatformProcess.h"
33
#include "Misc/Paths.h"
44
#include "Misc/FileHelper.h"
5+
#include "Misc/Guid.h"
56
#include "BH_Runnable.h"
67
#include "BH_FFmpeg.h"
78

@@ -26,6 +27,9 @@ BH_VideoEncoder::BH_VideoEncoder(
2627
SegmentCheckInterval(FTimespan::FromMinutes(1)),
2728
LastSegmentCheckTime(FDateTime::Now())
2829
{
30+
// Generate a random 5-character string for segmentPrefix
31+
segmentPrefix = FGuid::NewGuid().ToString(EGuidFormats::Digits).Left(5) + TEXT("_");
32+
2933
// check if width and height are multiples of 4
3034
if (screenWidth % 4 != 0 || screenHeight % 4 != 0)
3135
{
@@ -51,13 +55,13 @@ BH_VideoEncoder::BH_VideoEncoder(
5155
// Remove all existing segment files
5256
IFileManager& FileManager = IFileManager::Get();
5357
TArray<FString> SegmentFiles;
54-
FileManager.FindFiles(SegmentFiles, *(segmentsDir / TEXT("segment_*.mp4")), true, false);
58+
FileManager.FindFiles(SegmentFiles, *(segmentsDir / (segmentPrefix + TEXT("*.mp4"))), true, false);
5559
for (const FString& SegmentFile : SegmentFiles)
5660
{
5761
FileManager.Delete(*(segmentsDir / SegmentFile));
5862
}
5963

60-
outputFile = FPaths::Combine(segmentsDir, TEXT("segment_%06d.mp4"));
64+
outputFile = FPaths::Combine(segmentsDir, (segmentPrefix + TEXT("%06d.mp4")));
6165
encodingSettings = TEXT("-y -f rawvideo -pix_fmt bgra -s ") +
6266
FString::FromInt(screenWidth) + TEXT("x") + FString::FromInt(screenHeight) +
6367
TEXT(" -r ") + FString::FromInt(targetFPS) +
@@ -291,7 +295,7 @@ FString BH_VideoEncoder::MergeSegments(int32 MaxSegments)
291295
// Get the list of segment files
292296
IFileManager& FileManager = IFileManager::Get();
293297
TArray<FString> SegmentFiles;
294-
FileManager.FindFiles(SegmentFiles, *(segmentsDir / TEXT("segment_*.mp4")), true, false);
298+
FileManager.FindFiles(SegmentFiles, *(segmentsDir / (segmentPrefix + TEXT("*.mp4"))), true, false);
295299

296300
// Sort and take the last MaxSegments
297301
SegmentFiles.Sort();
@@ -371,7 +375,7 @@ void BH_VideoEncoder::RemoveOldSegments()
371375

372376
IFileManager& FileManager = IFileManager::Get();
373377
TArray<FString> SegmentFiles;
374-
FileManager.FindFiles(SegmentFiles, *(segmentsDir / TEXT("segment_*.mp4")), true, false);
378+
FileManager.FindFiles(SegmentFiles, *(segmentsDir / (segmentPrefix + TEXT("*.mp4"))), true, false);
375379

376380
// Sort segment files based on their numerical part
377381
SegmentFiles.Sort([](const FString& A, const FString& B)

Source/BetaHubBugReporter/Private/BH_VideoEncoder.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ class BH_VideoEncoder : public FRunnable
1515
FString ffmpegPath;
1616
FString outputFile;
1717
FString segmentsDir;
18+
FString segmentPrefix;
1819
int32 targetFPS;
1920
int32 screenWidth;
2021
int32 screenHeight;

0 commit comments

Comments
 (0)