video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2019-10-19 7e6f863a5928b8481975e9fdf6460dde2c0b14bf
csrc/worker/rec.cpp
@@ -20,8 +20,8 @@
{
    rec::rec()
    :recRef_(NULL)
    ,minduration_(250)
    ,maxduration_(750)
    ,min_cache_len_(125)
    ,time_offset_(5)
    {}
    rec::~rec()
@@ -141,9 +141,6 @@
        std::string rid(id);
        std::string dir(output);
        
        minduration_ = mindur * 25;
        maxduration_ = maxdur * 25;
        {
            std::lock_guard<std::mutex> l(mtx_rec_);
            if (map_rec_.find(rid) != map_rec_.end()){
@@ -197,11 +194,26 @@
        shrinkCache();
    }
    void rec::SetRecMinCacheTime(const int min){
        // 由于整个流程耗时,补偿time_offset_
        int fps = 25;
        if (recRef_){
            fps = recRef_->getFPS();
        }
        min_cache_len_ = (min + time_offset_) * fps;
    }
    int rec::shrinkCache(){
        //超过最大缓存,丢弃gop
        //缓存最小长度的,用于记录
        int md = minduration_ < 201 ? 200 : minduration_;
        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();