From c60d61c48c7a1e7b693d4c3f6427e3b616d1f471 Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期一, 21 十月 2019 12:29:33 +0800 Subject: [PATCH] update ffmpeg --- csrc/worker/rec.cpp | 24 +++++++++++++++--------- 1 files changed, 15 insertions(+), 9 deletions(-) diff --git a/csrc/worker/rec.cpp b/csrc/worker/rec.cpp index 49c3a97..36d837c 100644 --- a/csrc/worker/rec.cpp +++ b/csrc/worker/rec.cpp @@ -20,8 +20,7 @@ { rec::rec() :recRef_(NULL) - ,min_cache_len_(125) - ,time_offset_(4) + ,min_cache_len_(10 * 60 * 25) // 鏈�灏忕紦瀛�?鍒嗛挓鐨勮棰�,鍥犱负鏁翠釜娴佺▼浼氭湁寤惰繜,鏆傚畾?鍒嗛挓 {} rec::~rec() @@ -44,7 +43,7 @@ list_recInfo_.emplace_back(info); } - std::unique_ptr<buz::Recorder> rec::startRec(std::string id, std::string dir, const int mind, const int maxd, const bool audio){ + std::unique_ptr<buz::Recorder> rec::startRec(std::string id, std::string dir, const int64_t &frameID, const int mind, const int maxd, const bool audio){ if(!recRef_){ logIt("Init wrapper first"); return nullptr; @@ -62,6 +61,7 @@ if(ret == 0) break; usleep(200000); } + if (trycnt < 100){ std::lock_guard<std::mutex> locker(mtx_pkt_); rec->PushPackets(list_pkt_); @@ -137,7 +137,7 @@ return recRef_ != NULL; } - void rec::NewRec(const char* id, const char *output, const int mindur, const int maxdur, const bool audio){ + void rec::NewRec(const char* id, const char *output, const int64_t &frameID, const int mindur, const int maxdur, const bool audio){ std::string rid(id); std::string dir(output); @@ -146,7 +146,7 @@ if (map_rec_.find(rid) != map_rec_.end()){ map_rec_.erase(rid); } - map_rec_[rid] = startRec(rid, dir, mindur, maxdur, audio); + map_rec_[rid] = startRec(rid, dir, frameID, mindur, maxdur, audio); } } @@ -195,19 +195,25 @@ } void rec::SetRecMinCacheTime(const int min){ - // 鐢变簬鏁翠釜娴佺▼鑰楁椂,琛ュ伩time_offset_,鍥犱负鏄渶灏忕殑涓�鍗�,鍙湁time_offset_/2 + // 鐢变簬鏁翠釜娴佺▼鑰楁椂,琛ュ伩time_offset_ int fps = 25; if (recRef_){ fps = recRef_->getFPS(); } - min_cache_len_ = (min + time_offset_) * fps; + min_cache_len_ += min * fps; } int rec::shrinkCache(){ //瓒呰繃鏈�澶х紦瀛�,涓㈠純gop //缂撳瓨鏈�灏忛暱搴︾殑,鐢ㄤ簬璁板綍 - int md = min_cache_len_ < 200 ? 200 : min_cache_len_; - while (list_pkt_.size() > md/2) { + int fps = 25; + if (recRef_){ + fps = recRef_->getFPS(); + } + // 鏈�灏�5绉掗暱搴� + int mincache = fps * 5; + int md = min_cache_len_ < mincache ? mincache : min_cache_len_; + while (list_pkt_.size() > md) { list_pkt_.pop_front(); while(!list_pkt_.empty()){ auto &i = list_pkt_.front(); -- Gitblit v1.8.0