From c9490ad76406b278a8f23514efb37626d396c92d Mon Sep 17 00:00:00 2001 From: xia-chu <771730766@qq.com> Date: Tue, 18 Nov 2025 20:12:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=85=9C=E5=BA=95=E6=9C=BA?= =?UTF-8?q?=E5=88=B6=E7=A1=AE=E4=BF=9D=E4=BA=8B=E4=BB=B6=E5=BD=95=E5=88=B6?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E8=83=BD=E6=AD=A3=E5=B8=B8=E7=BB=93=E6=9D=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Common/MultiMediaSourceMuxer.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Common/MultiMediaSourceMuxer.cpp b/src/Common/MultiMediaSourceMuxer.cpp index 01b9c1bc..0395e717 100644 --- a/src/Common/MultiMediaSourceMuxer.cpp +++ b/src/Common/MultiMediaSourceMuxer.cpp @@ -457,13 +457,16 @@ std::string MultiMediaSourceMuxer::startRecord(const std::string &file_path, uin auto reader = _ring->attach(MultiMediaSourceMuxer::getOwnerPoller(MediaSource::NullMediaSource()), false); uint64_t now_dts = 0; int selected_index = -1; - reader->setReadCB([muxer, now_dts, selected_index, forward_time_ms, reader, path](const Frame::Ptr &frame) mutable { + Ticker ticker; + bool is_live_stream = _dur_sec < 0.01; + reader->setReadCB([muxer, now_dts, selected_index, forward_time_ms, reader, path, ticker, is_live_stream](const Frame::Ptr &frame) mutable { // 循环引用自身 if (!now_dts) { now_dts = frame->dts(); selected_index = frame->getIndex(); } - if (frame->getIndex() == selected_index && now_dts + forward_time_ms < frame->dts()) { + // 新增兜底机制,如果直播录制任务时长超过预期时间3秒,不管数据时间戳是否增长是否达到预期,都强制停止录制 + if ((frame->getIndex() == selected_index && now_dts + forward_time_ms < frame->dts()) || (is_live_stream && ticker.createdTime() > forward_time_ms + 3000)) { InfoL << "stop record: " << path << ", end dts: " << frame->dts(); WorkThreadPool::Instance().getPoller()->async([muxer]() { muxer->closeMP4(); }); reader = nullptr;