autoscan
This commit is contained in:
parent
b0e66efe82
commit
3f278a9fc0
@ -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;
|
||||
};
|
||||
@ -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.");
|
||||
}
|
||||
|
||||
//
|
||||
// 扫描所有文件
|
||||
//
|
||||
|
||||
Loading…
Reference in New Issue
Block a user