From 37ea51a2ec35ca57e4f3f18c972f2b01dfb577aa Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Fri, 8 May 2026 18:16:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BD=BB=E5=BA=95=E8=A7=A3=E5=86=B3mp4=5Fas=5F?= =?UTF-8?q?player=E8=AE=BE=E7=BD=AE=E4=B8=BA1=E6=97=B6=EF=BC=8Con=5Fstream?= =?UTF-8?q?=5Fnone=5Freader=E5=9B=9E=E8=B0=83=E6=97=A0=E6=95=88=E6=B5=81?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E7=9A=84=E9=97=AE=E9=A2=98=20(#4725)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/MediaSource.cpp | 5 ----- src/Common/MediaSource.h | 6 ++++++ src/Common/MultiMediaSourceMuxer.cpp | 21 ++------------------- src/Common/MultiMediaSourceMuxer.h | 5 +---- 4 files changed, 9 insertions(+), 28 deletions(-) diff --git a/src/Common/MediaSource.cpp b/src/Common/MediaSource.cpp index f1f210bd..46cc95c7 100644 --- a/src/Common/MediaSource.cpp +++ b/src/Common/MediaSource.cpp @@ -66,11 +66,6 @@ ProtocolOption::ProtocolOption() { ////////////////////////////////////////////////////////////////////////////////////////////////////////////// -struct MediaSourceNull : public MediaSource { - MediaSourceNull() : MediaSource("schema", MediaTuple{"vhost", "app", "stream", ""}) {}; - int readerCount() override { return 0; } -}; - MediaSource &MediaSource::NullMediaSource() { static std::shared_ptr s_null = std::make_shared(); return *s_null; diff --git a/src/Common/MediaSource.h b/src/Common/MediaSource.h index fc7f77d2..91ae4802 100644 --- a/src/Common/MediaSource.h +++ b/src/Common/MediaSource.h @@ -573,5 +573,11 @@ private: toolkit::ObjectStatistic _statistic; }; +struct MediaSourceNull : public MediaSource { + MediaSourceNull(const MediaTuple &tuple = { "vhost", "app", "stream", "" }) + : MediaSource("schema", tuple) { }; + int readerCount() override { return 0; } +}; + } /* namespace mediakit */ #endif //ZLMEDIAKIT_MEDIASOURCE_H diff --git a/src/Common/MultiMediaSourceMuxer.cpp b/src/Common/MultiMediaSourceMuxer.cpp index 20be4f8d..ce5d9074 100644 --- a/src/Common/MultiMediaSourceMuxer.cpp +++ b/src/Common/MultiMediaSourceMuxer.cpp @@ -206,6 +206,7 @@ void MultiMediaSourceMuxer::forEachRtpSender(const std::function(tuple); if (!option.stream_replace.empty()) { // 支持在on_publish hook中替换stream_id [AUTO-TRANSLATED:375eb2ff] // Support replacing stream_id in on_publish hook @@ -319,7 +320,7 @@ bool MultiMediaSourceMuxer::setupRecord(Recorder::type type, bool start, const s if (_option.mp4_as_player && type == Recorder::type_mp4) { // 开启关闭mp4录制,触发观看人数变化相关事件 [AUTO-TRANSLATED:b63a8deb] // Turn on/off mp4 recording, trigger events related to changes in the number of viewers - onReaderChanged(*getAnyMediaSource(), totalReaderCount()); + onReaderChanged(*_null_src, totalReaderCount()); } }); switch (type) { @@ -908,24 +909,6 @@ bool MultiMediaSourceMuxer::onTrackFrame_l(const Frame::Ptr &frame_in) { return ret; } -#define TRY_SRC(muxer) \ - if (muxer) { \ - auto src = muxer->getMediaSource(); \ - if (src) { \ - return src; \ - } \ - } - -MediaSource::Ptr MultiMediaSourceMuxer::getAnyMediaSource() const { - TRY_SRC(_fmp4) - TRY_SRC(_rtmp) - TRY_SRC(_rtsp) - TRY_SRC(_ts) - TRY_SRC(_hls) - TRY_SRC(_hls_fmp4) - return MediaSource::NullMediaSource().shared_from_this(); -} - bool MultiMediaSourceMuxer::isEnabled(){ GET_CONFIG(uint32_t, stream_none_reader_delay_ms, General::kStreamNoneReaderDelayMS); if (!_is_enable || _last_check.elapsedTime() > stream_none_reader_delay_ms) { diff --git a/src/Common/MultiMediaSourceMuxer.h b/src/Common/MultiMediaSourceMuxer.h index 501b068d..1ff7abb9 100644 --- a/src/Common/MultiMediaSourceMuxer.h +++ b/src/Common/MultiMediaSourceMuxer.h @@ -237,8 +237,6 @@ protected: bool onTrackFrame(const Frame::Ptr &frame) override; bool onTrackFrame_l(const Frame::Ptr &frame); - MediaSource::Ptr getAnyMediaSource() const; - private: void createGopCacheIfNeed(size_t gop_count); std::shared_ptr makeRecorder(Recorder::type type); @@ -267,9 +265,8 @@ private: HlsFMP4Recorder::Ptr _hls_fmp4; toolkit::EventPoller::Ptr _poller; RingType::Ptr _ring; - MediaSinkInterface::Ptr _delegate; - + MediaSourceNull::Ptr _null_src; // 对象个数统计 [AUTO-TRANSLATED:3b43e8c2] // Object count statistics toolkit::ObjectStatistic _statistic;