#pragma once #include #include #include #include #include #include "mp4v2/mp4v2.h" struct RecordFileInfo { std::string stream; // AHD1_main std::string path; // /sata/record/AHD1_main/2025-11-13/10/10-23-17.mp4 int64_t start_ms; // 文件起始时间(ms) int64_t end_ms; // 文件结束时间(ms) }; struct RecordSegment { int index; // 段号 std::string segment_id; int64_t start_ms; int64_t end_ms; std::vector files; }; class RecordManager { public: explicit RecordManager(const std::string& base_dir); // 执行一次全扫描 void scanAll(); // 查询时间段的录像段 std::vector querySegments(const std::string& stream, int64_t start_ms, int64_t end_ms); // 根据 segmentId 获取可播放文件列表 RecordSegment getSegment(const std::string& segmentId); static int64_t toMsTimestamp(const std::string& s); static std::string toReadable(int64_t ms); // 调试打印全部索引 void dumpIndex() const; private: std::string base_dir_; // /sata/record/ std::unordered_map> index_; // 解析文件名得到 start_ms 和 end_ms RecordFileInfo parseFile(const std::filesystem::path& p); // 给一个 stream 的文件列表排序 void sortStream(const std::string& stream); };