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);