From 69f8196872ec1638920ceadb520fc4df194e2a58 Mon Sep 17 00:00:00 2001 From: cxh Date: Tue, 20 Jan 2026 14:17:53 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=AE=A1=E7=BA=BF=EF=BC=8C?= =?UTF-8?q?=E5=8E=BB=E6=8E=89=E4=B8=8D=E6=94=AF=E6=8C=81=E7=9A=84=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/rtmp_manager.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/rtmp_manager.cpp b/src/rtmp_manager.cpp index ca4649c..95e02d1 100644 --- a/src/rtmp_manager.cpp +++ b/src/rtmp_manager.cpp @@ -73,7 +73,7 @@ GstElement* RTMPManager::create_pipeline(const Camera& cam) const std::string record_rtmp = "rtmp://127.0.0.1:2935/" + app + "/" + stream + "?vhost=record"; - std::string pipeline_str = "v4l2src name=src device=" + cam.device + + std::string pipeline_str = "v4l2src device=" + cam.device + " io-mode=dmabuf " "! video/x-raw,format=NV12,width=1920,height=1080,framerate=" + std::to_string(cam.fps) + @@ -81,27 +81,28 @@ GstElement* RTMPManager::create_pipeline(const Camera& cam) "! videoscale " "! video/x-raw,width=" + std::to_string(cam.width) + ",height=" + std::to_string(cam.height) + - " ! queue max-size-buffers=2 leaky=downstream " + " " + "! queue max-size-buffers=2 leaky=downstream " "! mpph264enc rc-mode=cbr bps=" + std::to_string(cam.bitrate) + " gop=" + std::to_string(cam.fps) + " header-mode=each-idr profile=baseline " "! h264parse config-interval=1 " "! tee name=t " - // ========= 录像(永远启用)============ + // ===== record:永远稳定 ===== "t. ! queue max-size-buffers=8 leaky=downstream " "! flvmux name=rec_mux streamable=true " "! rtmpsink name=rec_sink location=\"" + record_rtmp + - "\" sync=false async=false drop-on-latency=true " + "\" sync=false async=false " - // ========= live(valve 控制)=========== + // ===== live:可随意开关 ===== "t. ! queue max-size-buffers=8 leaky=downstream " "! valve name=live_valve drop=true " "! queue max-size-buffers=8 leaky=downstream " "! flvmux name=live_mux streamable=true " "! rtmpsink name=live_sink location=\"" + - live_rtmp + "\" sync=false async=false drop-on-latency=true "; + live_rtmp + "\" sync=false async=false "; GError* err = nullptr; GstElement* pipeline = gst_parse_launch(pipeline_str.c_str(), &err);