From 1049a39ce76a2013e18b64ae4174adca248f1e22 Mon Sep 17 00:00:00 2001 From: cxh Date: Fri, 21 Nov 2025 16:21:26 +0800 Subject: [PATCH] 1 --- src/rtsp_manager.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/rtsp_manager.cpp b/src/rtsp_manager.cpp index 86ed35a..96a97b7 100644 --- a/src/rtsp_manager.cpp +++ b/src/rtsp_manager.cpp @@ -40,26 +40,24 @@ GstRTSPMediaFactory *RTSPManager::create_media_factory(const Camera &cam) " ! queue max-size-buffers=1 leaky=downstream" " ! mpph264enc rc-mode=cbr bps=" + std::to_string(cam.bitrate) + - " gop=" + std::to_string(cam.fps) + - " b-frames=0" - " ! h264parse config-interval=1" - " ! rtph264pay name=pay0 pt=96 config-interval=1 )"; + " gop=" + std::to_string(cam.fps) + " b-frames=0" + " ! h264parse config-interval=1" + " ! rtph264pay name=pay0 pt=96 config-interval=1 )"; GstRTSPMediaFactory *factory = gst_rtsp_media_factory_new(); gst_rtsp_media_factory_set_launch(factory, launch_str.c_str()); - // ★ 非共享会导致重复 mount 失败,让它共享 gst_rtsp_media_factory_set_shared(factory, TRUE); - // ★ live source 必须用 RESET,不然 UNPREPARE 不会释放 pipeline + // ★★ 关键修复:禁用 preroll → Live pipeline 必须加这行!! + gst_rtsp_media_factory_set_latency(factory, 0); + gst_rtsp_media_factory_set_suspend_mode(factory, GST_RTSP_SUSPEND_MODE_RESET); - // 绑定创建回调 g_signal_connect_data(factory, "media-configure", G_CALLBACK(on_media_created), g_strdup(cam.name.c_str()), - (GClosureNotify)g_free, - (GConnectFlags)0); + (GClosureNotify)g_free, 0); return factory; }