video analysis2.0拆分,ffmpeg封装go接口库
zhangmeng
2023-12-26 18a05d269516a5e33d8460291c2f93e73d95adce
csrc/worker/rec.cpp
@@ -22,7 +22,7 @@
{
    rec::rec()
    :recRef_(NULL)
    ,min_cache_len_(cache_time * 25) // 最小缓存?分钟的视频,因为整个流程会有延迟,暂定?分钟
    ,min_cache_len_(cache_time * 25)
    {}
    rec::~rec()
@@ -45,7 +45,7 @@
        list_recInfo_.emplace_back(info);
    }
    void rec::findRecFramesIndex(const int64_t &fired_id, const int duration, int &start, int &end){
    void rec::findRecFramesIndex(int64_t &fired_id, const int duration, int &start, int &end){
        start = end = -1;
@@ -75,7 +75,7 @@
                        start_id = i.v_id;
                    }
                }
            }else if (recRef_->isVideoPkt(&i.data->getAVPacket())){
            }else {
                // 视频帧,看是否缓存中有所有的duration数据
                if (i.v_id - start_id == duration){
                    end = index;
@@ -83,6 +83,9 @@
            }
            
        }
        // 如果fired_id在startid之前,将其放入start_id之后
        if (start_id > fired_id) fired_id = start_id + duration / 2;
        if (end < 0) end = index;
    }
@@ -113,8 +116,10 @@
            std::lock_guard<std::mutex> locker(mtx_pkt_);
            logIt("cache size: %ld", list_pkt_.size());
            // 首次获取录像信息,先存一个最短时长
            findRecFramesIndex(frameID, duration, start, end);
            rec->StartWritePacket(list_pkt_, frameID, start, end);
            // maybe fired_id changed by findRecFramesIndex
            int64_t fired_id = frameID;
            findRecFramesIndex(fired_id, duration, start, end);
            rec->StartWritePacket(list_pkt_, fired_id, start, end);
            return rec;
        }