From 54ea1c13885725584a6a50d520f67e8a75f85b6f Mon Sep 17 00:00:00 2001 From: zhangmeng <775834166@qq.com> Date: 星期一, 19 八月 2019 11:33:13 +0800 Subject: [PATCH] fix rec --- csrc/buz/recorder.cpp | 17 ++++++++++++++--- 1 files changed, 14 insertions(+), 3 deletions(-) diff --git a/csrc/buz/recorder.cpp b/csrc/buz/recorder.cpp index 1dd71ab..2da437c 100644 --- a/csrc/buz/recorder.cpp +++ b/csrc/buz/recorder.cpp @@ -3,6 +3,7 @@ #include <thread> #include <unistd.h> +#include <chrono> extern "C"{ #include <libavcodec/avcodec.h> @@ -32,6 +33,7 @@ ,file_path_("") ,func_rec_info_(nullptr) ,thrd_(nullptr) + ,error_occured_(false) { // logIt("RECODER ID: %s", id_.c_str()); } @@ -41,8 +43,11 @@ try { if (thrd_){ - stop_recorder_.store(true); - cv_.notify_one(); + { + std::unique_lock<std::mutex> locker(mutex_pkt_); + stop_recorder_.store(true); + cv_.notify_one(); + } thrd_->join(); logIt("REC THREAD JOINED, QUIT!!!"); } @@ -138,9 +143,15 @@ std::list<avpacket> pkts; { std::unique_lock<std::mutex> locker(mutex_pkt_); - cv_.wait(locker,[&]{ + auto status = cv_.wait_for(locker, std::chrono::seconds(10), [&]{ return !list_pkt_.empty() || stop_recorder_.load(); }); + + if (!status){ + end_writer(); + error_occured_ = true; + break; + } if(stop_recorder_.load()){ end_writer(); break; -- Gitblit v1.8.0