From 472d7d1e4fe650ad51088270160b26e20a32bb8c Mon Sep 17 00:00:00 2001 From: admin <964472638@qq.com> Date: Wed, 15 May 2024 11:17:12 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=85=BC=E5=AE=B9rtsp=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=AB=AF=E5=8F=91=E9=80=81=E7=BC=93=E5=86=B2=E5=8C=BA=E6=BA=A2?= =?UTF-8?q?=E5=87=BA=E8=A6=86=E7=9B=96=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Rtsp/RtspSplitter.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Rtsp/RtspSplitter.cpp b/src/Rtsp/RtspSplitter.cpp index 06e9f8c3..33e6e694 100644 --- a/src/Rtsp/RtspSplitter.cpp +++ b/src/Rtsp/RtspSplitter.cpp @@ -10,8 +10,9 @@ #include #include "RtspSplitter.h" -#include "Util/logger.h" #include "Util/util.h" +#include "Util/logger.h" +#include "Common/macros.h" using namespace std; using namespace toolkit; @@ -64,7 +65,18 @@ ssize_t RtspSplitter::onRecvHeader(const char *data, size_t len) { if (len == 4 && !memcmp(data, "\r\n\r\n", 4)) { return 0; } - _parser.parse(data, len); + try { + _parser.parse(data, len); + } catch (mediakit::AssertFailedException &ex){ + if (!_enableRecvRtp) { + // 还在握手中,直接中断握手 + throw; + } + // 握手已经结束,如果rtsp server存在发送缓存溢出的bug,那么rtsp信令可能跟rtp混在一起 + // 这种情况下,rtsp信令解析异常不中断链接,只丢弃这个包 + WarnL << ex.what(); + return 0; + } auto ret = getContentLength(_parser); if (ret == 0) { onWholeRtspPacket(_parser); From 65c2abb0b53997a3fc164ae40d8b0f8ce21c46dd Mon Sep 17 00:00:00 2001 From: admin <964472638@qq.com> Date: Wed, 15 May 2024 11:30:16 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E5=88=A0=E9=99=A4mp4=E5=BD=95=E5=83=8F=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/WebApi.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/WebApi.cpp b/server/WebApi.cpp index 30a6c559..988b55b5 100755 --- a/server/WebApi.cpp +++ b/server/WebApi.cpp @@ -1590,12 +1590,14 @@ void installWebApi() { auto record_path = Recorder::getRecordPath(Recorder::type_mp4, tuple, allArgs["customized_path"]); auto period = allArgs["period"]; record_path = record_path + period + "/"; + + bool recording = false; auto name = allArgs["name"]; if (!name.empty()) { + // 删除指定文件 record_path += name; - } - bool recording = false; - { + } else { + // 删除文件夹,先判断该流是否正在录制中 auto src = MediaSource::find(allArgs["vhost"], allArgs["app"], allArgs["stream"]); if (src && src->isRecording(Recorder::type_mp4)) { recording = true;