From e76bc652437c0fc1b3be3fb564fb4a642836d271 Mon Sep 17 00:00:00 2001 From: xiongziliang <771730766@qq.com> Date: Fri, 19 Jun 2020 10:19:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E5=90=AF=E8=BD=AC?= =?UTF-8?q?=E5=8D=8F=E8=AE=AE=E5=90=8E=EF=BC=8C=E6=97=A0=E4=BA=BA=E8=A7=82?= =?UTF-8?q?=E7=9C=8B=E6=8E=90=E6=B5=81=E5=BB=B6=E6=97=B6=E4=B8=8D=E5=AE=9A?= =?UTF-8?q?=E6=9C=9F=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/FFmpegSource.cpp | 9 +++++++++ server/FFmpegSource.h | 2 ++ src/Common/MediaSource.h | 4 ++-- src/Common/MultiMediaSourceMuxer.cpp | 9 +++++++++ src/Common/MultiMediaSourceMuxer.h | 6 ++++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/server/FFmpegSource.cpp b/server/FFmpegSource.cpp index 50492f22..b6a7ef7e 100644 --- a/server/FFmpegSource.cpp +++ b/server/FFmpegSource.cpp @@ -240,6 +240,15 @@ int FFmpegSource::totalReaderCount(MediaSource &sender) { return sender.readerCount(); } +void FFmpegSource::onNoneReader(MediaSource &sender){ + auto listener = _listener.lock(); + if(listener){ + listener->onNoneReader(sender); + return; + } + MediaSourceEvent::onNoneReader(sender); +} + void FFmpegSource::onGetMediaSource(const MediaSource::Ptr &src) { _listener = src->getListener(); src->setListener(shared_from_this()); diff --git a/server/FFmpegSource.h b/server/FFmpegSource.h index b32ec8f8..06bcf410 100644 --- a/server/FFmpegSource.h +++ b/server/FFmpegSource.h @@ -61,6 +61,8 @@ private: //MediaSourceEvent override bool close(MediaSource &sender,bool force) override; int totalReaderCount(MediaSource &sender) override; + void onNoneReader(MediaSource &sender) override; + private: Process _process; Timer::Ptr _timer; diff --git a/src/Common/MediaSource.h b/src/Common/MediaSource.h index 6c775934..28330166 100644 --- a/src/Common/MediaSource.h +++ b/src/Common/MediaSource.h @@ -53,9 +53,9 @@ public: virtual bool setupRecord(MediaSource &sender, Recorder::type type, bool start, const string &custom_path) { return false; }; // 获取录制状态 virtual bool isRecording(MediaSource &sender, Recorder::type type) { return false; }; -private: // 通知无人观看 - void onNoneReader(MediaSource &sender); + virtual void onNoneReader(MediaSource &sender); + private: Timer::Ptr _async_close_timer; }; diff --git a/src/Common/MultiMediaSourceMuxer.cpp b/src/Common/MultiMediaSourceMuxer.cpp index 70a20413..b5f10da8 100644 --- a/src/Common/MultiMediaSourceMuxer.cpp +++ b/src/Common/MultiMediaSourceMuxer.cpp @@ -278,6 +278,15 @@ int MultiMediaSourceMuxer::totalReaderCount(MediaSource &sender) { return listener->totalReaderCount(sender); } +void MultiMediaSourceMuxer::onNoneReader(MediaSource &sender){ + auto listener = _listener.lock(); + if (!listener) { + MediaSourceEvent::onNoneReader(sender); + return; + } + listener->onNoneReader(sender); +} + bool MultiMediaSourceMuxer::setupRecord(MediaSource &sender, Recorder::type type, bool start, const string &custom_path) { return _muxer->setupRecord(sender,type,start,custom_path); } diff --git a/src/Common/MultiMediaSourceMuxer.h b/src/Common/MultiMediaSourceMuxer.h index 2ba2aa99..679906ba 100644 --- a/src/Common/MultiMediaSourceMuxer.h +++ b/src/Common/MultiMediaSourceMuxer.h @@ -131,6 +131,12 @@ public: */ int totalReaderCount(MediaSource &sender) override; + /** + * 触发无人观看事件 + * @param sender 触发者 + */ + void onNoneReader(MediaSource &sender) override; + /** * 设置录制状态 * @param type 录制类型