From 278634c0d2eeba9e3fcc3b4cd56ddfb3323277d7 Mon Sep 17 00:00:00 2001 From: 554325746@qq.com <554325746@qq.com> Date: 星期二, 10 三月 2020 10:08:20 +0800 Subject: [PATCH] compatible to local files --- csrc/wrapper.cpp | 41 ++++++++++++++++++++++++++++------------- 1 files changed, 28 insertions(+), 13 deletions(-) diff --git a/csrc/wrapper.cpp b/csrc/wrapper.cpp index 5e50469..7ad32f1 100644 --- a/csrc/wrapper.cpp +++ b/csrc/wrapper.cpp @@ -56,6 +56,7 @@ ,logit_(false) ,fps_(25) ,file_finished_(false) + ,min_duration_(60) { makeTheWorld(); } @@ -76,6 +77,7 @@ ,logit_(true) ,fps_(25) ,file_finished_(false) + ,min_duration_(60) { makeTheWorld(); logif::CreateLogger(logfile, true); @@ -191,6 +193,8 @@ void Wrapper::run_stream_thread(){ + int64_t rebootime = -1; + while(!stop_stream_.load()){ auto in = init_reader(input_url_.c_str()); @@ -199,6 +203,8 @@ sleep(2); continue; } + + rebootime++; fps_ = in->getFPS(); @@ -219,6 +225,7 @@ if (exist){ wTime <<= 1; } + int64_t file_frame = 0; logIt("WAIT TIME PER FRAME: %d", wTime); @@ -232,6 +239,7 @@ if (in->notVideoAudio(&data->getAVPacket())){ continue; } + // 闈炲浗鏍囪烦杩囩涓�甯�,娴嬭瘯绗竴甯ф湁闂 if (!gb_ && id < 0){ id++; v_id++; a_id++; @@ -254,21 +262,30 @@ //鏈湴鏂囦欢澶揩sleep涓�涓� if (exist){ usleep(wTime); + // 璁板綍瑙g爜鐨勬枃浠舵湁澶氬皯甯� + file_frame++; } } deinit_worker(); if (exist) { - logIt("local file exist"); + if (file_frame == 0 && rebootime > 3){ + file_finished_ = true; + break; + } + if (file_frame < min_duration_ * fps_){ + continue; + } + logIt("libcffmpeg.so-> local file %s run %lld time, all frames %lld", input_url_.c_str(), rebootime, file_frame); file_finished_ = true; break; } } } - void Wrapper::SetRecMinCacheTime(const int mind){ - rec_->SetRecMinCacheTime(mind); + void Wrapper::SetRecMinCacheTime(const int mind, const int maxd){ + min_duration_ = mind; } void Wrapper::OpenRecorder(){ @@ -291,41 +308,39 @@ if (rec_->Loaded()){ rec_->FireRecSignal(sid, id); } + return 0; } - void Wrapper::GetInfoRecorder(std::string &recID, int &index, std::string &path){ + int Wrapper::GetInfoRecorder(std::string &recID, int &index, std::string &path){ if (rec_){ rec_->GetRecInfo(recID, index, path); } + return 0; } ////////decoder void Wrapper::OpenDecoder(){ run_dec_ = true; } - void Wrapper::GetPicDecoder(unsigned char **data, int *w, int *h, int *format, int *length, int64_t *id){ + int Wrapper::GetPicDecoder(unsigned char **data, int *w, int *h, int *format, int *length, int64_t *id){ if (file_finished_){ - *data = (unsigned char*)this; - *w = 1080; - *h = 720; - *format = 23; - *length = 12; - *id = -10802020; - return; + return -1; } if (decoder_){ decoder_->GetFrame(data, w, h, format, length, id); } + return 0; } void Wrapper::CloseStream(){ run_stream_ = false; } - void Wrapper::GetPacket(unsigned char **pktData, int *size, int *key){ + int Wrapper::GetPacket(unsigned char **pktData, int *size, int *key){ if (stream_){ stream_->GetPacket(pktData, size, key); } + return 0; } } // end class wrapper -- Gitblit v1.8.0