This commit is contained in:
cxh 2025-11-14 14:41:55 +08:00
parent b0e66efe82
commit 3f278a9fc0
2 changed files with 59 additions and 5 deletions

View File

@ -58,4 +58,12 @@ class RecordManager
// 给一个 stream 的文件列表排序
void sortStream(const std::string& stream);
// === 自动扫描线程 ===
void startAutoScan(int interval_sec);
void stopAutoScan();
std::thread scan_thread_;
bool running_ = false;
int scan_interval_sec_ = 60;
};

View File

@ -20,12 +20,15 @@ RecordManager::RecordManager(const std::string& srs_record_cfg_path) : srs_recor
if (!ok)
{
LOG_ERROR("[RecordManager] Failed to load SRS config.");
return;
}
else
{
LOG_INFO("[RecordManager] SRS config loaded. record_dir=" + record_dir_ +
", dvr_duration=" + std::to_string(dvr_duration_sec_) + "s");
}
LOG_INFO("[RecordManager] SRS config loaded successfully.");
LOG_INFO("record_dir = " + record_dir_);
LOG_INFO("dvr_duration_sec = " + std::to_string(dvr_duration_sec_));
// 自动根据 dvr_duration 启动扫描线程
startAutoScan(dvr_duration_sec_);
}
//
@ -84,6 +87,49 @@ bool RecordManager::loadSrsConfig()
return true;
}
void RecordManager::startAutoScan(int interval_sec)
{
scan_interval_sec_ = interval_sec; // ← 保存扫描周期
if (running_) return;
running_ = true;
scan_thread_ = std::thread(
[this]()
{
LOG_INFO("[RecordManager] Auto-scan thread started, interval = " + std::to_string(scan_interval_sec_) +
" seconds.");
while (running_)
{
auto t0 = std::chrono::steady_clock::now();
this->scanAll();
LOG_INFO("[RecordManager] scanAll() completed.");
// 休眠剩余时间
auto t1 = std::chrono::steady_clock::now();
auto used_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0).count();
int sleep_ms = scan_interval_sec_ * 1000 - used_ms;
if (sleep_ms < 100) sleep_ms = 100;
std::this_thread::sleep_for(std::chrono::milliseconds(sleep_ms));
}
LOG_INFO("[RecordManager] Auto-scan thread stopped.");
});
}
void RecordManager::stopAutoScan()
{
if (!running_) return;
running_ = false;
if (scan_thread_.joinable()) scan_thread_.join();
LOG_INFO("[RecordManager] Auto-scan thread stopped.");
}
//
// 扫描所有文件
//