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 的文件列表排序 // 给一个 stream 的文件列表排序
void sortStream(const std::string& 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) if (!ok)
{ {
LOG_ERROR("[RecordManager] Failed to load SRS config."); LOG_ERROR("[RecordManager] Failed to load SRS config.");
return;
} }
else
{ LOG_INFO("[RecordManager] SRS config loaded successfully.");
LOG_INFO("[RecordManager] SRS config loaded. record_dir=" + record_dir_ + LOG_INFO("record_dir = " + record_dir_);
", dvr_duration=" + std::to_string(dvr_duration_sec_) + "s"); 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; 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.");
}
// //
// 扫描所有文件 // 扫描所有文件
// //